Allow tracking progress of server requests

This commit is contained in:
Juan Cruz Viotti 2014-12-01 13:23:47 -04:00
parent e52eb75ac8
commit d3df9bff1a
3 changed files with 32 additions and 5 deletions

@ -1,12 +1,15 @@
_ = require('lodash')
request = require('request')
progress = require('request-progress')
urlResolve = require('url').resolve
async = require('async')
connection = require('../../connection/connection')
config = require('../config')
token = require('../token/token')
exports.request = (options = {}, callback) ->
exports.request = (options = {}, callback, onProgress) ->
onProgress ?= _.noop
if not options.url?
throw new Error('Missing URL')
@ -37,7 +40,10 @@ exports.request = (options = {}, callback) ->
_.extend options.headers,
'Authorization': "Bearer #{savedToken}"
request(options, callback)
progress(request(options, callback))
.on('progress', onProgress)
.on('error', callback)
.on('end', onProgress)
(response, body, callback) ->
try
@ -52,18 +58,19 @@ exports.request = (options = {}, callback) ->
createFacadeFunction = (method) ->
lowerCaseMethod = method.toLowerCase()
exports[lowerCaseMethod] = (url, body, callback) ->
exports[lowerCaseMethod] = (url, body, callback, onProgress) ->
options = {
method
url
}
if _.isFunction(body)
onProgress = callback
callback = body
else
options.json = body
return exports.request(options, callback)
return exports.request(options, callback, onProgress)
for method in [
'GET'

@ -1,6 +1,7 @@
expect = require('chai').expect
nock = require('nock')
url = require('url')
sinon = require('sinon')
server = require('./server')
config = require('../config')
token = require('../token/token')
@ -144,13 +145,28 @@ describe 'Server:', ->
expect(response.body.status).to.equal(STATUS.ok)
done()
it 'should accept an onProgress function', (done) ->
spy = sinon.spy()
server.request {
method: 'GET'
url: URI.ok
}, (error, response, body) ->
expect(error).to.not.exist
expect(spy).to.have.been.called
done()
, spy
checkRequestTypeWithoutBody = (type) ->
return (done) ->
spy = sinon.spy()
lowercaseType = type.toLowerCase()
server[lowercaseType] URI.ok, (error, response) ->
return done(error) if error?
expect(response.request.method).to.equal(type)
expect(spy).to.have.been.called
done()
, spy
describe '#get()', ->
it('should be a facade to request()', checkRequestTypeWithoutBody('GET'))
@ -163,11 +179,14 @@ describe 'Server:', ->
checkRequestTypeWithBody = (type, body) ->
return (done) ->
spy = sinon.spy()
lowercaseType = type.toLowerCase()
server[lowercaseType] URI.ok, body, (error, response) ->
return done(error) if error?
expect(response.request.method).to.equal(type)
expect(spy).to.have.been.called
done()
, spy
describe '#post()', ->
it('should be a facade to request()', checkRequestTypeWithBody('POST', { hello: 'world' }))

@ -51,6 +51,7 @@
"is-online": "~3.0.0",
"pluralize": "~1.1.0",
"indefinite-article": "0.0.2",
"pubnub": "~3.7.0"
"pubnub": "~3.7.0",
"request-progress": "~0.3.1"
}
}