All files / lib/agent/batch Headers.js

100% Statements 12/12
100% Branches 5/5
100% Functions 5/5
100% Lines 12/12

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68    1x                                     6x 6x                       7x   7x 3x 3x 3x                               4x     4x       4x       1x  
"use strict";
 
const _ = require("lodash");
 
/**
 * Mimicry of Headers class from WebAPI for Batch responses
 * keep current behavior by dynamic properties
 *
 * @public
 *
 * @class Headers
 */
class Headers {
  /**
   * Create instance of Headers
   *
   * @param {Array} rawHeaders array of batch response headers
   *
   * @constructor
   */
  constructor(rawHeaders) {
    this.headerKeys = [];
    this.parseHeadersArray(rawHeaders);
  }
 
  /**
   * Convert rawHeaders array to instance properties
   * and fill headerKeys map
   *
   * @param {Array} rawHeaders array of batch response headers
   *
   * @private
   */
  parseHeadersArray(rawHeaders) {
    _.each(rawHeaders, (headerValue, index) => {
      let headerKey;
      if (index % 2) {
        headerKey = rawHeaders[index - 1];
        this[headerKey] = headerValue;
        this.headerKeys.push(headerKey);
      }
    });
  }
 
  /**
   * Returns content of the header by its name
   * the headerName comparation is case-insensitive
   *
   * @param {String} headerName header name to find
   *
   * @returns {String} header content
   *
   * @public
   */
  get(headerName) {
    const normalizedKey = _.find(
      this.headerKeys,
      (headerKey) =>
        _.isString(headerName) &&
        _.isString(headerKey) &&
        headerName.toLowerCase() === headerKey.toLowerCase()
    );
    return this[normalizedKey];
  }
}
 
module.exports = Headers;