Skip to content
This repository was archived by the owner on Aug 20, 2020. It is now read-only.

Commit a7cb7bb

Browse files
Cleaner request object initialization; Ability to use http for testing
1 parent 6fa986b commit a7cb7bb

File tree

6 files changed

+46
-28
lines changed

6 files changed

+46
-28
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@ All notable changes to this project will be documented in this file.
33

44
This project adheres to [Semantic Versioning](http://semver.org/).
55

6+
## [2.1.0] - 2016-06-08
7+
### Added
8+
- Cleaner request object initialization
9+
- Ability to use http for testing
10+
611
## [2.0.0] - 2016-06-06
712
### Changed
813
- Made the Request and Response variables non-redundant. e.g. request.requestBody becomes request.body

README.md

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,7 @@ npm install sendgrid-rest
1919
```javascript
2020
var Client = require('sendgrid-rest').Client
2121
var client = new Client()
22-
var emptyRequest = require('sendgrid-rest').request
23-
var request = JSON.parse(JSON.stringify(emptyRequest))
22+
var request = client.emptyRequest()
2423
var param = 'myparam'
2524
request.host = 'api.example.com'
2625
request.method = 'GET'
@@ -37,8 +36,7 @@ client.API(request, function (response) {
3736
```javascript
3837
var Client = require('sendgrid-rest').Client
3938
var client = new Client()
40-
var emptyRequest = require('sendgrid-rest').request
41-
var request = JSON.parse(JSON.stringify(emptyRequest))
39+
var request = client.emptyRequest()
4240
request.host = 'api.example.com'
4341
request.headers['Authorization'] = 'Bearer XXXXXX'
4442
request.queryParams['limit'] = 100

examples/example.js

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
var Client = require('../lib/client.js').Client
2-
var emptyRequest = require('../lib/client.js').request
32

43
// These values persist across of subsequent calls, unless overidden.
5-
var globalRequest = JSON.parse(JSON.stringify(emptyRequest))
4+
var globalRequest = require('../lib/client.js').emptyRequest
65
globalRequest.host = 'api.sendgrid.com';
76
globalRequest.headers['Content-Type'] = 'application/json'
87
// You must add your SendGrid API Key to your OS Environment
98
globalRequest.headers['Authorization'] = 'Bearer '.concat(process.env.SENDGRID_API_KEY)
109
var client = new Client(globalRequest)
1110

1211
// GET Collection
13-
var requestGet = JSON.parse(JSON.stringify(emptyRequest))
12+
var requestGet = client.emptyRequest()
1413
requestGet.method = 'GET'
1514
requestGet.path = '/v3/api_keys'
1615
requestGet.queryParams['limit'] = 100
@@ -30,7 +29,7 @@ var requestBody = {
3029
'alerts.read'
3130
]
3231
}
33-
var requestPost = JSON.parse(JSON.stringify(emptyRequest));
32+
var requestPost = client.emptyRequest()
3433
requestPost.method = 'POST'
3534
requestPost.path = '/v3/api_keys'
3635
requestPost.body = requestBody
@@ -49,7 +48,7 @@ createAPIKey(function (returnValue) { // This ensures we POST a new key first, t
4948
var api_key_id = '/'.concat(returnValue)
5049

5150
// GET SINGLE
52-
var requestGetSingle = JSON.parse(JSON.stringify(emptyRequest))
51+
var requestGetSingle = client.emptyRequest()
5352
requestGetSingle.method = 'GET'
5453
requestGetSingle.path = '/v3/api_keys'.concat(api_key_id)
5554
client.API(requestGetSingle, function (response) {
@@ -62,7 +61,7 @@ createAPIKey(function (returnValue) { // This ensures we POST a new key first, t
6261
requestBody = {
6362
'name': 'A New Hope'
6463
}
65-
var requestPatch = JSON.parse(JSON.stringify(emptyRequest))
64+
var requestPatch = client.emptyRequest()
6665
requestPatch.method = 'PATCH'
6766
requestPatch.path = '/v3/api_keys'.concat(api_key_id)
6867
requestPatch.body = requestBody
@@ -80,7 +79,7 @@ createAPIKey(function (returnValue) { // This ensures we POST a new key first, t
8079
'user.profile.update'
8180
]
8281
}
83-
var requestPut = JSON.parse(JSON.stringify(emptyRequest))
82+
var requestPut = client.emptyRequest()
8483
requestPut.method = 'PUT'
8584
requestPut.path = '/v3/api_keys'.concat(api_key_id)
8685
requestPut.body = requestBody
@@ -91,7 +90,7 @@ createAPIKey(function (returnValue) { // This ensures we POST a new key first, t
9190
})
9291

9392
// DELETE
94-
var requestDelete = JSON.parse(JSON.stringify(emptyRequest))
93+
var requestDelete = client.emptyRequest()
9594
requestDelete.method = 'DELETE'
9695
requestDelete.path = '/v3/api_keys'.concat(api_key_id)
9796
client.API(requestDelete, function (response) {

lib/client.js

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,23 @@
11
'use strict'
22

3-
var http = require('https')
3+
var https = require('https')
4+
var http = require('http')
45
var queryString = require('querystring')
56

6-
// request holds the request to an API Call, use this as an initializer
7-
// like so: JSON.parse(JSON.stringify(request))
7+
// request holds the request to an API Call
88
var request = {
99
host: '',
1010
method: '',
1111
path: '',
1212
headers: {},
1313
body: {},
14-
queryParams: {}
14+
queryParams: {},
15+
test: false, // use this to allow for http calls
16+
port: '' // set the port for http calls
1517
}
1618

19+
var emptyRequest = JSON.parse(JSON.stringify(request))
20+
1721
// response holds the response from an API call, use this as an initializer
1822
// like so: JSON.parse(JSON.stringify(response))
1923
var response = {
@@ -27,6 +31,11 @@ function Client (globalRequest) {
2731
var emptyResponse = JSON.parse(JSON.stringify(response))
2832
var body = ''
2933

34+
// utility function to create an empty request object
35+
this.emptyRequest = function () {
36+
return JSON.parse(JSON.stringify(request))
37+
}
38+
3039
// utility function to detect empty objects
3140
function isEmpty (obj) {
3241
for (var key in obj) {
@@ -74,7 +83,14 @@ function Client (globalRequest) {
7483
this.API = function (endpointRequest, callback) {
7584
var request = buildRequest(globalRequest, endpointRequest)
7685

77-
var httpRequest = http.request(request, function (httpResponse) {
86+
if ( endpointRequest.test == true ) {
87+
var http_request = http
88+
request.port = endpointRequest.port
89+
} else {
90+
var http_request = https
91+
}
92+
93+
var httpRequest = http_request.request(request, function (httpResponse) {
7894
var responseBody = ''
7995

8096
// cature the response from the API
@@ -110,5 +126,6 @@ function Client (globalRequest) {
110126
module.exports =
111127
{
112128
Client: Client,
113-
request: request
129+
request: request,
130+
emptyRequest: emptyRequest
114131
}

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
],
66
"name": "sendgrid-rest",
77
"description": "HTTP REST client, simplified for Node.js.",
8-
"version": "2.0.0",
8+
"version": "2.1.0",
99
"homepage": "https://sendgrid.com",
1010
"repository": {
1111
"type": "git",

test/test.js

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@ var nock = require('nock')
44
var TEST_HOST = 'https://api.test.com'
55

66
var Client = require('../lib/client.js').Client
7-
var emptyRequest = require('../lib/client.js').request
8-
var globalRequest = JSON.parse(JSON.stringify(emptyRequest))
7+
var globalRequest = require('../lib/client.js').emptyRequest
98
globalRequest.host = 'api.test.com'
109

1110
describe('Client', function () {
@@ -20,7 +19,7 @@ describe('Client', function () {
2019
message: 'Success'
2120
})
2221

23-
var requestGet = JSON.parse(JSON.stringify(emptyRequest))
22+
var requestGet = client.emptyRequest()
2423
requestGet.method = 'GET'
2524
requestGet.path = '/test'
2625
requestGet.queryParams['limit'] = 100
@@ -53,7 +52,7 @@ describe('Client', function () {
5352
var requestBody = {
5453
'test': 'Test Body'
5554
}
56-
var requestPost = JSON.parse(JSON.stringify(emptyRequest))
55+
var requestPost = client.emptyRequest()
5756
requestPost.method = 'POST'
5857
requestPost.path = '/test'
5958
requestPost.body = requestBody
@@ -84,7 +83,7 @@ describe('Client', function () {
8483
.reply(200, {
8584
message: 'Success'
8685
})
87-
var requestGet = JSON.parse(JSON.stringify(emptyRequest))
86+
var requestGet = client.emptyRequest()
8887
requestGet.method = 'GET'
8988
requestGet.path = '/test'
9089
client.API(requestGet, function (response) {
@@ -104,7 +103,7 @@ describe('Client', function () {
104103
var requestBody = {
105104
'test': 'Test Body'
106105
}
107-
var requestPost = JSON.parse(JSON.stringify(emptyRequest))
106+
var requestPost = client.emptyRequest()
108107
requestPost.body = requestBody
109108
requestPost.method = 'POST'
110109
requestPost.path = '/test'
@@ -121,7 +120,7 @@ describe('Client', function () {
121120
.reply(200, {
122121
message: 'Success'
123122
})
124-
var requestPatch = JSON.parse(JSON.stringify(emptyRequest))
123+
var requestPatch = client.emptyRequest()
125124
requestPatch.body = requestBody
126125
requestPatch.method = 'PATCH'
127126
requestPatch.path = '/test'
@@ -139,7 +138,7 @@ describe('Client', function () {
139138
.reply(200, {
140139
message: 'Success'
141140
})
142-
var requestPut = JSON.parse(JSON.stringify(emptyRequest))
141+
var requestPut = client.emptyRequest()
143142
requestPut.body = requestBody
144143
requestPut.method = 'PUT'
145144
requestPut.path = '/test'
@@ -157,7 +156,7 @@ describe('Client', function () {
157156
.reply(204, {
158157
message: 'Success'
159158
})
160-
var requestDelete = JSON.parse(JSON.stringify(emptyRequest))
159+
var requestDelete = client.emptyRequest()
161160
requestDelete.method = 'DELETE'
162161
requestDelete.path = '/test'
163162
client.API(requestDelete, function (response) {

0 commit comments

Comments
 (0)