analytical 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. data/.document +5 -0
  2. data/.gitignore +21 -0
  3. data/LICENSE +20 -0
  4. data/README.rdoc +17 -0
  5. data/Rakefile +46 -0
  6. data/VERSION +1 -0
  7. data/analytical.gemspec +124 -0
  8. data/example/.gitignore +4 -0
  9. data/example/Gemfile +27 -0
  10. data/example/README +244 -0
  11. data/example/Rakefile +10 -0
  12. data/example/app/controllers/application_controller.rb +6 -0
  13. data/example/app/controllers/page_controller.rb +11 -0
  14. data/example/app/helpers/application_helper.rb +2 -0
  15. data/example/app/helpers/page_helper.rb +2 -0
  16. data/example/app/views/layouts/application.html.erb +17 -0
  17. data/example/app/views/page/index.html.erb +5 -0
  18. data/example/app/views/page/test_a.html.erb +10 -0
  19. data/example/app/views/page/test_b.html.erb +6 -0
  20. data/example/config.ru +4 -0
  21. data/example/config/analytical.yml +6 -0
  22. data/example/config/application.rb +46 -0
  23. data/example/config/boot.rb +6 -0
  24. data/example/config/database.yml +22 -0
  25. data/example/config/environment.rb +5 -0
  26. data/example/config/environments/development.rb +19 -0
  27. data/example/config/environments/production.rb +42 -0
  28. data/example/config/environments/test.rb +32 -0
  29. data/example/config/initializers/backtrace_silencers.rb +7 -0
  30. data/example/config/initializers/inflections.rb +10 -0
  31. data/example/config/initializers/mime_types.rb +5 -0
  32. data/example/config/initializers/secret_token.rb +7 -0
  33. data/example/config/initializers/session_store.rb +8 -0
  34. data/example/config/locales/en.yml +5 -0
  35. data/example/config/routes.rb +64 -0
  36. data/example/db/seeds.rb +7 -0
  37. data/example/doc/README_FOR_APP +2 -0
  38. data/example/lib/tasks/.gitkeep +0 -0
  39. data/example/public/404.html +26 -0
  40. data/example/public/422.html +26 -0
  41. data/example/public/500.html +26 -0
  42. data/example/public/favicon.ico +0 -0
  43. data/example/public/images/rails.png +0 -0
  44. data/example/public/javascripts/application.js +2 -0
  45. data/example/public/javascripts/controls.js +965 -0
  46. data/example/public/javascripts/dragdrop.js +974 -0
  47. data/example/public/javascripts/effects.js +1123 -0
  48. data/example/public/javascripts/prototype.js +4874 -0
  49. data/example/public/javascripts/rails.js +118 -0
  50. data/example/public/robots.txt +5 -0
  51. data/example/public/stylesheets/.gitkeep +0 -0
  52. data/example/script/rails +9 -0
  53. data/example/test/functional/page_controller_test.rb +19 -0
  54. data/example/test/performance/browsing_test.rb +9 -0
  55. data/example/test/test_helper.rb +13 -0
  56. data/example/test/unit/helpers/page_helper_test.rb +4 -0
  57. data/example/vendor/plugins/.gitkeep +0 -0
  58. data/lib/analytical.rb +52 -0
  59. data/lib/analytical/api.rb +90 -0
  60. data/lib/analytical/base.rb +34 -0
  61. data/lib/analytical/clicky.rb +51 -0
  62. data/lib/analytical/console.rb +37 -0
  63. data/lib/analytical/google.rb +34 -0
  64. data/lib/analytical/kiss_metrics.rb +35 -0
  65. data/rails/init.rb +1 -0
  66. data/spec/analytical/api_spec.rb +122 -0
  67. data/spec/analytical/clicky_spec.rb +49 -0
  68. data/spec/analytical/google_spec.rb +38 -0
  69. data/spec/analytical/kiss_metrics_spec.rb +44 -0
  70. data/spec/analytical_spec.rb +64 -0
  71. data/spec/config/analytical.yml +6 -0
  72. data/spec/spec.opts +5 -0
  73. data/spec/spec_helper.rb +22 -0
  74. metadata +165 -0
@@ -0,0 +1,34 @@
1
+ module Analytical
2
+ module Google
3
+ class Api
4
+ include Analytical::Base::Api
5
+
6
+ def initialize(parent, options={})
7
+ super
8
+ @tracking_command_location = :body_prepend
9
+ end
10
+
11
+ def init_javascript(location)
12
+ return '' unless location==:body_prepend
13
+ js = <<-HTML
14
+ <!-- Analytical Init: Google -->
15
+ <script type="text/javascript">
16
+ var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
17
+ document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
18
+ </script>
19
+ <script type="text/javascript">
20
+ var googleAnalyticsTracker = _gat._getTracker("#{options[:key]}");
21
+ googleAnalyticsTracker._initData();
22
+ googleAnalyticsTracker._trackPageview();
23
+ </script>
24
+ HTML
25
+ js
26
+ end
27
+
28
+ def track(*args)
29
+ "googleAnalyticsTracker._trackPageview(\"#{args.first}\");"
30
+ end
31
+
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,35 @@
1
+ module Analytical
2
+ module KissMetrics
3
+ class Api
4
+ include Analytical::Base::Api
5
+
6
+ def initialize(parent, options={})
7
+ super
8
+ @tracking_command_location = :body_prepend
9
+ end
10
+
11
+ def init_javascript(location)
12
+ return '' unless location==:body_prepend
13
+ js = <<-HTML
14
+ <!-- Analytical Init: KissMetrics -->
15
+ <script type="text/javascript">
16
+ var _kmq = _kmq || [];
17
+ (function(){function _kms(u,d){if(navigator.appName.indexOf("Microsoft")==0 && d)document.write("<scr"+"ipt defer='defer' async='true' src='"+u+"'></scr"+"ipt>");else{var s=document.createElement('script');s.type='text/javascript';s.async=true;s.src=u;(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(s);}}_kms('https://i.kissmetrics.com/i.js');_kms('http'+('https:'==document.location.protocol ? 's://s3.amazonaws.com/' : '://')+'scripts.kissmetrics.com/#{options[:key]}.1.js',1);})();
18
+ </script>
19
+ HTML
20
+ js
21
+ end
22
+
23
+ def identify(id, *args)
24
+ data = args.first
25
+ "_kmq.push([\"identify\", \"#{data[:email]}\"]);"
26
+ end
27
+
28
+ def event(name, *args)
29
+ data = args.first
30
+ "_kmq.push([\"record\", \"#{name}\", #{data.to_json}]);"
31
+ end
32
+
33
+ end
34
+ end
35
+ end
@@ -0,0 +1 @@
1
+ require 'analytical'
@@ -0,0 +1,122 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe "Analytical::Api" do
4
+
5
+ describe 'on initialization' do
6
+ it 'should construct an api class for each module' do
7
+ Analytical::Console::Api.should_receive(:new).and_return(@console = mock('console'))
8
+ Analytical::Google::Api.should_receive(:new).and_return(@google = mock('google'))
9
+ a = Analytical::Api.new :modules=>[:console, :google]
10
+ a.modules.should == {
11
+ :console=>@console,
12
+ :google=>@google,
13
+ }
14
+ end
15
+ end
16
+
17
+ describe 'with modules' do
18
+ before(:each) do
19
+ Analytical::Console::Api.stub!(:new).and_return(@console = mock('console'))
20
+ Analytical::Google::Api.stub!(:new).and_return(@google = mock('google'))
21
+ Analytical::Clicky::Api.stub!(:new).and_return(@clicky = mock('clicky'))
22
+
23
+ @api = Analytical::Api.new :modules=>[:console, :google]
24
+ end
25
+
26
+ describe '#track' do
27
+ it 'should store the #track command for each module api class' do
28
+ @api = Analytical::Api.new :modules=>[:console, :google, :clicky]
29
+
30
+ @console.should_receive(:queue).with(:track, 'something', {:a=>1, :b=>2})
31
+ @clicky.should_receive(:queue).with(:track, 'something', {:a=>1, :b=>2})
32
+ @google.should_receive(:queue).with(:track, 'something', {:a=>1, :b=>2})
33
+
34
+ @api.track('something', {:a=>1, :b=>2})
35
+ end
36
+ end
37
+
38
+ describe '#identify' do
39
+ it 'should store the #track command for each module api class' do
40
+ @api = Analytical::Api.new :modules=>[:console, :google, :clicky]
41
+
42
+ @console.should_receive(:queue).with(:identify, 'something', {:a=>1, :b=>2})
43
+ @clicky.should_receive(:queue).with(:identify, 'something', {:a=>1, :b=>2})
44
+ @google.should_receive(:queue).with(:identify, 'something', {:a=>1, :b=>2})
45
+
46
+ @api.identify('something', {:a=>1, :b=>2})
47
+ end
48
+ end
49
+
50
+ describe '#now' do
51
+ it 'should call a command on each module and collect the results' do
52
+ @api = Analytical::Api.new :modules=>[:console, :google, :clicky]
53
+
54
+ @console.should_receive(:track).with('something', {:a=>1, :b=>2}).and_return('console track')
55
+ @clicky.should_receive(:track).with('something', {:a=>1, :b=>2}).and_return('clicky track')
56
+ @google.should_receive(:track).with('something', {:a=>1, :b=>2}).and_return('google track')
57
+
58
+ @api.now.track('something', {:a=>1, :b=>2}).should == "console track\ngoogle track\nclicky track"
59
+ end
60
+ end
61
+
62
+ describe 'when accessing a module by name' do
63
+ it 'should return the module api object' do
64
+ @api = Analytical::Api.new :modules=>[:console, :google, :clicky]
65
+ @api.console.should == @console
66
+ @api.clicky.should == @clicky
67
+ @api.google.should == @google
68
+ end
69
+ end
70
+
71
+ describe 'gathering javascript' do
72
+ before(:each) do
73
+ @console.stub!(:tracking_command_location).and_return(:body_prepend)
74
+ @console.stub!(:process_queued_commands).and_return([])
75
+ @google.stub!(:tracking_command_location).and_return(:body_prepend)
76
+ @google.stub!(:process_queued_commands).and_return([])
77
+ end
78
+ describe '#head_javascript' do
79
+ it 'should return the javascript' do
80
+ @console.should_receive(:init_javascript).with(:head).and_return('console_a')
81
+ @google.should_receive(:init_javascript).with(:head).and_return('google_a')
82
+ @api.head_javascript.should == "console_a\ngoogle_a"
83
+ end
84
+ end
85
+ describe '#body_prepend_javascript' do
86
+ it 'should return the javascript' do
87
+ @console.should_receive(:init_javascript).with(:body_prepend).and_return('console_b')
88
+ @google.should_receive(:init_javascript).with(:body_prepend).and_return('google_b')
89
+ @api.body_prepend_javascript.should == "console_b\ngoogle_b"
90
+ end
91
+ end
92
+ describe '#body_append_javascript' do
93
+ it 'should return the javascript' do
94
+ @console.should_receive(:init_javascript).with(:body_append).and_return('console_c')
95
+ @google.should_receive(:init_javascript).with(:body_append).and_return('google_c')
96
+ @api.body_append_javascript.should == "console_c\ngoogle_c"
97
+ end
98
+ end
99
+ describe 'with stored commands' do
100
+ before(:each) do
101
+ @console.stub!(:track).and_return('console track called')
102
+ @console.stub!(:queue)
103
+ @console.stub!(:process_queued_commands).and_return(['console track called'])
104
+ @google.stub!(:track).and_return('google track called')
105
+ @google.stub!(:queue)
106
+ @google.stub!(:process_queued_commands).and_return(['google track called'])
107
+ @api.track('something', {:a=>1, :b=>2})
108
+ end
109
+ describe '#body_prepend_javascript' do
110
+ it 'should return the javascript' do
111
+ @console.should_receive(:init_javascript).with(:body_prepend).and_return('console_b')
112
+ @google.should_receive(:init_javascript).with(:body_prepend).and_return('google_b')
113
+ @api.body_prepend_javascript.should == "console_b\ngoogle_b\n<script type='text/javascript'>\nconsole track called\ngoogle track called\n</script>"
114
+ end
115
+ end
116
+ end
117
+ end
118
+ end
119
+
120
+
121
+
122
+ end
@@ -0,0 +1,49 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe "Analytical::Clicky::Api" do
4
+ before(:each) do
5
+ @parent = mock('api', :options=>{:google=>{:key=>'abc'}})
6
+ end
7
+ describe 'on initialize' do
8
+ it 'should set the command_location' do
9
+ a = Analytical::Clicky::Api.new @parent, {:key=>'abc'}
10
+ a.tracking_command_location.should == :body_append
11
+ end
12
+ it 'should set the options' do
13
+ a = Analytical::Clicky::Api.new @parent, {:key=>'abc'}
14
+ a.options.should == {:key=>'abc'}
15
+ end
16
+ end
17
+ describe '#track' do
18
+ it 'should return the tracking javascript' do
19
+ @api = Analytical::Clicky::Api.new @parent, {:key=>'abcdef'}
20
+ @api.track('pagename', {:some=>'data'}).should == "clicky.log(\"pagename\");"
21
+ end
22
+ end
23
+ describe '#identify' do
24
+ it 'should return the init code string' do
25
+ @api = Analytical::Clicky::Api.new @parent, {:key=>'abcdef'}
26
+ @api.identify('user id', {:a=>'b'}).should =~ /#{Regexp.escape({:id=>'user id', :a=>'b'}.to_json)}/
27
+ end
28
+ end
29
+ describe '#init_javascript' do
30
+ it 'should return the init javascript' do
31
+ @api = Analytical::Clicky::Api.new @parent, {:key=>'abcdef'}
32
+ @api.init_javascript[:head].should be_nil
33
+ @api.init_javascript[:body_prepend].should be_nil
34
+ @api.init_javascript[:body_append].should =~ /static.getclicky.com\/js/
35
+ @api.init_javascript[:body_append].should =~ /abcdef/
36
+ end
37
+ describe 'for an ssl connection' do
38
+ it 'should return the ssl init code' do
39
+ @api = Analytical::Clicky::Api.new @parent, {:key=>'abcdef', :ssl=>true}
40
+ @api.init_javascript[:body_append].should =~ /https/
41
+ end
42
+ end
43
+ describe 'with an identify command queued' do
44
+ @api = Analytical::Clicky::Api.new @parent, {:key=>'abcdef'}
45
+ @api.queue :identify, 'user id', {:email=>'someone@test.com'}
46
+ @api.init_javascript[:body_append].should =~ /"email":\w*"someone@test\.com"/
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,38 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe "Analytical::Google::Api" do
4
+ before(:each) do
5
+ @parent = mock('api', :options=>{:google=>{:key=>'abc'}})
6
+ end
7
+ describe 'on initialize' do
8
+ it 'should set the command_location' do
9
+ a = Analytical::Google::Api.new @parent, {:key=>'abc'}
10
+ a.tracking_command_location.should == :body_prepend
11
+ end
12
+ it 'should set the options' do
13
+ a = Analytical::Google::Api.new @parent, {:key=>'abc'}
14
+ a.options.should == {:key=>'abc'}
15
+ end
16
+ end
17
+ describe '#track' do
18
+ it 'should return the tracking javascript' do
19
+ @api = Analytical::Google::Api.new @parent, {:key=>'abcdef'}
20
+ @api.track('pagename', {:some=>'data'}).should == "googleAnalyticsTracker._trackPageview(\"pagename\");"
21
+ end
22
+ end
23
+ describe '#identify' do
24
+ it 'should return an empty string' do
25
+ @api = Analytical::Google::Api.new @parent, {:key=>'abcdef'}
26
+ @api.identify('nothing', {:matters=>'at all'}).should == ''
27
+ end
28
+ end
29
+ describe '#init_javascript' do
30
+ it 'should return the init javascript' do
31
+ @api = Analytical::Google::Api.new @parent, {:key=>'abcdef'}
32
+ @api.init_javascript[:head].should be_nil
33
+ @api.init_javascript[:body_prepend].should =~ /google-analytics.com\/ga.js/
34
+ @api.init_javascript[:body_prepend].should =~ /abcdef/
35
+ @api.init_javascript[:body_append].should be_nil
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,44 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe "Analytical::KissMetrics::Api" do
4
+ before(:each) do
5
+ @parent = mock('api', :options=>{:google=>{:key=>'abc'}})
6
+ end
7
+ describe 'on initialize' do
8
+ it 'should set the command_location' do
9
+ a = Analytical::KissMetrics::Api.new @parent, {:key=>'abc'}
10
+ a.tracking_command_location.should == :body_prepend
11
+ end
12
+ it 'should set the options' do
13
+ a = Analytical::KissMetrics::Api.new @parent, {:key=>'abc'}
14
+ a.options.should == {:key=>'abc'}
15
+ end
16
+ end
17
+ describe '#track' do
18
+ it 'should return the tracking javascript' do
19
+ @api = Analytical::KissMetrics::Api.new @parent, {:key=>'abcdef'}
20
+ @api.track('pagename', {:some=>'data'}).should == ''
21
+ end
22
+ end
23
+ describe '#identify' do
24
+ it 'should return an empty string' do
25
+ @api = Analytical::KissMetrics::Api.new @parent, {:key=>'abcdef'}
26
+ @api.identify('id', {:email=>'test@test.com'}).should == "_kmq.push([\"identify\", \"test@test.com\"]);"
27
+ end
28
+ end
29
+ describe '#event' do
30
+ it 'should return an empty string' do
31
+ @api = Analytical::KissMetrics::Api.new @parent, {:key=>'abcdef'}
32
+ @api.event('Big Deal', {:something=>'good'}).should == "_kmq.push([\"record\", \"Big Deal\", #{{:something=>'good'}.to_json}]);"
33
+ end
34
+ end
35
+ describe '#init_javascript' do
36
+ it 'should return the init javascript' do
37
+ @api = Analytical::KissMetrics::Api.new @parent, {:key=>'abcdef'}
38
+ @api.init_javascript[:head].should be_nil
39
+ @api.init_javascript[:body_prepend].should =~ /scripts.kissmetrics.com/
40
+ @api.init_javascript[:body_prepend].should =~ /abcdef/
41
+ @api.init_javascript[:body_append].should be_nil
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,64 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+ require 'ostruct'
3
+
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
+ describe 'on initialization' do
12
+ class DummyForInit
13
+ extend Analytical
14
+ def request; OpenStruct.new(:'ssl?'=>true); end
15
+ def self.helper_method(*a); end
16
+ end
17
+
18
+ it 'should have the default options' do
19
+ DummyForInit.analytical
20
+ d = DummyForInit.new.analytical
21
+ d.options[:modules].should == []
22
+ d.options[:development_modules].should == [:console]
23
+ d.options[:disable_if].call.should be_false
24
+ end
25
+
26
+ it 'should open the initialization file' do
27
+ File.should_receive(:'exists?').with("#{RAILS_ROOT}/config/analytical.yml").and_return(true)
28
+ DummyForInit.analytical
29
+ DummyForInit.analytical_options[:google].should == {:key=>'google_12345'}
30
+ DummyForInit.analytical_options[:kiss_metrics].should == {:key=>'kiss_metrics_12345'}
31
+ DummyForInit.analytical_options[:clicky].should == {:key=>'clicky_12345'}
32
+ end
33
+
34
+ describe 'in production mode' do
35
+ before(:each) do
36
+ Rails.env.stub!(:production?).and_return(true)
37
+ end
38
+ it 'should start with no modules' do
39
+ Analytical::Api.should_not_receive(:include)
40
+ DummyForInit.analytical
41
+ DummyForInit.new.analytical.options[:modules] = []
42
+ end
43
+ it 'should include specific modules' do
44
+ Analytical::Api.should_receive(:include).with(Analytical::Console)
45
+ Analytical::Api.should_receive(:include).with(Analytical::Google)
46
+ DummyForInit.analytical :modules=>[:google, :console]
47
+ DummyForInit.new.analytical.options[:modules] = [:google, :console]
48
+ end
49
+ end
50
+
51
+ describe 'in development mode' do
52
+ before(:each) do
53
+ Rails.env.stub!(:production?).and_return(false)
54
+ end
55
+ it 'should start with no modules' do
56
+ Analytical::Api.should_receive(:include).with(Analytical::Console)
57
+ DummyForInit.analytical
58
+ DummyForInit.new.analytical.options[:modules] = [:console]
59
+ end
60
+ end
61
+
62
+ end
63
+
64
+ end
@@ -0,0 +1,6 @@
1
+ google:
2
+ key: google_12345
3
+ clicky:
4
+ key: clicky_12345
5
+ kiss_metrics:
6
+ key: kiss_metrics_12345
@@ -0,0 +1,5 @@
1
+ --color
2
+ --loadby mtime
3
+ --reverse
4
+ --diff unified
5
+ --backtrace
@@ -0,0 +1,22 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+ require 'active_support'
4
+ require 'active_support/core_ext'
5
+ require 'active_support/json'
6
+ require 'action_view'
7
+ require 'spec'
8
+ require 'spec/autorun'
9
+
10
+ require 'analytical'
11
+ require 'analytical/api'
12
+ require 'analytical/base'
13
+ require 'analytical/console'
14
+ require 'analytical/google'
15
+ require 'analytical/clicky'
16
+
17
+ Spec::Runner.configure do |config|
18
+ end
19
+
20
+ module Rails
21
+ end
22
+ RAILS_ROOT = File.dirname(__FILE__)
metadata ADDED
@@ -0,0 +1,165 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: analytical
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 3
8
+ - 0
9
+ version: 0.3.0
10
+ platform: ruby
11
+ authors:
12
+ - Joshua Krall
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-04-28 00:00:00 -05:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: rspec
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 1
29
+ - 2
30
+ - 9
31
+ version: 1.2.9
32
+ type: :development
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: activesupport
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ segments:
42
+ - 0
43
+ version: "0"
44
+ type: :runtime
45
+ version_requirements: *id002
46
+ description: Gem for managing multiple analytics services in your rails app.
47
+ email: josh@transfs.com
48
+ executables: []
49
+
50
+ extensions: []
51
+
52
+ extra_rdoc_files:
53
+ - LICENSE
54
+ - README.rdoc
55
+ files:
56
+ - .document
57
+ - .gitignore
58
+ - LICENSE
59
+ - README.rdoc
60
+ - Rakefile
61
+ - VERSION
62
+ - analytical.gemspec
63
+ - example/.gitignore
64
+ - example/Gemfile
65
+ - example/README
66
+ - example/Rakefile
67
+ - example/app/controllers/application_controller.rb
68
+ - example/app/controllers/page_controller.rb
69
+ - example/app/helpers/application_helper.rb
70
+ - example/app/helpers/page_helper.rb
71
+ - example/app/views/layouts/application.html.erb
72
+ - example/app/views/page/index.html.erb
73
+ - example/app/views/page/test_a.html.erb
74
+ - example/app/views/page/test_b.html.erb
75
+ - example/config.ru
76
+ - example/config/analytical.yml
77
+ - example/config/application.rb
78
+ - example/config/boot.rb
79
+ - example/config/database.yml
80
+ - example/config/environment.rb
81
+ - example/config/environments/development.rb
82
+ - example/config/environments/production.rb
83
+ - example/config/environments/test.rb
84
+ - example/config/initializers/backtrace_silencers.rb
85
+ - example/config/initializers/inflections.rb
86
+ - example/config/initializers/mime_types.rb
87
+ - example/config/initializers/secret_token.rb
88
+ - example/config/initializers/session_store.rb
89
+ - example/config/locales/en.yml
90
+ - example/config/routes.rb
91
+ - example/db/seeds.rb
92
+ - example/doc/README_FOR_APP
93
+ - example/lib/tasks/.gitkeep
94
+ - example/public/404.html
95
+ - example/public/422.html
96
+ - example/public/500.html
97
+ - example/public/favicon.ico
98
+ - example/public/images/rails.png
99
+ - example/public/javascripts/application.js
100
+ - example/public/javascripts/controls.js
101
+ - example/public/javascripts/dragdrop.js
102
+ - example/public/javascripts/effects.js
103
+ - example/public/javascripts/prototype.js
104
+ - example/public/javascripts/rails.js
105
+ - example/public/robots.txt
106
+ - example/public/stylesheets/.gitkeep
107
+ - example/script/rails
108
+ - example/test/functional/page_controller_test.rb
109
+ - example/test/performance/browsing_test.rb
110
+ - example/test/test_helper.rb
111
+ - example/test/unit/helpers/page_helper_test.rb
112
+ - example/vendor/plugins/.gitkeep
113
+ - lib/analytical.rb
114
+ - lib/analytical/api.rb
115
+ - lib/analytical/base.rb
116
+ - lib/analytical/clicky.rb
117
+ - lib/analytical/console.rb
118
+ - lib/analytical/google.rb
119
+ - lib/analytical/kiss_metrics.rb
120
+ - rails/init.rb
121
+ - spec/analytical/api_spec.rb
122
+ - spec/analytical/clicky_spec.rb
123
+ - spec/analytical/google_spec.rb
124
+ - spec/analytical/kiss_metrics_spec.rb
125
+ - spec/analytical_spec.rb
126
+ - spec/config/analytical.yml
127
+ - spec/spec.opts
128
+ - spec/spec_helper.rb
129
+ has_rdoc: true
130
+ homepage: http://github.com/jkrall/analytical
131
+ licenses: []
132
+
133
+ post_install_message:
134
+ rdoc_options:
135
+ - --charset=UTF-8
136
+ require_paths:
137
+ - lib
138
+ required_ruby_version: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ segments:
143
+ - 0
144
+ version: "0"
145
+ required_rubygems_version: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - ">="
148
+ - !ruby/object:Gem::Version
149
+ segments:
150
+ - 0
151
+ version: "0"
152
+ requirements: []
153
+
154
+ rubyforge_project:
155
+ rubygems_version: 1.3.6
156
+ signing_key:
157
+ specification_version: 3
158
+ summary: Gem for managing multiple analytics services in your rails app.
159
+ test_files:
160
+ - spec/analytical/api_spec.rb
161
+ - spec/analytical/clicky_spec.rb
162
+ - spec/analytical/google_spec.rb
163
+ - spec/analytical/kiss_metrics_spec.rb
164
+ - spec/analytical_spec.rb
165
+ - spec/spec_helper.rb