Skip to content

Commit 9fc86ec

Browse files
authored
Merge pull request #39 from usabilla/client-configuration
feat(usabilla): add support for configuring client
2 parents 54a19b2 + 16ef5f6 commit 9fc86ec

23 files changed

+1226
-162
lines changed

README.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,29 @@ usabilla.websites.buttons.get().then((buttons) => {
3838

3939
See the code in the [example folder](https://github.com/usabilla/api-js-node/tree/master/example) for more advanced ideas on how to use the client.
4040

41+
### Configuration
42+
43+
The client can be configured during instantiation with the following options:
44+
45+
- `protocol` (default: `https`) - The protocol to use when making requests
46+
- `host` (default: `data.usabilla.com`) - The host to use when making requests
47+
- `port` (default: `null`) - The port to use when making requests
48+
- `iterator` (default: `true`) - Whether to iterate until all results are retrieved
49+
50+
For example:
51+
52+
```js
53+
const Usabilla = require('usabilla-api');
54+
const options = {
55+
protocol: 'http',
56+
host: 'proxy-host',
57+
port: 'proxy-port'
58+
}
59+
const usabilla = new Usabilla('YOUR-ACCESS-KEY', 'YOUR-SECRET-KEY', options);
60+
61+
// usabilla.websites.buttons.get()
62+
```
63+
4164
## Support
4265

4366
The Usabilla Node.js Client API is maintained by Usabilla Development Team. Everyone is encouraged to file bug reports,

package.json

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
"cz-conventional-changelog": "^2.0.0",
1616
"eslint": "^3.12.2",
1717
"gulp": "^3.9.1",
18+
"husky": "^0.14.3",
1819
"isparta": "^4.0.0",
1920
"jasmine": "^2.5.2",
2021
"jasmine-core": "^2.5.2",
@@ -24,6 +25,8 @@
2425
"karma-coverage": "^1.1.1",
2526
"karma-coveralls": "^1.1.2",
2627
"karma-jasmine": "^1.0.2",
28+
"lint-staged": "^4.2.3",
29+
"prettier-eslint-cli": "^4.4.0",
2730
"semantic-release": "^6.3.2",
2831
"vinyl-source-stream": "^1.1.0",
2932
"wallabify": "0.0.14",
@@ -39,7 +42,9 @@
3942
"lint:fix": "npm run lint -- --fix",
4043
"posttest": "npm run lint",
4144
"semantic-release": "semantic-release pre && npm publish && semantic-release post",
42-
"commit": "git-cz"
45+
"commit": "git-cz",
46+
"precommit": "lint-staged",
47+
"format": "prettier-eslint --write --single-quote"
4348
},
4449
"repository": {
4550
"type": "git",
@@ -55,5 +60,11 @@
5560
"commitizen": {
5661
"path": "node_modules/cz-conventional-changelog"
5762
}
63+
},
64+
"lint-staged": {
65+
"*.js": [
66+
"format",
67+
"git add"
68+
]
5869
}
5970
}

src/index.js

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,24 +8,24 @@ const AppsProduct = require('./resources/appsProduct');
88
* Needs to be instantiated with access and secret keys.
99
*/
1010
class Usabilla {
11+
constructor(accessKey, secretKey, options = {}) {
12+
this.config = Object.assign(
13+
{},
14+
{
15+
protocol: 'https',
16+
host: 'data.usabilla.com',
17+
port: null,
18+
iterator: true
19+
},
20+
options
21+
);
1122

12-
constructor(accessKey, secretKey) {
13-
this.config = {
14-
method: 'GET',
15-
host: 'data.usabilla.com',
16-
iterator: true
17-
};
18-
19-
const signatureFactory = new SignatureFactory(accessKey, secretKey, this.config.host);
23+
const signatureFactory = new SignatureFactory(accessKey, secretKey);
2024

2125
this.websites = new WebsitesProduct('/live', signatureFactory, this.config);
2226
this.email = new EmailProduct('/live', signatureFactory, this.config);
2327
this.apps = new AppsProduct('/live', signatureFactory, this.config);
2428
}
25-
26-
configure(options) {
27-
Object.assign(this.config, options);
28-
}
2929
}
3030

3131
module.exports = Usabilla;

src/resources/appsProduct.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ const FormsResource = require('./formsResource');
44
* Apps product endpoints.
55
*/
66
class AppsProduct {
7-
87
constructor(base, signatureFactory, config) {
98
const baseUrl = `${base}/apps`;
109

src/resources/buttonFeedbackResource.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ const Resource = require('./resource');
44
* Websites Buttons feedback resource.
55
*/
66
class ButtonFeedbackResource extends Resource {
7-
87
constructor(base, signatureFactory, config) {
98
super(`${base}/:id/feedback`, signatureFactory, config);
109
}

src/resources/buttonsResource.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,15 @@ const ButtonFeedbackResource = require('./buttonFeedbackResource');
55
* Websites Buttons resource.
66
*/
77
class ButtonsResource extends Resource {
8-
98
constructor(base, signatureFactory, config) {
109
const baseUrl = `${base}/button`;
1110
super(baseUrl, signatureFactory, config);
1211

13-
this.feedback = new ButtonFeedbackResource(baseUrl, signatureFactory, config);
12+
this.feedback = new ButtonFeedbackResource(
13+
baseUrl,
14+
signatureFactory,
15+
config
16+
);
1417
}
1518
}
1619

src/resources/campaignsResource.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,15 @@ const CampaignsStatsResource = require('./campaignsStatsResource');
66
* Websites Campaigns resource.
77
*/
88
class CampaignsResource extends Resource {
9-
109
constructor(base, signatureFactory, config) {
1110
const baseUrl = `${base}/campaign`;
1211
super(baseUrl, signatureFactory, config);
1312

14-
this.results = new CampaignsResultsResource(baseUrl, signatureFactory, config);
13+
this.results = new CampaignsResultsResource(
14+
baseUrl,
15+
signatureFactory,
16+
config
17+
);
1518
this.stats = new CampaignsStatsResource(baseUrl, signatureFactory, config);
1619
}
1720
}

src/resources/campaignsResultsResource.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ const Resource = require('./resource');
55
* This resource provides the responses for a single or all campaigns.
66
*/
77
class CampaignsResultsResource extends Resource {
8-
98
constructor(base, signatureFactory, config) {
109
const baseUrl = `${base}/:id/results`;
1110
super(baseUrl, signatureFactory, config);

src/resources/campaignsStatsResource.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ const Resource = require('./resource');
55
* This resource provides the main statistics from a campaign.
66
*/
77
class CampaignsStatsResource extends Resource {
8-
98
constructor(base, signatureFactory, config) {
109
const baseUrl = `${base}/:id/stats`;
1110
super(baseUrl, signatureFactory, config);

src/resources/emailProduct.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ const WidgetsResource = require('./widgetsResource');
44
* Email product endpoints.
55
*/
66
class EmailProduct {
7-
87
constructor(base, signatureFactory, config) {
98
const baseUrl = `${base}/email`;
109

0 commit comments

Comments
 (0)