This repository houses all of the integrations that get built into Analytics.js.
Interested in integrating your service with us? Check out our Partners page for more details and to submit an application!
Once you've been given the green light from Segment, you can read the contribution docs to get started! If you ever need any help, feel free to email [email protected].
This repository relies on a couple dependencies that help make our lives easier while developing. They are:
-
analytics.js-integration
, which is a factory for creatingIntegration
constructors, that helps us share lots of the common logic in one place. -
analytics.js-integration-tester
, which is a testing helper that wraps an integration and simplifies lots of the testing logic. It's similar to howsupertest
works for Superagent.
To get started with development, you need to be running node 0.12. An easy way to get it is:
$ npm install -g n
$ n 0.12
Make sure you have ~/.netrc
setup like:
machine api.github.com
login <username>
password <token>
Here's how you can create a token.
Then clone the repository and then inside of it run:
$ make
That will downloaded all of the dependencies needed, and build the test-ready files. Then, edit as you please, adding new integrations or editing the logic of an existing integration. When you are ready to test run:
$ make test
That will automatically lint all of the Javascript, and run the entire test suite for each integration. For convenience, you can also limit the tests to just the integration you're working with like so:
$ make test integration=kissmetrics
And if you'd like you debug in the browser, run:
$ make test-browser
$ make test-browser integration=customerio
Once your tests pass, you are ready to submit a pull request!
###Notes on Linting
When you're adding an integration's javascript snippet to your integration, we don't want to have to worry about the formatting that they've used. To let JSCS ignore the snippet during linting, use these comments on either side (example code courtesy of the JSCS readme).
// jscs:disable
var c = d; // all errors on this line will be ignored
// jscs:enable