gabba 0.0.3 → 0.1.1
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/Gemfile.lock +1 -1
- data/lib/gabba/gabba.rb +86 -15
- data/lib/gabba/version.rb +3 -1
- data/spec/gabba_spec.rb +42 -0
- metadata +6 -6
data/Gemfile.lock
CHANGED
data/lib/gabba/gabba.rb
CHANGED
@@ -22,25 +22,20 @@ module Gabba
|
|
22
22
|
@utmcs = "UTF-8" # charset
|
23
23
|
@utmul = "en-us" # language
|
24
24
|
|
25
|
-
@utmn =
|
26
|
-
@utmhid =
|
25
|
+
@utmn = random_id
|
26
|
+
@utmhid = random_id
|
27
27
|
|
28
28
|
@utmac = ga_acct
|
29
29
|
@utmhn = domain
|
30
30
|
@user_agent = agent
|
31
31
|
end
|
32
32
|
|
33
|
-
def page_view(title, page, utmhid =
|
33
|
+
def page_view(title, page, utmhid = random_id)
|
34
34
|
check_account_params
|
35
35
|
hey(page_view_params(title, page, utmhid))
|
36
36
|
end
|
37
|
-
|
38
|
-
def
|
39
|
-
check_account_params
|
40
|
-
hey(event_params(category, action, label, value, utmhid))
|
41
|
-
end
|
42
|
-
|
43
|
-
def page_view_params(title, page, utmhid = rand(8999999999) + 1000000000)
|
37
|
+
|
38
|
+
def page_view_params(title, page, utmhid = random_id)
|
44
39
|
{
|
45
40
|
:utmwv => @utmwv,
|
46
41
|
:utmn => @utmn,
|
@@ -54,8 +49,13 @@ module Gabba
|
|
54
49
|
:utmcc => @utmcc || cookie_params
|
55
50
|
}
|
56
51
|
end
|
57
|
-
|
58
|
-
def
|
52
|
+
|
53
|
+
def event(category, action, label = nil, value = nil, utmhid = random_id)
|
54
|
+
check_account_params
|
55
|
+
hey(event_params(category, action, label, value, utmhid))
|
56
|
+
end
|
57
|
+
|
58
|
+
def event_params(category, action, label = nil, value = nil, utmhid = nil)
|
59
59
|
{
|
60
60
|
:utmwv => @utmwv,
|
61
61
|
:utmn => @utmn,
|
@@ -75,9 +75,75 @@ module Gabba
|
|
75
75
|
data += "(#{value})" if value
|
76
76
|
data
|
77
77
|
end
|
78
|
+
|
79
|
+
def transaction(order_id, total, store_name = nil, tax = nil, shipping = nil, city = nil, region = nil, country = nil, utmhid = random_id)
|
80
|
+
check_account_params
|
81
|
+
hey(transaction_params(order_id, total, store_name, tax, shipping, city, region, country, utmhid))
|
82
|
+
end
|
83
|
+
|
84
|
+
def transaction_params(order_id, total, store_name, tax, shipping, city, region, country, utmhid)
|
85
|
+
# '1234', // utmtid URL-encoded order ID - required
|
86
|
+
# 'Acme Clothing', // utmtst affiliation or store name
|
87
|
+
# '11.99', // utmtto total - required
|
88
|
+
# '1.29', // utmttx tax
|
89
|
+
# '5', // utmtsp shipping
|
90
|
+
# 'San Jose', // utmtci city
|
91
|
+
# 'California', // utmtrg state or province
|
92
|
+
# 'USA' // utmtco country
|
93
|
+
{
|
94
|
+
:utmwv => @utmwv,
|
95
|
+
:utmn => @utmn,
|
96
|
+
:utmhn => @utmhn,
|
97
|
+
:utmt => 'tran',
|
98
|
+
:utmcs => @utmcs,
|
99
|
+
:utmul => @utmul,
|
100
|
+
:utmhid => utmhid,
|
101
|
+
:utmac => @utmac,
|
102
|
+
:utmcc => @utmcc || cookie_params,
|
103
|
+
:utmtid => order_id,
|
104
|
+
:utmtst => store_name,
|
105
|
+
:utmtto => total,
|
106
|
+
:utmttx => tax,
|
107
|
+
:utmtsp => shipping,
|
108
|
+
:utmtci => city,
|
109
|
+
:utmtrg => region,
|
110
|
+
:utmtco => country
|
111
|
+
}
|
112
|
+
end
|
113
|
+
|
114
|
+
def add_item(order_id, item_sku, price, quantity, name = nil, category = nil, utmhid = random_id)
|
115
|
+
check_account_params
|
116
|
+
hey(item_params(order_id, item_sku, name, category, price, quantity, utmhid))
|
117
|
+
end
|
118
|
+
|
119
|
+
def item_params(order_id, item_sku, name, category, price, quantity, utmhid)
|
120
|
+
# '1234', // utmtid URL-encoded order ID - required
|
121
|
+
# 'DD44', // utmipc SKU/code - required
|
122
|
+
# 'T-Shirt', // utmipn product name
|
123
|
+
# 'Green Medium', // utmiva category or variation
|
124
|
+
# '11.99', // utmipr unit price - required
|
125
|
+
# '1' // utmiqt quantity - required
|
126
|
+
{
|
127
|
+
:utmwv => @utmwv,
|
128
|
+
:utmn => @utmn,
|
129
|
+
:utmhn => @utmhn,
|
130
|
+
:utmt => 'item',
|
131
|
+
:utmcs => @utmcs,
|
132
|
+
:utmul => @utmul,
|
133
|
+
:utmhid => utmhid,
|
134
|
+
:utmac => @utmac,
|
135
|
+
:utmcc => @utmcc || cookie_params,
|
136
|
+
:utmtid => order_id,
|
137
|
+
:utmipc => item_sku,
|
138
|
+
:utmipn => name,
|
139
|
+
:utmiva => category,
|
140
|
+
:utmipr => price,
|
141
|
+
:utmiqt => quantity
|
142
|
+
}
|
143
|
+
end
|
78
144
|
|
79
145
|
# create magical cookie params used by GA for its own nefarious purposes
|
80
|
-
def cookie_params(utma1 =
|
146
|
+
def cookie_params(utma1 = random_id, utma2 = rand(1147483647) + 1000000000, today = Time.now)
|
81
147
|
"__utma=1.#{utma1}00145214523.#{utma2}.#{today.to_i}.#{today.to_i}.15;+__utmz=1.#{today.to_i}.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none);"
|
82
148
|
end
|
83
149
|
|
@@ -89,7 +155,7 @@ module Gabba
|
|
89
155
|
|
90
156
|
# makes the tracking call to Google Analytics
|
91
157
|
def hey(params)
|
92
|
-
query = params.map {|k,v| "#{k}=#{
|
158
|
+
query = params.map {|k,v| "#{k}=#{URI.escape(v.to_s, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))}" }.join('&')
|
93
159
|
response = Net::HTTP.start(GOOGLE_HOST) do |http|
|
94
160
|
request = Net::HTTP::Get.new("#{BEACON_PATH}?#{query}")
|
95
161
|
request["User-Agent"] = URI.escape(user_agent)
|
@@ -100,6 +166,11 @@ module Gabba
|
|
100
166
|
raise GoogleAnalyticsNetworkError unless response.code == "200"
|
101
167
|
response
|
102
168
|
end
|
103
|
-
|
169
|
+
|
170
|
+
def random_id
|
171
|
+
rand 8999999999 + 1000000000
|
172
|
+
end
|
173
|
+
|
174
|
+
end # Gabba Class
|
104
175
|
|
105
176
|
end
|
data/lib/gabba/version.rb
CHANGED
data/spec/gabba_spec.rb
CHANGED
@@ -56,6 +56,48 @@ describe Gabba::Gabba do
|
|
56
56
|
end
|
57
57
|
|
58
58
|
end
|
59
|
+
|
60
|
+
describe "when tracking an item" do
|
61
|
+
before do
|
62
|
+
@gabba = Gabba::Gabba.new("abc", "123")
|
63
|
+
@gabba.utmn = "1009731272"
|
64
|
+
@gabba.utmcc = ''
|
65
|
+
stub_analytics @gabba.item_params("orderid", "1234", "widget", "widgets", "9.99", "1", "6783939397")
|
66
|
+
end
|
67
|
+
|
68
|
+
it "must require GA account" do
|
69
|
+
lambda {Gabba::Gabba.new(nil, nil).add_item("orderid", "1234", "widget", "widgets", "9.99", "1", "6783939397")}.must_raise(Gabba::NoGoogleAnalyticsAccountError)
|
70
|
+
end
|
71
|
+
|
72
|
+
it "must require GA domain" do
|
73
|
+
lambda {Gabba::Gabba.new("abs", nil).add_item("orderid", "1234", "widget", "widgets", "9.99", "1", "6783939397")}.must_raise(Gabba::NoGoogleAnalyticsDomainError)
|
74
|
+
end
|
75
|
+
|
76
|
+
it "must do add item request to google" do
|
77
|
+
@gabba.add_item("orderid", "1234", "widget", "widgets", "9.99", "1", "6783939397").code.must_equal("200")
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
describe "when tracking a transaction" do
|
82
|
+
before do
|
83
|
+
@gabba = Gabba::Gabba.new("abc", "123")
|
84
|
+
@gabba.utmn = "1009731272"
|
85
|
+
@gabba.utmcc = ''
|
86
|
+
stub_analytics @gabba.transaction_params("orderid", "9.99", "acme stores", ".25", "1.00", "San Jose", "CA", "United States", "6783939397")
|
87
|
+
end
|
88
|
+
|
89
|
+
it "must require GA account" do
|
90
|
+
lambda {Gabba::Gabba.new(nil, nil).transaction("orderid", "9.99", "acme stores", ".25", "1.00", "San Jose", "CA", "United States", "6783939397")}.must_raise(Gabba::NoGoogleAnalyticsAccountError)
|
91
|
+
end
|
92
|
+
|
93
|
+
it "must require GA domain" do
|
94
|
+
lambda {Gabba::Gabba.new("abs", nil).transaction("orderid", "9.99", "acme stores", ".25", "1.00", "San Jose", "CA", "United States", "6783939397")}.must_raise(Gabba::NoGoogleAnalyticsDomainError)
|
95
|
+
end
|
96
|
+
|
97
|
+
it "must do transaction request to google" do
|
98
|
+
@gabba.transaction("orderid", "9.99", "acme stores", ".25", "1.00", "San Jose", "CA", "United States", "6783939397").code.must_equal("200")
|
99
|
+
end
|
100
|
+
end
|
59
101
|
|
60
102
|
def stub_analytics(expected_params)
|
61
103
|
s = stub_request(:get, /www.google-analytics.com\/__utm.gif\?utmac=#{expected_params[:utmac]}&.*/).
|
metadata
CHANGED
@@ -2,12 +2,12 @@
|
|
2
2
|
name: gabba
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
hash: 25
|
5
|
-
prerelease:
|
5
|
+
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 1
|
9
|
+
- 1
|
10
|
+
version: 0.1.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Ron Evans
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-05-28 00:00:00 -07:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|
@@ -70,7 +70,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
70
70
|
requirements: []
|
71
71
|
|
72
72
|
rubyforge_project: gabba
|
73
|
-
rubygems_version: 1.
|
73
|
+
rubygems_version: 1.6.2
|
74
74
|
signing_key:
|
75
75
|
specification_version: 3
|
76
76
|
summary: Easy server-side tracking for Google Analytics
|