angulartics-rails 0.15.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +29 -0
- data/Rakefile +1 -0
- data/angulartics-rails.gemspec +22 -0
- data/lib/angulartics/rails.rb +8 -0
- data/lib/angulartics/rails/version.rb +5 -0
- data/vendor/assets/javascript/angulartics-adobe.js +46 -0
- data/vendor/assets/javascript/angulartics-chartbeat.js +29 -0
- data/vendor/assets/javascript/angulartics-flurry.js +29 -0
- data/vendor/assets/javascript/angulartics-ga-cordova.js +91 -0
- data/vendor/assets/javascript/angulartics-ga.js +61 -0
- data/vendor/assets/javascript/angulartics-gtm.js +57 -0
- data/vendor/assets/javascript/angulartics-kissmetrics.js +33 -0
- data/vendor/assets/javascript/angulartics-mixpanel.js +47 -0
- data/vendor/assets/javascript/angulartics-piwik.js +50 -0
- data/vendor/assets/javascript/angulartics-scroll.js +47 -0
- data/vendor/assets/javascript/angulartics-segmentio.js +36 -0
- data/vendor/assets/javascript/angulartics-splunk.js +34 -0
- data/vendor/assets/javascript/angulartics-woopra.js +26 -0
- data/vendor/assets/javascript/angulartics.js +213 -0
- metadata +117 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 Ben Augarten
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# Angulartics::Rails
|
2
|
+
|
3
|
+
TODO: Write a gem description
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'angulartics-rails'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Or install it yourself as:
|
16
|
+
|
17
|
+
$ gem install angulartics-rails
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
TODO: Write usage instructions here
|
22
|
+
|
23
|
+
## Contributing
|
24
|
+
|
25
|
+
1. Fork it
|
26
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
27
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
28
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
29
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'angulartics/rails/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "angulartics-rails"
|
8
|
+
spec.version = Angulartics::Rails::VERSION
|
9
|
+
spec.authors = ["Ben Augarten"]
|
10
|
+
spec.email = ["b.augarten@gmail.com"]
|
11
|
+
spec.description = %q{angulartics packaged in gem form}
|
12
|
+
spec.summary = %q{Add analytics to your angularjs application}
|
13
|
+
spec.homepage = ""
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.require_paths = ["lib", "vendor"]
|
18
|
+
|
19
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
20
|
+
spec.add_development_dependency "rake"
|
21
|
+
spec.add_dependency "railties", "~> 4.1"
|
22
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
/**
|
2
|
+
* @license Angulartics v0.15.19
|
3
|
+
* (c) 2014 Luis Farzati http://luisfarzati.github.io/angulartics
|
4
|
+
* Adobe analytics(Omniture) update contributed by http://github.com/ajayk
|
5
|
+
* License: MIT
|
6
|
+
*/
|
7
|
+
(function(angular) {
|
8
|
+
'use strict';
|
9
|
+
|
10
|
+
/**
|
11
|
+
* @ngdoc overview
|
12
|
+
* @name angulartics.adobe.analytics
|
13
|
+
* Enables analytics support for Adobe Analytics (http://adobe.com/analytics)
|
14
|
+
*/
|
15
|
+
angular.module('angulartics.adobe.analytics', ['angulartics'])
|
16
|
+
.config(['$analyticsProvider', function ($analyticsProvider) {
|
17
|
+
|
18
|
+
$analyticsProvider.settings.trackRelativePath = true;
|
19
|
+
|
20
|
+
$analyticsProvider.registerPageTrack(function (path) {
|
21
|
+
if (window.s) s.t([path]);
|
22
|
+
});
|
23
|
+
|
24
|
+
/**
|
25
|
+
* Track Event in Adobe Analytics
|
26
|
+
* @name eventTrack
|
27
|
+
*
|
28
|
+
* @param {string} action Required 'action' (string) associated with the event
|
29
|
+
*
|
30
|
+
*
|
31
|
+
*/
|
32
|
+
$analyticsProvider.registerEventTrack(function (action) {
|
33
|
+
if (window.s) {
|
34
|
+
if(action) {
|
35
|
+
if(action.toUpperCase() === "DOWNLOAD")
|
36
|
+
s.tl(this,'d',action);
|
37
|
+
else if(action.toUpperCase() === "EXIT")
|
38
|
+
s.tl(this,'e',action);
|
39
|
+
}
|
40
|
+
else
|
41
|
+
s.tl(this,'o',action);
|
42
|
+
}
|
43
|
+
});
|
44
|
+
|
45
|
+
}]);
|
46
|
+
})(angular);
|
@@ -0,0 +1,29 @@
|
|
1
|
+
/**
|
2
|
+
* @license Angulartics v0.15.19
|
3
|
+
* (c) 2013 Luis Farzati http://luisfarzati.github.io/angulartics
|
4
|
+
* Contributed by http://github.com/chechoacosta
|
5
|
+
* License: MIT
|
6
|
+
*/
|
7
|
+
(function(angular) {
|
8
|
+
'use strict';
|
9
|
+
|
10
|
+
/**
|
11
|
+
* @ngdoc overview
|
12
|
+
* @name angulartics.chartbeat
|
13
|
+
* Enables analytics support for Chartbeat (http://chartbeat.com)
|
14
|
+
*/
|
15
|
+
angular.module('angulartics.chartbeat', ['angulartics'])
|
16
|
+
.config(['$analyticsProvider', function ($analyticsProvider) {
|
17
|
+
|
18
|
+
angulartics.waitForVendorApi('pSUPERFLY', 500, function (pSUPERFLY) {
|
19
|
+
$analyticsProvider.registerPageTrack(function (path) {
|
20
|
+
pSUPERFLY.virtualPage(path);
|
21
|
+
});
|
22
|
+
});
|
23
|
+
|
24
|
+
$analyticsProvider.registerEventTrack(function () {
|
25
|
+
console.warn('Chartbeat doesn\'t support event tracking -- silently ignored.');
|
26
|
+
});
|
27
|
+
|
28
|
+
}]);
|
29
|
+
})(angular);
|
@@ -0,0 +1,29 @@
|
|
1
|
+
/**
|
2
|
+
* @license Angulartics v0.15.19
|
3
|
+
* (c) 2013 Luis Farzati http://luisfarzati.github.io/angulartics
|
4
|
+
* Contributed by http://github.com/samanbarghi
|
5
|
+
* License: MIT
|
6
|
+
*/
|
7
|
+
|
8
|
+
(function(angular) {
|
9
|
+
'use strict';
|
10
|
+
|
11
|
+
/**
|
12
|
+
* @ngdoc overview
|
13
|
+
* @name angulartics.flurry
|
14
|
+
* Enables analytics support for flurry (http://flurry.com)
|
15
|
+
*/
|
16
|
+
angular.module('angulartics.flurry', ['angulartics'])
|
17
|
+
.config(['$analyticsProvider', function ($analyticsProvider) {
|
18
|
+
|
19
|
+
|
20
|
+
$analyticsProvider.registerPageTrack(function (path) {
|
21
|
+
//No separate track page functionality
|
22
|
+
});
|
23
|
+
|
24
|
+
$analyticsProvider.registerEventTrack(function (action, properties) {
|
25
|
+
FlurryAgent.logEvent(action, properties);
|
26
|
+
});
|
27
|
+
|
28
|
+
}]);
|
29
|
+
})(angular);
|
@@ -0,0 +1,91 @@
|
|
1
|
+
/**
|
2
|
+
* @license Angulartics v0.15.19
|
3
|
+
* (c) 2013 Luis Farzati http://luisfarzati.github.io/angulartics
|
4
|
+
* License: MIT
|
5
|
+
*/
|
6
|
+
(function(angular) {
|
7
|
+
'use strict';
|
8
|
+
|
9
|
+
/**
|
10
|
+
* @ngdoc overview
|
11
|
+
* @name angulartics.google.analytics
|
12
|
+
* Enables analytics support for Google Analytics (http://google.com/analytics)
|
13
|
+
*/
|
14
|
+
angular.module('angulartics.google.analytics.cordova', ['angulartics'])
|
15
|
+
|
16
|
+
.provider('googleAnalyticsCordova', function () {
|
17
|
+
var GoogleAnalyticsCordova = [
|
18
|
+
'$q', '$log', 'ready', 'debug', 'trackingId', 'period',
|
19
|
+
function ($q, $log, ready, debug, trackingId, period) {
|
20
|
+
var deferred = $q.defer();
|
21
|
+
var deviceReady = false;
|
22
|
+
|
23
|
+
window.addEventListener('deviceReady', function () {
|
24
|
+
deviceReady = true;
|
25
|
+
deferred.resolve();
|
26
|
+
});
|
27
|
+
|
28
|
+
setTimeout(function () {
|
29
|
+
if (!deviceReady) {
|
30
|
+
deferred.resolve();
|
31
|
+
}
|
32
|
+
}, 3000);
|
33
|
+
|
34
|
+
function success() {
|
35
|
+
if (debug) {
|
36
|
+
$log.info(arguments);
|
37
|
+
}
|
38
|
+
}
|
39
|
+
|
40
|
+
function failure(err) {
|
41
|
+
if (debug) {
|
42
|
+
$log.error(err);
|
43
|
+
}
|
44
|
+
}
|
45
|
+
|
46
|
+
this.init = function () {
|
47
|
+
return deferred.promise.then(function () {
|
48
|
+
var analytics = window.plugins && window.plugins.gaPlugin;
|
49
|
+
if (analytics) {
|
50
|
+
analytics.init(function onInit() {
|
51
|
+
ready(analytics, success, failure);
|
52
|
+
}, failure, trackingId, period || 10);
|
53
|
+
} else if (debug) {
|
54
|
+
$log.error('Google Analytics for Cordova is not available');
|
55
|
+
}
|
56
|
+
});
|
57
|
+
};
|
58
|
+
}];
|
59
|
+
|
60
|
+
return {
|
61
|
+
$get: ['$injector', function ($injector) {
|
62
|
+
return $injector.instantiate(GoogleAnalyticsCordova, {
|
63
|
+
ready: this._ready || angular.noop,
|
64
|
+
debug: this.debug,
|
65
|
+
trackingId: this.trackingId,
|
66
|
+
period: this.period
|
67
|
+
});
|
68
|
+
}],
|
69
|
+
ready: function (fn) {
|
70
|
+
this._ready = fn;
|
71
|
+
}
|
72
|
+
};
|
73
|
+
})
|
74
|
+
|
75
|
+
.config(['$analyticsProvider', 'googleAnalyticsCordovaProvider', function ($analyticsProvider, googleAnalyticsCordovaProvider) {
|
76
|
+
googleAnalyticsCordovaProvider.ready(function (analytics, success, failure) {
|
77
|
+
$analyticsProvider.registerPageTrack(function (path) {
|
78
|
+
analytics.trackPage(success, failure, path);
|
79
|
+
});
|
80
|
+
|
81
|
+
$analyticsProvider.registerEventTrack(function (action, properties) {
|
82
|
+
analytics.trackEvent(success, failure, properties.category, action, properties.label, properties.value);
|
83
|
+
});
|
84
|
+
});
|
85
|
+
}])
|
86
|
+
|
87
|
+
.run(['googleAnalyticsCordova', function (googleAnalyticsCordova) {
|
88
|
+
googleAnalyticsCordova.init();
|
89
|
+
}]);
|
90
|
+
|
91
|
+
})(angular);
|
@@ -0,0 +1,61 @@
|
|
1
|
+
/**
|
2
|
+
* @license Angulartics v0.15.19
|
3
|
+
* (c) 2013 Luis Farzati http://luisfarzati.github.io/angulartics
|
4
|
+
* Universal Analytics update contributed by http://github.com/willmcclellan
|
5
|
+
* License: MIT
|
6
|
+
*/
|
7
|
+
(function(angular) {
|
8
|
+
'use strict';
|
9
|
+
|
10
|
+
/**
|
11
|
+
* @ngdoc overview
|
12
|
+
* @name angulartics.google.analytics
|
13
|
+
* Enables analytics support for Google Analytics (http://google.com/analytics)
|
14
|
+
*/
|
15
|
+
angular.module('angulartics.google.analytics', ['angulartics'])
|
16
|
+
.config(['$analyticsProvider', function ($analyticsProvider) {
|
17
|
+
|
18
|
+
// GA already supports buffered invocations so we don't need
|
19
|
+
// to wrap these inside angulartics.waitForVendorApi
|
20
|
+
|
21
|
+
$analyticsProvider.settings.trackRelativePath = true;
|
22
|
+
|
23
|
+
$analyticsProvider.registerPageTrack(function (path) {
|
24
|
+
if (window._gaq) _gaq.push(['_trackPageview', path]);
|
25
|
+
if (window.ga) ga('send', 'pageview', path);
|
26
|
+
});
|
27
|
+
|
28
|
+
/**
|
29
|
+
* Track Event in GA
|
30
|
+
* @name eventTrack
|
31
|
+
*
|
32
|
+
* @param {string} action Required 'action' (string) associated with the event
|
33
|
+
* @param {object} properties Comprised of the mandatory field 'category' (string) and optional fields 'label' (string), 'value' (integer) and 'noninteraction' (boolean)
|
34
|
+
*
|
35
|
+
* @link https://developers.google.com/analytics/devguides/collection/gajs/eventTrackerGuide#SettingUpEventTracking
|
36
|
+
*
|
37
|
+
* @link https://developers.google.com/analytics/devguides/collection/analyticsjs/events
|
38
|
+
*/
|
39
|
+
$analyticsProvider.registerEventTrack(function (action, properties) {
|
40
|
+
// GA requires that eventValue be an integer, see:
|
41
|
+
// https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#eventValue
|
42
|
+
// https://github.com/luisfarzati/angulartics/issues/81
|
43
|
+
if(properties.value) {
|
44
|
+
var parsed = parseInt(properties.value, 10);
|
45
|
+
properties.value = isNaN(parsed) ? 0 : parsed;
|
46
|
+
}
|
47
|
+
|
48
|
+
if (window._gaq) {
|
49
|
+
_gaq.push(['_trackEvent', properties.category, action, properties.label, properties.value, properties.noninteraction]);
|
50
|
+
}
|
51
|
+
else if (window.ga) {
|
52
|
+
if (properties.noninteraction) {
|
53
|
+
ga('send', 'event', properties.category, action, properties.label, properties.value, {nonInteraction: 1});
|
54
|
+
} else {
|
55
|
+
ga('send', 'event', properties.category, action, properties.label, properties.value);
|
56
|
+
}
|
57
|
+
}
|
58
|
+
});
|
59
|
+
|
60
|
+
}]);
|
61
|
+
})(angular);
|
@@ -0,0 +1,57 @@
|
|
1
|
+
/**
|
2
|
+
* @license Angulartics v0.15.19
|
3
|
+
* (c) 2013 Luis Farzati http://luisfarzati.github.io/angulartics
|
4
|
+
* Google Tag Manager Plugin Contributed by http://github.com/danrowe49
|
5
|
+
* License: MIT
|
6
|
+
*/
|
7
|
+
|
8
|
+
(function(angular){
|
9
|
+
'use strict';
|
10
|
+
|
11
|
+
|
12
|
+
/**
|
13
|
+
* @ngdoc overview
|
14
|
+
* @name angulartics.google.analytics
|
15
|
+
* Enables analytics support for Google Tag Manager (http://google.com/tagmanager)
|
16
|
+
*/
|
17
|
+
|
18
|
+
angular.module('angulartics.google.tagmanager', ['angulartics'])
|
19
|
+
.config(['$analyticsProvider', function($analyticsProvider){
|
20
|
+
|
21
|
+
/**
|
22
|
+
* Send content views to the dataLayer
|
23
|
+
*
|
24
|
+
* @param {string} path Required 'content name' (string) describes the content loaded
|
25
|
+
*/
|
26
|
+
|
27
|
+
$analyticsProvider.registerPageTrack(function(path){
|
28
|
+
var dataLayer = window.dataLayer = window.dataLayer || [];
|
29
|
+
dataLayer.push({
|
30
|
+
'event': 'content-view',
|
31
|
+
'content-name': path
|
32
|
+
});
|
33
|
+
});
|
34
|
+
|
35
|
+
/**
|
36
|
+
* Send interactions to the dataLayer, i.e. for event tracking in Google Analytics
|
37
|
+
* @name eventTrack
|
38
|
+
*
|
39
|
+
* @param {string} action Required 'action' (string) associated with the event
|
40
|
+
* @param {object} properties Comprised of the mandatory field 'category' (string) and optional fields 'label' (string), 'value' (integer) and 'noninteraction' (boolean)
|
41
|
+
*/
|
42
|
+
|
43
|
+
$analyticsProvider.registerEventTrack(function(action, properties){
|
44
|
+
var dataLayer = window.dataLayer = window.dataLayer || [];
|
45
|
+
dataLayer.push({
|
46
|
+
'event': 'interaction',
|
47
|
+
'target': properties.category,
|
48
|
+
'action': action,
|
49
|
+
'target-properties': properties.label,
|
50
|
+
'value': properties.value,
|
51
|
+
'interaction-type': properties.noninteraction
|
52
|
+
});
|
53
|
+
|
54
|
+
});
|
55
|
+
}]);
|
56
|
+
|
57
|
+
})(angular);
|
@@ -0,0 +1,33 @@
|
|
1
|
+
/**
|
2
|
+
* @license Angulartics v0.15.19
|
3
|
+
* (c) 2013 Luis Farzati http://luisfarzati.github.io/angulartics
|
4
|
+
* License: MIT
|
5
|
+
*/
|
6
|
+
(function(angular) {
|
7
|
+
'use strict';
|
8
|
+
|
9
|
+
/**
|
10
|
+
* @ngdoc overview
|
11
|
+
* @name angulartics.kissmetrics
|
12
|
+
* Enables analytics support for KISSmetrics (http://kissmetrics.com)
|
13
|
+
*/
|
14
|
+
angular.module('angulartics.kissmetrics', ['angulartics'])
|
15
|
+
.config(['$analyticsProvider', '$window', function ($analyticsProvider, $window) {
|
16
|
+
|
17
|
+
// KM already supports buffered invocations so we don't need
|
18
|
+
// to wrap these inside angulartics.waitForVendorApi
|
19
|
+
|
20
|
+
// Creates the _kqm array if it doesn't exist already
|
21
|
+
// Useful if you want to load angulartics before kissmetrics
|
22
|
+
$window._kmq = _kmq || [];
|
23
|
+
|
24
|
+
$analyticsProvider.registerPageTrack(function (path) {
|
25
|
+
$window._kmq.push(['record', 'Pageview', { 'Page': path }]);
|
26
|
+
});
|
27
|
+
|
28
|
+
$analyticsProvider.registerEventTrack(function (action, properties) {
|
29
|
+
$window._kmq.push(['record', action, properties]);
|
30
|
+
});
|
31
|
+
|
32
|
+
}]);
|
33
|
+
})(angular);
|
@@ -0,0 +1,47 @@
|
|
1
|
+
/**
|
2
|
+
* @license Angulartics v0.15.19
|
3
|
+
* (c) 2013 Luis Farzati http://luisfarzati.github.io/angulartics
|
4
|
+
* Contributed by http://github.com/L42y
|
5
|
+
* License: MIT
|
6
|
+
*/
|
7
|
+
(function(angular) {
|
8
|
+
'use strict';
|
9
|
+
|
10
|
+
/**
|
11
|
+
* @ngdoc overview
|
12
|
+
* @name angulartics.mixpanel
|
13
|
+
* Enables analytics support for Mixpanel (http://mixpanel.com)
|
14
|
+
*/
|
15
|
+
angular.module('angulartics.mixpanel', ['angulartics'])
|
16
|
+
.config(['$analyticsProvider', function ($analyticsProvider) {
|
17
|
+
angulartics.waitForVendorApi('mixpanel', 500, '__loaded', function (mixpanel) {
|
18
|
+
$analyticsProvider.registerPageTrack(function (path) {
|
19
|
+
mixpanel.track( "Page Viewed", { "page": path } );
|
20
|
+
});
|
21
|
+
});
|
22
|
+
|
23
|
+
angulartics.waitForVendorApi('mixpanel', 500, '__loaded', function (mixpanel) {
|
24
|
+
$analyticsProvider.registerEventTrack(function (action, properties) {
|
25
|
+
mixpanel.track(action, properties);
|
26
|
+
});
|
27
|
+
});
|
28
|
+
|
29
|
+
angulartics.waitForVendorApi('mixpanel', 500, function (mixpanel) {
|
30
|
+
$analyticsProvider.registerSetUsername(function (userId) {
|
31
|
+
mixpanel.identify(userId);
|
32
|
+
});
|
33
|
+
});
|
34
|
+
|
35
|
+
angulartics.waitForVendorApi('mixpanel', 500, function (mixpanel) {
|
36
|
+
$analyticsProvider.registerSetUserProperties(function (properties) {
|
37
|
+
mixpanel.people.set(properties);
|
38
|
+
});
|
39
|
+
});
|
40
|
+
|
41
|
+
angulartics.waitForVendorApi('mixpanel', 500, function (mixpanel) {
|
42
|
+
$analyticsProvider.registerSetUserPropertiesOnce(function (properties) {
|
43
|
+
mixpanel.people.set_once(properties);
|
44
|
+
});
|
45
|
+
});
|
46
|
+
}]);
|
47
|
+
})(angular);
|
@@ -0,0 +1,50 @@
|
|
1
|
+
/**
|
2
|
+
* @license Angulartics v0.15.19
|
3
|
+
* (c) 2013 Luis Farzati http://luisfarzati.github.io/angulartics
|
4
|
+
* Piwik 2.1.x update contributed by http://github.com/highskillz
|
5
|
+
* License: MIT
|
6
|
+
*/
|
7
|
+
(function(angular) {
|
8
|
+
'use strict';
|
9
|
+
|
10
|
+
/**
|
11
|
+
* @ngdoc overview
|
12
|
+
* @name angulartics.piwik
|
13
|
+
* Enables analytics support for Piwik (http://piwik.org/docs/tracking-api/)
|
14
|
+
*/
|
15
|
+
angular.module('angulartics.piwik', ['angulartics'])
|
16
|
+
.config(['$analyticsProvider',
|
17
|
+
function($analyticsProvider) {
|
18
|
+
|
19
|
+
// Piwik seems to suppors buffered invocations so we don't need
|
20
|
+
// to wrap these inside angulartics.waitForVendorApi
|
21
|
+
|
22
|
+
$analyticsProvider.settings.trackRelativePath = true;
|
23
|
+
|
24
|
+
$analyticsProvider.registerPageTrack(function(path) {
|
25
|
+
if (window._paq) {
|
26
|
+
_paq.push(['setCustomUrl', path]);
|
27
|
+
_paq.push(['trackPageView']);
|
28
|
+
}
|
29
|
+
});
|
30
|
+
|
31
|
+
$analyticsProvider.registerEventTrack(function(action, properties) {
|
32
|
+
// GA requires that eventValue be an integer, see:
|
33
|
+
// https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#eventValue
|
34
|
+
// https://github.com/luisfarzati/angulartics/issues/81
|
35
|
+
if (properties.value) {
|
36
|
+
var parsed = parseInt(properties.value, 10);
|
37
|
+
properties.value = isNaN(parsed) ? 0 : parsed;
|
38
|
+
}
|
39
|
+
console.warn('Piwik doesn\'t support event tracking -- silently ignored.');
|
40
|
+
console.warn('\t action\t[%s]', action);
|
41
|
+
console.warn('\t category\t[%s]', properties.category);
|
42
|
+
console.warn('\t label\t[%s]', properties.label);
|
43
|
+
console.warn('\t value\t[%s]', properties.value);
|
44
|
+
console.warn('\t noninteraction\t[%s]', properties.noninteraction);
|
45
|
+
console.warn('');
|
46
|
+
});
|
47
|
+
|
48
|
+
}
|
49
|
+
]);
|
50
|
+
})(angular);
|
@@ -0,0 +1,47 @@
|
|
1
|
+
/**
|
2
|
+
* @license Angulartics v0.15.19
|
3
|
+
* (c) 2013 Luis Farzati http://luisfarzati.github.io/angulartics
|
4
|
+
* License: MIT
|
5
|
+
*/
|
6
|
+
(function (angular) {
|
7
|
+
'use strict';
|
8
|
+
|
9
|
+
/**
|
10
|
+
* @ngdoc overview
|
11
|
+
* @name angulartics.scroll
|
12
|
+
* Provides an implementation of jQuery Waypoints (http://imakewebthings.com/jquery-waypoints/)
|
13
|
+
* for use as a valid DOM event in analytics-on.
|
14
|
+
*/
|
15
|
+
angular.module('angulartics.scroll', ['angulartics'])
|
16
|
+
.directive('analyticsOn', ['$analytics', function ($analytics) {
|
17
|
+
function isProperty(name) {
|
18
|
+
return name.substr(0, 8) === 'scrollby';
|
19
|
+
}
|
20
|
+
function cast(value) {
|
21
|
+
if (['', 'true', 'false'].indexOf(value) > -1) {
|
22
|
+
return value.replace('', 'true') === 'true';
|
23
|
+
}
|
24
|
+
return value;
|
25
|
+
}
|
26
|
+
|
27
|
+
return {
|
28
|
+
restrict: 'A',
|
29
|
+
priority: 5,
|
30
|
+
scope: false,
|
31
|
+
link: function ($scope, $element, $attrs) {
|
32
|
+
if ($attrs.analyticsOn !== 'scrollby') return;
|
33
|
+
|
34
|
+
var properties = { continuous: false, triggerOnce: true };
|
35
|
+
angular.forEach($attrs.$attr, function(attr, name) {
|
36
|
+
if (isProperty(attr)) {
|
37
|
+
properties[name.slice(8,9).toLowerCase()+name.slice(9)] = cast($attrs[name]);
|
38
|
+
}
|
39
|
+
});
|
40
|
+
|
41
|
+
$element.waypoint(function () {
|
42
|
+
$element.triggerHandler('scrollby');
|
43
|
+
}, properties);
|
44
|
+
}
|
45
|
+
};
|
46
|
+
}]);
|
47
|
+
})(angular);
|
@@ -0,0 +1,36 @@
|
|
1
|
+
/**
|
2
|
+
* @license Angulartics v0.15.19
|
3
|
+
* (c) 2013 Luis Farzati http://luisfarzati.github.io/angulartics
|
4
|
+
* License: MIT
|
5
|
+
*/
|
6
|
+
(function(angular) {
|
7
|
+
'use strict';
|
8
|
+
|
9
|
+
/**
|
10
|
+
* @ngdoc overview
|
11
|
+
* @name angulartics.segment.io
|
12
|
+
* Enables analytics support for Segment.io (http://segment.io)
|
13
|
+
*/
|
14
|
+
angular.module('angulartics.segment.io', ['angulartics'])
|
15
|
+
.config(['$analyticsProvider', function ($analyticsProvider) {
|
16
|
+
$analyticsProvider.registerPageTrack(function (path) {
|
17
|
+
try {
|
18
|
+
analytics.page(path);
|
19
|
+
} catch (e) {
|
20
|
+
if (!(e instanceof ReferenceError)) {
|
21
|
+
throw e;
|
22
|
+
}
|
23
|
+
}
|
24
|
+
});
|
25
|
+
|
26
|
+
$analyticsProvider.registerEventTrack(function (action, properties) {
|
27
|
+
try {
|
28
|
+
analytics.track(action, properties);
|
29
|
+
} catch (e) {
|
30
|
+
if (!(e instanceof ReferenceError)) {
|
31
|
+
throw e;
|
32
|
+
}
|
33
|
+
}
|
34
|
+
});
|
35
|
+
}]);
|
36
|
+
})(angular);
|
@@ -0,0 +1,34 @@
|
|
1
|
+
/**
|
2
|
+
* @license Angulartics v0.15.19
|
3
|
+
* (c) 2013 Luis Farzati http://luisfarzati.github.io/angulartics
|
4
|
+
* License: MIT
|
5
|
+
*/
|
6
|
+
(function (angular) {
|
7
|
+
'use strict';
|
8
|
+
|
9
|
+
/**
|
10
|
+
* @ngdoc overview
|
11
|
+
* @name angulartics.splunk
|
12
|
+
* Enables analytics support for with custom collection backend API
|
13
|
+
* using (sp.js as described in http://blogs.splunk.com/2013/10/17/still-using-3rd-party-web-analytics-providers-build-your-own-using-splunk/)
|
14
|
+
*/
|
15
|
+
angular.module('angulartics.splunk', ['angulartics'])
|
16
|
+
.config(['$analyticsProvider', function ($analyticsProvider) {
|
17
|
+
|
18
|
+
var errorFunction = function(){
|
19
|
+
throw "Define sp ";
|
20
|
+
};
|
21
|
+
|
22
|
+
var _sp = window.sp || { pageview: errorFunction, track :errorFunction};
|
23
|
+
|
24
|
+
$analyticsProvider.registerPageTrack(function (path) {
|
25
|
+
_sp.pageview(path);
|
26
|
+
});
|
27
|
+
|
28
|
+
$analyticsProvider.registerEventTrack(function (action, properties) {
|
29
|
+
_sp.track(action, properties);
|
30
|
+
});
|
31
|
+
|
32
|
+
}]);
|
33
|
+
})(angular);
|
34
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
/**
|
2
|
+
* @license Angulartics v0.15.19
|
3
|
+
* (c) 2013 Luis Farzati http://luisfarzati.github.io/angulartics
|
4
|
+
* License: MIT
|
5
|
+
*/
|
6
|
+
(function(angular) {
|
7
|
+
'use strict';
|
8
|
+
|
9
|
+
/**
|
10
|
+
* @ngdoc overview
|
11
|
+
* @name angulartics.woopra
|
12
|
+
* Enables analytics support for Woopra (http://www.woopra.com)
|
13
|
+
*/
|
14
|
+
angular.module('angulartics.woopra', ['angulartics'])
|
15
|
+
.config(['$analyticsProvider', function ($analyticsProvider) {
|
16
|
+
$analyticsProvider.registerPageTrack(function (path) {
|
17
|
+
woopra.track('pv', {
|
18
|
+
url: path
|
19
|
+
});
|
20
|
+
});
|
21
|
+
|
22
|
+
$analyticsProvider.registerEventTrack(function (action, properties) {
|
23
|
+
woopra.track(action, properties);
|
24
|
+
});
|
25
|
+
}]);
|
26
|
+
})(angular);
|
@@ -0,0 +1,213 @@
|
|
1
|
+
/**
|
2
|
+
* @license Angulartics v0.15.19
|
3
|
+
* (c) 2013 Luis Farzati http://luisfarzati.github.io/angulartics
|
4
|
+
* License: MIT
|
5
|
+
*/
|
6
|
+
(function(angular, analytics) {
|
7
|
+
'use strict';
|
8
|
+
|
9
|
+
var angulartics = window.angulartics || (window.angulartics = {});
|
10
|
+
angulartics.waitForVendorApi = function (objectName, delay, containsField, registerFn) {
|
11
|
+
if (!registerFn) { registerFn = containsField; containsField = undefined; }
|
12
|
+
if (!Object.prototype.hasOwnProperty.call(window, objectName) || (containsField !== undefined && window[objectName][containsField] === undefined)) {
|
13
|
+
setTimeout(function () { angulartics.waitForVendorApi(objectName, delay, containsField, registerFn); }, delay);
|
14
|
+
}
|
15
|
+
else {
|
16
|
+
registerFn(window[objectName]);
|
17
|
+
}
|
18
|
+
};
|
19
|
+
|
20
|
+
/**
|
21
|
+
* @ngdoc overview
|
22
|
+
* @name angulartics
|
23
|
+
*/
|
24
|
+
angular.module('angulartics', [])
|
25
|
+
.provider('$analytics', function () {
|
26
|
+
var settings = {
|
27
|
+
pageTracking: {
|
28
|
+
autoTrackFirstPage: true,
|
29
|
+
autoTrackVirtualPages: true,
|
30
|
+
trackRelativePath: false,
|
31
|
+
autoBasePath: false,
|
32
|
+
basePath: '',
|
33
|
+
bufferFlushDelay: 1000
|
34
|
+
},
|
35
|
+
eventTracking: {
|
36
|
+
bufferFlushDelay: 1000
|
37
|
+
}
|
38
|
+
};
|
39
|
+
|
40
|
+
var cache = {
|
41
|
+
pageviews: [],
|
42
|
+
events: [],
|
43
|
+
setUsername: [],
|
44
|
+
setUserProperties: [],
|
45
|
+
setUserPropertiesOnce: []
|
46
|
+
};
|
47
|
+
|
48
|
+
var bufferedPageTrack = function (path) {
|
49
|
+
cache.pageviews.push(path);
|
50
|
+
};
|
51
|
+
var bufferedEventTrack = function (event, properties) {
|
52
|
+
cache.events.push({name: event, properties: properties});
|
53
|
+
};
|
54
|
+
var bufferedSetUsername = function (name) {
|
55
|
+
cache.setUsername.push(name);
|
56
|
+
};
|
57
|
+
var bufferedSetUserProperties = function (properties) {
|
58
|
+
cache.setUserProperties.push(properties);
|
59
|
+
};
|
60
|
+
var bufferedSetUserPropertiesOnce = function (properties) {
|
61
|
+
cache.setUserPropertiesOnce.push(properties);
|
62
|
+
};
|
63
|
+
|
64
|
+
var api = {
|
65
|
+
settings: settings,
|
66
|
+
pageTrack: bufferedPageTrack,
|
67
|
+
eventTrack: bufferedEventTrack,
|
68
|
+
setUsername: bufferedSetUsername,
|
69
|
+
setUserProperties: bufferedSetUserProperties,
|
70
|
+
setUserPropertiesOnce: bufferedSetUserPropertiesOnce
|
71
|
+
};
|
72
|
+
|
73
|
+
var registerPageTrack = function (fn) {
|
74
|
+
api.pageTrack = fn;
|
75
|
+
angular.forEach(cache.pageviews, function (path, index) {
|
76
|
+
setTimeout(function () { api.pageTrack(path); }, index * settings.pageTracking.bufferFlushDelay);
|
77
|
+
});
|
78
|
+
};
|
79
|
+
var registerEventTrack = function (fn) {
|
80
|
+
api.eventTrack = fn;
|
81
|
+
angular.forEach(cache.events, function (event, index) {
|
82
|
+
setTimeout(function () { api.eventTrack(event.name, event.properties); }, index * settings.eventTracking.bufferFlushDelay);
|
83
|
+
});
|
84
|
+
};
|
85
|
+
var registerSetUsername = function (fn) {
|
86
|
+
api.setUsername = fn;
|
87
|
+
angular.forEach(cache.setUsername, function (name, index) {
|
88
|
+
setTimeout(function () { api.setUsername(name); }, index * settings.pageTracking.bufferFlushDelay);
|
89
|
+
});
|
90
|
+
};
|
91
|
+
var registerSetUserProperties = function (fn) {
|
92
|
+
api.setUserProperties = fn;
|
93
|
+
angular.forEach(cache.setUserProperties, function (properties, index) {
|
94
|
+
setTimeout(function () { api.setUserProperties(properties); }, index * settings.pageTracking.bufferFlushDelay);
|
95
|
+
});
|
96
|
+
};
|
97
|
+
var registerSetUserPropertiesOnce = function (fn) {
|
98
|
+
api.setUserPropertiesOnce = fn;
|
99
|
+
angular.forEach(cache.setUserPropertiesOnce, function (properties, index) {
|
100
|
+
setTimeout(function () { api.setUserPropertiesOnce(properties); }, index * settings.pageTracking.bufferFlushDelay);
|
101
|
+
});
|
102
|
+
};
|
103
|
+
|
104
|
+
return {
|
105
|
+
$get: function() { return api; },
|
106
|
+
settings: settings,
|
107
|
+
virtualPageviews: function (value) { this.settings.pageTracking.autoTrackVirtualPages = value; },
|
108
|
+
firstPageview: function (value) { this.settings.pageTracking.autoTrackFirstPage = value; },
|
109
|
+
withBase: function (value) { this.settings.pageTracking.basePath = (value) ? angular.element('base').attr('href').slice(0, -1) : ''; },
|
110
|
+
withAutoBase: function (value) { this.settings.pageTracking.autoBasePath = value; },
|
111
|
+
registerPageTrack: registerPageTrack,
|
112
|
+
registerEventTrack: registerEventTrack,
|
113
|
+
registerSetUsername: registerSetUsername,
|
114
|
+
registerSetUserProperties: registerSetUserProperties,
|
115
|
+
registerSetUserPropertiesOnce: registerSetUserPropertiesOnce
|
116
|
+
};
|
117
|
+
})
|
118
|
+
|
119
|
+
.run(['$rootScope', '$location', '$window', '$analytics', '$injector', function ($rootScope, $location, $window, $analytics, $injector) {
|
120
|
+
|
121
|
+
|
122
|
+
if ($analytics.settings.pageTracking.autoTrackFirstPage) {
|
123
|
+
/* Only track the 'first page' if there are no routes or states on the page */
|
124
|
+
var noRoutesOrStates = true;
|
125
|
+
if ($injector.has('$route')) {
|
126
|
+
var $route = $injector.get('$route');
|
127
|
+
for (var route in $route.routes) {
|
128
|
+
noRoutesOrStates = false;
|
129
|
+
break;
|
130
|
+
}
|
131
|
+
} else if ($injector.has('$state')) {
|
132
|
+
var $state = $injector.get('$state');
|
133
|
+
for (var state in $state.states) {
|
134
|
+
noRoutesOrStates = false;
|
135
|
+
break;
|
136
|
+
}
|
137
|
+
} else {
|
138
|
+
noRoutesOrStates = false;
|
139
|
+
}
|
140
|
+
if (noRoutesOrStates) {
|
141
|
+
if ($analytics.settings.pageTracking.autoBasePath) {
|
142
|
+
$analytics.settings.pageTracking.basePath = $window.location.pathname;
|
143
|
+
}
|
144
|
+
if ($analytics.settings.trackRelativePath) {
|
145
|
+
var url = $analytics.settings.pageTracking.basePath + $location.url();
|
146
|
+
$analytics.pageTrack(url);
|
147
|
+
} else {
|
148
|
+
$analytics.pageTrack($location.absUrl());
|
149
|
+
}
|
150
|
+
}
|
151
|
+
}
|
152
|
+
if ($analytics.settings.pageTracking.autoTrackVirtualPages) {
|
153
|
+
if ($analytics.settings.pageTracking.autoBasePath) {
|
154
|
+
/* Add the full route to the base. */
|
155
|
+
$analytics.settings.pageTracking.basePath = $window.location.pathname + "#";
|
156
|
+
}
|
157
|
+
if ($injector.has('$route')) {
|
158
|
+
$rootScope.$on('$routeChangeSuccess', function (event, current) {
|
159
|
+
if (current && (current.$$route||current).redirectTo) return;
|
160
|
+
var url = $analytics.settings.pageTracking.basePath + $location.url();
|
161
|
+
$analytics.pageTrack(url);
|
162
|
+
});
|
163
|
+
}
|
164
|
+
if ($injector.has('$state')) {
|
165
|
+
$rootScope.$on('$stateChangeSuccess', function (event, current) {
|
166
|
+
var url = $analytics.settings.pageTracking.basePath + $location.url();
|
167
|
+
$analytics.pageTrack(url);
|
168
|
+
});
|
169
|
+
}
|
170
|
+
}
|
171
|
+
}])
|
172
|
+
|
173
|
+
.directive('analyticsOn', ['$analytics', function ($analytics) {
|
174
|
+
function isCommand(element) {
|
175
|
+
return ['a:','button:','button:button','button:submit','input:button','input:submit'].indexOf(
|
176
|
+
element.tagName.toLowerCase()+':'+(element.type||'')) >= 0;
|
177
|
+
}
|
178
|
+
|
179
|
+
function inferEventType(element) {
|
180
|
+
if (isCommand(element)) return 'click';
|
181
|
+
return 'click';
|
182
|
+
}
|
183
|
+
|
184
|
+
function inferEventName(element) {
|
185
|
+
if (isCommand(element)) return element.innerText || element.value;
|
186
|
+
return element.id || element.name || element.tagName;
|
187
|
+
}
|
188
|
+
|
189
|
+
function isProperty(name) {
|
190
|
+
return name.substr(0, 9) === 'analytics' && ['On', 'Event'].indexOf(name.substr(9)) === -1;
|
191
|
+
}
|
192
|
+
|
193
|
+
return {
|
194
|
+
restrict: 'A',
|
195
|
+
scope: false,
|
196
|
+
link: function ($scope, $element, $attrs) {
|
197
|
+
var eventType = $attrs.analyticsOn || inferEventType($element[0]);
|
198
|
+
|
199
|
+
angular.element($element[0]).bind(eventType, function () {
|
200
|
+
var eventName = $attrs.analyticsEvent || inferEventName($element[0]);
|
201
|
+
var properties = {};
|
202
|
+
angular.forEach($attrs.$attr, function(attr, name) {
|
203
|
+
if (isProperty(name)) {
|
204
|
+
properties[name.slice(9).toLowerCase()] = $attrs[name];
|
205
|
+
}
|
206
|
+
});
|
207
|
+
|
208
|
+
$analytics.eventTrack(eventName, properties);
|
209
|
+
});
|
210
|
+
}
|
211
|
+
};
|
212
|
+
}]);
|
213
|
+
})(angular);
|
metadata
ADDED
@@ -0,0 +1,117 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: angulartics-rails
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.15.19
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Ben Augarten
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2014-06-23 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: bundler
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '1.3'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.3'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rake
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: railties
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '4.1'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '4.1'
|
62
|
+
description: angulartics packaged in gem form
|
63
|
+
email:
|
64
|
+
- b.augarten@gmail.com
|
65
|
+
executables: []
|
66
|
+
extensions: []
|
67
|
+
extra_rdoc_files: []
|
68
|
+
files:
|
69
|
+
- .gitignore
|
70
|
+
- Gemfile
|
71
|
+
- LICENSE.txt
|
72
|
+
- README.md
|
73
|
+
- Rakefile
|
74
|
+
- angulartics-rails.gemspec
|
75
|
+
- lib/angulartics/rails.rb
|
76
|
+
- lib/angulartics/rails/version.rb
|
77
|
+
- vendor/assets/javascript/angulartics-adobe.js
|
78
|
+
- vendor/assets/javascript/angulartics-chartbeat.js
|
79
|
+
- vendor/assets/javascript/angulartics-flurry.js
|
80
|
+
- vendor/assets/javascript/angulartics-ga-cordova.js
|
81
|
+
- vendor/assets/javascript/angulartics-ga.js
|
82
|
+
- vendor/assets/javascript/angulartics-gtm.js
|
83
|
+
- vendor/assets/javascript/angulartics-kissmetrics.js
|
84
|
+
- vendor/assets/javascript/angulartics-mixpanel.js
|
85
|
+
- vendor/assets/javascript/angulartics-piwik.js
|
86
|
+
- vendor/assets/javascript/angulartics-scroll.js
|
87
|
+
- vendor/assets/javascript/angulartics-segmentio.js
|
88
|
+
- vendor/assets/javascript/angulartics-splunk.js
|
89
|
+
- vendor/assets/javascript/angulartics-woopra.js
|
90
|
+
- vendor/assets/javascript/angulartics.js
|
91
|
+
homepage: ''
|
92
|
+
licenses:
|
93
|
+
- MIT
|
94
|
+
post_install_message:
|
95
|
+
rdoc_options: []
|
96
|
+
require_paths:
|
97
|
+
- lib
|
98
|
+
- vendor
|
99
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
100
|
+
none: false
|
101
|
+
requirements:
|
102
|
+
- - ! '>='
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
106
|
+
none: false
|
107
|
+
requirements:
|
108
|
+
- - ! '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
requirements: []
|
112
|
+
rubyforge_project:
|
113
|
+
rubygems_version: 1.8.24
|
114
|
+
signing_key:
|
115
|
+
specification_version: 3
|
116
|
+
summary: Add analytics to your angularjs application
|
117
|
+
test_files: []
|