analytical 2.11.0 → 3.0.6

Sign up to get free protection for your applications and to get access to all the features.
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --colour
2
+
data/.rvmrc ADDED
@@ -0,0 +1,8 @@
1
+ export RUBYOPT="rubygems"
2
+ export RUBYLIB="."
3
+ rvm ruby-1.8.7-p174@analytical
4
+
5
+ # Install bundler if it doesn't already exist
6
+ # if ! command -v bundle > /dev/null ; then
7
+ # gem install bundler
8
+ # fi
data/Gemfile CHANGED
@@ -1,12 +1,18 @@
1
1
  source :rubygems
2
2
 
3
- group :development do
3
+ group :development, :test do
4
+ gem 'rails', '3.0.9'
5
+ gem 'activesupport'
6
+ gem 'activemodel'
7
+ gem 'rspec', '2.6.0'
8
+ gem 'rspec-core', '2.6.4'
9
+ gem 'rspec-expectations', '2.6.0'
10
+ gem 'rspec-mocks', '2.6.0'
11
+ gem 'rspec-rails', '2.6.0'
4
12
  gem 'jeweler'
5
- gem 'rspec', '1.3'
6
13
  gem 'diff-lcs'
7
- gem 'rails', '~> 2.3'
8
14
  gem 'guard'
9
15
  gem 'guard-rspec'
10
16
  gem 'rb-fsevent'
11
17
  gem 'growl'
12
- end
18
+ end
@@ -1,18 +1,39 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- actionmailer (2.3.11)
5
- actionpack (= 2.3.11)
6
- actionpack (2.3.11)
7
- activesupport (= 2.3.11)
8
- rack (~> 1.1.0)
9
- activerecord (2.3.11)
10
- activesupport (= 2.3.11)
11
- activeresource (2.3.11)
12
- activesupport (= 2.3.11)
13
- activesupport (2.3.11)
4
+ abstract (1.0.0)
5
+ actionmailer (3.0.9)
6
+ actionpack (= 3.0.9)
7
+ mail (~> 2.2.19)
8
+ actionpack (3.0.9)
9
+ activemodel (= 3.0.9)
10
+ activesupport (= 3.0.9)
11
+ builder (~> 2.1.2)
12
+ erubis (~> 2.6.6)
13
+ i18n (~> 0.5.0)
14
+ rack (~> 1.2.1)
15
+ rack-mount (~> 0.6.14)
16
+ rack-test (~> 0.5.7)
17
+ tzinfo (~> 0.3.23)
18
+ activemodel (3.0.9)
19
+ activesupport (= 3.0.9)
20
+ builder (~> 2.1.2)
21
+ i18n (~> 0.5.0)
22
+ activerecord (3.0.9)
23
+ activemodel (= 3.0.9)
24
+ activesupport (= 3.0.9)
25
+ arel (~> 2.0.10)
26
+ tzinfo (~> 0.3.23)
27
+ activeresource (3.0.9)
28
+ activemodel (= 3.0.9)
29
+ activesupport (= 3.0.9)
30
+ activesupport (3.0.9)
31
+ arel (2.0.10)
32
+ builder (2.1.2)
14
33
  configuration (1.2.0)
15
34
  diff-lcs (1.1.2)
35
+ erubis (2.6.6)
36
+ abstract (>= 1.0.0)
16
37
  git (1.2.5)
17
38
  growl (1.0.3)
18
39
  guard (0.3.0)
@@ -20,37 +41,78 @@ GEM
20
41
  thor (~> 0.14.6)
21
42
  guard-rspec (0.2.0)
22
43
  guard (>= 0.2.2)
23
- jeweler (1.5.2)
24
- bundler (~> 1.0.0)
44
+ i18n (0.5.0)
45
+ jeweler (1.6.4)
46
+ bundler (~> 1.0)
25
47
  git (>= 1.2.5)
26
48
  rake
27
49
  launchy (0.3.7)
28
50
  configuration (>= 0.0.5)
29
51
  rake (>= 0.8.1)
52
+ mail (2.2.19)
53
+ activesupport (>= 2.3.6)
54
+ i18n (>= 0.4.0)
55
+ mime-types (~> 1.16)
56
+ treetop (~> 1.4.8)
57
+ mime-types (1.16)
30
58
  open_gem (1.4.2)
31
59
  launchy (~> 0.3.5)
32
- rack (1.1.2)
33
- rails (2.3.11)
34
- actionmailer (= 2.3.11)
35
- actionpack (= 2.3.11)
36
- activerecord (= 2.3.11)
37
- activeresource (= 2.3.11)
38
- activesupport (= 2.3.11)
39
- rake (>= 0.8.3)
40
- rake (0.8.7)
60
+ polyglot (0.3.1)
61
+ rack (1.2.3)
62
+ rack-mount (0.6.14)
63
+ rack (>= 1.0.0)
64
+ rack-test (0.5.7)
65
+ rack (>= 1.0)
66
+ rails (3.0.9)
67
+ actionmailer (= 3.0.9)
68
+ actionpack (= 3.0.9)
69
+ activerecord (= 3.0.9)
70
+ activeresource (= 3.0.9)
71
+ activesupport (= 3.0.9)
72
+ bundler (~> 1.0)
73
+ railties (= 3.0.9)
74
+ railties (3.0.9)
75
+ actionpack (= 3.0.9)
76
+ activesupport (= 3.0.9)
77
+ rake (>= 0.8.7)
78
+ rdoc (~> 3.4)
79
+ thor (~> 0.14.4)
80
+ rake (0.9.2)
41
81
  rb-fsevent (0.4.0)
42
- rspec (1.3.0)
82
+ rdoc (3.6.1)
83
+ rspec (2.6.0)
84
+ rspec-core (~> 2.6.0)
85
+ rspec-expectations (~> 2.6.0)
86
+ rspec-mocks (~> 2.6.0)
87
+ rspec-core (2.6.4)
88
+ rspec-expectations (2.6.0)
89
+ diff-lcs (~> 1.1.2)
90
+ rspec-mocks (2.6.0)
91
+ rspec-rails (2.6.0)
92
+ actionpack (~> 3.0)
93
+ activesupport (~> 3.0)
94
+ railties (~> 3.0)
95
+ rspec (~> 2.6.0)
43
96
  thor (0.14.6)
97
+ treetop (1.4.9)
98
+ polyglot (>= 0.3.1)
99
+ tzinfo (0.3.28)
44
100
 
45
101
  PLATFORMS
46
102
  ruby
47
103
 
48
104
  DEPENDENCIES
105
+ activemodel
106
+ activesupport
49
107
  diff-lcs
50
108
  growl
51
109
  guard
52
110
  guard-rspec
53
111
  jeweler
54
- rails (~> 2.3)
112
+ rails (= 3.0.9)
55
113
  rb-fsevent
56
- rspec (= 1.3)
114
+ rspec (= 2.6.0)
115
+ rspec-core (= 2.6.4)
116
+ rspec-expectations (= 2.6.0)
117
+ rspec-mocks (= 2.6.0)
118
+ rspec-rails (= 2.6.0)
@@ -22,14 +22,21 @@ Service implementations include:
22
22
 
23
23
  Add the following to your controllers:
24
24
 
25
- analytical :modules=>[:console, :google, :clicky]
25
+ analytical
26
26
 
27
27
  Add a configuration file (config/analytical.yml) to declare your API keys, like so:
28
28
 
29
- google:
30
- key: UA-5555555-5
31
- clicky:
32
- key: 55555
29
+ production:
30
+ google:
31
+ key: UA-5555555-5
32
+ clicky:
33
+ key: 55555
34
+
35
+ You can add different configurations for different environments.
36
+
37
+ By default, all the declared analytics modules are loaded. You can override this behavior in the controller.
38
+
39
+ analytical :modules=>[:console, :google, :clicky]
33
40
 
34
41
  Then, in your template files, you'll want to add the analytical helper methods for initializing the tracking javascript:
35
42
 
@@ -60,9 +67,22 @@ You can sprinkle the track() and event() tracking methods throughout your views
60
67
  analytical.track '/a/really/nice/url'
61
68
  analytical.event 'Some Awesome Event', :with=>:data
62
69
 
63
- By default, Analytical will be disabled in all environments except 'production'... and it will enable the Console module only. To change this behavior, you can pass a Proc/lambda to the :disable_if option, as well as specify the :development_modules that you want to use:
70
+ It's possible to conditionally disable analytics by specifying a `disable_if` method.
71
+
72
+ analytical :disable_if => lambda{ |controller| controller.i_can_haz_tracking? }
73
+
74
+ Analytical also provides the ability to filter your active modules dynamically:
75
+
76
+ analytical :filter_modules => lambda{ |controller, modules|
77
+ controller.use_google_analytics? ? modules : modules - [:google]
78
+ }
79
+
80
+ This can be useful for enabling the console logger optionally in your app, based on a request parameter:
81
+
82
+ :filter_modules => lambda { |controller, modules|
83
+ controller.use_console_logger? ? [:console] : modules
84
+ }
64
85
 
65
- analytical :modules=>[:google], :development_modules=>[], :disable_if=>lambda{ |controller| controller.i_can_haz_tracking? }
66
86
 
67
87
  == Adding new modules
68
88
 
@@ -83,6 +103,21 @@ This will store the queued commands in the user session, clearing them out when
83
103
  ... in your controller. After a redirect, the corresponding track() call will be emitted in the next request made by the client.
84
104
  NOTE: This is new and somewhat experimental, and could cause problems if you store large amounts of data in the session. (there is a 4k limit to session data)
85
105
 
106
+ == Javascript tracking/event commands
107
+
108
+ Sometimes you want to trigger an analytics track/event via javascript. Analytical now provides a solution for this by default. Appended to your <head> is a simple javascript object that will contain "instantaneous" versions of the tracking commands for each of your modules.
109
+
110
+ You call these analytical commands like this:
111
+
112
+ <script type="text/javascript">Analytical.track('/some/url');</script>
113
+ <script type="text/javascript">Analytical.event('A javascript event', {with: 'data'});</script>
114
+
115
+ When you call these commands, it will pass the track/event name & data on to each of the modules. (Take a look at the simple javascript helpers in your <head> for more information.)
116
+
117
+ To disable this functionality, use
118
+
119
+ analytical :javascript_helpers => false
120
+
86
121
 
87
122
  == Note on Patches/Pull Requests
88
123
 
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@feefighters.com"
11
11
  gem.homepage = "http://github.com/jkrall/analytical"
12
- gem.authors = ["Joshua Krall", "Nathan Phelps", "Adam Anderson", "Kevin Menard", "Ablyamitov Ablyamit", "Kurt Werle", "Olivier Lauzon"]
12
+ gem.authors = ["Joshua Krall", "Nathan Phelps", "Adam Anderson", "Kevin Menard", "Ablyamitov Ablyamit", "Kurt Werle", "Olivier Lauzon", "Daniel Doubrovkine"]
13
13
  # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
14
14
  end
15
15
  Jeweler::GemcutterTasks.new
@@ -17,17 +17,9 @@ rescue LoadError
17
17
  puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
18
18
  end
19
19
 
20
- require 'spec/rake/spectask'
21
- Spec::Rake::SpecTask.new(:spec) do |spec|
22
- spec.libs << 'lib' << 'spec'
23
- spec.spec_files = FileList['spec/**/*_spec.rb']
24
- end
25
-
26
- Spec::Rake::SpecTask.new(:rcov) do |spec|
27
- spec.libs << 'lib' << 'spec'
28
- spec.pattern = 'spec/**/*_spec.rb'
29
- spec.rcov = true
30
- end
20
+ require 'rspec/core/rake_task'
21
+ RSpec::Core::RakeTask.new(:spec)
22
+ RSpec::Core::RakeTask.new(:rcov)
31
23
 
32
24
  task :default => :spec
33
25
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.11.0
1
+ 3.0.6
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{analytical}
8
- s.version = "2.11.0"
8
+ s.version = "3.0.6"
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", "Adam Anderson", "Kevin Menard", "Ablyamitov Ablyamit", "Kurt Werle", "Olivier Lauzon"]
12
- s.date = %q{2011-06-30}
11
+ s.authors = ["Joshua Krall", "Nathan Phelps", "Adam Anderson", "Kevin Menard", "Ablyamitov Ablyamit", "Kurt Werle", "Olivier Lauzon", "Daniel Doubrovkine"]
12
+ s.date = %q{2011-08-08}
13
13
  s.description = %q{Gem for managing multiple analytics services in your rails app.}
14
14
  s.email = %q{josh@feefighters.com}
15
15
  s.extra_rdoc_files = [
@@ -18,6 +18,8 @@ Gem::Specification.new do |s|
18
18
  ]
19
19
  s.files = [
20
20
  ".document",
21
+ ".rspec",
22
+ ".rvmrc",
21
23
  "Gemfile",
22
24
  "Gemfile.lock",
23
25
  "Guardfile",
@@ -26,6 +28,7 @@ Gem::Specification.new do |s|
26
28
  "Rakefile",
27
29
  "VERSION",
28
30
  "analytical.gemspec",
31
+ "app/views/application/_analytical_javascript.html.erb",
29
32
  "example/.gitignore",
30
33
  "example/Gemfile",
31
34
  "example/Gemfile.lock",
@@ -100,6 +103,8 @@ Gem::Specification.new do |s|
100
103
  "lib/analytical/modules/optimizely.rb",
101
104
  "lib/analytical/modules/performancing.rb",
102
105
  "lib/analytical/modules/quantcast.rb",
106
+ "lib/analytical/modules/reinvigorate.rb",
107
+ "lib/analytical/rails/engine.rb",
103
108
  "lib/analytical/session_command_store.rb",
104
109
  "rails/init.rb",
105
110
  "spec/analytical/api_spec.rb",
@@ -116,6 +121,7 @@ Gem::Specification.new do |s|
116
121
  "spec/analytical/modules/mixpanel_spec.rb",
117
122
  "spec/analytical/modules/optimizely_spec.rb",
118
123
  "spec/analytical/modules/quantcast.rb",
124
+ "spec/analytical/modules/reinvigorate_spec.rb",
119
125
  "spec/analytical/session_command_store_spec.rb",
120
126
  "spec/analytical_spec.rb",
121
127
  "spec/config/analytical.yml",
@@ -124,37 +130,54 @@ Gem::Specification.new do |s|
124
130
  ]
125
131
  s.homepage = %q{http://github.com/jkrall/analytical}
126
132
  s.require_paths = ["lib"]
127
- s.rubygems_version = %q{1.3.7}
133
+ s.rubygems_version = %q{1.6.2}
128
134
  s.summary = %q{Gem for managing multiple analytics services in your rails app.}
129
135
 
130
136
  if s.respond_to? :specification_version then
131
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
132
137
  s.specification_version = 3
133
138
 
134
139
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
140
+ s.add_development_dependency(%q<rails>, ["= 3.0.9"])
141
+ s.add_development_dependency(%q<activesupport>, [">= 0"])
142
+ s.add_development_dependency(%q<activemodel>, [">= 0"])
143
+ s.add_development_dependency(%q<rspec>, ["= 2.6.0"])
144
+ s.add_development_dependency(%q<rspec-core>, ["= 2.6.4"])
145
+ s.add_development_dependency(%q<rspec-expectations>, ["= 2.6.0"])
146
+ s.add_development_dependency(%q<rspec-mocks>, ["= 2.6.0"])
147
+ s.add_development_dependency(%q<rspec-rails>, ["= 2.6.0"])
135
148
  s.add_development_dependency(%q<jeweler>, [">= 0"])
136
- s.add_development_dependency(%q<rspec>, ["= 1.3"])
137
149
  s.add_development_dependency(%q<diff-lcs>, [">= 0"])
138
- s.add_development_dependency(%q<rails>, ["~> 2.3"])
139
150
  s.add_development_dependency(%q<guard>, [">= 0"])
140
151
  s.add_development_dependency(%q<guard-rspec>, [">= 0"])
141
152
  s.add_development_dependency(%q<rb-fsevent>, [">= 0"])
142
153
  s.add_development_dependency(%q<growl>, [">= 0"])
143
154
  else
155
+ s.add_dependency(%q<rails>, ["= 3.0.9"])
156
+ s.add_dependency(%q<activesupport>, [">= 0"])
157
+ s.add_dependency(%q<activemodel>, [">= 0"])
158
+ s.add_dependency(%q<rspec>, ["= 2.6.0"])
159
+ s.add_dependency(%q<rspec-core>, ["= 2.6.4"])
160
+ s.add_dependency(%q<rspec-expectations>, ["= 2.6.0"])
161
+ s.add_dependency(%q<rspec-mocks>, ["= 2.6.0"])
162
+ s.add_dependency(%q<rspec-rails>, ["= 2.6.0"])
144
163
  s.add_dependency(%q<jeweler>, [">= 0"])
145
- s.add_dependency(%q<rspec>, ["= 1.3"])
146
164
  s.add_dependency(%q<diff-lcs>, [">= 0"])
147
- s.add_dependency(%q<rails>, ["~> 2.3"])
148
165
  s.add_dependency(%q<guard>, [">= 0"])
149
166
  s.add_dependency(%q<guard-rspec>, [">= 0"])
150
167
  s.add_dependency(%q<rb-fsevent>, [">= 0"])
151
168
  s.add_dependency(%q<growl>, [">= 0"])
152
169
  end
153
170
  else
171
+ s.add_dependency(%q<rails>, ["= 3.0.9"])
172
+ s.add_dependency(%q<activesupport>, [">= 0"])
173
+ s.add_dependency(%q<activemodel>, [">= 0"])
174
+ s.add_dependency(%q<rspec>, ["= 2.6.0"])
175
+ s.add_dependency(%q<rspec-core>, ["= 2.6.4"])
176
+ s.add_dependency(%q<rspec-expectations>, ["= 2.6.0"])
177
+ s.add_dependency(%q<rspec-mocks>, ["= 2.6.0"])
178
+ s.add_dependency(%q<rspec-rails>, ["= 2.6.0"])
154
179
  s.add_dependency(%q<jeweler>, [">= 0"])
155
- s.add_dependency(%q<rspec>, ["= 1.3"])
156
180
  s.add_dependency(%q<diff-lcs>, [">= 0"])
157
- s.add_dependency(%q<rails>, ["~> 2.3"])
158
181
  s.add_dependency(%q<guard>, [">= 0"])
159
182
  s.add_dependency(%q<guard-rspec>, [">= 0"])
160
183
  s.add_dependency(%q<rb-fsevent>, [">= 0"])
@@ -0,0 +1,11 @@
1
+ <script type="text/javascript">
2
+ var Analytical = {
3
+ track: function(page) {
4
+ <%= raw analytical.now.track('__PAGE__').gsub(/"__PAGE__"/,'page') %>
5
+ },
6
+ event: function(name, data) {
7
+ if (typeof data === 'undefined') { data = {}; }
8
+ <%= raw analytical.now.event('__EVENT__', {}).gsub(/"__EVENT__"/,'name').gsub(/"?\{\}"?/,'data') %>
9
+ }
10
+ };
11
+ </script>
@@ -1,3 +1,4 @@
1
+ require File.dirname(__FILE__)+'/analytical/rails/engine'
1
2
  require File.dirname(__FILE__)+'/analytical/modules/base'
2
3
  Dir.glob(File.dirname(__FILE__)+'/analytical/**/*.rb').each do |f|
3
4
  require f
@@ -5,53 +6,63 @@ end
5
6
 
6
7
  module Analytical
7
8
 
8
- # any method placed here will apply to ActionController::Base
9
9
  def analytical(options={})
10
- send :include, InstanceMethods
11
- send :include, Analytical::BotDetector
12
- helper_method :analytical
13
- class_inheritable_accessor :analytical_options
14
-
15
- self.analytical_options = options.reverse_merge({
16
- :modules=>[],
17
- :development_modules=>[:console],
18
- :disable_if=>Proc.new { !Rails.env.production? },
19
- })
20
-
21
- config_options = {}
22
- File.open("#{Rails.root}/config/analytical.yml") do |f|
23
- config_options = YAML::load(ERB.new(f.read).result).symbolize_keys
24
- config_options.each do |k,v|
25
- config_options[k] = v.symbolize_keys
26
- end
27
- end if File.exists?("#{Rails.root}/config/analytical.yml")
10
+ self.analytical_options = options
11
+
12
+ config_options = { :modules => [] }
13
+ File.open("#{::Rails.root}/config/analytical.yml") do |f|
14
+ file_options = YAML::load(ERB.new(f.read).result).symbolize_keys
15
+ env = (::Rails.env || :production).to_sym
16
+ file_options = file_options[env] if file_options.has_key?(env)
17
+ file_options.each do |k, v|
18
+ config_options[k.to_sym] = v.symbolize_keys
19
+ config_options[:modules] << k.to_sym unless options && options[:modules]
20
+ end if file_options
21
+ end if File.exists?("#{::Rails.root}/config/analytical.yml")
28
22
 
29
23
  self.analytical_options = self.analytical_options.reverse_merge config_options
30
24
  end
31
25
 
32
26
  module InstanceMethods
33
- # any method placed here will apply to instances
34
-
35
27
  def analytical
36
28
  @analytical ||= begin
37
29
  options = self.class.analytical_options.merge({
38
30
  :ssl => request.ssl?,
39
31
  :controller => self,
40
32
  })
41
- if options[:disable_if].call(self)
42
- options[:modules] = options[:development_modules]
33
+ if options[:disable_if] && options[:disable_if].call(self)
34
+ options[:modules] = []
43
35
  end
44
36
  options[:session] = session if options[:use_session_store]
45
37
  if analytical_is_robot?(request.user_agent)
46
38
  options[:modules] = []
47
39
  end
40
+ options[:modules] = options[:filter_modules].call(self, options[:modules]) if options[:filter_modules]
41
+ options[:javascript_helpers] ||= true
48
42
  Analytical::Api.new options
49
43
  end
50
44
  end
51
45
  end
52
46
 
47
+ module HelperMethods
48
+ def analytical
49
+ controller.analytical
50
+ end
51
+ end
52
+
53
53
  end
54
54
 
55
55
  if defined?(ActionController::Base)
56
- ActionController::Base.extend Analytical
56
+ ActionController::Base.class_eval do
57
+ extend Analytical
58
+ include Analytical::InstanceMethods
59
+ include Analytical::BotDetector
60
+ helper Analytical::HelperMethods
61
+
62
+ if ::Rails::VERSION::MAJOR < 3
63
+ class_inheritable_accessor :analytical_options
64
+ else
65
+ class_attribute :analytical_options
66
+ end
67
+ end
57
68
  end
@@ -48,7 +48,7 @@ module Analytical
48
48
  def method_missing(method, *args, &block)
49
49
  @parent.modules.values.collect do |m|
50
50
  m.send(method, *args) if m.respond_to?(method)
51
- end.compact.join("\n")
51
+ end.delete_if{|c| c.blank?}.join("\n")
52
52
  end
53
53
  end
54
54
 
@@ -67,7 +67,21 @@ module Analytical
67
67
  end
68
68
 
69
69
  def head_append_javascript
70
- [init_javascript(:head_append), tracking_javascript(:head_append)].delete_if{|s| s.blank?}.join("\n")
70
+ js = [
71
+ init_javascript(:head_append),
72
+ tracking_javascript(:head_append),
73
+ ]
74
+
75
+ if options[:javascript_helpers]
76
+ if ::Rails::VERSION::MAJOR >= 3 && ::Rails::VERSION::MINOR >= 1 # Rails 3.1 lets us override views in engines
77
+ js << options[:controller].send(:render_to_string, :partial=>'analytical_javascript') if options[:controller]
78
+ else # All other rails
79
+ _partial_path = Pathname.new(__FILE__).dirname.join('..', '..', 'app/views/application', 'analytical_javascript.html.erb').to_s
80
+ js << options[:controller].send(:render_to_string, :partial=>_partial_path) if options[:controller]
81
+ end
82
+ end
83
+
84
+ js.delete_if{|s| s.blank?}.join("\n")
71
85
  end
72
86
 
73
87
  alias_method :head_javascript, :head_append_javascript
@@ -103,7 +117,7 @@ module Analytical
103
117
  def init_javascript(location)
104
118
  @modules.values.collect do |m|
105
119
  m.init_javascript(location) if m.respond_to?(:init_javascript)
106
- end.compact.join("\n")
120
+ end.delete_if{|c| c.blank?}.join
107
121
  end
108
122
 
109
123
  def available_modules
@@ -12,9 +12,18 @@ module Analytical
12
12
  init_location(location) do
13
13
  js = <<-HTML
14
14
  <!-- Analytical Init: Clicky -->
15
- <script src="#{protocol}://static.getclicky.com/js" type="text/javascript"></script>
16
- <script type="text/javascript">clicky.init('#{@options[:key]}');</script>
17
- <noscript><p><img alt="Clicky" width="1" height="1" src="#{protocol}://in.getclicky.com/#{@options[:key]}ns.gif" /></p></noscript>
15
+ <script type="text/javascript">
16
+ var clicky_site_ids = clicky_site_ids || [];
17
+ clicky_site_ids.push(#{@options[:key]});
18
+ (function() {
19
+ var s = document.createElement('script');
20
+ s.type = 'text/javascript';
21
+ s.async = true;
22
+ s.src = '//static.getclicky.com/js';
23
+ ( document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0] ).appendChild( s );
24
+ })();
25
+ </script>
26
+ <noscript><p><img alt="Clicky" width="1" height="1" src="//in.getclicky.com/#{@options[:key]}ns.gif" /></p></noscript>
18
27
  HTML
19
28
 
20
29
  identify_commands = []
@@ -74,7 +74,7 @@ module Analytical
74
74
  end
75
75
 
76
76
  def check_for_console(data)
77
- "if(typeof(console) !== 'undefined' && console != null) { #{data} }"
77
+ "if(typeof(console) !== 'undefined' && console != null) { \n#{data} }"
78
78
  end
79
79
 
80
80
  end
@@ -34,8 +34,9 @@ module Analytical
34
34
  end
35
35
 
36
36
  def event(name, *args)
37
- data = args.first || nil
38
- data_string = data ? ", '#{data.to_json}'" : ""
37
+ data = args.first || {}
38
+ data = data[:value] if data.is_a?(Hash)
39
+ data_string = !data.nil? ? ", #{data}" : ""
39
40
  "_gaq.push(['_trackEvent', \"Event\", \"#{name}\"" + data_string + "]);"
40
41
  end
41
42
 
@@ -0,0 +1,48 @@
1
+ module Analytical
2
+ module Modules
3
+ class Reinvigorate
4
+ include Analytical::Modules::Base
5
+
6
+ def initialize(options={})
7
+ super
8
+ @tracking_command_location = :body_append
9
+ end
10
+
11
+ def init_javascript(location)
12
+ init_location(location) do
13
+ js = <<-HTML
14
+ <!-- Analytical Init: Reinvigorate -->
15
+ <script type="text/javascript">
16
+ document.write(unescape("%3Cscript src='" + (("https:" == document.location.protocol) ? "https://ssl-" : "http://")
17
+ + "include.reinvigorate.net/re_.js' type='text/javascript'%3E%3C/script%3E"));
18
+ </script>
19
+ HTML
20
+ js
21
+ end
22
+ end
23
+
24
+ def identify(id, *args)
25
+ data = args.first || {}
26
+ "var re_name_tag = \"#{id}\";"
27
+ end
28
+
29
+ def context(data)
30
+ return '' if data.blank?
31
+ if data[:email]
32
+ "var re_context_tag = \"mailto:#{data[:email]}\";"
33
+ elsif data[:url]
34
+ "var re_context_tag = \"http://#{data[:url]}\";"
35
+ else
36
+ "var re_context_tag = \"#{data.first.last}\";"
37
+ end
38
+ end
39
+
40
+ def track(data, *args)
41
+ "try {
42
+ reinvigorate.track(\"#{options[:key]}\");
43
+ } catch(err) {}"
44
+ end
45
+
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,9 @@
1
+ if defined?(::Rails::Engine)
2
+ module Analytical
3
+ module Rails
4
+ class Engine < ::Rails::Engine
5
+ # auto wire
6
+ end
7
+ end
8
+ end
9
+ end
@@ -101,7 +101,7 @@ describe "Analytical::Api" do
101
101
  it 'should return the javascript' do
102
102
  @console.should_receive(:init_javascript).with(:head_prepend).and_return('console_a')
103
103
  @google.should_receive(:init_javascript).with(:head_prepend).and_return('google_a')
104
- @api.head_prepend_javascript.should == "console_a\ngoogle_a"
104
+ @api.head_prepend_javascript.should == "console_agoogle_a"
105
105
  end
106
106
  end
107
107
 
@@ -109,7 +109,7 @@ describe "Analytical::Api" do
109
109
  it 'should return the javascript' do
110
110
  @console.should_receive(:init_javascript).with(:head_append).and_return('console_a')
111
111
  @google.should_receive(:init_javascript).with(:head_append).and_return('google_a')
112
- @api.head_append_javascript.should == "console_a\ngoogle_a"
112
+ @api.head_append_javascript.should == "console_agoogle_a"
113
113
  end
114
114
  end
115
115
 
@@ -117,14 +117,14 @@ describe "Analytical::Api" do
117
117
  it 'should return the javascript' do
118
118
  @console.should_receive(:init_javascript).with(:body_prepend).and_return('console_b')
119
119
  @google.should_receive(:init_javascript).with(:body_prepend).and_return('google_b')
120
- @api.body_prepend_javascript.should == "console_b\ngoogle_b"
120
+ @api.body_prepend_javascript.should == "console_bgoogle_b"
121
121
  end
122
122
  end
123
123
  describe '#body_append_javascript' do
124
124
  it 'should return the javascript' do
125
125
  @console.should_receive(:init_javascript).with(:body_append).and_return('console_c')
126
126
  @google.should_receive(:init_javascript).with(:body_append).and_return('google_c')
127
- @api.body_append_javascript.should == "console_c\ngoogle_c"
127
+ @api.body_append_javascript.should == "console_cgoogle_c"
128
128
  end
129
129
  end
130
130
  describe 'with stored commands' do
@@ -145,7 +145,7 @@ describe "Analytical::Api" do
145
145
  it 'should return the javascript' do
146
146
  @console.should_receive(:init_javascript).with(:body_prepend).and_return('console_b')
147
147
  @google.should_receive(:init_javascript).with(:body_prepend).and_return('google_b')
148
- @api.body_prepend_javascript.should == "console_b\ngoogle_b\n<script type='text/javascript'>\nconsole track called\ngoogle track called\n</script>"
148
+ @api.body_prepend_javascript.should == "console_bgoogle_b\n<script type='text/javascript'>\nconsole track called\ngoogle track called\n</script>"
149
149
  end
150
150
  end
151
151
  end
@@ -27,10 +27,19 @@ describe "Analytical::Modules::Google" do
27
27
  @api.event('pagename').should == "_gaq.push(['_trackEvent', \"Event\", \"pagename\"]);"
28
28
  end
29
29
 
30
- it 'should include any passed in data' do
30
+ it 'should include data value' do
31
31
  @api = Analytical::Modules::Google.new :parent=>@parent, :key=>'abcdef'
32
- @api.event('pagename', {:some=>'data',:more=>'info'}).should == "_gaq.push(['_trackEvent', \"Event\", \"pagename\", '#{ {:some=>'data',:more=>'info'}.to_json }']);"
32
+ @api.event('pagename', {:value=>555, :more=>'info'}).should == "_gaq.push(['_trackEvent', \"Event\", \"pagename\", 555]);"
33
33
  end
34
+ it 'should not include data if there is no value' do
35
+ @api = Analytical::Modules::Google.new :parent=>@parent, :key=>'abcdef'
36
+ @api.event('pagename', {:more=>'info'}).should == "_gaq.push(['_trackEvent', \"Event\", \"pagename\"]);"
37
+ end
38
+ it 'should not include data if it is not a hash' do
39
+ @api = Analytical::Modules::Google.new :parent=>@parent, :key=>'abcdef'
40
+ @api.event('pagename', 555).should == "_gaq.push(['_trackEvent', \"Event\", \"pagename\", 555]);"
41
+ end
42
+
34
43
  end
35
44
  describe '#init_javascript' do
36
45
  it 'should return the init javascript' do
@@ -0,0 +1,35 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ describe "Analytical::Modules::Reinvigorate" do
4
+
5
+ before(:each) do
6
+ @parent = mock('api', :options=>{:reinvigorate=>{:key=>'abc'}})
7
+ end
8
+
9
+ describe 'on initialize' do
10
+
11
+ it 'should set the command_location' do
12
+ a = Analytical::Modules::Reinvigorate.new :parent=>@parent, :key=>'abc'
13
+ a.tracking_command_location.should == :body_append
14
+ end
15
+
16
+ it 'should set the options' do
17
+ a = Analytical::Modules::Reinvigorate.new :parent=>@parent, :key=>'abc'
18
+ a.options.should == {:key=>'abc', :parent=>@parent}
19
+ end
20
+
21
+ end
22
+
23
+ describe '#init_javascript' do
24
+
25
+ it 'should return the init javascript' do
26
+ @api = Analytical::Modules::Reinvigorate.new :parent=>@parent, :key=>'abcdef'
27
+ @api.init_javascript(:head_prepend).should == ''
28
+ @api.init_javascript(:head_append).should == ''
29
+ @api.init_javascript(:body_prepend).should == ''
30
+ @api.init_javascript(:body_append).should =~ /reinvigorate/
31
+ end
32
+
33
+ end
34
+
35
+ end
@@ -2,39 +2,53 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
  require 'ostruct'
3
3
 
4
4
  describe "Analytical" do
5
- before(:each) do
6
- rails_env = mock('rails environment', :'production?'=>true, :'development?'=>false)
7
- Rails.stub!(:env).and_return(rails_env)
8
- File.stub!(:'exists?').and_return(false)
9
- end
10
-
11
5
  describe 'on initialization' do
12
6
  class DummyForInit
13
7
  extend Analytical
8
+ include Analytical::InstanceMethods
9
+ include Analytical::BotDetector
10
+ if ::Rails::VERSION::MAJOR < 3
11
+ class_inheritable_accessor :analytical_options
12
+ else
13
+ class_attribute :analytical_options
14
+ end
15
+
14
16
  def self.helper_method(*a); end
15
17
  def request
16
- Spec::Mocks::Mock.new 'request',
18
+ RSpec::Mocks::Mock.new 'request',
17
19
  :'ssl?'=>true,
18
20
  :user_agent=>'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 GTB7.0'
19
21
  end
20
22
  end
21
23
 
22
- it 'should have the default options' do
24
+ it 'should have the options from analytical.yml' do
23
25
  DummyForInit.analytical
24
26
  d = DummyForInit.new.analytical
25
- d.options[:modules].should == []
26
- d.options[:development_modules].should == [:console]
27
- d.options[:disable_if].call.should be_false
27
+ d.options[:modules].sort_by { |m| m.to_s }.should == [:chartbeat, :clicky, :google, :kiss_metrics]
28
28
  end
29
29
 
30
30
  it 'should use the supplied options' do
31
31
  DummyForInit.analytical :modules=>[:google]
32
32
  d = DummyForInit.new.analytical
33
33
  d.options[:modules].should == [:google]
34
- d.options[:development_modules].should == [:console]
35
- d.options[:disable_if].call.should be_false
36
34
  end
37
35
 
36
+ describe 'conditionally disabled' do
37
+ it 'should set the modules to []' do
38
+ DummyForInit.analytical :disable_if => lambda { |x| true }
39
+ d = DummyForInit.new
40
+ d.analytical.options[:modules].should == []
41
+ end
42
+ end
43
+
44
+ describe 'with filtered modules' do
45
+ it 'should set the modules to []' do
46
+ DummyForInit.analytical :filter_modules => lambda { |x, modules| modules - [:clicky] }
47
+ d = DummyForInit.new
48
+ d.analytical.options[:modules].include?(:clicky).should be_false
49
+ end
50
+ end
51
+
38
52
  describe 'with a robot request' do
39
53
  it 'should set the modules to []' do
40
54
  DummyForInit.analytical
@@ -53,6 +67,11 @@ describe "Analytical" do
53
67
  DummyForInit.analytical_options[:chartbeat].should == {:key=>'chartbeat_12345', :domain => 'your.domain.com'}
54
68
  end
55
69
 
70
+ it 'should allow for module-specific controller overrides' do
71
+ DummyForInit.analytical :google=>{:key=>'override_google_key'}
72
+ DummyForInit.analytical_options[:google].should == {:key=>'override_google_key'}
73
+ end
74
+
56
75
  describe 'in production mode' do
57
76
  before(:each) do
58
77
  Rails.env.stub!(:production?).and_return(true)
@@ -64,7 +83,7 @@ describe "Analytical" do
64
83
  end
65
84
  end
66
85
 
67
- describe 'in development mode' do
86
+ describe 'in non-production mode' do
68
87
  before(:each) do
69
88
  Rails.env.stub!(:production?).and_return(false)
70
89
  end
@@ -74,6 +93,16 @@ describe "Analytical" do
74
93
  end
75
94
  end
76
95
 
96
+ describe 'in development mode' do
97
+ before(:each) do
98
+ Rails.stub!(:env).and_return(:development)
99
+ end
100
+ it 'should start with no modules' do
101
+ DummyForInit.analytical
102
+ DummyForInit.new.analytical.options[:modules] = []
103
+ end
104
+ end
105
+
77
106
  end
78
107
 
79
108
  end
@@ -1,9 +1,15 @@
1
- google:
2
- key: google_12345
3
- clicky:
4
- key: clicky_12345
5
- kiss_metrics:
6
- key: kiss_metrics_12345
7
- chartbeat:
8
- key: chartbeat_12345
9
- domain: your.domain.com
1
+ test:
2
+ google:
3
+ key: google_12345
4
+ clicky:
5
+ key: clicky_12345
6
+ kiss_metrics:
7
+ key: kiss_metrics_12345
8
+ chartbeat:
9
+ key: chartbeat_12345
10
+ domain: your.domain.com
11
+
12
+ production:
13
+
14
+ development:
15
+
@@ -1,19 +1,22 @@
1
- $LOAD_PATH.unshift(File.dirname(__FILE__))
2
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
1
+ require 'rubygems'
2
+
3
+ ENV["RAILS_ENV"] ||= 'test'
4
+
3
5
  require 'active_support'
4
6
  require 'active_support/core_ext'
5
7
  require 'active_support/json'
6
8
  require 'action_view'
7
- require 'spec'
8
- require 'spec/autorun'
9
-
10
- require 'analytical'
9
+ require 'active_model'
10
+ require 'action_controller'
11
+ require 'rails'
12
+ require 'rspec/rails'
11
13
 
12
- Spec::Runner.configure do |config|
13
- end
14
-
15
- module Rails
16
- def self.root
17
- File.dirname(__FILE__)
14
+ RSpec.configure do |config|
15
+ config.mock_with :rspec
16
+ config.expect_with :rspec
17
+ config.before do
18
+ Rails.stub(:root).and_return(Pathname.new(__FILE__).dirname)
18
19
  end
19
20
  end
21
+
22
+ require 'analytical'
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: analytical
3
3
  version: !ruby/object:Gem::Version
4
- hash: 35
5
- prerelease: false
4
+ hash: 11
5
+ prerelease:
6
6
  segments:
7
- - 2
8
- - 11
7
+ - 3
9
8
  - 0
10
- version: 2.11.0
9
+ - 6
10
+ version: 3.0.6
11
11
  platform: ruby
12
12
  authors:
13
13
  - Joshua Krall
@@ -17,46 +17,45 @@ authors:
17
17
  - Ablyamitov Ablyamit
18
18
  - Kurt Werle
19
19
  - Olivier Lauzon
20
+ - Daniel Doubrovkine
20
21
  autorequire:
21
22
  bindir: bin
22
23
  cert_chain: []
23
24
 
24
- date: 2011-06-30 00:00:00 -05:00
25
+ date: 2011-08-08 00:00:00 -05:00
25
26
  default_executable:
26
27
  dependencies:
27
28
  - !ruby/object:Gem::Dependency
28
- type: :development
29
- prerelease: false
30
- name: jeweler
31
29
  version_requirements: &id001 !ruby/object:Gem::Requirement
32
30
  none: false
33
31
  requirements:
34
- - - ">="
32
+ - - "="
35
33
  - !ruby/object:Gem::Version
36
- hash: 3
34
+ hash: 21
37
35
  segments:
36
+ - 3
38
37
  - 0
39
- version: "0"
38
+ - 9
39
+ version: 3.0.9
40
40
  requirement: *id001
41
- - !ruby/object:Gem::Dependency
42
41
  type: :development
43
42
  prerelease: false
44
- name: rspec
43
+ name: rails
44
+ - !ruby/object:Gem::Dependency
45
45
  version_requirements: &id002 !ruby/object:Gem::Requirement
46
46
  none: false
47
47
  requirements:
48
- - - "="
48
+ - - ">="
49
49
  - !ruby/object:Gem::Version
50
- hash: 9
50
+ hash: 3
51
51
  segments:
52
- - 1
53
- - 3
54
- version: "1.3"
52
+ - 0
53
+ version: "0"
55
54
  requirement: *id002
56
- - !ruby/object:Gem::Dependency
57
55
  type: :development
58
56
  prerelease: false
59
- name: diff-lcs
57
+ name: activesupport
58
+ - !ruby/object:Gem::Dependency
60
59
  version_requirements: &id003 !ruby/object:Gem::Requirement
61
60
  none: false
62
61
  requirements:
@@ -67,26 +66,91 @@ dependencies:
67
66
  - 0
68
67
  version: "0"
69
68
  requirement: *id003
70
- - !ruby/object:Gem::Dependency
71
69
  type: :development
72
70
  prerelease: false
73
- name: rails
71
+ name: activemodel
72
+ - !ruby/object:Gem::Dependency
74
73
  version_requirements: &id004 !ruby/object:Gem::Requirement
75
74
  none: false
76
75
  requirements:
77
- - - ~>
76
+ - - "="
78
77
  - !ruby/object:Gem::Version
79
- hash: 5
78
+ hash: 23
80
79
  segments:
81
80
  - 2
82
- - 3
83
- version: "2.3"
81
+ - 6
82
+ - 0
83
+ version: 2.6.0
84
84
  requirement: *id004
85
- - !ruby/object:Gem::Dependency
86
85
  type: :development
87
86
  prerelease: false
88
- name: guard
87
+ name: rspec
88
+ - !ruby/object:Gem::Dependency
89
89
  version_requirements: &id005 !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - "="
93
+ - !ruby/object:Gem::Version
94
+ hash: 31
95
+ segments:
96
+ - 2
97
+ - 6
98
+ - 4
99
+ version: 2.6.4
100
+ requirement: *id005
101
+ type: :development
102
+ prerelease: false
103
+ name: rspec-core
104
+ - !ruby/object:Gem::Dependency
105
+ version_requirements: &id006 !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - "="
109
+ - !ruby/object:Gem::Version
110
+ hash: 23
111
+ segments:
112
+ - 2
113
+ - 6
114
+ - 0
115
+ version: 2.6.0
116
+ requirement: *id006
117
+ type: :development
118
+ prerelease: false
119
+ name: rspec-expectations
120
+ - !ruby/object:Gem::Dependency
121
+ version_requirements: &id007 !ruby/object:Gem::Requirement
122
+ none: false
123
+ requirements:
124
+ - - "="
125
+ - !ruby/object:Gem::Version
126
+ hash: 23
127
+ segments:
128
+ - 2
129
+ - 6
130
+ - 0
131
+ version: 2.6.0
132
+ requirement: *id007
133
+ type: :development
134
+ prerelease: false
135
+ name: rspec-mocks
136
+ - !ruby/object:Gem::Dependency
137
+ version_requirements: &id008 !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - "="
141
+ - !ruby/object:Gem::Version
142
+ hash: 23
143
+ segments:
144
+ - 2
145
+ - 6
146
+ - 0
147
+ version: 2.6.0
148
+ requirement: *id008
149
+ type: :development
150
+ prerelease: false
151
+ name: rspec-rails
152
+ - !ruby/object:Gem::Dependency
153
+ version_requirements: &id009 !ruby/object:Gem::Requirement
90
154
  none: false
91
155
  requirements:
92
156
  - - ">="
@@ -95,12 +159,12 @@ dependencies:
95
159
  segments:
96
160
  - 0
97
161
  version: "0"
98
- requirement: *id005
99
- - !ruby/object:Gem::Dependency
162
+ requirement: *id009
100
163
  type: :development
101
164
  prerelease: false
102
- name: guard-rspec
103
- version_requirements: &id006 !ruby/object:Gem::Requirement
165
+ name: jeweler
166
+ - !ruby/object:Gem::Dependency
167
+ version_requirements: &id010 !ruby/object:Gem::Requirement
104
168
  none: false
105
169
  requirements:
106
170
  - - ">="
@@ -109,12 +173,26 @@ dependencies:
109
173
  segments:
110
174
  - 0
111
175
  version: "0"
112
- requirement: *id006
176
+ requirement: *id010
177
+ type: :development
178
+ prerelease: false
179
+ name: diff-lcs
113
180
  - !ruby/object:Gem::Dependency
181
+ version_requirements: &id011 !ruby/object:Gem::Requirement
182
+ none: false
183
+ requirements:
184
+ - - ">="
185
+ - !ruby/object:Gem::Version
186
+ hash: 3
187
+ segments:
188
+ - 0
189
+ version: "0"
190
+ requirement: *id011
114
191
  type: :development
115
192
  prerelease: false
116
- name: rb-fsevent
117
- version_requirements: &id007 !ruby/object:Gem::Requirement
193
+ name: guard
194
+ - !ruby/object:Gem::Dependency
195
+ version_requirements: &id012 !ruby/object:Gem::Requirement
118
196
  none: false
119
197
  requirements:
120
198
  - - ">="
@@ -123,12 +201,26 @@ dependencies:
123
201
  segments:
124
202
  - 0
125
203
  version: "0"
126
- requirement: *id007
204
+ requirement: *id012
205
+ type: :development
206
+ prerelease: false
207
+ name: guard-rspec
127
208
  - !ruby/object:Gem::Dependency
209
+ version_requirements: &id013 !ruby/object:Gem::Requirement
210
+ none: false
211
+ requirements:
212
+ - - ">="
213
+ - !ruby/object:Gem::Version
214
+ hash: 3
215
+ segments:
216
+ - 0
217
+ version: "0"
218
+ requirement: *id013
128
219
  type: :development
129
220
  prerelease: false
130
- name: growl
131
- version_requirements: &id008 !ruby/object:Gem::Requirement
221
+ name: rb-fsevent
222
+ - !ruby/object:Gem::Dependency
223
+ version_requirements: &id014 !ruby/object:Gem::Requirement
132
224
  none: false
133
225
  requirements:
134
226
  - - ">="
@@ -137,7 +229,10 @@ dependencies:
137
229
  segments:
138
230
  - 0
139
231
  version: "0"
140
- requirement: *id008
232
+ requirement: *id014
233
+ type: :development
234
+ prerelease: false
235
+ name: growl
141
236
  description: Gem for managing multiple analytics services in your rails app.
142
237
  email: josh@feefighters.com
143
238
  executables: []
@@ -149,6 +244,8 @@ extra_rdoc_files:
149
244
  - README.rdoc
150
245
  files:
151
246
  - .document
247
+ - .rspec
248
+ - .rvmrc
152
249
  - Gemfile
153
250
  - Gemfile.lock
154
251
  - Guardfile
@@ -157,6 +254,7 @@ files:
157
254
  - Rakefile
158
255
  - VERSION
159
256
  - analytical.gemspec
257
+ - app/views/application/_analytical_javascript.html.erb
160
258
  - example/.gitignore
161
259
  - example/Gemfile
162
260
  - example/Gemfile.lock
@@ -231,6 +329,8 @@ files:
231
329
  - lib/analytical/modules/optimizely.rb
232
330
  - lib/analytical/modules/performancing.rb
233
331
  - lib/analytical/modules/quantcast.rb
332
+ - lib/analytical/modules/reinvigorate.rb
333
+ - lib/analytical/rails/engine.rb
234
334
  - lib/analytical/session_command_store.rb
235
335
  - rails/init.rb
236
336
  - spec/analytical/api_spec.rb
@@ -247,6 +347,7 @@ files:
247
347
  - spec/analytical/modules/mixpanel_spec.rb
248
348
  - spec/analytical/modules/optimizely_spec.rb
249
349
  - spec/analytical/modules/quantcast.rb
350
+ - spec/analytical/modules/reinvigorate_spec.rb
250
351
  - spec/analytical/session_command_store_spec.rb
251
352
  - spec/analytical_spec.rb
252
353
  - spec/config/analytical.yml
@@ -282,7 +383,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
282
383
  requirements: []
283
384
 
284
385
  rubyforge_project:
285
- rubygems_version: 1.3.7
386
+ rubygems_version: 1.6.2
286
387
  signing_key:
287
388
  specification_version: 3
288
389
  summary: Gem for managing multiple analytics services in your rails app.