split-analytics 0.3.0 → 0.4.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 1c137bdda5d58e5be423f480171b8db9a33ca43b
4
+ data.tar.gz: c2a14e14b278cccfd05b8173439eb30c1d45be2c
5
+ SHA512:
6
+ metadata.gz: 75686f802c2e7089d5fa8b0653c7a063c90cf3cfb9058d58fcff56a981a3d0c26eb58bd0a84d7fd15601b7c4711ccc33991b8fbd1a18a63d80f933eaddece03c
7
+ data.tar.gz: d0a2ed6631741fc21ba09282f92524060e27cf98a0581dbe2b005d61e18a6ee7c82971c8ff7c3e117f09e6c8e53fc096a73acf4a04de6b3fc7e532d222d6ba29
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2011 Andrew Nesbitt
1
+ Copyright (c) 2013 Andrew Nesbitt
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/Readme.mdown CHANGED
@@ -10,29 +10,83 @@ The split gem and its dependencies.
10
10
 
11
11
  If you are using bundler add split to your Gemfile:
12
12
 
13
- gem 'split-analytics', :require => 'split/analytics'
13
+ ```ruby
14
+ gem 'split-analytics', :require => 'split/analytics'
15
+ ```
14
16
 
15
17
  Then run:
16
18
 
17
- bundle install
19
+ ```bash
20
+ bundle install
21
+ ```
18
22
 
19
23
  Otherwise install the gem:
20
24
 
21
- gem install split-analytics
25
+ ```bash
26
+ gem install split-analytics
27
+ ```
22
28
 
23
29
  and require it in your project:
24
30
 
25
- require 'split/analytics'
31
+ ```ruby
32
+ require 'split/analytics'
33
+ ```
26
34
 
27
35
  ## Usage
28
36
 
29
37
  Use in your application layout template
30
38
 
31
- # erb
32
- <%= tracking_code(:account => 'UA-12345-6') %>
39
+ erb example:
33
40
 
34
- # haml
35
- = tracking_code(:account => 'UA-12345-6')
41
+ ```erb
42
+ <%= tracking_code(:account => 'UA-12345-6') %>
43
+ ```
44
+
45
+ haml example:
46
+
47
+ ```haml
48
+ = tracking_code(:account => 'UA-12345-6')
49
+ ```
50
+
51
+ ### With Tracking Methods
52
+
53
+ See [Google Analytics Tracking Methods](https://developers.google.com/analytics/devguides/collection/gajs/methods/) for available options.
54
+
55
+ ```
56
+ tracker_methods = {
57
+ :setDomainName => "example.com", # String argument
58
+ :setAllowLinker => true, # Boolean argument
59
+ :require => ['inpage_linkid', '//www.google-analytics.com/plugins/ga/inpage_linkid.js'] # Array argument (will be splattered)
60
+ :clearOrganic => "" # No argument
61
+ }
62
+ ```
63
+
64
+ erb example:
65
+
66
+ ```erb
67
+ <%= tracking_code(:account => 'UA-12345-6', :tracker_methods => tracker_methods) %>
68
+ ```
69
+
70
+ haml example:
71
+
72
+ ```haml
73
+ = tracking_code(:account => 'UA-12345-6', :tracker_methods => tracker_methods)
74
+ ```
75
+ ### Other Tracking URLs
76
+
77
+ You can use other Tracking URLs with the option tracker_url and ssl_tracker_url.
78
+
79
+ erb example:
80
+
81
+ ```erb
82
+ <%= tracking_code(:account => 'UA-12345-6', :tracker_url => 'stats.g.doubleclick.net/dc.js', :ssl_tracker_url => 'stats.g.doubleclick.net/dc.js') %>
83
+ ```
84
+
85
+ haml example:
86
+
87
+ ```haml
88
+ = tracking_code(:account => 'UA-12345-6', :tracker_url => 'stats.g.doubleclick.net/dc.js', :ssl_tracker_url => 'stats.g.doubleclick.net/dc.js')
89
+ ```
36
90
 
37
91
  ## Development
38
92
 
@@ -53,4 +107,4 @@ Tests can be ran with `rake spec`
53
107
 
54
108
  ## Copyright
55
109
 
56
- Copyright (c) 2011 Andrew Nesbitt. See LICENSE for details.
110
+ Copyright (c) 2013 Andrew Nesbitt. See LICENSE for details.
@@ -5,18 +5,23 @@ module Split
5
5
  def tracking_code(options={})
6
6
  # needs more options: http://code.google.com/apis/analytics/docs/gaJS/gaJSApi.html
7
7
  account = options.delete(:account)
8
+ tracker_url = options.delete(:tracker_url)
9
+ ssl_tracker_url = options.delete(:ssl_tracker_url)
10
+ tracker_methods = options.delete(:tracker_methods)
11
+
12
+ tracker_url = 'http://' + (tracker_url || 'www.google-analytics.com/ga.js')
13
+ ssl_tracker_url = 'https://' + (ssl_tracker_url || 'ssl.google-analytics.com/ga.js')
8
14
 
9
15
  code = <<-EOF
10
16
  <script type="text/javascript">
11
17
  var _gaq = _gaq || [];
12
18
  _gaq.push(['_setAccount', '#{account}']);
19
+ #{insert_tracker_methods(tracker_methods)}
13
20
  #{custom_variables}
14
21
  _gaq.push(['_trackPageview']);
15
- _gaq.push(['_trackPageLoadTime']);
16
-
17
22
  (function() {
18
23
  var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
19
- ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
24
+ ga.src = ('https:' == document.location.protocol ? '#{ssl_tracker_url}' : '#{tracker_url}');
20
25
  var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
21
26
  })();
22
27
  </script>
@@ -33,6 +38,36 @@ module Split
33
38
  end
34
39
  arr.reverse[0..4].reverse.join("\n")
35
40
  end
41
+
42
+ private
43
+
44
+ def insert_tracker_methods(tracker_methods)
45
+ return nil if tracker_methods.nil?
46
+ arr = []
47
+ tracker_methods.each do |k,v|
48
+ if v.class == String && v.empty?
49
+ # No argument tracker method
50
+ arr << "_gaq.push(['" + "_" + "#{k}']);"
51
+ else
52
+ case v
53
+ when String
54
+ # String argument tracker method
55
+ arr << "_gaq.push(['" + "_" + "#{k}', '#{v}']);"
56
+ when TrueClass
57
+ # Boolean argument tracker method
58
+ arr << "_gaq.push(['" + "_" + "#{k}', #{v}]);"
59
+ when FalseClass
60
+ # Boolean argument tracker method
61
+ arr << "_gaq.push(['" + "_" + "#{k}', #{v}]);"
62
+ when Array
63
+ # Array argument tracker method
64
+ values = v.map { |value| "'#{value}'" }.join(', ')
65
+ arr << "_gaq.push(['" + "_" + "#{k}', #{values}]);"
66
+ end
67
+ end
68
+ end
69
+ arr.join("\n")
70
+ end
36
71
  end
37
72
  end
38
73
 
@@ -1,5 +1,5 @@
1
1
  module Split
2
2
  module Analytics
3
- VERSION = "0.3.0"
3
+ VERSION = "0.4.0"
4
4
  end
5
5
  end
@@ -4,7 +4,17 @@ describe Split::Analytics do
4
4
  include Split::Helper
5
5
  it "should generate valid analytics javascript" do
6
6
  tracking_code = tracking_code(:account => 'UA-12345-6')
7
- tracking_code.should eql(" <script type=\"text/javascript\">\n var _gaq = _gaq || [];\n _gaq.push(['_setAccount', 'UA-12345-6']);\n \n _gaq.push(['_trackPageview']);\n _gaq.push(['_trackPageLoadTime']);\n\n (function() {\n var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;\n ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';\n var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n })();\n </script>\n")
7
+ tracking_code.should eql(" <script type=\"text/javascript\">\n var _gaq = _gaq || [];\n _gaq.push(['_setAccount', 'UA-12345-6']);\n \n \n _gaq.push(['_trackPageview']);\n (function() {\n var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;\n ga.src = ('https:' == document.location.protocol ? 'https://ssl.google-analytics.com/ga.js' : 'http://www.google-analytics.com/ga.js');\n var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n })();\n </script>\n")
8
+ end
9
+
10
+ it "should generate valid analytics javascript with arbitrary tracker object methods" do
11
+ tracker_methods = {
12
+ :setDomainName => "example.com", # String argument
13
+ :setAllowLinker => true, # Boolean argument
14
+ :clearOrganic => "" # No argument
15
+ }
16
+ tracking_code = tracking_code(:account => 'UA-12345-6', :tracker_methods => tracker_methods)
17
+ tracking_code.should eql(" <script type=\"text/javascript\">\n var _gaq = _gaq || [];\n _gaq.push(['_setAccount', 'UA-12345-6']);\n _gaq.push(['_setDomainName', 'example.com']);\n_gaq.push(['_setAllowLinker', true]);\n_gaq.push(['_clearOrganic']);\n \n _gaq.push(['_trackPageview']);\n (function() {\n var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;\n ga.src = ('https:' == document.location.protocol ? 'https://ssl.google-analytics.com/ga.js' : 'http://www.google-analytics.com/ga.js');\n var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n })();\n </script>\n")
8
18
  end
9
19
 
10
20
  it "should add custom variables for every test the user is involved in" do
@@ -14,6 +24,11 @@ describe Split::Analytics do
14
24
  session[:split].should eql({'link_colour' => first_alt,'link_text' => second_alt})
15
25
 
16
26
  tracking_code = tracking_code(:account => 'UA-12345-6')
17
- tracking_code.should eql(" <script type=\"text/javascript\">\n var _gaq = _gaq || [];\n _gaq.push(['_setAccount', 'UA-12345-6']);\n _gaq.push(['_setCustomVar', 1, 'link_colour', '#{first_alt}', 1]);\n_gaq.push(['_setCustomVar', 2, 'link_text', '#{second_alt}', 1]);\n _gaq.push(['_trackPageview']);\n _gaq.push(['_trackPageLoadTime']);\n\n (function() {\n var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;\n ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';\n var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n })();\n </script>\n")
27
+ tracking_code.should eql(" <script type=\"text/javascript\">\n var _gaq = _gaq || [];\n _gaq.push(['_setAccount', 'UA-12345-6']);\n _gaq.push(['_setCustomVar', 1, 'link_colour', '#{first_alt}', 1]);\n_gaq.push(['_setCustomVar', 2, 'link_text', '#{second_alt}', 1]);\n\n (function() {\n var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;\n ga.src = ('https:' == document.location.protocol ? 'https://ssl.google-analytics.com/ga.js' : 'http://www.google-analytics.com/ga.js');\n var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n })();\n </script>\n")
28
+ end
29
+
30
+ it "uses doubleclick as tracker url" do
31
+ tracking_code = tracking_code(:account => 'UA-12345-6', :tracker_url => 'stats.g.doubleclick.net/dc.js', :ssl_tracker_url => 'stats.g.doubleclick.net/dc.js')
32
+ tracking_code.should eql(" <script type=\"text/javascript\">\n var _gaq = _gaq || [];\n _gaq.push(['_setAccount', 'UA-12345-6']);\n \n \n _gaq.push(['_trackPageview']);\n (function() {\n var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;\n ga.src = ('https:' == document.location.protocol ? 'https://stats.g.doubleclick.net/dc.js' : 'http://stats.g.doubleclick.net/dc.js');\n var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n })();\n </script>\n")
18
33
  end
19
34
  end
data/spec/spec_helper.rb CHANGED
@@ -18,4 +18,4 @@ def request(ua = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; de-de) Apple
18
18
  r.user_agent = ua
19
19
  r.ip = '192.168.1.1'
20
20
  @request ||= r
21
- end
21
+ end
@@ -7,6 +7,7 @@ Gem::Specification.new do |gem|
7
7
  gem.email = ["andrewnez@gmail.com"]
8
8
  gem.summary = %q{Split extension to push test data to google analytics}
9
9
  gem.homepage = "https://github.com/andrew/split-analytics"
10
+ gem.license = 'MIT'
10
11
 
11
12
  gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
12
13
  gem.files = `git ls-files`.split("\n")
@@ -15,8 +16,8 @@ Gem::Specification.new do |gem|
15
16
  gem.require_paths = ['lib']
16
17
  gem.version = Split::Analytics::VERSION
17
18
 
18
- gem.add_dependency(%q<split>, ["~> 0.3"])
19
+ gem.add_dependency(%q<split>, [">= 0.3.0"])
19
20
 
20
21
  # Development Dependencies
21
- gem.add_development_dependency(%q<rspec>, ["~> 2.6"])
22
+ gem.add_development_dependency(%q<rspec>, ["~> 2.14"])
22
23
  end
metadata CHANGED
@@ -1,63 +1,50 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: split-analytics
3
- version: !ruby/object:Gem::Version
4
- hash: 19
5
- prerelease: false
6
- segments:
7
- - 0
8
- - 3
9
- - 0
10
- version: 0.3.0
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.4.0
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - Andrew Nesbitt
14
8
  autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
-
18
- date: 2011-12-13 00:00:00 +00:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
11
+ date: 2014-03-20 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
22
14
  name: split
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ~>
28
- - !ruby/object:Gem::Version
29
- hash: 13
30
- segments:
31
- - 0
32
- - 3
33
- version: "0.3"
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: 0.3.0
34
20
  type: :runtime
35
- version_requirements: *id001
36
- - !ruby/object:Gem::Dependency
37
- name: rspec
38
21
  prerelease: false
39
- requirement: &id002 !ruby/object:Gem::Requirement
40
- none: false
41
- requirements:
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: 0.3.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
42
31
  - - ~>
43
- - !ruby/object:Gem::Version
44
- hash: 15
45
- segments:
46
- - 2
47
- - 6
48
- version: "2.6"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.14'
49
34
  type: :development
50
- version_requirements: *id002
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '2.14'
51
41
  description:
52
- email:
42
+ email:
53
43
  - andrewnez@gmail.com
54
44
  executables: []
55
-
56
45
  extensions: []
57
-
58
46
  extra_rdoc_files: []
59
-
60
- files:
47
+ files:
61
48
  - .gitignore
62
49
  - Gemfile
63
50
  - LICENSE
@@ -68,40 +55,30 @@ files:
68
55
  - spec/analytics_spec.rb
69
56
  - spec/spec_helper.rb
70
57
  - split-analytics.gemspec
71
- has_rdoc: true
72
58
  homepage: https://github.com/andrew/split-analytics
73
- licenses: []
74
-
59
+ licenses:
60
+ - MIT
61
+ metadata: {}
75
62
  post_install_message:
76
63
  rdoc_options: []
77
-
78
- require_paths:
64
+ require_paths:
79
65
  - lib
80
- required_ruby_version: !ruby/object:Gem::Requirement
81
- none: false
82
- requirements:
83
- - - ">="
84
- - !ruby/object:Gem::Version
85
- hash: 3
86
- segments:
87
- - 0
88
- version: "0"
89
- required_rubygems_version: !ruby/object:Gem::Requirement
90
- none: false
91
- requirements:
92
- - - ">="
93
- - !ruby/object:Gem::Version
94
- hash: 3
95
- segments:
96
- - 0
97
- version: "0"
66
+ required_ruby_version: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ required_rubygems_version: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
98
76
  requirements: []
99
-
100
77
  rubyforge_project:
101
- rubygems_version: 1.3.7
78
+ rubygems_version: 2.0.3
102
79
  signing_key:
103
- specification_version: 3
80
+ specification_version: 4
104
81
  summary: Split extension to push test data to google analytics
105
- test_files:
82
+ test_files:
106
83
  - spec/analytics_spec.rb
107
84
  - spec/spec_helper.rb