google-analytics-rails 0.0.6 → 1.0.0
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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/Gemfile +1 -0
- data/README.markdown +27 -2
- data/lib/google-analytics-rails.rb +2 -2
- data/lib/google-analytics/async_tracking_queue.rb +8 -9
- data/lib/google-analytics/events/event.rb +18 -3
- data/lib/google-analytics/events/event_collection.rb +1 -1
- data/lib/google-analytics/events/event_renderer.rb +8 -2
- data/lib/google-analytics/events/events.rb +129 -37
- data/lib/google-analytics/rails/view_helpers.rb +56 -18
- data/lib/google-analytics/version.rb +1 -1
- data/test/async_tracking_queue_test.rb +55 -57
- data/test/event_collection_renderer_test.rb +8 -8
- data/test/event_collection_test.rb +4 -4
- data/test/event_renderer_test.rb +18 -4
- data/test/gaq_events_test.rb +81 -39
- data/test/rails/views_helper_test.rb +85 -132
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 70b6e1110fba9b2d091febdb2d912910f21ccc5d
|
4
|
+
data.tar.gz: 5035c20f6adb7e9b8b26e8910cc3bc11eb042b58
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e335e89f26431aa80ca0f0343625c5fe9a7bab1ee118455fbf9bd5212d2a09b1ed40082735d91185c1384d8807f6cd9c432e411a11106f27009f8de3e21e5b61
|
7
|
+
data.tar.gz: 14afca1b8c06c2813c679f80083f8413934b7d3d51408d5960bbf2dd80bec15f3b4d45881bf15386f61e5d34f15a810c824bad7a18826d1720ec33f5dc693909
|
data/.gitignore
CHANGED
data/Gemfile
CHANGED
data/README.markdown
CHANGED
@@ -1,18 +1,43 @@
|
|
1
|
-
Fast Google Analytics setup for Rails
|
1
|
+
Fast Universal Google Analytics setup for Rails. This gem is mostly intended for small to medium websites with a simple analytics strategy.
|
2
2
|
|
3
3
|
[](https://travis-ci.org/bgarret/google-analytics-rails)
|
4
4
|
|
5
|
+
_if you require older analytics, use `0.0.6`_
|
6
|
+
|
5
7
|
Installation
|
6
8
|
============
|
7
9
|
|
8
10
|
Add the following to your `Gemfile`:
|
9
11
|
|
10
|
-
gem 'google-analytics-rails'
|
12
|
+
gem 'google-analytics-rails', '1.0.0'
|
11
13
|
|
12
14
|
Then run:
|
13
15
|
|
14
16
|
bundle install
|
15
17
|
|
18
|
+
Upgrade Notes
|
19
|
+
============
|
20
|
+
|
21
|
+
__Upgrading this gem from 0.0.6?__
|
22
|
+
|
23
|
+
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.
|
24
|
+
|
25
|
+
**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.
|
26
|
+
|
27
|
+
**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
|
28
|
+
|
29
|
+
**GoogleAnalytics::Events::DeleteCustomVar** has been removed
|
30
|
+
|
31
|
+
**Added Event Helpers**
|
32
|
+
|
33
|
+
- GoogleAnalytics::Events::ExperimentId
|
34
|
+
- GoogleAnalytics::Events::ExperimentVariation
|
35
|
+
|
36
|
+
**TODO:** Add Double Click Snippet Support
|
37
|
+
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.
|
38
|
+
|
39
|
+
|
40
|
+
|
16
41
|
Documentation
|
17
42
|
=============
|
18
43
|
|
@@ -12,8 +12,8 @@ module GoogleAnalytics
|
|
12
12
|
#
|
13
13
|
# @private
|
14
14
|
SCRIPT_SOURCES = {
|
15
|
-
:default => "
|
16
|
-
:doubleclick => "
|
15
|
+
:default => "'//www.google-analytics.com/analytics.js'",
|
16
|
+
:doubleclick => "'//stats.g.doubleclick.net/dc.js'",
|
17
17
|
}
|
18
18
|
|
19
19
|
# Get the current tracker id (*UA-xxxxxx-x*).
|
@@ -5,7 +5,7 @@ module GoogleAnalytics
|
|
5
5
|
def initialize
|
6
6
|
@events = []
|
7
7
|
end
|
8
|
-
|
8
|
+
|
9
9
|
def <<(event)
|
10
10
|
push(event)
|
11
11
|
end
|
@@ -17,21 +17,20 @@ module GoogleAnalytics
|
|
17
17
|
def to_s
|
18
18
|
<<-JAVASCRIPT
|
19
19
|
<script type="text/javascript">
|
20
|
-
|
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');
|
21
24
|
#{@events.map { |event| event.to_s }.join("\n")}
|
22
|
-
(function() {
|
23
|
-
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
24
|
-
ga.src = #{GoogleAnalytics.script_source};
|
25
|
-
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
26
|
-
})();
|
27
25
|
</script>
|
28
26
|
JAVASCRIPT
|
29
27
|
end
|
30
|
-
|
28
|
+
|
31
29
|
private
|
32
|
-
|
30
|
+
|
33
31
|
def renderer_for_event(event, tracker_id)
|
34
32
|
case event
|
33
|
+
when SingleEvent then EventRenderer.new(event, tracker_id)
|
35
34
|
when Event then EventRenderer.new(event, tracker_id)
|
36
35
|
when EventCollection then EventCollectionRenderer.new(event, tracker_id)
|
37
36
|
end
|
@@ -2,11 +2,26 @@
|
|
2
2
|
|
3
3
|
module GoogleAnalytics
|
4
4
|
class Event
|
5
|
-
attr_reader :name, :params
|
6
|
-
|
7
|
-
def initialize(name, *params)
|
5
|
+
attr_reader :action, :name, :params
|
6
|
+
|
7
|
+
def initialize(action, name, *params)
|
8
|
+
@action = action
|
8
9
|
@name = name
|
9
10
|
@params = params
|
10
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
|
11
26
|
end
|
12
27
|
end
|
@@ -10,13 +10,19 @@ module GoogleAnalytics
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def to_s
|
13
|
-
|
13
|
+
if @event.class.name == 'GoogleAnalytics::Events::SetupAnalytics'
|
14
|
+
"ga('#{@event.action}',#{array_to_json([@event.name, *@event.params])});"
|
15
|
+
elsif @event.single_event?
|
16
|
+
"ga('#{@tracker_id ? [@tracker_id, @event.action].join('.') : @event.action}');"
|
17
|
+
else
|
18
|
+
"ga('#{@tracker_id ? [@tracker_id, @event.action].join('.') : @event.action}',#{array_to_json([@event.name, *@event.params])});"
|
19
|
+
end
|
14
20
|
end
|
15
21
|
|
16
22
|
private
|
17
23
|
|
18
24
|
def array_to_json(array)
|
19
|
-
|
25
|
+
array.map {|string| string_to_json(string) } .join(',')
|
20
26
|
end
|
21
27
|
|
22
28
|
def string_to_json(string)
|
@@ -2,68 +2,143 @@
|
|
2
2
|
|
3
3
|
module GoogleAnalytics
|
4
4
|
module Events
|
5
|
-
class
|
5
|
+
class SetupAnalytics < Event
|
6
|
+
|
7
|
+
def initialize(account_id, opts={})
|
8
|
+
if ['auto','none'].include?(opts) || opts.empty?
|
9
|
+
super('create', account_id, opts.empty? ? 'auto' : opts)
|
10
|
+
elsif opts.is_a?(Hash)
|
11
|
+
super('create', account_id, attributes_hash(opts))
|
12
|
+
else
|
13
|
+
super('create', account_id, {:cookieDomain => opts})
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
def attributes_hash(opts={})
|
19
|
+
{
|
20
|
+
:cookieDomain => opts.delete(:cookieDomain) || 'auto',
|
21
|
+
:allowLinker => opts.delete(:allowLinker),
|
22
|
+
:cookieName => opts.delete(:cookieName),
|
23
|
+
:cookieExpires => opts.delete(:cookieExpires),
|
24
|
+
:sampleRate => opts.delete(:sampleRate),
|
25
|
+
:siteSpeedSampleRate => opts.delete(:siteSpeedSampleRate),
|
26
|
+
:name => opts.delete(:name)
|
27
|
+
}.reject{|k,v| !v }
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
class SetAccount
|
6
32
|
def initialize(account_id)
|
7
|
-
|
33
|
+
warn "[REMOVED] `SetAccount` is being removed. Universal Analytics does not support this any longer. Please see GoogleAnalytics::Events::SetupAnalytics"
|
8
34
|
end
|
9
35
|
end
|
10
36
|
|
11
|
-
class SetDomainName
|
37
|
+
class SetDomainName
|
12
38
|
def initialize(domain_name)
|
13
|
-
|
39
|
+
warn "[REMOVED] `SetDomainName` is being removed. Universal Analytics does not support this any longer. Please see GoogleAnalytics::Events::SetupAnalytics"
|
14
40
|
end
|
15
41
|
end
|
16
42
|
|
17
|
-
class SetAllowLinker
|
43
|
+
class SetAllowLinker
|
18
44
|
def initialize(allow)
|
19
|
-
|
45
|
+
warn "[REMOVED] `SetAllowLinker` is being removed. Universal Analytics does not support this any longer. Please see GoogleAnalytics::Events::SetupAnalytics"
|
20
46
|
end
|
21
47
|
end
|
22
48
|
|
23
49
|
class Require < Event
|
24
|
-
def initialize(name, url)
|
25
|
-
|
50
|
+
def initialize(name, url=nil)
|
51
|
+
if url
|
52
|
+
super('require', name, url)
|
53
|
+
else
|
54
|
+
super('require', name)
|
55
|
+
end
|
26
56
|
end
|
27
57
|
end
|
28
58
|
|
29
|
-
class SetSiteSpeedSampleRate
|
59
|
+
class SetSiteSpeedSampleRate
|
30
60
|
# @param sample_rate [Integer] the percentage of page views that should be used
|
31
61
|
# for page speed metrics - defaults to 1 (aka 1%) if the event is missing.
|
32
|
-
|
62
|
+
attr_accessor :sample_rate
|
33
63
|
def initialize(sample_rate)
|
34
|
-
|
64
|
+
@sample_rate = sample_rate
|
65
|
+
warn "[REMOVED] `SetSiteSpeedSampleRate` is being removed. Universal Analytics does not support this any longer. Please see GoogleAnalytics::Events::SetupAnalytics"
|
35
66
|
end
|
36
67
|
end
|
37
68
|
|
69
|
+
# http://misterphilip.com/universal-analytics/migration/basics
|
38
70
|
class TrackPageview < Event
|
39
71
|
# @param page [String] optional virtual pageview tracking
|
40
72
|
# @see http://code.google.com/apis/analytics/docs/tracking/asyncMigrationExamples.html#VirtualPageviews
|
41
|
-
def initialize(
|
42
|
-
|
73
|
+
def initialize(opts = {})
|
74
|
+
# Just use default pageview if no page was given
|
75
|
+
if opts.is_a?(Hash) && opts.fetch(:page, nil) == nil
|
76
|
+
super('send', 'pageview')
|
77
|
+
# Provide only the page string if a title was not given but a page was
|
78
|
+
elsif opts.is_a?(Hash) && opts.fetch(:page, false)
|
79
|
+
super('send', 'pageview', opts.fetch(:title, false) ? opts : opts[:page])
|
80
|
+
# Print out a JSON Value for the pageview
|
81
|
+
else
|
82
|
+
super('send', 'pageview', opts)
|
83
|
+
end
|
43
84
|
end
|
44
85
|
end
|
45
86
|
|
46
87
|
class TrackEvent < Event
|
47
88
|
def initialize(category, action, label = nil, value = nil)
|
48
89
|
if label || value
|
49
|
-
super('
|
90
|
+
super('send', 'event', category.to_s, action.to_s, label ? label.to_s : nil, value ? value.to_i : nil)
|
50
91
|
else
|
51
|
-
super('
|
92
|
+
super('send', 'event', category.to_s, action.to_s)
|
52
93
|
end
|
53
94
|
end
|
54
95
|
end
|
55
96
|
|
97
|
+
class ExperimentId < Event
|
98
|
+
def initialize(id)
|
99
|
+
super('set', 'expId', id.to_s)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
class ExperimentVariation < Event
|
104
|
+
def initialize(variation_id)
|
105
|
+
super('set', 'expVar', variation_id.to_i)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
# Custom Vars no longer exist in Universal Analytics
|
110
|
+
# Transfer to dimensions & metrics
|
111
|
+
# ga('set', 'dimension1', 953);
|
112
|
+
# ga('set', 'metric5', 953);
|
113
|
+
#
|
114
|
+
|
115
|
+
# Deprecated: Please use `SetCustomDimension` or `SetCustomMetric` instead
|
116
|
+
#
|
56
117
|
class SetCustomVar < Event
|
57
118
|
def initialize(index, name, value, opt_scope)
|
58
119
|
raise ArgumentError, "The index has to be between 1 and 5" unless (1..5).include?(index.to_i)
|
59
|
-
|
120
|
+
warn "[DEPRECATION] `SetCustomVar` is deprecated. Please use `SetCustomDimension` or `SetCustomMetric` instead"
|
121
|
+
super('set', "dimension#{index}", value.to_s)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
class SetCustomDimension < Event
|
126
|
+
def initialize(index, value)
|
127
|
+
raise ArgumentError, "The index has to be between 1 and 5" unless (1..5).include?(index.to_i)
|
128
|
+
super('set', "dimension#{index}", value.to_s)
|
129
|
+
end
|
130
|
+
end
|
131
|
+
class SetCustomMetric < Event
|
132
|
+
def initialize(index, value)
|
133
|
+
raise ArgumentError, "The index has to be between 1 and 5" unless (1..5).include?(index.to_i)
|
134
|
+
super('set', "metric#{index}", value.to_s)
|
60
135
|
end
|
61
136
|
end
|
62
137
|
|
138
|
+
# Removed: There are no longer Custom Variables
|
63
139
|
class DeleteCustomVar < Event
|
64
140
|
def initialize(index)
|
65
|
-
|
66
|
-
super('_deleteCustomVar', index.to_i)
|
141
|
+
warn "[REMOVED] `DeleteCustomVar` is being removed. Universal Analytics does not support Custom Variables."
|
67
142
|
end
|
68
143
|
end
|
69
144
|
|
@@ -77,11 +152,11 @@ module GoogleAnalytics
|
|
77
152
|
#
|
78
153
|
# JavaScript equivalent:
|
79
154
|
#
|
80
|
-
#
|
155
|
+
# ga('set', 'anonymizeIp', true);
|
81
156
|
#
|
82
157
|
class AnonymizeIp < Event
|
83
158
|
def initialize
|
84
|
-
super('
|
159
|
+
super('set', 'anonymizeIp', true)
|
85
160
|
end
|
86
161
|
end
|
87
162
|
|
@@ -89,20 +164,26 @@ module GoogleAnalytics
|
|
89
164
|
module Ecommerce
|
90
165
|
# JavaScript equivalent:
|
91
166
|
#
|
92
|
-
#
|
93
|
-
#
|
94
|
-
#
|
95
|
-
#
|
96
|
-
#
|
97
|
-
#
|
98
|
-
#
|
99
|
-
#
|
100
|
-
# 'USA' // country
|
101
|
-
# ]);
|
167
|
+
# ga('ecommerce:addTransaction', {
|
168
|
+
# 'id': '1234',
|
169
|
+
# 'affiliation': 'Acme Clothing',
|
170
|
+
# 'revenue': '11.99',
|
171
|
+
# 'shipping': '5',
|
172
|
+
# 'tax': '1.29',
|
173
|
+
# 'currency': 'EUR' // local currency code.
|
174
|
+
# });
|
102
175
|
#
|
103
176
|
class AddTransaction < Event
|
104
|
-
def initialize(order_id, store_name, total, tax, shipping, city, state_or_province, country)
|
105
|
-
|
177
|
+
def initialize(order_id, store_name, total, tax, shipping, city=nil, state_or_province=nil, country=nil)
|
178
|
+
# city.to_s, state_or_province.to_s, country.to_s
|
179
|
+
|
180
|
+
super('ecommerce:addTransaction', {
|
181
|
+
:id => order_id.to_s,
|
182
|
+
:affiliation => store_name.to_s,
|
183
|
+
:revenue => total.to_s,
|
184
|
+
:tax => tax.to_s,
|
185
|
+
:shipping => shipping.to_s
|
186
|
+
})
|
106
187
|
end
|
107
188
|
end
|
108
189
|
|
@@ -119,18 +200,29 @@ module GoogleAnalytics
|
|
119
200
|
#
|
120
201
|
class AddItem < Event
|
121
202
|
def initialize(order_id, product_id, product_name, product_variation, unit_price, quantity)
|
122
|
-
super('
|
203
|
+
super('ecommerce:addItem', {
|
204
|
+
:id => order_id.to_s,
|
205
|
+
:sku => product_id.to_s,
|
206
|
+
:name => product_name.to_s,
|
207
|
+
:category => product_variation.to_s,
|
208
|
+
:price => unit_price.to_s,
|
209
|
+
:quantity => quantity.to_s
|
210
|
+
})
|
123
211
|
end
|
124
|
-
|
125
212
|
end
|
126
213
|
|
127
214
|
# JavaScript equivalent:
|
128
215
|
#
|
129
|
-
#
|
216
|
+
# ga('ecommerce:send');
|
130
217
|
#
|
131
|
-
class TrackTransaction <
|
218
|
+
class TrackTransaction < SingleEvent
|
219
|
+
def initialize
|
220
|
+
super('ecommerce:send')
|
221
|
+
end
|
222
|
+
end
|
223
|
+
class ClearTransaction < SingleEvent
|
132
224
|
def initialize
|
133
|
-
super('
|
225
|
+
super('ecommerce:clear')
|
134
226
|
end
|
135
227
|
end
|
136
228
|
end
|
@@ -28,10 +28,7 @@ module GoogleAnalytics::Rails
|
|
28
28
|
# 'Acme Clothing', # affiliation or store name
|
29
29
|
# '11.99', # total - required
|
30
30
|
# '1.29', # tax
|
31
|
-
# '5'
|
32
|
-
# 'San Jose', # city
|
33
|
-
# 'California', # state or province
|
34
|
-
# 'USA' # country
|
31
|
+
# '5' # shipping
|
35
32
|
# )
|
36
33
|
#
|
37
34
|
# # add an item to the transaction
|
@@ -51,12 +48,20 @@ module GoogleAnalytics::Rails
|
|
51
48
|
# Initializes the Analytics javascript. Put it in the `<head>` tag.
|
52
49
|
#
|
53
50
|
# @param options [Hash]
|
51
|
+
# @option options [String] :name
|
52
|
+
# The name of the Universal Analytics Tracker
|
53
|
+
# @option options [Hash] :setup
|
54
|
+
# Options for the initial Setup {GoogleAnalytics::Events::SetupAnalytics}
|
54
55
|
# @option options [Boolean] :local (false) Sets the local development mode.
|
55
56
|
# See {http://www.google.com/support/forum/p/Google%20Analytics/thread?tid=741739888e14c07a&hl=en}
|
56
57
|
# @option options [Array, GoogleAnalytics::Event] :add_events ([])
|
57
58
|
# The page views are tracked by default, additional events can be added here.
|
59
|
+
# @option options [Boolean] :skip_pageview
|
60
|
+
# Turn off pageview tracking
|
58
61
|
# @option options [String] :page
|
59
62
|
# The optional virtual page view to track through {GoogleAnalytics::Events::TrackPageview}
|
63
|
+
# @option options [String] :title
|
64
|
+
# The optional virtual page view to track through {GoogleAnalytics::Events::TrackPageview}
|
60
65
|
# @option options [String] :tracker
|
61
66
|
# The tracker to use instead of the default {GoogleAnalytics.tracker}
|
62
67
|
# @option options [String] :domain
|
@@ -68,7 +73,7 @@ module GoogleAnalytics::Rails
|
|
68
73
|
# @option options [Boolean] :enhanced_link_attribution
|
69
74
|
# See separate information for multiple links on a page that all have the same destination,
|
70
75
|
# see {https://support.google.com/analytics/answer/2558867}.
|
71
|
-
# @option options [Array, GoogleAnalytics::Events::
|
76
|
+
# @option options [Array, GoogleAnalytics::Events::SetCustomDimension, GoogleAnalytics::Events::SetCustomMetric] :custom_vars ([])
|
72
77
|
#
|
73
78
|
# @example Set the local bit in development mode
|
74
79
|
# analytics_init :local => Rails.env.development?
|
@@ -85,36 +90,68 @@ module GoogleAnalytics::Rails
|
|
85
90
|
end
|
86
91
|
|
87
92
|
local = options.delete(:local) || false
|
93
|
+
setup = options.delete(:setup) || {}
|
94
|
+
tracker_name = options.delete(:name) || setup.fetch(:name, nil)
|
95
|
+
|
96
|
+
# Determine Name
|
97
|
+
setup[:name] ||= tracker_name if tracker_name
|
98
|
+
|
99
|
+
domain = options.delete(:domain) || (local ? "none" : "auto")
|
100
|
+
|
101
|
+
skip_pageview = options.delete(:skip_pageview) || false
|
88
102
|
anonymize = options.delete(:anonymize) || false
|
89
103
|
custom_vars = options.delete(:custom_vars) || []
|
90
104
|
custom_vars = [custom_vars] unless custom_vars.is_a?(Array)
|
105
|
+
|
91
106
|
link_attribution = options.delete(:enhanced_link_attribution) || false
|
92
|
-
|
107
|
+
|
108
|
+
|
93
109
|
events = options.delete(:add_events) || []
|
94
110
|
events = [events] unless events.is_a?(Array)
|
95
111
|
|
96
|
-
|
112
|
+
# Convert older classes when we can
|
113
|
+
if events.any?{|x| x.class.name == 'GoogleAnalytics::Events::SetAllowLinker' }
|
114
|
+
setup[:allowLinker] = !!events.any?{|x| x.class.name == 'GoogleAnalytics::Events::SetAllowLinker' }
|
115
|
+
events.delete_if{|x| x.class.name == 'GoogleAnalytics::Events::SetAllowLinker' }
|
116
|
+
end
|
117
|
+
|
118
|
+
if events.any?{|x| x.class.name == 'GoogleAnalytics::Events::SetSiteSpeedSampleRate' }
|
119
|
+
setup[:siteSpeedSampleRate] = events.select{|x| x.class.name == 'GoogleAnalytics::Events::SetSiteSpeedSampleRate' }.first.sample_rate
|
120
|
+
events.delete_if{|x| x.class.name == 'GoogleAnalytics::Events::SetSiteSpeedSampleRate' }
|
121
|
+
end
|
97
122
|
|
123
|
+
queue = GAQ.new
|
98
124
|
# unshift => reverse order
|
99
|
-
events.unshift GA::Events::TrackPageview.new(options[:page])
|
125
|
+
events.unshift GA::Events::TrackPageview.new({:page => options[:page], :title => options[:title]}) unless skip_pageview
|
100
126
|
# anonymize if needed before tracking the page view
|
101
127
|
events.unshift GA::Events::AnonymizeIp.new if anonymize
|
102
128
|
# custom_var if needed before tracking the page view
|
103
129
|
custom_vars.each do |custom_var|
|
104
130
|
events.unshift custom_var
|
105
131
|
end
|
106
|
-
|
132
|
+
|
133
|
+
events.unshift GA::Events::Require.new('linkid') if link_attribution
|
134
|
+
|
135
|
+
# If this is 'local' env, give the cookieDomain none, and allow linker
|
107
136
|
if local
|
108
|
-
events.unshift GA::Events::
|
137
|
+
events.unshift GA::Events::SetupAnalytics.new(tracker, setup.merge({
|
138
|
+
:cookieDomain => 'none',
|
139
|
+
:allowLinker => true
|
140
|
+
}))
|
141
|
+
# If we have any configs, we'll merge the cookieDomain in
|
142
|
+
elsif setup.any?
|
143
|
+
events.unshift GA::Events::SetupAnalytics.new(tracker, setup.merge({ :cookieDomain => domain }))
|
144
|
+
# Just a normal request
|
145
|
+
else
|
146
|
+
events.unshift GA::Events::SetupAnalytics.new(tracker, domain)
|
109
147
|
end
|
110
|
-
|
111
|
-
events.
|
112
|
-
'
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
queue << event
|
148
|
+
|
149
|
+
events.each do |evt|
|
150
|
+
if evt.class.name == 'GoogleAnalytics::Events::SetupAnalytics'
|
151
|
+
queue.push(evt)
|
152
|
+
else
|
153
|
+
queue.push(evt, tracker_name)
|
154
|
+
end
|
118
155
|
end
|
119
156
|
|
120
157
|
queue.to_s.html_safe
|
@@ -145,6 +182,7 @@ module GoogleAnalytics::Rails
|
|
145
182
|
# Track an ecommerce transaction
|
146
183
|
# @see http://code.google.com/apis/analytics/docs/tracking/gaTrackingEcommerce.html
|
147
184
|
def analytics_add_transaction(order_id, store_name, total, tax, shipping, city, state_or_province, country)
|
185
|
+
analytics_render_event(GA::Events::Require.new('ecommerce','ecommerce.js'))
|
148
186
|
analytics_render_event(GA::Events::Ecommerce::AddTransaction.new(order_id, store_name, total, tax, shipping, city, state_or_province, country))
|
149
187
|
end
|
150
188
|
|