ua-google-analytics-rails 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d0b7457b09b8246e0abe9775ccfba083c88e324c
4
+ data.tar.gz: a86f20da16f5596a659a6def9368e3390c4ef6e8
5
+ SHA512:
6
+ metadata.gz: 89c5a81dbfc6e0dfbcadac5106db3872cb8db8c490d914f798d7a2047db7183d7428f68aaa696a10ae4c555bcec988f20cfe28f193d675c52f8f7547cf70cc49
7
+ data.tar.gz: cf71fbd291e672b44f1203df38b83832acc2af0d2cebcaa43643f4a4fab7e7538d40ed2176eb8af749a2d681b90473dacc48886194ba0ccefa6f856ea227c8d9
@@ -0,0 +1,7 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ .yardoc
6
+ doc
7
+ .DS_Store
@@ -0,0 +1,23 @@
1
+ language: ruby
2
+ bundler_args: --without development
3
+ rvm:
4
+ - 1.9.2
5
+ - 1.9.3
6
+ - 2.0.0
7
+ - 2.1
8
+ - 2.2.1
9
+ - rbx-2
10
+ - ruby-head
11
+ matrix:
12
+ include:
13
+ - rvm: jruby-18mode
14
+ env: JRUBY_OPTS="$JRUBY_OPTS --debug"
15
+ - rvm: jruby-19mode
16
+ env: JRUBY_OPTS="$JRUBY_OPTS --debug"
17
+ - rvm: jruby-head
18
+ env: JRUBY_OPTS="$JRUBY_OPTS --debug"
19
+ allow_failures:
20
+ - rvm: jruby-head
21
+ - rvm: rbx-2
22
+ - rvm: ruby-head
23
+ fast_finish: true
@@ -0,0 +1 @@
1
+ -m markdown --no-private --plugin rails
@@ -0,0 +1,42 @@
1
+ 1.0.0
2
+ =====
3
+
4
+ * Converting to Universal Analytics
5
+
6
+ 0.0.6
7
+ =====
8
+
9
+ * Add support for sending `custom_vars` in proper sequence while doing `analytics_init` [PR#20](https://github.com/bgarret/google-analytics-rails/pull/20) (thanks to @yonda).
10
+ * Make switching between DoubleClick and default `ga.js` simpler. [PR#23](https://github.com/bgarret/google-analytics-rails/pull/23) (thanks to @rafamanzo).
11
+ * Start testing the library regularly against Ruby 1.8.7, 1.9.2, 1.9.3, 2.0.0, 2.1, JRuby-1.8mode and JRuby-1.9mode.
12
+
13
+ 0.0.5
14
+ =====
15
+
16
+ * Enhanced link attribution.
17
+
18
+ 0.0.4
19
+ =====
20
+
21
+ * Support for custom analytics script src (DoubleClick is supported).
22
+ * Add a `:domain` option to `analytics_init`.
23
+
24
+ 0.0.3
25
+ =====
26
+
27
+ * Fix #8, the directives were in the wrong order in development mode (thanks to @garnould).
28
+ * Add support for the `_anonymizeIp` event (thanks to @rmoriz).
29
+ * Add support for the `_deleteCustomVar` directive (thanks to @eirc).
30
+
31
+ 0.0.2
32
+ =====
33
+
34
+ * Documentation updates
35
+ * Custom variable support (thanks to @asm).
36
+ * `_setSiteSpeedSampleRate()` method support (thanks to @nikosd).
37
+ * Event collection `size` method (thanks to @brundage).
38
+
39
+ 0.0.1
40
+ =====
41
+
42
+ Initial release.
data/Gemfile ADDED
@@ -0,0 +1,24 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem 'rake'
4
+ gem 'yard'
5
+ gem 'i18n', '< 0.7.0'
6
+ gem 'activesupport', "~> 3.0"
7
+
8
+ group :development do
9
+ gem 'pry'
10
+ platforms :ruby_19, :ruby_20, :ruby_21 do
11
+ gem 'pry-stack_explorer'
12
+ gem 'redcarpet'
13
+ end
14
+ end
15
+
16
+ group :test do
17
+ gem 'test-unit'
18
+ gem 'json'
19
+ gem "codeclimate-test-reporter", :require => nil
20
+ end
21
+
22
+ # Specify your gem's dependencies in google-analytics-rails.gemspec
23
+ gemspec
24
+
@@ -0,0 +1,107 @@
1
+ [![Code Climate](https://codeclimate.com/github/spodlecki/ua-google-analytics-rails/badges/gpa.svg)](https://codeclimate.com/github/spodlecki/ua-google-analytics-rails)
2
+ [![Test Coverage](https://codeclimate.com/github/spodlecki/ua-google-analytics-rails/badges/coverage.svg)](https://codeclimate.com/github/spodlecki/ua-google-analytics-rails/coverage)
3
+ [![Build Status](https://travis-ci.org/spodlecki/ua-google-analytics-rails.svg)](https://travis-ci.org/spodlecki/ua-google-analytics-rails)
4
+
5
+
6
+ Fast Google Analytics setup for Rails using Universal Analytics code. This gem is mostly intended for small to medium websites with a simple analytics strategy.
7
+
8
+ **Note:**
9
+
10
+ Original [Google Analytics Rails Project](https://github.com/bgarret/google-analytics-rails) has been MIA to update to Universal Analytics. The project is essentially a direct port from the old repo.
11
+
12
+
13
+ Installation
14
+ ============
15
+
16
+ Add the following to your `Gemfile`:
17
+
18
+ gem 'ua-google-analytics-rails'
19
+
20
+ Then run:
21
+
22
+ bundle install
23
+
24
+ Upgrade Notes
25
+ ============
26
+
27
+ __Upgrading this gem from 0.0.6?__
28
+
29
+ Use `analytics_init` to send submissions to Analytics if you are using multiple trackers. You can supply a name to tracker by passing `:name` option.
30
+
31
+ **GoogleAnalytics::Events::SetAllowLinker** is no longer supported as an external variable being set. You can submit as normal in the `:add_events` array, but using the new `:setup` config is preferable so no extra array searching has to happen.
32
+
33
+ **GoogleAnalytics::Events::SetCustomVar** is no longer supported by Universal Analytics. These have been changed to SetCustomDimension & SetCustomMetric. By default if you use SetCustomVar, it applies as a Dimension
34
+
35
+ **GoogleAnalytics::Events::DeleteCustomVar** has been removed
36
+
37
+ **Added Event Helpers**
38
+
39
+ - GoogleAnalytics::Events::ExperimentId
40
+ - GoogleAnalytics::Events::ExperimentVariation
41
+
42
+ **TODO:** Add Double Click Snippet Support
43
+ While the code is there, and it looks like it is simply changing the end path to the JS, this feature has not been tested.
44
+
45
+ **Ruby 1.8.7 Support** While it should work on Ruby 1.8.7. No longer running test suite for it for CodeClimate Gem Requirements.
46
+
47
+
48
+ Documentation
49
+ =============
50
+
51
+ Example configurations
52
+ ======================
53
+
54
+ Production only
55
+ ---------------
56
+
57
+ `config/environments/production.rb`:
58
+
59
+ # replace this with your tracker code
60
+ GA.tracker = "UA-xxxxxx-x"
61
+
62
+ `app/views/layout/application.html.erb`, in the `<head>` tag :
63
+
64
+ <%= analytics_init if Rails.env.production? %>
65
+
66
+ With DoubleClick instead of vanilla Google Analytics script
67
+ -----------------------------------------------------------
68
+
69
+ `config/environments/production.rb`:
70
+
71
+ # replace this with your tracker code
72
+ GA.tracker = "UA-xxxxxx-x"
73
+ GA.script_source = :doubleclick
74
+
75
+ `app/views/layout/application.html.erb`, in the `<head>` tag :
76
+
77
+ <%= analytics_init if Rails.env.production? %>
78
+
79
+ Different accounts for development and production
80
+ -------------------------------------------------
81
+
82
+ `config/environments/production.rb`:
83
+
84
+ # replace this with your production tracker code
85
+ GA.tracker = "UA-xxxxxx-x"
86
+
87
+ `config/environments/development.rb`:
88
+
89
+ # replace this with your development tracker code
90
+ GA.tracker = "UA-xxxxxx-x"
91
+
92
+ `app/views/layout/application.html.erb`, in the `<head>` tag :
93
+
94
+ <%= analytics_init :local => Rails.env.development? %>
95
+
96
+ License
97
+ =======
98
+
99
+ [ua-google-analytics-rails](https://github.com/spodlecki/ua-google-analytics-rails) is released under the MIT license:
100
+
101
+ * http://www.opensource.org/licenses/MIT
102
+
103
+ Original Repo:
104
+
105
+ [google-analytics-rails](https://github.com/bgarret/google-analytics-rails) is released under the MIT license:
106
+
107
+ * http://www.opensource.org/licenses/MIT
@@ -0,0 +1,12 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require 'rake/testtask'
5
+
6
+ Rake::TestTask.new do |t|
7
+ t.libs << "test"
8
+ t.test_files = FileList['test/**/*_test.rb']
9
+ t.verbose = true
10
+ end
11
+
12
+ task :default => 'test'
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "google-analytics/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "ua-google-analytics-rails"
7
+ s.version = GoogleAnalytics::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Benoit Garret", "Ufuk Kayserilioglu", "Steven Podlecki"]
10
+ s.email = ["benoit.garret@gadz.org", "ufuk@paralaus.com", "s.podlecki@gmail.com"]
11
+ s.homepage = "https://github.com/spodlecki/ua-google-analytics-rails"
12
+ s.summary = %q{Rails helpers to manage google analytics tracking}
13
+ s.description = %q{Google Analytics setup for Rails using Universal Analytics code}
14
+
15
+ s.rubyforge_project = "ua-google-analytics-rails"
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+ end
@@ -0,0 +1,60 @@
1
+ # coding: utf-8
2
+
3
+ require 'google-analytics/async_tracking_queue'
4
+ require 'google-analytics/events'
5
+
6
+ module GoogleAnalytics
7
+ # @private
8
+ PLACEHOLDER_TRACKER = "UA-xxxxxx-x"
9
+ # GA sources.
10
+ # Allowing easy switch between DEFAULT and DoubleClick scripts.
11
+ # @see http://support.google.com/analytics/bin/answer.py?hl=en&answer=2444872 for more info
12
+ #
13
+ # @private
14
+ SCRIPT_SOURCES = {
15
+ :default => "'//www.google-analytics.com/analytics.js'",
16
+ :doubleclick => "'//stats.g.doubleclick.net/dc.js'",
17
+ }
18
+
19
+ # Get the current tracker id (*UA-xxxxxx-x*).
20
+ # @return [String]
21
+ def self.tracker
22
+ @@tracker ||= PLACEHOLDER_TRACKER
23
+ end
24
+
25
+ # Set the current tracker id.
26
+ # @param [String] tracker The tracker id (ie. "*UA-xxxxxx-x*").
27
+ def self.tracker=(tracker)
28
+ @@tracker = tracker
29
+ end
30
+
31
+ # @return [Boolean]
32
+ def self.valid_tracker?
33
+ tracker.nil? || tracker == "" || tracker == PLACEHOLDER_TRACKER ? false : true
34
+ end
35
+
36
+ # @return [String]
37
+ def self.script_source
38
+ @@src ||= SCRIPT_SOURCES[:default]
39
+ end
40
+
41
+ # Set the current ga src.
42
+ # @return [String]
43
+ def self.script_source=(src)
44
+ if SCRIPT_SOURCES.has_key?(src)
45
+ @@src = SCRIPT_SOURCES[src]
46
+ else
47
+ @@src = src
48
+ end
49
+ end
50
+ end
51
+
52
+ # Alias for {GoogleAnalytics}
53
+ GA = GoogleAnalytics
54
+
55
+ if defined?(Rails)
56
+ require 'google-analytics/rails/railtie'
57
+
58
+ # Alias for {GoogleAnalytics::Rails}
59
+ GAR = GoogleAnalytics::Rails
60
+ end
@@ -0,0 +1,42 @@
1
+ # coding: utf-8
2
+
3
+ module GoogleAnalytics
4
+ class AsyncTrackingQueue
5
+ def initialize
6
+ @events = []
7
+ end
8
+
9
+ def <<(event)
10
+ push(event)
11
+ end
12
+
13
+ def push(event, tracker_id = nil)
14
+ @events << renderer_for_event(event, tracker_id)
15
+ end
16
+
17
+ def to_s
18
+ <<-JAVASCRIPT
19
+ <script type="text/javascript">
20
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
21
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
22
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
23
+ })(window,document,'script',#{GoogleAnalytics.script_source},'ga');
24
+ #{@events.map { |event| event.to_s }.join("\n")}
25
+ </script>
26
+ JAVASCRIPT
27
+ end
28
+
29
+ private
30
+
31
+ def renderer_for_event(event, tracker_id)
32
+ case event
33
+ when SingleEvent then EventRenderer.new(event, tracker_id)
34
+ when Event then EventRenderer.new(event, tracker_id)
35
+ when EventCollection then EventCollectionRenderer.new(event, tracker_id)
36
+ end
37
+ end
38
+ end
39
+ end
40
+
41
+ # Alias for {GoogleAnalytics::AsyncTrackingQueue}
42
+ GAQ = GoogleAnalytics::AsyncTrackingQueue
@@ -0,0 +1,9 @@
1
+ # coding: utf-8
2
+
3
+ module GoogleAnalytics
4
+ autoload :Events, 'google-analytics/events/events'
5
+ autoload :Event, 'google-analytics/events/event'
6
+ autoload :EventRenderer, 'google-analytics/events/event_renderer'
7
+ autoload :EventCollection, 'google-analytics/events/event_collection'
8
+ autoload :EventCollectionRenderer, 'google-analytics/events/event_collection_renderer'
9
+ end
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+
3
+ module GoogleAnalytics
4
+ class Event
5
+ attr_reader :action, :name, :params
6
+
7
+ def initialize(action, name, *params)
8
+ @action = action
9
+ @name = name
10
+ @params = params
11
+ end
12
+
13
+ def single_event?
14
+ false
15
+ end
16
+ end
17
+ class SingleEvent
18
+ attr_reader :action, :name, :params
19
+ def initialize(action, *params)
20
+ @action = action
21
+ @params = params
22
+ end
23
+ def single_event?
24
+ true
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,33 @@
1
+ # coding: utf-8
2
+
3
+ module GoogleAnalytics
4
+ class EventCollection
5
+ include Enumerable
6
+
7
+ class InvalidEventError < StandardError
8
+ def initialize(non_event)
9
+ super("EventCollection#<< expects instances of Event, you passed #{non_event}")
10
+ end
11
+ end
12
+
13
+ def initialize
14
+ @events = []
15
+ end
16
+
17
+ def <<(event)
18
+ raise InvalidEventError.new(event) unless event.is_a?(Event) || event.is_a?(SingleEvent)
19
+
20
+ @events << event
21
+ end
22
+
23
+ def each
24
+ @events.each { |e| yield e }
25
+ end
26
+
27
+ def length
28
+ @events.length
29
+ end
30
+ alias_method :size, :length
31
+
32
+ end
33
+ end
@@ -0,0 +1,14 @@
1
+ # coding: utf-8
2
+
3
+ module GoogleAnalytics
4
+ class EventCollectionRenderer
5
+ def initialize(event_collection, tracker_id)
6
+ @event_collection = event_collection
7
+ @tracker_id = tracker_id
8
+ end
9
+
10
+ def to_s
11
+ @event_collection.map { |event| EventRenderer.new(event, @tracker_id).to_s }.join("\n")
12
+ end
13
+ end
14
+ end