npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

ember-cli-analytics

v1.4.1

Published

An ember-cli addon to interface with analytics services and external integrations

Downloads

115

Readme

ember-cli-analytics Build Status Maintainability

An Ember CLI addon to interface with analytics services and external integrations.

Being able to track what your users are doing provides valuable insights into how your application is performing. However if you are trying to support multiple analytics integrations it can quickly become unmanageable.

This addon provides a simple analytics service allowing your applications to support multiple analytics integrations without having to clutter your code base with tracking codes. This addon bundles a series of adapters requiring that you only have to manage a single API.

This addon is built upon the ember-cli-adapter-pattern allowing you to easily create your own analytics integration adapters.

Compatibility

  • Ember.js v2.18 or above
  • Ember CLI v2.13 or above

Installation

From within your Ember CLI project directory run:

ember install ember-cli-analytics

Usage

This addon implements a service to interface with several analytics integration by providing an abstract API that hides the implementation details of each analytics integration adapter.

Configuration

Before the analytics service can be used it first must be configured through config/environment. This allows you to define which of the integrations you want to make available to your application through the analytics service.

Configuration Example
// config/environment.js
module.exports = function(environment) {
  let ENV = {
    analytics: {
      integrations: [
        {
          name: 'Bing',
          config: {
            id: 'XXXXXXX'
          }
        },
        {
          name: 'Facebook',
          config: {
            id: 'XXXXXXXXXXXXXXXX'
          }
        },
        {
          name: 'GoogleAdwords',
          config: {
            id: 'XXXXXXXXXX',
            label: 'XXXXXXXXXXXXXXXXXXX'
          }
        },
        {
          name: 'GoogleAnalytics',
          config: {
            id: 'UA-XXXXXXXX-Y',
            remarketing: true,
            ecommerce: true,
            enhancedEcommerce: false,
            set: {
              anonymizeIp: true
            }
          }
        },
        {
          name: 'Mixpanel',
          config: {
            token: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
          }
        },
        {
          name: 'Optimizely',
          config: {
            id: 'XXXXXXXXXX'
          }
        }
      ]
    }
  };

  return ENV;
};

This configures your application to use all 6 adapters bundled with this addon.

Options for higher-security implementations

Some higher-security sites may want to prohibit all script-based access to third-party sites. If this is the case for your site, you might prefer to download the analytics scripts to the vendor location first and then incorporate them into your ember application via the build process. For example, for google analytics, you would do the following:

curl https://www.google-analytics.com/analytics.js > vendor/google-analytics.js

The script can now be loaded as part of the build process by adding a command to your ember-cli-build.js file. For the Google Analytics example, you would do the following:

app.import('vendor/google-analytics.js')

If you have loaded the scripts into your application via the build process, ember-cli-analytics will not attempt to download them when necessary.

Additionally under the analytics configuration key, it is also possible to set an option limitRouteInformation. Some higher-security sites may have sensitive information embedded in their routes such as email addresses or invitation codes which should not be leaked to any third-parties. If you set limitRouteInformation to true, then ember-cli-analytics will only send the current route name to an analytics service rather than the entire URL.

limitRouteInformation Example
// config/environment.js
module.exports = function(environment) {
  let ENV = {
    analytics: {
      options: {
        limitRouteInformation: true,
      },
      integrations: [
        ...
      ]
    }
  };
};

Integrations

The integrations array takes a series of objects defining the configuration of each adapter. This is a requirement of ember-cli-adapter-pattern where each object may take an additional series of key/value pairs. Alongside the name of each adapter, in pascal case, this addon also requires a configuration object typically defining the id or token required to authenticate with the external service.

Injection

This addon makes no assumptions about what ember objects you want to make the analytics service available. Therefore in order to make the service available you need to implement you own injections.

Injection Initializer Example
// app/initializers/analytics.js
export function initialize(application) {
  application.inject('controller', 'analytics', 'service:analytics');
  application.inject('route', 'analytics', 'service:analytics');
};

export default { initialize };

This will make the analytics service available to all controllers and routes. It is however unlikely that you will require the service to be injected into every controller or route of your applications. Therefore it is recommended that you include the service on a per object basis.

Injection Controller Example
// app/controllers/application.js
import Controller from '@ember/controller';
import { inject } from '@ember/service';

export default Controller.extend({
  analytics: inject()
});

This will create a dependency on the application controller and inject the analytics service into this controller only. This can be repeated across all objects that need access to the service.

Analytics Service

The analytics service implements an abstract API that currently supports the following methods:

  • trackPage
  • trackEvent
  • trackConversion
  • identify
  • alias

When using this API, by default the service will call the corresponding method on each of the adapters unless a specific adapter is specified. This means that if you were to call trackEvent on the service, it would in turn call trackEvent on each of the adapters that implement it.

All Adapters Example
// app/controllers/application.js
import Controller from '@ember/controller';

import { get } from '@ember/object';
import { inject } from '@ember/service';

export default Controller.extend({
  analytics: inject(),

  actions: {
    playVideo() {
      const analytics = get(this, 'analytics');
      analytics.trackEvent({ action: 'videoPlayed' });
    }
  }
});

This is great behaviour if you have setup multiple analytics integrations in config/environment and is a consequence of the ember-cli-adapter-pattern. However if you only want to send events to a single analytics integration you must specify its name.

Single Adapter Example
// app/controllers/application.js
import Controller from '@ember/controller';

import { get } from '@ember/object';
import { inject } from '@ember/service';

export default Controller.extend({
  analytics: inject(),

  actions: {
    playVideo() {
      const analytics = get(this, 'analytics');
      analytics.trackEvent('Mixpanel', { action: 'videoPlayed' });
    }
  }
});

This will only send the event to the Mixpanel adapter.

Trackable Mixin

To track page views this addon provides a trackable mixin. This mixin should be used to augment the ember router and will invoke the trackPage method on each of the configured adapters.

Trackable Example
// app/router.js
import EmberRouter from '@ember/routing/router';
import Trackable from 'ember-cli-analytics/mixins/trackable';
import config from './config/environment';

const Router = EmberRouter.extend(Trackable, {
  location: config.locationType,
  rootURL: config.rootURL
});

Router.map(function() {
  this.route('index');
});

export default Router;

License

This project is licensed under the MIT License.