analytical 1.6.0 → 1.7.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.
- data/README.rdoc +11 -1
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/analytical.gemspec +4 -4
- data/lib/analytical/base.rb +15 -7
- data/lib/analytical/console.rb +7 -1
- data/lib/analytical/kiss_metrics.rb +5 -1
- data/spec/analytical/base_spec.rb +9 -5
- data/spec/analytical/chartbeat_spec.rb +0 -12
- data/spec/analytical/comscore_spec.rb +0 -14
- data/spec/analytical/google_spec.rb +0 -6
- data/spec/analytical/kiss_metrics_spec.rb +7 -7
- data/spec/analytical/optimizely_spec.rb +0 -14
- metadata +4 -12
data/README.rdoc
CHANGED
@@ -10,7 +10,7 @@ Service implementations include:
|
|
10
10
|
* Hubspot[http://hubspot.com]
|
11
11
|
* CrazyEgg[http://www.crazyegg.com]
|
12
12
|
* Chartbeat[http://chartbeat.com]
|
13
|
-
*
|
13
|
+
* "ComScore Direct"[http://direct.comscore.com]
|
14
14
|
* Optimizely[http://www.optimizely.com]
|
15
15
|
|
16
16
|
== Usage
|
@@ -75,6 +75,16 @@ I would be extremely happy to accept contributions to this project! If you thin
|
|
75
75
|
(if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
|
76
76
|
* Send me a pull request. Bonus points for topic branches.
|
77
77
|
|
78
|
+
== Current Contributors
|
79
|
+
|
80
|
+
These fine folks have contributed patches and new features to this project:
|
81
|
+
|
82
|
+
* "Adam Anderson"[http://github.com/scudco]
|
83
|
+
* "Bryan Liles"[http://github.com/bryanl]
|
84
|
+
|
85
|
+
Thanks guys!
|
86
|
+
|
87
|
+
|
78
88
|
== Copyright
|
79
89
|
|
80
90
|
Copyright (c) 2010 Joshua Krall. See LICENSE for details.
|
data/Rakefile
CHANGED
@@ -9,7 +9,7 @@ begin
|
|
9
9
|
gem.description = %Q{Gem for managing multiple analytics services in your rails app.}
|
10
10
|
gem.email = "josh@transfs.com"
|
11
11
|
gem.homepage = "http://github.com/jkrall/analytical"
|
12
|
-
gem.authors = ["Joshua Krall", "Nathan Phelps"]
|
12
|
+
gem.authors = ["Joshua Krall", "Nathan Phelps", "Adam Anderson"]
|
13
13
|
gem.add_development_dependency "rspec", ">= 1.2.9"
|
14
14
|
gem.add_dependency "activesupport"
|
15
15
|
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.7.0
|
data/analytical.gemspec
CHANGED
@@ -5,10 +5,10 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{analytical}
|
8
|
-
s.version = "1.
|
8
|
+
s.version = "1.7.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = ["Joshua Krall", "Nathan Phelps"]
|
11
|
+
s.authors = ["Joshua Krall", "Nathan Phelps", "Adam Anderson"]
|
12
12
|
s.date = %q{2010-09-10}
|
13
13
|
s.description = %q{Gem for managing multiple analytics services in your rails app.}
|
14
14
|
s.email = %q{josh@transfs.com}
|
@@ -106,7 +106,7 @@ Gem::Specification.new do |s|
|
|
106
106
|
s.homepage = %q{http://github.com/jkrall/analytical}
|
107
107
|
s.rdoc_options = ["--charset=UTF-8"]
|
108
108
|
s.require_paths = ["lib"]
|
109
|
-
s.rubygems_version = %q{1.3.
|
109
|
+
s.rubygems_version = %q{1.3.6}
|
110
110
|
s.summary = %q{Gem for managing multiple analytics services in your rails app.}
|
111
111
|
s.test_files = [
|
112
112
|
"spec/analytical/api_spec.rb",
|
@@ -126,7 +126,7 @@ Gem::Specification.new do |s|
|
|
126
126
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
127
127
|
s.specification_version = 3
|
128
128
|
|
129
|
-
if Gem::Version.new(Gem::
|
129
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
130
130
|
s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
|
131
131
|
s.add_runtime_dependency(%q<activesupport>, [">= 0"])
|
132
132
|
else
|
data/lib/analytical/base.rb
CHANGED
@@ -12,25 +12,31 @@ module Analytical
|
|
12
12
|
@commands = []
|
13
13
|
end
|
14
14
|
|
15
|
+
#
|
16
|
+
# The core methods that most analytics services implement are listed below.
|
17
|
+
# Modules will ignore any calls that they don't respond to, allowing them to
|
18
|
+
# only partially implement this basic template (or implement their own arbitrary custom methods)
|
19
|
+
#
|
20
|
+
|
15
21
|
# This is used to record page-view events, where you want to pass a URL to an analytics service
|
16
|
-
def track(*args)
|
22
|
+
# def track(*args)
|
17
23
|
|
18
24
|
# Identify provides a unique identifier to an analytics service to keep track of the current user
|
19
25
|
# id should be a unique string (depending on which service you use), and some services also
|
20
26
|
# make use of a data hash as a second parameters, containing :email=>'test@test.com', for instance
|
21
|
-
def identify(id, *args)
|
27
|
+
# def identify(id, *args)
|
22
28
|
|
23
29
|
# Event is meant to track important funnel conversions in your app, or other important events
|
24
30
|
# that you want to inform a funnel analytics service about. You can pass optional data to this method as well.
|
25
|
-
def event(name, *args)
|
31
|
+
# def event(name, *args)
|
26
32
|
|
27
33
|
# Set passes some data to the analytics service that should be attached to the current user identity
|
28
34
|
# It can be used to set AB-testing choices and other unique data, so that split testing results can be
|
29
35
|
# reported by an analytics service
|
30
|
-
def set(data)
|
36
|
+
# def set(data)
|
31
37
|
|
32
38
|
# This method generates the initialization javascript that an analytics service uses to track your site
|
33
|
-
def init_javascript(location)
|
39
|
+
# def init_javascript(location)
|
34
40
|
|
35
41
|
def queue(*args)
|
36
42
|
if args.first==:identify
|
@@ -40,7 +46,9 @@ module Analytical
|
|
40
46
|
end
|
41
47
|
end
|
42
48
|
def process_queued_commands
|
43
|
-
command_strings = @commands.collect
|
49
|
+
command_strings = @commands.collect do |c|
|
50
|
+
send(*c) if respond_to?(c.first)
|
51
|
+
end.compact
|
44
52
|
@commands = []
|
45
53
|
command_strings
|
46
54
|
end
|
@@ -68,4 +76,4 @@ module Analytical
|
|
68
76
|
|
69
77
|
end
|
70
78
|
end
|
71
|
-
end
|
79
|
+
end
|
data/lib/analytical/console.rb
CHANGED
@@ -51,6 +51,12 @@ module Analytical
|
|
51
51
|
HERE
|
52
52
|
end
|
53
53
|
|
54
|
+
def alias_identity(old_identity,new_identity)
|
55
|
+
check_for_console <<-HERE
|
56
|
+
console.log("Analytical Alias: #{old_identity} => #{new_identity}");
|
57
|
+
HERE
|
58
|
+
end
|
59
|
+
|
54
60
|
private
|
55
61
|
|
56
62
|
CONSOLE_JS_ESCAPE_MAP = {
|
@@ -61,7 +67,7 @@ module Analytical
|
|
61
67
|
"\r" => '\n',
|
62
68
|
'"' => '\\"',
|
63
69
|
"'" => "\\'"
|
64
|
-
}
|
70
|
+
} unless defined?(CONSOLE_JS_ESCAPE_MAP)
|
65
71
|
|
66
72
|
def escape(js)
|
67
73
|
js.to_s.gsub(/(\\|<\/|\r\n|[\n\r"'])/) { CONSOLE_JS_ESCAPE_MAP[$1] }
|
@@ -1,11 +1,11 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
2
|
|
3
3
|
describe Analytical::Base::Api do
|
4
|
-
|
4
|
+
|
5
5
|
class BaseApiDummy
|
6
6
|
include Analytical::Base::Api
|
7
7
|
end
|
8
|
-
|
8
|
+
|
9
9
|
describe '#queue' do
|
10
10
|
before(:each) do
|
11
11
|
@api = BaseApiDummy.new(:parent=>mock('parent'))
|
@@ -30,7 +30,7 @@ describe Analytical::Base::Api do
|
|
30
30
|
@api = BaseApiDummy.new(:parent=>mock('parent'))
|
31
31
|
@api.commands = [[:a, 1, 2, 3], [:b, {:some=>:args}]]
|
32
32
|
@api.stub!(:a).and_return('a')
|
33
|
-
@api.stub!(:b).and_return('b')
|
33
|
+
@api.stub!(:b).and_return('b')
|
34
34
|
end
|
35
35
|
it 'should send each of the args arrays in the command list' do
|
36
36
|
@api.should_receive(:a).with(1, 2, 3).and_return('a')
|
@@ -44,6 +44,10 @@ describe Analytical::Base::Api do
|
|
44
44
|
@api.process_queued_commands
|
45
45
|
@api.commands == []
|
46
46
|
end
|
47
|
+
it "should not store an unrecognized command" do
|
48
|
+
@api.commands << [:c, 1]
|
49
|
+
@api.process_queued_commands.should == ['a','b']
|
50
|
+
end
|
47
51
|
end
|
48
52
|
|
49
53
|
describe '#init_location?' do
|
@@ -72,7 +76,7 @@ describe Analytical::Base::Api do
|
|
72
76
|
@api.init_location(:some_location)
|
73
77
|
end
|
74
78
|
describe 'for a valid init location' do
|
75
|
-
before(:each) { @api.stub!(:init_location?).and_return(true) }
|
79
|
+
before(:each) { @api.stub!(:init_location?).and_return(true) }
|
76
80
|
it 'should set initialized to true' do
|
77
81
|
@api.init_location(:some_location)
|
78
82
|
@api.initialized.should be_true
|
@@ -92,5 +96,5 @@ describe Analytical::Base::Api do
|
|
92
96
|
end
|
93
97
|
end
|
94
98
|
end
|
95
|
-
|
99
|
+
|
96
100
|
end
|
@@ -14,18 +14,6 @@ describe "Analytical::Chartbeat::Api" do
|
|
14
14
|
a.options.should == {:key=>12345, :domain => 'abcdef.com', :parent=>@parent}
|
15
15
|
end
|
16
16
|
end
|
17
|
-
describe '#track' do
|
18
|
-
it 'should return the tracking javascript' do
|
19
|
-
@api = Analytical::Chartbeat::Api.new :parent=>@parent, :key=>12345
|
20
|
-
@api.track.should == ''
|
21
|
-
end
|
22
|
-
end
|
23
|
-
describe '#identify' do
|
24
|
-
it 'should return an empty string' do
|
25
|
-
@api = Analytical::Chartbeat::Api.new :parent=>@parent, :key=>12345
|
26
|
-
@api.identify('nothing', {:matters=>'at all'}).should == ''
|
27
|
-
end
|
28
|
-
end
|
29
17
|
describe '#init_javascript' do
|
30
18
|
it 'should return the init javascript' do
|
31
19
|
@api = Analytical::Chartbeat::Api.new :parent=>@parent, :key=>12345, :domain =>'abcdef.com'
|
@@ -14,20 +14,6 @@ describe "Analytical::Comscore::Api" do
|
|
14
14
|
a.options.should == {:key=>1234, :parent=>@parent}
|
15
15
|
end
|
16
16
|
end
|
17
|
-
describe '#track' do
|
18
|
-
it 'should return the tracking javascript' do
|
19
|
-
@api = Analytical::Comscore::Api.new :parent=>@parent, :key=>123
|
20
|
-
@api.track('pagename', {:some=>'data'}).should == ''
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
describe '#identify' do
|
25
|
-
it 'should return an empty string' do
|
26
|
-
@api = Analytical::Comscore::Api.new :parent=>@parent, :key=>123
|
27
|
-
@api.identify('nothing', {:matters=>'at all'}).should == ''
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
17
|
describe '#init_javascript' do
|
32
18
|
it 'should return the init javascript' do
|
33
19
|
@api = Analytical::Comscore::Api.new :parent=>@parent, :key=>1234
|
@@ -21,12 +21,6 @@ describe "Analytical::Google::Api" do
|
|
21
21
|
@api.track('pagename', {:some=>'data'}).should == "_gaq.push(['_trackPageview', \"pagename\"]);"
|
22
22
|
end
|
23
23
|
end
|
24
|
-
describe '#identify' do
|
25
|
-
it 'should return an empty string' do
|
26
|
-
@api = Analytical::Google::Api.new :parent=>@parent, :key=>'abcdef'
|
27
|
-
@api.identify('nothing', {:matters=>'at all'}).should == ''
|
28
|
-
end
|
29
|
-
end
|
30
24
|
describe '#init_javascript' do
|
31
25
|
it 'should return the init javascript' do
|
32
26
|
@api = Analytical::Google::Api.new :parent=>@parent, :key=>'abcdef'
|
@@ -14,12 +14,6 @@ describe "Analytical::KissMetrics::Api" do
|
|
14
14
|
a.options.should == {:js_url_key=>'abc', :parent=>@parent}
|
15
15
|
end
|
16
16
|
end
|
17
|
-
describe '#track' do
|
18
|
-
it 'should return the tracking javascript' do
|
19
|
-
@api = Analytical::KissMetrics::Api.new :parent=>@parent, :js_url_key=>'abcdef'
|
20
|
-
@api.track('pagename', {:some=>'data'}).should == ''
|
21
|
-
end
|
22
|
-
end
|
23
17
|
describe '#identify' do
|
24
18
|
it 'should return a js string' do
|
25
19
|
@api = Analytical::KissMetrics::Api.new :parent=>@parent, :js_url_key=>'abcdef'
|
@@ -38,13 +32,19 @@ describe "Analytical::KissMetrics::Api" do
|
|
38
32
|
@api.set({:something=>'good', :b=>2}).should == "_kmq.push([\"set\", #{{:something=>'good', :b=>2}.to_json}]);"
|
39
33
|
end
|
40
34
|
end
|
35
|
+
describe '#alias_identity' do
|
36
|
+
it 'should return a js string' do
|
37
|
+
@api = Analytical::KissMetrics::Api.new :parent=>@parent, :js_url_key=>'abcdef'
|
38
|
+
@api.alias_identity('foo', 'bar').should == "_kmq.push([\"alias\", \"foo\", \"bar\"]);"
|
39
|
+
end
|
40
|
+
end
|
41
41
|
describe '#init_javascript' do
|
42
42
|
it 'should return the init javascript' do
|
43
43
|
@api = Analytical::KissMetrics::Api.new :parent=>@parent, :js_url_key=>'abcdef'
|
44
44
|
@api.init_javascript(:head_prepend).should == ''
|
45
45
|
@api.init_javascript(:head_append).should == ''
|
46
46
|
@api.init_javascript(:body_prepend).should =~ /i\.kissmetrics\.com/
|
47
|
-
@api.init_javascript(:body_prepend).should =~ /abcdef/
|
47
|
+
@api.init_javascript(:body_prepend).should =~ /abcdef/
|
48
48
|
@api.init_javascript(:body_append).should == ''
|
49
49
|
end
|
50
50
|
end
|
@@ -14,20 +14,6 @@ describe "Analytical::Optimizely::Api" do
|
|
14
14
|
a.options.should == {:key=>'abc', :parent=>@parent}
|
15
15
|
end
|
16
16
|
end
|
17
|
-
describe '#track' do
|
18
|
-
it 'should return the tracking javascript' do
|
19
|
-
@api = Analytical::Optimizely::Api.new :parent=>@parent, :key=>'abcdef'
|
20
|
-
@api.track('pagename', {:some=>'data'}).should == ''
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
describe '#identify' do
|
25
|
-
it 'should return an empty string' do
|
26
|
-
@api = Analytical::Optimizely::Api.new :parent=>@parent, :key=>'abcdef'
|
27
|
-
@api.identify('nothing', {:matters=>'at all'}).should == ''
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
17
|
describe '#init_javascript' do
|
32
18
|
it 'should return the init javascript' do
|
33
19
|
@api = Analytical::Optimizely::Api.new :parent=>@parent, :key=>'abcdef'
|
metadata
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: analytical
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 15
|
5
4
|
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 1
|
8
|
-
-
|
7
|
+
- 7
|
9
8
|
- 0
|
10
|
-
version: 1.
|
9
|
+
version: 1.7.0
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Joshua Krall
|
14
13
|
- Nathan Phelps
|
14
|
+
- Adam Anderson
|
15
15
|
autorequire:
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
@@ -23,11 +23,9 @@ dependencies:
|
|
23
23
|
name: rspec
|
24
24
|
prerelease: false
|
25
25
|
requirement: &id001 !ruby/object:Gem::Requirement
|
26
|
-
none: false
|
27
26
|
requirements:
|
28
27
|
- - ">="
|
29
28
|
- !ruby/object:Gem::Version
|
30
|
-
hash: 13
|
31
29
|
segments:
|
32
30
|
- 1
|
33
31
|
- 2
|
@@ -39,11 +37,9 @@ dependencies:
|
|
39
37
|
name: activesupport
|
40
38
|
prerelease: false
|
41
39
|
requirement: &id002 !ruby/object:Gem::Requirement
|
42
|
-
none: false
|
43
40
|
requirements:
|
44
41
|
- - ">="
|
45
42
|
- !ruby/object:Gem::Version
|
46
|
-
hash: 3
|
47
43
|
segments:
|
48
44
|
- 0
|
49
45
|
version: "0"
|
@@ -154,27 +150,23 @@ rdoc_options:
|
|
154
150
|
require_paths:
|
155
151
|
- lib
|
156
152
|
required_ruby_version: !ruby/object:Gem::Requirement
|
157
|
-
none: false
|
158
153
|
requirements:
|
159
154
|
- - ">="
|
160
155
|
- !ruby/object:Gem::Version
|
161
|
-
hash: 3
|
162
156
|
segments:
|
163
157
|
- 0
|
164
158
|
version: "0"
|
165
159
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
166
|
-
none: false
|
167
160
|
requirements:
|
168
161
|
- - ">="
|
169
162
|
- !ruby/object:Gem::Version
|
170
|
-
hash: 3
|
171
163
|
segments:
|
172
164
|
- 0
|
173
165
|
version: "0"
|
174
166
|
requirements: []
|
175
167
|
|
176
168
|
rubyforge_project:
|
177
|
-
rubygems_version: 1.3.
|
169
|
+
rubygems_version: 1.3.6
|
178
170
|
signing_key:
|
179
171
|
specification_version: 3
|
180
172
|
summary: Gem for managing multiple analytics services in your rails app.
|