ga_cookie_parser 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source "http://rubygems.org"
1
+ source "https://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in ga_cookie_parser.gemspec
4
4
  gemspec
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ga_cookie_parser (0.0.1)
4
+ ga_cookie_parser (0.1.0)
5
5
 
6
6
  GEM
7
7
  remote: http://rubygems.org/
data/README.rdoc CHANGED
@@ -1,44 +1,58 @@
1
1
  = Google Analytics Cookie Parser
2
2
 
3
- Simple ruby library for parsing the __umtz and __umta cookies which Google Analytics uses to track referrers and visitors.
3
+ Simple ruby library for parsing the __umtz, __umtb and __umta cookies which Google Analytics uses to track referrers and visitors.
4
4
 
5
5
  You may wish to use this library to integrate data from Google Analytics into your internal CRM or sales tracking application.
6
6
 
7
+ == Installation
8
+
9
+ The library is available as a gem.
10
+
11
+ gem install ga_cookie_parser
12
+
7
13
  == Usage
8
14
 
9
15
  Create an instance, or use the convenience method GaCookieParser.parse, providing a hash with keys :umtz and/or :umtz as argument.
10
16
 
11
- utmz = cookies["__utmz"] # in a rails controller context
12
- utma = cookies["__utma"]
13
-
14
- @data = GaCookieParser::GaCookieParser.new(:utmz => utmz, :utma => utma)
15
-
16
- Then, @data provides #utmz_hash and #utma_hash methods which return hashes as follows:
17
-
18
- # @data.utmz_hash
19
- # note that not all of these will be present, and some are mutually exclusive
20
- {
21
- :domain_hash => '12979384',
22
- :timestamp => '1294887021', # unix timestamp
23
- :session_counter => '1',
24
- :campaign_number => '1',
25
- :utmcsr => 'google', # source
26
- :utmccn => '(organic)', # campaign name
27
- :utmcmd => 'organic', # medium
28
- :utmctr => 'search term', # term(s)
29
- :utmcct => '/ref.php, # content (referring page in case of referrals)
30
- :utmgclid => 'CI7wh8C6tKYCFU2DpAod7z97IQ' # gclid, linking referral back to adwords
31
- }
32
-
33
- # @data.utma_hash
34
- {
35
- :domain_hash => '12979384',
36
- :visitor_id => '1392679796', # a random number
37
- :initial_visit_at => '1289844797', # unix timestamp
38
- :previous_visit_at => '1294798990', # unix timestamp
39
- :current_visit_at => '1294866800', # unix timestamp
40
- :session_counter => '1'
41
- }
17
+ utmz = cookies["__utmz"] # in a rails controller context
18
+ utmb = cookies["__utmb"]
19
+ utma = cookies["__utma"]
20
+ @data = GaCookieParser::GaCookieParser.new(:utmz => utmz, :utmb => utmb, :utma => utma)
21
+
22
+ Then, @data provides #utmz_hash, #utmb_hash and #utma_hash methods which return hashes as follows:
23
+
24
+ # @data.utmz_hash
25
+ # note that not all of these will be present, and some are mutually exclusive
26
+ {
27
+ :domain_hash => '12979384',
28
+ :timestamp => '1294887021', # unix timestamp
29
+ :session_counter => '1',
30
+ :campaign_number => '1',
31
+ :utmcsr => 'google', # source
32
+ :utmccn => '(organic)', # campaign name
33
+ :utmcmd => 'organic', # medium
34
+ :utmctr => 'search term', # term(s)
35
+ :utmcct => '/ref.php, # content (referring page in case of referrals)
36
+ :utmgclid => 'CI7wh8C6tKYCFU2DpAod7z97IQ' # gclid, linking referral back to adwords
37
+ }
38
+
39
+ # @data.utma_hash
40
+ {
41
+ :domain_hash => '12979384',
42
+ :visitor_id => '1392679796', # a random number
43
+ :initial_visit_at => '1289844797', # unix timestamp
44
+ :previous_visit_at => '1294798990', # unix timestamp
45
+ :current_visit_at => '1294866800', # unix timestamp
46
+ :session_counter => '1'
47
+ }
48
+
49
+ # @data.utmb_hash
50
+ {
51
+ :domain_hash => '12979384',
52
+ :pageview => '3', # pageview count in this 30 min session
53
+ :outbound_click => '10', # number of outbound links clicked counting down from 10
54
+ :timestamp => '1294866800' # current timestamp
55
+ }
42
56
 
43
57
  == Notes
44
58
 
@@ -49,6 +63,14 @@ Documentation on these cookies is somewhat sparse. Here are the main resources u
49
63
  * {UPDATED: Integrating Google Analytics with a CRM}[http://cutroni.com/blog/2009/03/18/updated-integrating-google-analytics-with-a-crm/] blog post by Justin Cutroni
50
64
  * {GA Basics: The Structure of Cookie Values}[http://blog.vkistudios.com/index.cfm/2010/8/31/GA-Basics-The-Structure-of-Cookie-Values] blog post by VKI Studios
51
65
  * {Python Google Analytics Cookie Parser}[https://github.com/RyOnLife/Python-Google-Analytics-Cookie-Parser] (from which I borrowed some variable names)
66
+ * {Google Analytics Cookies (utma, utmb, utmz)}[http://www.webtrafficexchange.com/google-analytics-cookies-utma-utmb-utmz] (includes utmb structure)
67
+
68
+ === UTMB
69
+
70
+ Was harder to find documentation on this (thanks to dominikform for the PR). The final link above contains the following details, copied here in case they disappear:
71
+
72
+ The content of the cookie include domain hash, pageview, number of outbound link click
73
+ counting down from 10, and current time stamp
52
74
 
53
75
  == Copyright
54
76
 
@@ -10,7 +10,7 @@ Gem::Specification.new do |s|
10
10
  s.email = ["shrobson@gmail.com"]
11
11
  s.homepage = ""
12
12
  s.summary = %q{Google Analytics Cookie Parsing Gem}
13
- s.description = %q{Gem to parse the utmz and utma tracking coockies used by Google Analytics.}
13
+ s.description = %q{Gem to parse the utmz, utmb and utma tracking coockies used by Google Analytics.}
14
14
 
15
15
  s.rubyforge_project = "ga_cookie_parser"
16
16
 
@@ -7,10 +7,11 @@ module GaCookieParser
7
7
 
8
8
  class GaCookieParser
9
9
 
10
- attr_reader :utmz, :utma, :utmz_hash, :utma_hash
10
+ attr_reader :utmz, :utmb, :utma, :utmz_hash, :utmb_hash, :utma_hash
11
11
 
12
12
  def initialize(cookies = {})
13
13
  @utmz = cookies[:utmz]
14
+ @utmb = cookies[:utmb]
14
15
  @utma = cookies[:utma]
15
16
  parse_cookies
16
17
  end
@@ -19,12 +20,17 @@ module GaCookieParser
19
20
  !(@utmz.nil? || @utmz.empty?)
20
21
  end
21
22
 
23
+ def utmb?
24
+ !(@utmb.nil? || @utmb.empty?)
25
+ end
26
+
22
27
  def utma?
23
28
  !(@utma.nil? || @utma.empty?)
24
29
  end
25
30
 
26
31
  def parse_cookies
27
32
  parse_utmz
33
+ parse_utmb
28
34
  parse_utma
29
35
  end
30
36
 
@@ -45,6 +51,12 @@ module GaCookieParser
45
51
 
46
52
  end
47
53
 
54
+ def parse_utmb
55
+ return if (@utmb.nil? || @utmb.empty?)
56
+ @utmb_hash = h = {}
57
+ h[:domain_hash], h[:pageview], h[:outbound_click], h[:timestamp] = @utmb.split(".")
58
+ end
59
+
48
60
  def parse_utma
49
61
  return if (@utma.nil? || @utma.empty?)
50
62
  @utma_hash = h = {}
@@ -1,3 +1,3 @@
1
1
  module GaCookieParser
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -5,6 +5,7 @@ class GaCookieParserTest < Test::Unit::TestCase
5
5
 
6
6
  def setup
7
7
  @utmz = "12979384.1294887021.1.2.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=test terms"
8
+ @utmb = "12979384.2.10.1294866800"
8
9
  @utma = "12979384.1392679796.1289844797.1294798990.1294866800.4"
9
10
  end
10
11
 
@@ -14,25 +15,28 @@ class GaCookieParserTest < Test::Unit::TestCase
14
15
  @result = GaCookieParser.new
15
16
  end
16
17
 
17
- should "result in nil values for utmz and utma" do
18
+ should "result in nil values for utmz, utmb and utma" do
18
19
  assert_nil @result.utma
20
+ assert_nil @result.utmb
19
21
  assert_nil @result.utmz
20
22
  end
21
23
  end
22
24
 
23
25
  context "creating a parser with a hash of raw cookie values" do
24
26
  setup do
25
- @result = GaCookieParser.new(:utmz => @utmz, :utma => @utma)
27
+ @result = GaCookieParser.new(:utmz => @utmz, :utmb => @utmb, :utma => @utma)
26
28
  end
27
29
 
28
- should "provide access to the raw values through utmz and utma" do
30
+ should "provide access to the raw values through utmz, utmb and utma" do
29
31
  assert !@result.utmz.nil?
30
32
  assert_equal @utma, @result.utma
33
+ assert_equal @utmb, @result.utmb
31
34
  assert_equal @utmz, @result.utmz
32
35
  end
33
36
 
34
- should "provide access to the parsed cookie hashes through utmz_hash and utma_hash" do
37
+ should "provide access to the parsed cookie hashes through utmz_hash, utmb_hash and utma_hash" do
35
38
  assert_not_nil @result.utmz_hash
39
+ assert_not_nil @result.utmb_hash
36
40
  assert_not_nil @result.utma_hash
37
41
  end
38
42
 
@@ -50,6 +54,14 @@ class GaCookieParserTest < Test::Unit::TestCase
50
54
  assert_nil @p[:utmgclid]
51
55
  end
52
56
 
57
+ should "accurately parse the utmb cookie" do
58
+ @p = @result.utmb_hash
59
+ assert_equal '12979384', @p[:domain_hash]
60
+ assert_equal '2', @p[:pageview]
61
+ assert_equal '10', @p[:outbound_click]
62
+ assert_equal '1294866800', @p[:timestamp]
63
+ end
64
+
53
65
  should "accurately parse the utma cookie" do
54
66
  @p = @result.utma_hash
55
67
  assert_equal '12979384', @p[:domain_hash]
@@ -64,21 +76,29 @@ class GaCookieParserTest < Test::Unit::TestCase
64
76
 
65
77
  context "creating a parser with some cookie values missing" do
66
78
  setup do
67
- @missing_utmz = GaCookieParser.new(:utma => @utma)
68
- @missing_utma = GaCookieParser.new(:utmz => @utmz)
79
+ @missing_utmz = GaCookieParser.new(:utma => @utma, :utmb => @utmb)
80
+ @missing_utma = GaCookieParser.new(:utmb => @utmb, :utmz => @utmz)
81
+ @missing_utmb = GaCookieParser.new(:utma => @utma, :utmz => @utmz)
69
82
  end
70
83
 
71
84
  should "return nil for the parsed hashes of those cookies" do
72
85
  assert_nil @missing_utmz.utmz_hash
86
+ assert_nil @missing_utmb.utmb_hash
73
87
  assert_nil @missing_utma.utma_hash
74
88
  end
75
89
 
76
90
  should "indicate the values are not present" do
77
91
  assert !@missing_utmz.utmz?
78
- assert @missing_utmz.utma?
92
+ assert @missing_utmz.utma?
93
+ assert @missing_utmz.utmb?
79
94
 
80
95
  assert !@missing_utma.utma?
81
96
  assert @missing_utma.utmz?
97
+ assert @missing_utma.utmb?
98
+
99
+ assert !@missing_utmb.utmb?
100
+ assert @missing_utmb.utmz?
101
+ assert @missing_utmb.utma?
82
102
  end
83
103
  end
84
104
 
@@ -105,12 +125,13 @@ class GaCookieParserTest < Test::Unit::TestCase
105
125
 
106
126
  context "calling the parse method on the module" do
107
127
  setup do
108
- @result = ::GaCookieParser.parse(:utmz => @utmz, :utma => @utma)
128
+ @result = ::GaCookieParser.parse(:utmz => @utmz, :utmb => @utmb, :utma => @utma)
109
129
  end
110
130
 
111
131
  should "return a GaCookieParser instance correctly initialized" do
112
132
  assert @result.is_a?(::GaCookieParser::GaCookieParser)
113
133
  assert_not_nil @result.utmz_hash
134
+ assert_not_nil @result.utmb_hash
114
135
  assert_not_nil @result.utma_hash
115
136
  end
116
137
 
@@ -118,7 +139,7 @@ class GaCookieParserTest < Test::Unit::TestCase
118
139
 
119
140
  context "parsing a bad cookie" do
120
141
  setup do
121
- @result = GaCookieParser.new(:utmz => "123XXX", :utma => "\"jk.,./l;o.mnhhlk")
142
+ @result = GaCookieParser.new(:utmz => "123XXX", :utmb => "lkvlveef", :utma => "\"jk.,./l;o.mnhhlk")
122
143
  end
123
144
 
124
145
  should "not throw an error" do
metadata CHANGED
@@ -1,44 +1,40 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: ga_cookie_parser
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 1
8
- - 0
9
- version: 0.1.0
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ prerelease:
10
6
  platform: ruby
11
- authors:
7
+ authors:
12
8
  - Simon Robson
13
9
  autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
-
17
- date: 2011-01-16 00:00:00 +07:00
18
- default_executable:
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2013-05-13 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: shoulda
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- requirements:
25
- - - ">="
26
- - !ruby/object:Gem::Version
27
- segments:
28
- - 0
29
- version: "0"
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
30
22
  type: :development
31
- version_requirements: *id001
32
- description: Gem to parse the utmz and utma tracking coockies used by Google Analytics.
33
- email:
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ description: Gem to parse the utmz, utmb and utma tracking coockies used by Google
31
+ Analytics.
32
+ email:
34
33
  - shrobson@gmail.com
35
34
  executables: []
36
-
37
35
  extensions: []
38
-
39
36
  extra_rdoc_files: []
40
-
41
- files:
37
+ files:
42
38
  - .gitignore
43
39
  - Gemfile
44
40
  - Gemfile.lock
@@ -50,36 +46,30 @@ files:
50
46
  - lib/ga_cookie_parser/version.rb
51
47
  - test/ga_cookie_parser_test.rb
52
48
  - test/test_helper.rb
53
- has_rdoc: true
54
- homepage: ""
49
+ homepage: ''
55
50
  licenses: []
56
-
57
51
  post_install_message:
58
52
  rdoc_options: []
59
-
60
- require_paths:
53
+ require_paths:
61
54
  - lib
62
- required_ruby_version: !ruby/object:Gem::Requirement
63
- requirements:
64
- - - ">="
65
- - !ruby/object:Gem::Version
66
- segments:
67
- - 0
68
- version: "0"
69
- required_rubygems_version: !ruby/object:Gem::Requirement
70
- requirements:
71
- - - ">="
72
- - !ruby/object:Gem::Version
73
- segments:
74
- - 0
75
- version: "0"
55
+ required_ruby_version: !ruby/object:Gem::Requirement
56
+ none: false
57
+ requirements:
58
+ - - ! '>='
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ required_rubygems_version: !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ! '>='
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
76
67
  requirements: []
77
-
78
68
  rubyforge_project: ga_cookie_parser
79
- rubygems_version: 1.3.6
69
+ rubygems_version: 1.8.25
80
70
  signing_key:
81
71
  specification_version: 3
82
72
  summary: Google Analytics Cookie Parsing Gem
83
- test_files:
73
+ test_files:
84
74
  - test/ga_cookie_parser_test.rb
85
75
  - test/test_helper.rb