Code coverage report for src/targets/node/request.js

Statements: 100% (51 / 51)      Branches: 80.77% (21 / 26)      Functions: 100% (3 / 3)      Lines: 100% (51 / 51)      Ignored: none     

All files » src/targets/node/ » request.js
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 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106    1 1   1 10       10 10   10         10 2     10 7     10   2 2     1 1 1   1     3   3 3   3 2 1 1 1     3 2   2           3   3     4 4         10 2   2 2   2   2 4   2     10 1     10 10 10 10 10 10   10     1            
'use strict'
 
var util = require('util')
var path = require('path')
 
module.exports = function (source, options) {
  var opts = util._extend({
    indent: '  '
  }, options)
 
  var includeFS = false
  var code = ['var request = require("request");', null]
 
  var reqOpts = {
    method: source.method,
    url: source.url
  }
 
  if (Object.keys(source.queryObj).length) {
    reqOpts.qs = source.queryObj
  }
 
  if (Object.keys(source.headersObj).length) {
    reqOpts.headers = source.headersObj
  }
 
  switch (source.postData.mimeType) {
    case 'application/x-www-form-urlencoded':
      reqOpts.form = source.postData.paramsObj
      break
 
    case 'application/json':
      Eif (source.postData.jsonObj) {
        reqOpts.body = source.postData.jsonObj
        reqOpts.json = true
      }
      break
 
    case 'multipart/form-data':
      reqOpts.formData = {}
 
      source.postData.params.forEach(function (param) {
        var attachement = {}
 
        if (param.value) {
          attachement.value = param.value
        } else Eif (param.fileName) {
          includeFS = true
          attachement.value = 'fs.createReadStream("' + param.fileName + '")'
        }
 
        if (param.fileName) {
          var base = path.parse(param.fileName).base
 
          attachement.options = {
            filename: base.length ? base : 'filename',
            contentType: param.contentType ? param.contentType : null
          }
        }
 
        reqOpts.formData[param.name] = attachement
      })
      break
 
    default:
      Eif (source.postData.text !== '') {
        reqOpts.body = source.postData.text
      }
  }
 
  // construct cookies argument
  if (source.cookies.length) {
    reqOpts.jar = 'JAR'
 
    code.push(null)
    code.push('var jar = request.jar();')
 
    var url = source.url
 
    source.cookies.map(function (cookie) {
      code.push(util.format('jar.setCookie(request.cookie("%s=%s"), "%s");', encodeURIComponent(cookie.name), encodeURIComponent(cookie.value), url))
    })
    code.push(null)
  }
 
  if (includeFS) {
    code.unshift('var fs = require("fs");')
  }
 
  code.push(util.format('request(%s, %s', JSON.stringify(reqOpts, null, opts.indent), 'function (error, response, body) {'))
  code.push(opts.indent + 'if (error) throw new Error(error);')
  code.push(null)
  code.push(opts.indent + 'console.log(body);')
  code.push('});')
  code.push(null)
 
  return code.join('\n').replace('"JAR"', 'jar').replace(/"fs\.createReadStream\(\\\"(.+)\\\"\)\"/, 'fs.createReadStream("$1")')
}
 
module.exports.info = {
  key: 'request',
  title: 'Request',
  link: 'https://github.com/request/request',
  description: 'Simplified HTTP request client'
}