gabba-gmp 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/Readme.md +56 -1
- data/lib/gabba-gmp/campaign.rb +1 -1
- data/lib/gabba-gmp/custom_vars.rb +1 -1
- data/lib/gabba-gmp/event.rb +4 -3
- data/lib/gabba-gmp/gabba_gmp.rb +22 -19
- data/lib/gabba-gmp/page_view.rb +2 -1
- data/lib/gabba-gmp/version.rb +1 -1
- data/spec/lib/campaign_spec.rb +61 -0
- data/spec/lib/custom_vars_spec.rb +56 -0
- data/spec/lib/event_spec.rb +54 -0
- data/spec/lib/gabba_gmp_spec.rb +139 -0
- data/spec/lib/page_view_spec.rb +45 -0
- data/spec/spec_helper.rb +48 -0
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c717601102a85e2882336840bf5b98d1bcbdca3d
|
4
|
+
data.tar.gz: bebccac8403b912d503aa4e437c1139256f7e917
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5cbf3ea181ff40f6974cb6f4b046e72dbd1adc689ea9ef318c40734d6ea1029d43918412ec6d2f483f346f90fa0c5d8cdc8a6aaf7a1a6831f877bdad6052914e
|
7
|
+
data.tar.gz: 5213d1478a2be1488d5027cb8fd3de6840a785b159be639fb80ba01feb341b76e5a17698fcd7823e9ca6183c955f8d1c65a41d66fac161bf14f365282f82c021
|
data/Readme.md
CHANGED
@@ -25,7 +25,7 @@ gabba.page_view(request, "Page Title")
|
|
25
25
|
|
26
26
|
```
|
27
27
|
|
28
|
-
Or if you want to get really fancy you can update the parameters for
|
28
|
+
Or if you want to get really fancy you can update the parameters for this page view only...
|
29
29
|
```ruby
|
30
30
|
gabba.page_view(request, "Page Title", document_path: "/manually/fiddled/url")
|
31
31
|
|
@@ -92,6 +92,61 @@ gabba.event("Videos", "Play", "ID", "123")
|
|
92
92
|
|
93
93
|
```
|
94
94
|
|
95
|
+
### Parameters that may be set
|
96
|
+
|
97
|
+
protocol_version:
|
98
|
+
|
99
|
+
tracking_id:
|
100
|
+
|
101
|
+
client_id:
|
102
|
+
|
103
|
+
user_id:
|
104
|
+
|
105
|
+
user_ip_address:
|
106
|
+
|
107
|
+
user_agent:
|
108
|
+
|
109
|
+
user_language:
|
110
|
+
|
111
|
+
hit_type:
|
112
|
+
|
113
|
+
document_title:
|
114
|
+
|
115
|
+
document_path:
|
116
|
+
|
117
|
+
document_referrer:
|
118
|
+
|
119
|
+
document_host:
|
120
|
+
|
121
|
+
event_category:
|
122
|
+
|
123
|
+
event_action:
|
124
|
+
|
125
|
+
event_label:
|
126
|
+
|
127
|
+
event_value:
|
128
|
+
|
129
|
+
campaign_name:
|
130
|
+
|
131
|
+
campaign_source:
|
132
|
+
|
133
|
+
campaign_medium:
|
134
|
+
|
135
|
+
campaign_keyword:
|
136
|
+
|
137
|
+
campaign_content:
|
138
|
+
|
139
|
+
dimension_[1-200]:
|
140
|
+
|
141
|
+
**Untested**
|
142
|
+
|
143
|
+
user_screen_resolution:
|
144
|
+
|
145
|
+
user_viewport_size:
|
146
|
+
|
147
|
+
user_screen_colors:
|
148
|
+
|
149
|
+
|
95
150
|
### License
|
96
151
|
|
97
152
|
Gabba is released under the [MIT License](http://opensource.org/licenses/MIT).
|
data/lib/gabba-gmp/campaign.rb
CHANGED
@@ -4,7 +4,7 @@ module GabbaGMP
|
|
4
4
|
attr_accessor :name, :source, :medium, :keyword, :content
|
5
5
|
|
6
6
|
def present?
|
7
|
-
name.
|
7
|
+
!name.to_s.empty? or !source.to_s.empty? or !medium.to_s.empty? or !keyword.to_s.empty? or !content.to_s.empty?
|
8
8
|
end
|
9
9
|
end
|
10
10
|
end
|
@@ -14,7 +14,7 @@ module GabbaGMP
|
|
14
14
|
#
|
15
15
|
# Returns array with the custom variable data
|
16
16
|
def set_custom_var(index, name, value)
|
17
|
-
raise "Index must be between 1 and #{GabbaGMP::DIMENSION_MAX}" unless (1..GabbaGMP::DIMENSION_MAX).include?(index)
|
17
|
+
raise GoogleAnalyticsInvalidParameterError, "Index must be between 1 and #{GabbaGMP::DIMENSION_MAX}" unless (1..GabbaGMP::DIMENSION_MAX).include?(index)
|
18
18
|
|
19
19
|
@sessionopts["dimension_#{index}".to_sym] = value
|
20
20
|
end
|
data/lib/gabba-gmp/event.rb
CHANGED
@@ -18,7 +18,8 @@ module GabbaGMP
|
|
18
18
|
hey(event_params(category, action, label, value, options))
|
19
19
|
end
|
20
20
|
|
21
|
-
|
21
|
+
private
|
22
|
+
# Private: Renders event params data in the format needed for GA
|
22
23
|
# Called before actually sending the data along to GA in GabbaGMP#event
|
23
24
|
def event_params(category, action, label, value, event_options)
|
24
25
|
options = {
|
@@ -26,8 +27,8 @@ module GabbaGMP
|
|
26
27
|
event_category: category,
|
27
28
|
event_action: action
|
28
29
|
}
|
29
|
-
options[:event_label] = label if label
|
30
|
-
options[:event_value] = value if value
|
30
|
+
options[:event_label] = label if label
|
31
|
+
options[:event_value] = value if value
|
31
32
|
@sessionopts.merge(options).merge!(event_options)
|
32
33
|
end
|
33
34
|
end
|
data/lib/gabba-gmp/gabba_gmp.rb
CHANGED
@@ -33,7 +33,7 @@ module GabbaGMP
|
|
33
33
|
|
34
34
|
ESCAPES = %w{ ' ! * ) }
|
35
35
|
|
36
|
-
attr_accessor :
|
36
|
+
attr_accessor :logger
|
37
37
|
|
38
38
|
# Public: Initialize Gabba Google Analytics Tracking Object.
|
39
39
|
#
|
@@ -49,10 +49,10 @@ module GabbaGMP
|
|
49
49
|
#
|
50
50
|
def initialize(ga_tracking_id, request, cookies, options = {})
|
51
51
|
client_id_cookie = options[:client_id_cookie_sym]
|
52
|
-
client_id_cookie = :utm_visitor_uuid if
|
52
|
+
client_id_cookie = :utm_visitor_uuid if client_id_cookie.nil? or !client_id_cookie.kind_of? Symbol
|
53
53
|
|
54
|
-
if
|
55
|
-
cookie_expiry = options[:client_id_cookie_expiry] ? options[:client_id_cookie_expiry] :
|
54
|
+
if cookies[client_id_cookie].nil?
|
55
|
+
cookie_expiry = options[:client_id_cookie_expiry] ? options[:client_id_cookie_expiry] : Time.now + (60*60*24*365)
|
56
56
|
cookies[client_id_cookie] = { value: "#{SecureRandom.uuid}", expires: cookie_expiry}
|
57
57
|
end
|
58
58
|
|
@@ -64,16 +64,15 @@ module GabbaGMP
|
|
64
64
|
user_agent: request.user_agent,
|
65
65
|
user_language: preferred_language(request.accept_language)}
|
66
66
|
|
67
|
-
@sessionopts[:document_referrer] = request.referrer if request.referrer
|
67
|
+
@sessionopts[:document_referrer] = request.referrer if request.referrer and !request.referrer.start_with?("#{request.protocol}#{request.host_with_port}")
|
68
68
|
|
69
|
-
debug = false
|
70
69
|
end
|
71
70
|
|
72
71
|
def preferred_language(language)
|
73
|
-
return "" unless language
|
72
|
+
return "" unless language
|
74
73
|
|
75
74
|
language_arr = language.split(",").map {|lang_pref| lang_pref.split(";")}
|
76
|
-
language_arr[0][0].downcase #just get the first language. Will probably be correct.
|
75
|
+
language_arr[0][0].downcase.strip #just get the first language. Will probably be correct.
|
77
76
|
end
|
78
77
|
|
79
78
|
# Public: Set the session's parameters. This will be added to all actions that are sent to analytics.
|
@@ -81,7 +80,7 @@ module GabbaGMP
|
|
81
80
|
# See:: ParameterMap:GA_PARAMS
|
82
81
|
def add_options(options)
|
83
82
|
options.keys.each do |key|
|
84
|
-
raise GoogleAnalyticsParameterNotFoundError, "Parameter '#{key}'" unless GA_PARAMS[key]
|
83
|
+
raise GoogleAnalyticsParameterNotFoundError, "Parameter '#{key}'" unless GA_PARAMS[key]
|
85
84
|
end
|
86
85
|
|
87
86
|
@sessionopts.merge!(options)
|
@@ -102,23 +101,27 @@ module GabbaGMP
|
|
102
101
|
|
103
102
|
@sessionopts[:campaign_medium] = campaign.medium
|
104
103
|
@sessionopts[:campaign_medium] ||= "(none)"
|
104
|
+
|
105
|
+
@sessionopts.delete(:campaign_keyword)
|
106
|
+
@sessionopts[:campaign_keyword] = campaign.keyword if campaign.keyword
|
105
107
|
|
106
|
-
@sessionopts
|
107
|
-
|
108
|
-
@sessionopts[:campaign_content] = campaign.content if campaign.content.present?
|
108
|
+
@sessionopts.delete(:campaign_content)
|
109
|
+
@sessionopts[:campaign_content] = campaign.content if campaign.content
|
109
110
|
end
|
110
111
|
end
|
111
112
|
end
|
112
113
|
|
114
|
+
|
115
|
+
private
|
113
116
|
# Sanity check that we have needed params to even call GA
|
114
117
|
def validate_session_parameters(params)
|
115
|
-
raise GoogleAnalyticsRequiredParameterMissingError, "Protocol version is required" unless params[:protocol_version]
|
116
|
-
raise GoogleAnalyticsRequiredParameterMissingError, "Tracking id is required" unless params[:tracking_id]
|
117
|
-
raise GoogleAnalyticsRequiredParameterMissingError, "Client id is required" unless params[:client_id]
|
118
|
-
raise GoogleAnalyticsRequiredParameterMissingError, "Hit type is required" unless params[:hit_type]
|
118
|
+
raise GoogleAnalyticsRequiredParameterMissingError, "Protocol version is required" unless params[:protocol_version]
|
119
|
+
raise GoogleAnalyticsRequiredParameterMissingError, "Tracking id is required" unless params[:tracking_id]
|
120
|
+
raise GoogleAnalyticsRequiredParameterMissingError, "Client id is required" unless params[:client_id]
|
121
|
+
raise GoogleAnalyticsRequiredParameterMissingError, "Hit type is required" unless params[:hit_type]
|
119
122
|
|
120
123
|
params.keys.each do |param|
|
121
|
-
raise GoogleAnalyticsInvalidParameterError, "The parameter '#{param}' is not currently recognised." unless GA_PARAMS[param]
|
124
|
+
raise GoogleAnalyticsInvalidParameterError, "The parameter '#{param}' is not currently recognised." unless GA_PARAMS[param]
|
122
125
|
end
|
123
126
|
end
|
124
127
|
|
@@ -129,10 +132,10 @@ module GabbaGMP
|
|
129
132
|
|
130
133
|
@http ||= Net::HTTP::Persistent.new 'GabbaGMP'
|
131
134
|
|
132
|
-
|
135
|
+
@logger.info "GABBA_GMP: request params: #{query}" if @logger
|
133
136
|
|
134
137
|
request = Net::HTTP::Get.new("#{BEACON_PATH}?#{query}")
|
135
|
-
request["User-Agent"] = URI.escape(params[:user_agent])
|
138
|
+
request["User-Agent"] = URI.escape(params[:user_agent]) if params[:user_agent]
|
136
139
|
request["Accept"] = "*/*"
|
137
140
|
uri = URI "http://#{GOOGLE_HOST}/#{BEACON_PATH}"
|
138
141
|
response = @http.request(uri, request)
|
data/lib/gabba-gmp/page_view.rb
CHANGED
@@ -16,7 +16,8 @@ module GabbaGMP
|
|
16
16
|
hey(page_view_params(title, request.fullpath, options))
|
17
17
|
end
|
18
18
|
|
19
|
-
|
19
|
+
private
|
20
|
+
# Private: Renders the page view params data in the format needed for GA
|
20
21
|
# Called before actually sending the data along to GA.
|
21
22
|
def page_view_params(title, doc_path, options)
|
22
23
|
@sessionopts.merge({
|
data/lib/gabba-gmp/version.rb
CHANGED
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe GabbaGMP::GabbaGMP::Campaign do
|
4
|
+
describe "#present?" do
|
5
|
+
let(:campaign) { GabbaGMP::GabbaGMP::Campaign.new}
|
6
|
+
before do
|
7
|
+
campaign.name = "Campaign"
|
8
|
+
campaign.source = "Source"
|
9
|
+
campaign.medium = "Medium"
|
10
|
+
campaign.keyword = "Keyword"
|
11
|
+
campaign.content = "Content"
|
12
|
+
end
|
13
|
+
|
14
|
+
it "has variables set" do
|
15
|
+
expect(campaign.name).to eq("Campaign")
|
16
|
+
expect(campaign.source).to eq("Source")
|
17
|
+
expect(campaign.medium).to eq("Medium")
|
18
|
+
expect(campaign.keyword).to eq("Keyword")
|
19
|
+
expect(campaign.content).to eq("Content")
|
20
|
+
end
|
21
|
+
|
22
|
+
it "is present?" do
|
23
|
+
expect(campaign.present?).to be(true)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "is present? because of name" do
|
27
|
+
campaign = GabbaGMP::GabbaGMP::Campaign.new
|
28
|
+
campaign.name = 'X'
|
29
|
+
expect(campaign.present?).to be(true)
|
30
|
+
end
|
31
|
+
|
32
|
+
it "is present? because of source" do
|
33
|
+
campaign = GabbaGMP::GabbaGMP::Campaign.new
|
34
|
+
campaign.source = 'X'
|
35
|
+
expect(campaign.present?).to be(true)
|
36
|
+
end
|
37
|
+
|
38
|
+
it "is present? because of medium" do
|
39
|
+
campaign = GabbaGMP::GabbaGMP::Campaign.new
|
40
|
+
campaign.medium = 'X'
|
41
|
+
expect(campaign.present?).to be(true)
|
42
|
+
end
|
43
|
+
|
44
|
+
it "is present? because of keyword" do
|
45
|
+
campaign = GabbaGMP::GabbaGMP::Campaign.new
|
46
|
+
campaign.keyword = 'X'
|
47
|
+
expect(campaign.present?).to be(true)
|
48
|
+
end
|
49
|
+
|
50
|
+
it "is present? because of content" do
|
51
|
+
campaign = GabbaGMP::GabbaGMP::Campaign.new
|
52
|
+
campaign.content = 'X'
|
53
|
+
expect(campaign.present?).to be(true)
|
54
|
+
end
|
55
|
+
|
56
|
+
it "is not present?" do
|
57
|
+
campaign = GabbaGMP::GabbaGMP::Campaign.new
|
58
|
+
expect(campaign.present?).to be(false)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'pry'
|
3
|
+
|
4
|
+
describe GabbaGMP::GabbaGMP::CustomVars do
|
5
|
+
describe "#set_custom_var" do
|
6
|
+
let(:request) {MockRequest.new}
|
7
|
+
let(:cookies) {MockCookies.new(utm_visitor_uuid: 1234)}
|
8
|
+
let(:gabbaGmp) { GabbaGMP::GabbaGMP.new("tracker", request, cookies)}
|
9
|
+
before do
|
10
|
+
stub_analytics("")
|
11
|
+
end
|
12
|
+
|
13
|
+
#index, name, value
|
14
|
+
|
15
|
+
it "#set_custom_var(index, name, value) using pageview" do
|
16
|
+
gabbaGmp.set_custom_var(1, "Dogs", "Black")
|
17
|
+
gabbaGmp.page_view(request)
|
18
|
+
expect_query(MockRequest::DEFAULT_PARAMS.merge({v: "1", dt: "", tid: "tracker", cid: "1234", t: "pageview", dp: "", cd1: "Black"}))
|
19
|
+
|
20
|
+
gabbaGmp.set_custom_var(1, "Dog", "Spotty")
|
21
|
+
gabbaGmp.set_custom_var(2, "Lemming", "Fall")
|
22
|
+
gabbaGmp.set_custom_var(3, "Kite", "Surf")
|
23
|
+
gabbaGmp.set_custom_var(200, "Cabbage", "Patch")
|
24
|
+
gabbaGmp.page_view(request)
|
25
|
+
expect_query(MockRequest::DEFAULT_PARAMS.merge({v: "1", dt: "", tid: "tracker", cid: "1234", t: "pageview", dp: "",
|
26
|
+
cd1: "Spotty", cd2: "Fall", cd3: "Surf", cd200: "Patch"}))
|
27
|
+
|
28
|
+
expect {gabbaGmp.set_custom_var(201, "Cabbage", "Patch")}.to raise_error(GabbaGMP::GoogleAnalyticsInvalidParameterError)
|
29
|
+
|
30
|
+
gabbaGmp.page_view(request, nil, dimension_4: "Ni!!")
|
31
|
+
expect_query(MockRequest::DEFAULT_PARAMS.merge({v: "1", dt: "", tid: "tracker", cid: "1234", t: "pageview", dp: "",
|
32
|
+
cd1: "Spotty", cd2: "Fall", cd3: "Surf", cd200: "Patch", cd4: "Ni!!"}))
|
33
|
+
end
|
34
|
+
|
35
|
+
it "#set_custom_var(index, name, value) using event" do
|
36
|
+
gabbaGmp.set_custom_var(1, "Dogs", "Black")
|
37
|
+
gabbaGmp.event("Cats", "Action")
|
38
|
+
expect_query(MockRequest::DEFAULT_PARAMS.merge({v: "1", tid: "tracker", cid: "1234", t: "event",
|
39
|
+
ec: "Cats", ea: "Action", cd1: "Black"}))
|
40
|
+
|
41
|
+
gabbaGmp.set_custom_var(1, "Letting type", "Let's Go")
|
42
|
+
gabbaGmp.set_custom_var(2, "UFO", "Kite")
|
43
|
+
gabbaGmp.set_custom_var(200, "Kite", "Surf")
|
44
|
+
gabbaGmp.event("Cats", "Action")
|
45
|
+
expect_query(MockRequest::DEFAULT_PARAMS.merge({v: "1", tid: "tracker", cid: "1234", t: "event",
|
46
|
+
ec: "Cats", ea: "Action", cd1: "Let's Go", cd2: "Kite", cd200: "Surf"}))
|
47
|
+
|
48
|
+
expect {gabbaGmp.set_custom_var(201, "Cabbage", "Patch")}.to raise_error(GabbaGMP::GoogleAnalyticsInvalidParameterError)
|
49
|
+
|
50
|
+
gabbaGmp.event("Cats", "Action", nil, nil, dimension_3: "NOW!")
|
51
|
+
expect_query(MockRequest::DEFAULT_PARAMS.merge({v: "1", tid: "tracker", cid: "1234", t: "event",
|
52
|
+
ec: "Cats", ea: "Action", cd1: "Let's Go", cd2: "Kite", cd200: "Surf", cd3: "NOW!"}))
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'pry'
|
3
|
+
|
4
|
+
describe GabbaGMP::GabbaGMP::Event do
|
5
|
+
describe "#event" do
|
6
|
+
let(:request) {MockRequest.new}
|
7
|
+
let(:cookies) {MockCookies.new(utm_visitor_uuid: 1234)}
|
8
|
+
let(:gabbaGmp) { GabbaGMP::GabbaGMP.new("tracker", request, cookies)}
|
9
|
+
before do
|
10
|
+
stub_analytics("")
|
11
|
+
end
|
12
|
+
|
13
|
+
#category, action, label = nil, value = nil, options = {}
|
14
|
+
|
15
|
+
it "#event(category, action)" do
|
16
|
+
gabbaGmp.event("Cats", "Action")
|
17
|
+
expect_query(MockRequest::DEFAULT_PARAMS.merge({v: "1", tid: "tracker", cid: "1234", t: "event",
|
18
|
+
ec: "Cats", ea: "Action"}))
|
19
|
+
end
|
20
|
+
|
21
|
+
it "#event(category, action, label)" do
|
22
|
+
gabbaGmp.event("Cats", "Action", "Label")
|
23
|
+
expect_query(MockRequest::DEFAULT_PARAMS.merge({v: "1", tid: "tracker", cid: "1234", t: "event",
|
24
|
+
ec: "Cats", ea: "Action", el: "Label"}))
|
25
|
+
end
|
26
|
+
|
27
|
+
it "#event(category, action, label, value)" do
|
28
|
+
gabbaGmp.event("Cats", "Action", "Label", "Value")
|
29
|
+
expect_query(MockRequest::DEFAULT_PARAMS.merge({v: "1", tid: "tracker", cid: "1234", t: "event",
|
30
|
+
ec: "Cats", ea: "Action", el: "Label", ev: "Value"}))
|
31
|
+
end
|
32
|
+
|
33
|
+
it "#event(category, action, label, value, options)" do
|
34
|
+
gabbaGmp.event("Cats", "Action", "Label", "Value", user_language: "en-au")
|
35
|
+
expect_query(MockRequest::DEFAULT_PARAMS.merge({v: "1", tid: "tracker", cid: "1234", t: "event",
|
36
|
+
ec: "Cats", ea: "Action", el: "Label", ev: "Value", ul: "en-au"}))
|
37
|
+
end
|
38
|
+
|
39
|
+
it "must not interfere with other calls if using options" do
|
40
|
+
gabbaGmp.event("Cats", "Action", "Label", "Value", user_language: "en-au")
|
41
|
+
expect_query(MockRequest::DEFAULT_PARAMS.merge({v: "1", tid: "tracker", cid: "1234", t: "event",
|
42
|
+
ec: "Cats", ea: "Action", el: "Label", ev: "Value", ul: "en-au"}))
|
43
|
+
|
44
|
+
gabbaGmp.event("Cats", "Action", "Label", "Value")
|
45
|
+
expect_query(MockRequest::DEFAULT_PARAMS.merge({v: "1", tid: "tracker", cid: "1234", t: "event",
|
46
|
+
ec: "Cats", ea: "Action", el: "Label", ev: "Value"}))
|
47
|
+
|
48
|
+
gabbaGmp.event("Cats", "Action", "Label", "Value", document_path: "/path")
|
49
|
+
expect_query(MockRequest::DEFAULT_PARAMS.merge({v: "1", tid: "tracker", cid: "1234", t: "event",
|
50
|
+
ec: "Cats", ea: "Action", el: "Label", ev: "Value", dp: "/path"}))
|
51
|
+
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,139 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'pry'
|
3
|
+
|
4
|
+
describe GabbaGMP::GabbaGMP do
|
5
|
+
describe "#initialize" do
|
6
|
+
let(:request) {MockRequest.new}
|
7
|
+
let(:cookies) {MockCookies.new(utm_visitor_uuid: 1234, visitor_id: 567)}
|
8
|
+
before do
|
9
|
+
stub_analytics("")
|
10
|
+
end
|
11
|
+
|
12
|
+
#index, name, value
|
13
|
+
it "#initialize(ga_tracking_id, request, cookies)" do
|
14
|
+
gabba = GabbaGMP::GabbaGMP.new("tracker123", request, cookies)
|
15
|
+
gabba.event("Cats", "Action")
|
16
|
+
expect_query(MockRequest::DEFAULT_PARAMS.merge({v: "1", tid: "tracker123", cid: "1234", t: "event",
|
17
|
+
ec: "Cats", ea: "Action"}))
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
it "#initialize acceptLanguage" do
|
22
|
+
request.accept_language = "da , en-gb;q=0.8, en;q=0.7"
|
23
|
+
gabba = GabbaGMP::GabbaGMP.new("tracker123", request, cookies)
|
24
|
+
gabba.event("Cats", "Action")
|
25
|
+
expect_query(MockRequest::DEFAULT_PARAMS.merge({v: "1", tid: "tracker123", cid: "1234", t: "event",
|
26
|
+
ec: "Cats", ea: "Action", ul: "da"}))
|
27
|
+
end
|
28
|
+
|
29
|
+
it "#initialize referrer" do
|
30
|
+
request.referrer = "http://www.example.com/my-pages"
|
31
|
+
gabba = GabbaGMP::GabbaGMP.new("tracker123", request, cookies)
|
32
|
+
gabba.event("Cats", "Action")
|
33
|
+
expect_query(MockRequest::DEFAULT_PARAMS.merge({v: "1", tid: "tracker123", cid: "1234", t: "event",
|
34
|
+
ec: "Cats", ea: "Action"}))
|
35
|
+
|
36
|
+
request.referrer = "http://www.otherexample.com/my-pages"
|
37
|
+
gabba = GabbaGMP::GabbaGMP.new("tracker123", request, cookies)
|
38
|
+
gabba.event("Cats", "Action")
|
39
|
+
expect_query(MockRequest::DEFAULT_PARAMS.merge({v: "1", tid: "tracker123", cid: "1234", t: "event",
|
40
|
+
ec: "Cats", ea: "Action", dr: "http://www.otherexample.com/my-pages"}))
|
41
|
+
end
|
42
|
+
|
43
|
+
it "#initialize(ga_tracking_id, request, cookies, options = {})" do
|
44
|
+
gabba = GabbaGMP::GabbaGMP.new("tracker123", request, cookies, client_id_cookie_sym: :visitor_id)
|
45
|
+
gabba.event("Cats", "Action")
|
46
|
+
expect_query(MockRequest::DEFAULT_PARAMS.merge({v: "1", tid: "tracker123", cid: "567", t: "event",
|
47
|
+
ec: "Cats", ea: "Action"}))
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe "#add_options" do
|
52
|
+
let(:request) {MockRequest.new}
|
53
|
+
let(:cookies) {MockCookies.new(utm_visitor_uuid: 1234)}
|
54
|
+
let(:gabbaGmp) { GabbaGMP::GabbaGMP.new("tracker", request, cookies)}
|
55
|
+
before do
|
56
|
+
stub_analytics("")
|
57
|
+
end
|
58
|
+
it "#add_options(options)" do
|
59
|
+
gabbaGmp.add_options(user_language: "en-gb")
|
60
|
+
gabbaGmp.event("Cats", "Action")
|
61
|
+
expect_query(MockRequest::DEFAULT_PARAMS.merge({v: "1", tid: "tracker", cid: "1234", t: "event",
|
62
|
+
ec: "Cats", ea: "Action", ul: "en-gb"}))
|
63
|
+
|
64
|
+
gabbaGmp.add_options(dimension_1: "X", dimension_2: "Y", dimension_3: "Z")
|
65
|
+
gabbaGmp.event("Cats", "Action")
|
66
|
+
expect_query(MockRequest::DEFAULT_PARAMS.merge({v: "1", tid: "tracker", cid: "1234", t: "event",
|
67
|
+
ec: "Cats", ea: "Action", ul: "en-gb", cd1: "X", cd2: "Y", cd3: "Z"}))
|
68
|
+
|
69
|
+
gabbaGmp.set_custom_var(3, "Other Dimensions", "Time")
|
70
|
+
gabbaGmp.event("Cats", "Action")
|
71
|
+
expect_query(MockRequest::DEFAULT_PARAMS.merge({v: "1", tid: "tracker", cid: "1234", t: "event",
|
72
|
+
ec: "Cats", ea: "Action", ul: "en-gb", cd1: "X", cd2: "Y", cd3: "Time"}))
|
73
|
+
end
|
74
|
+
end
|
75
|
+
describe "#campaign=" do
|
76
|
+
let(:request) {MockRequest.new}
|
77
|
+
let(:cookies) {MockCookies.new(utm_visitor_uuid: 1234)}
|
78
|
+
let(:gabbaGmp) { GabbaGMP::GabbaGMP.new("tracker", request, cookies)}
|
79
|
+
before do
|
80
|
+
stub_analytics("")
|
81
|
+
end
|
82
|
+
it "#add_options(options)" do
|
83
|
+
campaign = GabbaGMP::GabbaGMP::Campaign.new()
|
84
|
+
campaign.name = "First Campaign"
|
85
|
+
campaign.source = "Bottle"
|
86
|
+
campaign.medium = "Spiritual"
|
87
|
+
campaign.keyword = "Ring"
|
88
|
+
campaign.content = "Campaigns"
|
89
|
+
|
90
|
+
gabbaGmp.campaign = campaign
|
91
|
+
gabbaGmp.event("Cats1", "Action")
|
92
|
+
expect_query(MockRequest::DEFAULT_PARAMS.merge({v: "1", tid: "tracker", cid: "1234", t: "event",
|
93
|
+
ec: "Cats1", ea: "Action", cn: "First Campaign", cs: "Bottle", cm: "Spiritual", ck: "Ring", cc: "Campaigns"}))
|
94
|
+
|
95
|
+
gabbaGmp.campaign = nil
|
96
|
+
gabbaGmp.event("Cats2", "Action")
|
97
|
+
expect_query(MockRequest::DEFAULT_PARAMS.merge({v: "1", tid: "tracker", cid: "1234", t: "event",
|
98
|
+
ec: "Cats2", ea: "Action", cn: "First Campaign", cs: "Bottle", cm: "Spiritual", ck: "Ring", cc: "Campaigns"}))
|
99
|
+
|
100
|
+
campaign = GabbaGMP::GabbaGMP::Campaign.new()
|
101
|
+
campaign.keyword = "Rings"
|
102
|
+
|
103
|
+
gabbaGmp.campaign = campaign
|
104
|
+
gabbaGmp.event("Cats", "Action")
|
105
|
+
expect_query(MockRequest::DEFAULT_PARAMS.merge({v: "1", tid: "tracker", cid: "1234", t: "event",
|
106
|
+
ec: "Cats", ea: "Action", cn: "(direct)", cs: "(direct)", cm: "(none)", ck: "Rings"}))
|
107
|
+
|
108
|
+
campaign = GabbaGMP::GabbaGMP::Campaign.new()
|
109
|
+
campaign.content = "Contents"
|
110
|
+
campaign.source = "Confidential"
|
111
|
+
|
112
|
+
gabbaGmp.campaign = campaign
|
113
|
+
gabbaGmp.event("Cats", "Action")
|
114
|
+
expect_query(MockRequest::DEFAULT_PARAMS.merge({v: "1", tid: "tracker", cid: "1234", t: "event",
|
115
|
+
ec: "Cats", ea: "Action", cn: "(direct)", cs: "Confidential", cm: "(none)", cc: "Contents"}))
|
116
|
+
end
|
117
|
+
end
|
118
|
+
describe "#campaign=" do
|
119
|
+
let(:request) {MockRequest.new}
|
120
|
+
let(:cookies) {MockCookies.new(utm_visitor_uuid: 1234)}
|
121
|
+
let(:gabbaGmp) { GabbaGMP::GabbaGMP.new("tracker", request, cookies)}
|
122
|
+
before do
|
123
|
+
stub_analytics("")
|
124
|
+
end
|
125
|
+
it "@logger" do
|
126
|
+
class LoggerClass
|
127
|
+
attr_accessor :info_message
|
128
|
+
def info(message)
|
129
|
+
@info_message = message
|
130
|
+
end
|
131
|
+
end
|
132
|
+
gabbaGmp.logger = LoggerClass.new
|
133
|
+
gabbaGmp.event("Cats1", "Action")
|
134
|
+
expect_query(MockRequest::DEFAULT_PARAMS.merge({v: "1", tid: "tracker", cid: "1234", t: "event",
|
135
|
+
ec: "Cats1", ea: "Action"}))
|
136
|
+
expect(gabbaGmp.logger.info_message).to eq("GABBA_GMP: request params: v=1&tid=tracker&dh=www.example.com&cid=1234&uip=1.2.3.4&ua=Chrome%2F1.0.0.0.0&ul=en-us&t=event&ec=Cats1&ea=Action")
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'pry'
|
3
|
+
|
4
|
+
describe GabbaGMP::GabbaGMP::PageView do
|
5
|
+
describe "#page_view" do
|
6
|
+
let(:request) {MockRequest.new}
|
7
|
+
let(:cookies) {MockCookies.new(utm_visitor_uuid: 1234)}
|
8
|
+
let(:gabbaGmp) { GabbaGMP::GabbaGMP.new("tracker", request, cookies)}
|
9
|
+
before do
|
10
|
+
stub_analytics("")
|
11
|
+
end
|
12
|
+
|
13
|
+
#request, title = nil, options = {}
|
14
|
+
|
15
|
+
it "#page_view(request)" do
|
16
|
+
gabbaGmp.page_view(request)
|
17
|
+
expect_query(MockRequest::DEFAULT_PARAMS.merge({v: "1", dt: "", tid: "tracker", cid: "1234", t: "pageview", dp: ""}))
|
18
|
+
|
19
|
+
request.fullpath = "/amazing/things"
|
20
|
+
gabbaGmp.page_view(request)
|
21
|
+
expect_query(MockRequest::DEFAULT_PARAMS.merge({v: "1", dt: "", tid: "tracker", cid: "1234", t: "pageview", dp: "/amazing/things"}))
|
22
|
+
end
|
23
|
+
|
24
|
+
it "#page_view(request, title)" do
|
25
|
+
gabbaGmp.page_view(request, "Title")
|
26
|
+
expect_query(MockRequest::DEFAULT_PARAMS.merge({v: "1", dt: "Title", tid: "tracker", cid: "1234", t: "pageview", dp: ""}))
|
27
|
+
end
|
28
|
+
|
29
|
+
it "#page_view(request, title, options)" do
|
30
|
+
gabbaGmp.page_view(request, "Title", {document_path: "/Nowhere"})
|
31
|
+
expect_query(MockRequest::DEFAULT_PARAMS.merge({v: "1", dt: "Title", tid: "tracker", cid: "1234", t: "pageview", dp: "/Nowhere"}))
|
32
|
+
end
|
33
|
+
|
34
|
+
it "must not interfere with other calls if using options" do
|
35
|
+
gabbaGmp.page_view(request, "Title", {document_path: "/Nowhere"})
|
36
|
+
expect_query(MockRequest::DEFAULT_PARAMS.merge({v: "1", dt: "Title", tid: "tracker", cid: "1234", t: "pageview", dp: "/Nowhere"}))
|
37
|
+
|
38
|
+
gabbaGmp.page_view(request)
|
39
|
+
expect_query(MockRequest::DEFAULT_PARAMS.merge({v: "1", dt: "", tid: "tracker", cid: "1234", t: "pageview", dp: ""}))
|
40
|
+
|
41
|
+
gabbaGmp.page_view(request, "Title", {user_language: "en-au"})
|
42
|
+
expect_query(MockRequest::DEFAULT_PARAMS.merge({v: "1", dt: "Title", tid: "tracker", cid: "1234", t: "pageview", ul: "en-au", dp: ""}))
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'gabba-gmp'
|
2
|
+
require 'rspec'
|
3
|
+
|
4
|
+
require 'webmock/rspec'
|
5
|
+
WebMock.disable_net_connect!
|
6
|
+
|
7
|
+
def stub_analytics(expected_params)
|
8
|
+
stub_request(
|
9
|
+
:get,
|
10
|
+
/www.google-analytics.com\/collect?#{expected_params}/
|
11
|
+
).to_return(:status => 200, :body => '', :headers => {})
|
12
|
+
end
|
13
|
+
|
14
|
+
def expect_query(query_params)
|
15
|
+
expect(WebMock).to have_requested(:get, "www.google-analytics.com\/collect").with(:query => query_params)
|
16
|
+
end
|
17
|
+
|
18
|
+
class MockCookies
|
19
|
+
def initialize(cookieSet = {})
|
20
|
+
@cookieList = cookieSet
|
21
|
+
end
|
22
|
+
|
23
|
+
def [](key)
|
24
|
+
@cookieList[key]
|
25
|
+
end
|
26
|
+
def []=(key, value)
|
27
|
+
@cookieList[key] = value[:value]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
class MockRequest
|
31
|
+
DEFAULT_PARAMS = {dh: "www.example.com",
|
32
|
+
uip: "1.2.3.4",
|
33
|
+
ua: "Chrome/1.0.0.0.0",
|
34
|
+
ul: "en-us",
|
35
|
+
}
|
36
|
+
attr_accessor :host, :remote_ip, :user_agent, :accept_language, :referrer, :fullpath, :protocol, :host_with_port
|
37
|
+
|
38
|
+
def initialize()
|
39
|
+
@host = DEFAULT_PARAMS[:dh]
|
40
|
+
@remote_ip = DEFAULT_PARAMS[:uip]
|
41
|
+
@user_agent = DEFAULT_PARAMS[:ua]
|
42
|
+
@accept_language = DEFAULT_PARAMS[:ul]
|
43
|
+
@referrer = DEFAULT_PARAMS[:dr]
|
44
|
+
@fullpath = DEFAULT_PARAMS[:dp]
|
45
|
+
@protocol = "http://"
|
46
|
+
@host_with_port = "www.example.com"
|
47
|
+
end
|
48
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gabba-gmp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Julian West
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-12-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: net-http-persistent
|
@@ -88,6 +88,12 @@ files:
|
|
88
88
|
- lib/gabba-gmp/page_view.rb
|
89
89
|
- lib/gabba-gmp/parameter_map.rb
|
90
90
|
- lib/gabba-gmp/version.rb
|
91
|
+
- spec/lib/campaign_spec.rb
|
92
|
+
- spec/lib/custom_vars_spec.rb
|
93
|
+
- spec/lib/event_spec.rb
|
94
|
+
- spec/lib/gabba_gmp_spec.rb
|
95
|
+
- spec/lib/page_view_spec.rb
|
96
|
+
- spec/spec_helper.rb
|
91
97
|
homepage: https://github.com/fuzzyjulz/gabba-gmp
|
92
98
|
licenses:
|
93
99
|
- MIT
|