google-analytics-rails 0.0.3 → 0.0.4
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 +1 -0
- data/CHANGELOG.markdown +6 -0
- data/README.markdown +14 -2
- data/google-analytics-rails.gemspec +2 -2
- data/lib/google-analytics-rails.rb +22 -0
- data/lib/google-analytics/async_tracking_queue.rb +3 -1
- data/lib/google-analytics/events.rb +2 -0
- data/lib/google-analytics/events/event.rb +2 -0
- data/lib/google-analytics/events/event_collection.rb +2 -0
- data/lib/google-analytics/events/event_collection_renderer.rb +2 -0
- data/lib/google-analytics/events/event_renderer.rb +2 -0
- data/lib/google-analytics/events/events.rb +2 -0
- data/lib/google-analytics/rails/railtie.rb +2 -0
- data/lib/google-analytics/rails/view_helpers.rb +6 -1
- data/lib/google-analytics/version.rb +3 -1
- data/test/async_tracking_queue_test.rb +34 -0
- data/test/rails/views_helper_test.rb +23 -0
- metadata +10 -4
data/.gitignore
CHANGED
data/CHANGELOG.markdown
CHANGED
data/README.markdown
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
Fast Google Analytics setup for Rails. This gem is mostly intended for small to medium websites with a simple analytics strategy.
|
1
|
+
Fast Google Analytics setup for Rails 3. This gem is mostly intended for small to medium websites with a simple analytics strategy.
|
2
2
|
|
3
3
|
Installation
|
4
4
|
============
|
@@ -31,6 +31,18 @@ Production only
|
|
31
31
|
|
32
32
|
<%= analytics_init if Rails.env.production? %>
|
33
33
|
|
34
|
+
With DoubleClick instead of vanilla Google Analytics script
|
35
|
+
-----------------------------------------------------------
|
36
|
+
|
37
|
+
`config/environments/production.rb`:
|
38
|
+
|
39
|
+
# replace this with your tracker code
|
40
|
+
GA.tracker = "UA-xxxxxx-x"
|
41
|
+
GA.source_script = "('https:' == document.location.protocol ? 'https://' : 'http://') + 'stats.g.doubleclick.net/dc.js'"
|
42
|
+
|
43
|
+
`app/views/layout/application.html.erb`, in the `<head>` tag :
|
44
|
+
|
45
|
+
<%= analytics_init if Rails.env.production? %>
|
34
46
|
|
35
47
|
Different accounts for development and production
|
36
48
|
-------------------------------------------------
|
@@ -52,7 +64,7 @@ Different accounts for development and production
|
|
52
64
|
License
|
53
65
|
=======
|
54
66
|
|
55
|
-
[google-analytics-rails](https://github.com/bgarret
|
67
|
+
[google-analytics-rails](https://github.com/bgarret/google-analytics-rails) is released under the MIT license:
|
56
68
|
|
57
69
|
* http://www.opensource.org/licenses/MIT
|
58
70
|
|
@@ -9,8 +9,8 @@ Gem::Specification.new do |s|
|
|
9
9
|
s.authors = ["Benoit Garret"]
|
10
10
|
s.email = ["benoit.garret@gadz.org"]
|
11
11
|
s.homepage = "https://github.com/bgarret/google-analytics-rails"
|
12
|
-
s.summary = %q{Rails helpers to manage google analytics tracking}
|
13
|
-
s.description = %q{Rails helpers to manage google analytics tracking}
|
12
|
+
s.summary = %q{Rails 3 helpers to manage google analytics tracking}
|
13
|
+
s.description = %q{Rails 3 helpers to manage google analytics tracking}
|
14
14
|
|
15
15
|
s.rubyforge_project = "google-analytics-rails"
|
16
16
|
|
@@ -1,9 +1,13 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
1
3
|
require 'google-analytics/async_tracking_queue'
|
2
4
|
require 'google-analytics/events'
|
3
5
|
|
4
6
|
module GoogleAnalytics
|
5
7
|
# @private
|
6
8
|
PLACEHOLDER_TRACKER = "UA-xxxxxx-x"
|
9
|
+
# @private
|
10
|
+
DEFAULT_SCRIPT_SOURCE = "('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'"
|
7
11
|
|
8
12
|
# Get the current tracker id (*UA-xxxxxx-x*).
|
9
13
|
# @return [String]
|
@@ -21,6 +25,24 @@ module GoogleAnalytics
|
|
21
25
|
def self.valid_tracker?
|
22
26
|
tracker.nil? || tracker == "" || tracker == PLACEHOLDER_TRACKER ? false : true
|
23
27
|
end
|
28
|
+
|
29
|
+
# Get the current ga src.
|
30
|
+
# This allows for example to use the compatible doubleclick code :
|
31
|
+
# ```
|
32
|
+
# ('https:' == document.location.protocol ? 'https://' : 'http://') + 'stats.g.doubleclick.net/dc.js'
|
33
|
+
# ```
|
34
|
+
# @see http://support.google.com/analytics/bin/answer.py?hl=en&answer=2444872 for more info
|
35
|
+
#
|
36
|
+
# @return [String]
|
37
|
+
def self.script_source
|
38
|
+
@@src ||= DEFAULT_SCRIPT_SOURCE
|
39
|
+
end
|
40
|
+
|
41
|
+
# Set the current ga src.
|
42
|
+
# @return [String]
|
43
|
+
def self.script_source=(src)
|
44
|
+
@@src = src
|
45
|
+
end
|
24
46
|
end
|
25
47
|
|
26
48
|
# Alias for {GoogleAnalytics}
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
1
3
|
module GoogleAnalytics
|
2
4
|
class AsyncTrackingQueue
|
3
5
|
def initialize
|
@@ -19,7 +21,7 @@ var _gaq = _gaq || [];
|
|
19
21
|
#{@events.map { |event| event.to_s }.join("\n")}
|
20
22
|
(function() {
|
21
23
|
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
22
|
-
ga.src =
|
24
|
+
ga.src = #{GoogleAnalytics.script_source};
|
23
25
|
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
24
26
|
})();
|
25
27
|
</script>
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
1
3
|
require 'active_support/core_ext/string/output_safety'
|
2
4
|
require 'active_support/core_ext/object/blank'
|
3
5
|
|
@@ -57,6 +59,8 @@ module GoogleAnalytics::Rails
|
|
57
59
|
# The optional virtual page view to track through {GoogleAnalytics::Events::TrackPageview}
|
58
60
|
# @option options [String] :tracker
|
59
61
|
# The tracker to use instead of the default {GoogleAnalytics.tracker}
|
62
|
+
# @option options [String] :domain
|
63
|
+
# The domain name to track, see {GoogleAnalytics::Events::SetDomainName}
|
60
64
|
# @option options [Boolean] :anonymize
|
61
65
|
# Whether to anonymize the visitor ip or not.
|
62
66
|
# This is required for european websites and actively enforced for german ones,
|
@@ -78,6 +82,7 @@ module GoogleAnalytics::Rails
|
|
78
82
|
|
79
83
|
local = options.delete(:local) || false
|
80
84
|
anonymize = options.delete(:anonymize) || false
|
85
|
+
domain = options.delete(:domain) || (local ? "none" : "auto")
|
81
86
|
events = options.delete(:add_events) || []
|
82
87
|
events = [events] unless events.is_a?(Array)
|
83
88
|
|
@@ -87,8 +92,8 @@ module GoogleAnalytics::Rails
|
|
87
92
|
events.unshift GA::Events::TrackPageview.new(options[:page])
|
88
93
|
# anonymize if needed before tracking the page view
|
89
94
|
events.unshift GA::Events::AnonymizeIp.new if anonymize
|
95
|
+
events.unshift GA::Events::SetDomainName.new(domain)
|
90
96
|
if local
|
91
|
-
events.unshift GA::Events::SetDomainName.new('none')
|
92
97
|
events.unshift GA::Events::SetAllowLinker.new(true)
|
93
98
|
end
|
94
99
|
events.unshift GA::Events::SetAccount.new(tracker)
|
@@ -1,6 +1,10 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
3
|
class AsyncTrackingQueueTest < Test::Unit::TestCase
|
4
|
+
def teardown
|
5
|
+
GoogleAnalytics.script_source = nil
|
6
|
+
end
|
7
|
+
|
4
8
|
VALID_SNIPPET = <<-JAVASCRIPT
|
5
9
|
<script type="text/javascript">
|
6
10
|
var _gaq = _gaq || [];
|
@@ -29,4 +33,34 @@ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga
|
|
29
33
|
|
30
34
|
assert_equal(VALID_SNIPPET, gaq.to_s)
|
31
35
|
end
|
36
|
+
|
37
|
+
VALID_DOUBLECLICK_SNIPPET = <<-JAVASCRIPT
|
38
|
+
<script type="text/javascript">
|
39
|
+
var _gaq = _gaq || [];
|
40
|
+
_gaq.push(['event1',1]);
|
41
|
+
_gaq.push(['event2',2]);
|
42
|
+
_gaq.push(['t2.event1',1]);
|
43
|
+
_gaq.push(['t2.event2',2]);
|
44
|
+
(function() {
|
45
|
+
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
46
|
+
ga.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'stats.g.doubleclick.net/dc.js';
|
47
|
+
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
48
|
+
})();
|
49
|
+
</script>
|
50
|
+
JAVASCRIPT
|
51
|
+
|
52
|
+
def test_queue_renders_valid_javascript_snippit_with_custom_src
|
53
|
+
GoogleAnalytics.script_source = "('https:' == document.location.protocol ? 'https://' : 'http://') + 'stats.g.doubleclick.net/dc.js'"
|
54
|
+
gaq = GAQ.new
|
55
|
+
|
56
|
+
# Add 2 events to the default tracker
|
57
|
+
gaq << GA::Event.new('event1', 1)
|
58
|
+
gaq << GA::Event.new('event2', 2)
|
59
|
+
|
60
|
+
# Add 2 events for an alternate tracker
|
61
|
+
gaq.push(GA::Event.new('event1', 1), 't2')
|
62
|
+
gaq.push(GA::Event.new('event2', 2), 't2')
|
63
|
+
|
64
|
+
assert_equal(VALID_DOUBLECLICK_SNIPPET, gaq.to_s)
|
65
|
+
end
|
32
66
|
end
|
@@ -8,6 +8,7 @@ class ViewHelpersTest < Test::Unit::TestCase
|
|
8
8
|
<script type="text/javascript">
|
9
9
|
var _gaq = _gaq || [];
|
10
10
|
_gaq.push(['_setAccount','TEST']);
|
11
|
+
_gaq.push(['_setDomainName','auto']);
|
11
12
|
_gaq.push(['_trackPageview']);
|
12
13
|
(function() {
|
13
14
|
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
@@ -25,6 +26,7 @@ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga
|
|
25
26
|
<script type="text/javascript">
|
26
27
|
var _gaq = _gaq || [];
|
27
28
|
_gaq.push(['_setAccount','TEST']);
|
29
|
+
_gaq.push(['_setDomainName','auto']);
|
28
30
|
_gaq.push(['_trackPageview','/some/virtual/url']);
|
29
31
|
(function() {
|
30
32
|
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
@@ -42,6 +44,7 @@ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga
|
|
42
44
|
<script type="text/javascript">
|
43
45
|
var _gaq = _gaq || [];
|
44
46
|
_gaq.push(['_setAccount','UA-CUSTOM-XX']);
|
47
|
+
_gaq.push(['_setDomainName','auto']);
|
45
48
|
_gaq.push(['_trackPageview']);
|
46
49
|
(function() {
|
47
50
|
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
@@ -55,6 +58,24 @@ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga
|
|
55
58
|
assert_equal(VALID_INIT_WITH_CUSTOM_TRACKER, analytics_init(:tracker => 'UA-CUSTOM-XX'))
|
56
59
|
end
|
57
60
|
|
61
|
+
VALID_INIT_WITH_CUSTOM_DOMAIN = <<-JAVASCRIPT
|
62
|
+
<script type="text/javascript">
|
63
|
+
var _gaq = _gaq || [];
|
64
|
+
_gaq.push(['_setAccount','TEST']);
|
65
|
+
_gaq.push(['_setDomainName','example.com']);
|
66
|
+
_gaq.push(['_trackPageview']);
|
67
|
+
(function() {
|
68
|
+
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
69
|
+
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
70
|
+
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
71
|
+
})();
|
72
|
+
</script>
|
73
|
+
JAVASCRIPT
|
74
|
+
|
75
|
+
def test_analytics_init_with_custom_domain
|
76
|
+
assert_equal(VALID_INIT_WITH_CUSTOM_DOMAIN, analytics_init(:domain => 'example.com'))
|
77
|
+
end
|
78
|
+
|
58
79
|
VALID_LOCAL_INIT = <<-JAVASCRIPT
|
59
80
|
<script type="text/javascript">
|
60
81
|
var _gaq = _gaq || [];
|
@@ -78,6 +99,7 @@ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga
|
|
78
99
|
<script type="text/javascript">
|
79
100
|
var _gaq = _gaq || [];
|
80
101
|
_gaq.push(['_setAccount','TEST']);
|
102
|
+
_gaq.push(['_setDomainName','auto']);
|
81
103
|
_gaq.push(['_gat._anonymizeIp']);
|
82
104
|
_gaq.push(['_trackPageview']);
|
83
105
|
(function() {
|
@@ -96,6 +118,7 @@ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga
|
|
96
118
|
<script type="text/javascript">
|
97
119
|
var _gaq = _gaq || [];
|
98
120
|
_gaq.push(['_setAccount','TEST']);
|
121
|
+
_gaq.push(['_setDomainName','auto']);
|
99
122
|
_gaq.push(['_trackPageview']);
|
100
123
|
_gaq.push(['_setAllowLinker',true]);
|
101
124
|
(function() {
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: google-analytics-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-03-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -75,7 +75,7 @@ dependencies:
|
|
75
75
|
- - ~>
|
76
76
|
- !ruby/object:Gem::Version
|
77
77
|
version: '3.0'
|
78
|
-
description: Rails helpers to manage google analytics tracking
|
78
|
+
description: Rails 3 helpers to manage google analytics tracking
|
79
79
|
email:
|
80
80
|
- benoit.garret@gadz.org
|
81
81
|
executables: []
|
@@ -119,18 +119,24 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
119
119
|
- - ! '>='
|
120
120
|
- !ruby/object:Gem::Version
|
121
121
|
version: '0'
|
122
|
+
segments:
|
123
|
+
- 0
|
124
|
+
hash: -2299747414610710058
|
122
125
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
123
126
|
none: false
|
124
127
|
requirements:
|
125
128
|
- - ! '>='
|
126
129
|
- !ruby/object:Gem::Version
|
127
130
|
version: '0'
|
131
|
+
segments:
|
132
|
+
- 0
|
133
|
+
hash: -2299747414610710058
|
128
134
|
requirements: []
|
129
135
|
rubyforge_project: google-analytics-rails
|
130
136
|
rubygems_version: 1.8.24
|
131
137
|
signing_key:
|
132
138
|
specification_version: 3
|
133
|
-
summary: Rails helpers to manage google analytics tracking
|
139
|
+
summary: Rails 3 helpers to manage google analytics tracking
|
134
140
|
test_files:
|
135
141
|
- test/async_tracking_queue_test.rb
|
136
142
|
- test/event_collection_renderer_test.rb
|