split-analytics 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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