vanity 1.9.3 → 2.0.0.beta

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.
Files changed (54) hide show
  1. data/.gitignore +0 -1
  2. data/.travis.yml +2 -53
  3. data/Appraisals +3 -12
  4. data/CHANGELOG +1 -5
  5. data/Gemfile +0 -10
  6. data/Gemfile.lock +3 -38
  7. data/README.rdoc +2 -13
  8. data/Rakefile +7 -13
  9. data/bin/vanity +0 -1
  10. data/doc/rails.textile +0 -12
  11. data/gemfiles/rails32.gemfile +2 -4
  12. data/gemfiles/rails32.gemfile.lock +6 -14
  13. data/gemfiles/rails4.gemfile +1 -4
  14. data/gemfiles/rails4.gemfile.lock +5 -15
  15. data/lib/vanity/adapters/active_record_adapter.rb +14 -10
  16. data/lib/vanity/experiment/ab_test.rb +1 -1
  17. data/lib/vanity/frameworks/rails.rb +11 -17
  18. data/lib/vanity/frameworks.rb +3 -10
  19. data/lib/vanity/metric/active_record.rb +20 -19
  20. data/lib/vanity/playground.rb +1 -3
  21. data/lib/vanity/version.rb +1 -1
  22. data/test/adapters/redis_adapter_test.rb +26 -27
  23. data/test/autoconnect_test.rb +19 -17
  24. data/test/cli_test.rb +19 -26
  25. data/test/experiment/ab_test.rb +2 -15
  26. data/test/experiment/base_test.rb +18 -22
  27. data/test/frameworks/rails/action_controller_test.rb +184 -0
  28. data/test/frameworks/rails/action_mailer_test.rb +65 -0
  29. data/test/{rails_helper_test.rb → frameworks/rails/action_view_test.rb} +1 -1
  30. data/test/frameworks/rails/rails_test.rb +285 -0
  31. data/test/helper_test.rb +13 -10
  32. data/test/metric/active_record_test.rb +50 -66
  33. data/test/metric/base_test.rb +39 -41
  34. data/test/metric/google_analytics_test.rb +13 -16
  35. data/test/metric/remote_test.rb +18 -19
  36. data/test/playground_test.rb +1 -1
  37. data/test/test_helper.rb +25 -43
  38. data/test/{rails_dashboard_test.rb → web/rails/dashboard_test.rb} +2 -1
  39. data/vanity.gemspec +3 -2
  40. metadata +33 -33
  41. data/gemfiles/rails3.gemfile +0 -32
  42. data/gemfiles/rails3.gemfile.lock +0 -172
  43. data/gemfiles/rails31.gemfile +0 -32
  44. data/gemfiles/rails31.gemfile.lock +0 -181
  45. data/generators/templates/vanity_migration.rb +0 -54
  46. data/generators/vanity_generator.rb +0 -8
  47. data/test/myapp/app/controllers/application_controller.rb +0 -2
  48. data/test/myapp/app/controllers/main_controller.rb +0 -7
  49. data/test/myapp/config/boot.rb +0 -110
  50. data/test/myapp/config/environment.rb +0 -10
  51. data/test/myapp/config/environments/production.rb +0 -0
  52. data/test/myapp/config/routes.rb +0 -3
  53. data/test/passenger_test.rb +0 -52
  54. data/test/rails_test.rb +0 -554
data/.gitignore CHANGED
@@ -1,6 +1,5 @@
1
1
  vendor
2
2
  log/*
3
- test/myapp/log/
4
3
  test/dummy/db/*.sqlite3
5
4
  test/dummy/log/*.log
6
5
  test/dummy/tmp/
data/.travis.yml CHANGED
@@ -5,71 +5,20 @@ services:
5
5
  - mongodb
6
6
  - redis-server
7
7
  rvm:
8
- - 1.8.7
9
8
  - 1.9.3
10
9
  - 2.0.0
10
+ - 2.1.0
11
+ - ruby-head
11
12
  env:
12
13
  - DB=mongodb
13
14
  - DB=redis
14
15
  - DB=active_record
15
16
  gemfile:
16
- - Gemfile
17
- - gemfiles/rails3.gemfile
18
- - gemfiles/rails31.gemfile
19
17
  - gemfiles/rails32.gemfile
20
18
  - gemfiles/rails4.gemfile
21
19
  before_script:
22
20
  - 'echo ''gem: --no-ri --no-rdoc'' > ~/.gemrc' # skip installing docs for gems
23
- - if [[ "`basename $BUNDLE_GEMFILE`" == "Gemfile" ]]; then rvm rubygems 1.8.25; fi # Rubygems 2.0.x fails with Rails 2.3
24
21
  matrix:
25
22
  exclude:
26
- # Rails 2 is not officially supported on Ruby 1.9.3
27
- - rvm: 1.9.3
28
- env: DB=mongodb
29
- gemfile: Gemfile
30
- - rvm: 1.9.3
31
- env: DB=redis
32
- gemfile: Gemfile
33
- - rvm: 1.9.3
34
- env: DB=active_record
35
- gemfile: Gemfile
36
- # Rails <= 3.2 is not officially supported on Ruby 2.0.0
37
- - rvm: 2.0.0
38
- env: DB=mongodb
39
- gemfile: Gemfile
40
- - rvm: 2.0.0
41
- env: DB=redis
42
- gemfile: Gemfile
43
- - rvm: 2.0.0
44
- env: DB=active_record
45
- gemfile: Gemfile
46
- - rvm: 2.0.0
47
- env: DB=mongodb
48
- gemfile: gemfiles/rails3.gemfile
49
- - rvm: 2.0.0
50
- env: DB=redis
51
- gemfile: gemfiles/rails3.gemfile
52
- - rvm: 2.0.0
53
- env: DB=active_record
54
- gemfile: gemfiles/rails3.gemfile
55
- # Rails >=4 officially supports >= Ruby 1.9.3
56
- - rvm: 1.8.7
57
- env: DB=mongodb
58
- gemfile: gemfiles/rails4.gemfile
59
- - rvm: 1.8.7
60
- env: DB=redis
61
- gemfile: gemfiles/rails4.gemfile
62
- - rvm: 1.8.7
63
- env: DB=active_record
64
- gemfile: gemfiles/rails4.gemfile
65
23
  allow_failures:
66
24
  - rvm: ruby-head
67
- - rvm: 2.0.0
68
- env: DB=mongodb
69
- gemfile: gemfiles/rails31.gemfile
70
- - rvm: 2.0.0
71
- env: DB=redis
72
- gemfile: gemfiles/rails31.gemfile
73
- - rvm: 2.0.0
74
- env: DB=active_record
75
- gemfile: gemfiles/rails31.gemfile
data/Appraisals CHANGED
@@ -1,22 +1,13 @@
1
- appraise "rails3" do
2
- gem "rails", "3.0.11"
3
- gem "fastthread", :git => "git://github.com/zoltankiss/fastthread.git", :platforms => :mri_20
4
- gem "passenger", "~>3.0"
5
- end
6
-
7
- appraise "rails31" do
8
- gem "rails", "3.1.3"
9
- gem "fastthread", :git => "git://github.com/zoltankiss/fastthread.git", :platforms => :mri_20
10
- gem "passenger", "~>3.0"
11
- end
12
-
13
1
  appraise "rails32" do
2
+ gem "mocha", "~> 0.12.8", :require=>false
3
+ gem "minitest", "~>4.2.0"
14
4
  gem "rails", "3.2.1"
15
5
  gem "fastthread", :git => "git://github.com/zoltankiss/fastthread.git", :platforms => :mri_20
16
6
  gem "passenger", "~>3.0"
17
7
  end
18
8
 
19
9
  appraise "rails4" do
10
+ gem "mocha", "~> 1.0", :require=>false
20
11
  gem "rails", "4.0.0"
21
12
  gem "fastthread", :git => "git://github.com/zoltankiss/fastthread.git", :platforms => :mri_20
22
13
  gem "passenger", "~>3.0"
data/CHANGELOG CHANGED
@@ -1,8 +1,4 @@
1
- == 1.9.3 (2015-10-04)
2
-
3
- Cherry-pick fix for ruby 2.2.
4
-
5
- == 1.9.1 (2014-04-20)
1
+ == 1.9.0 (2014-04-20)
6
2
 
7
3
  Include db:reset in blacklist for autoconnect. (@phillbaker)
8
4
  Add grace period to Vanity::Metric updated_at (@stangel)
data/Gemfile CHANGED
@@ -3,10 +3,6 @@ gemspec
3
3
 
4
4
  # Frameworks
5
5
  gem "rack"
6
- gem "rails", "~>2.3.8"
7
-
8
- # Servers
9
- gem "passenger", "~>2.0"
10
6
 
11
7
  # Persistence
12
8
  gem "redis", ">= 2.1"
@@ -16,19 +12,13 @@ gem "mongo"
16
12
  gem "sqlite3"
17
13
 
18
14
  # Math libraries
19
- gem "backports", :platforms => :mri_18
20
15
  gem "integration"
21
16
  gem "rubystats"
22
17
 
23
18
  # APIs
24
19
  gem "garb"
25
20
 
26
- # Compatibility
27
- gem "SystemTimer", "1.2.3", :platforms => :mri_18
28
-
29
21
  # Testing
30
- gem "mocha", :require=>false
31
- gem "shoulda", :require=>false # Requires test/unit
32
22
  gem "timecop", :require=>false
33
23
  gem "webmock", :require=>false
34
24
 
data/Gemfile.lock CHANGED
@@ -1,22 +1,12 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- vanity (1.9.3)
4
+ vanity (2.0.0.beta)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
9
  RedCloth (4.2.9)
10
- SystemTimer (1.2.3)
11
- actionmailer (2.3.14)
12
- actionpack (= 2.3.14)
13
- actionpack (2.3.14)
14
- activesupport (= 2.3.14)
15
- rack (~> 1.1.0)
16
- activerecord (2.3.14)
17
- activesupport (= 2.3.14)
18
- activeresource (2.3.14)
19
- activesupport (= 2.3.14)
20
10
  activesupport (2.3.14)
21
11
  addressable (2.2.7)
22
12
  albino (1.3.3)
@@ -25,7 +15,6 @@ GEM
25
15
  bundler
26
16
  rake
27
17
  thor (>= 0.14.0)
28
- backports (3.3.5)
29
18
  bson (1.6.0)
30
19
  bson_ext (1.6.0)
31
20
  bson (= 1.6.0)
@@ -34,7 +23,6 @@ GEM
34
23
  crack (0.3.1)
35
24
  directory_watcher (1.4.1)
36
25
  fast-stemmer (1.0.0)
37
- fastthread (1.0.7)
38
26
  garb (0.9.1)
39
27
  activesupport (>= 2.2.0)
40
28
  crack (>= 0.1.6)
@@ -50,34 +38,16 @@ GEM
50
38
  liquid (2.3.0)
51
39
  maruku (0.6.0)
52
40
  syntax (>= 1.0.0)
53
- metaclass (0.0.1)
54
- mocha (0.10.5)
55
- metaclass (~> 0.0.1)
41
+ minitest (4.7.5)
56
42
  mongo (1.6.0)
57
43
  bson (= 1.6.0)
58
- passenger (2.2.15)
59
- fastthread (>= 1.0.1)
60
- rack
61
- rake (>= 0.8.1)
62
44
  posix-spawn (0.3.6)
63
45
  rack (1.1.3)
64
- rails (2.3.14)
65
- actionmailer (= 2.3.14)
66
- actionpack (= 2.3.14)
67
- activerecord (= 2.3.14)
68
- activeresource (= 2.3.14)
69
- activesupport (= 2.3.14)
70
- rake (>= 0.8.3)
71
46
  rake (10.1.0)
72
47
  redis (3.0.6)
73
48
  redis-namespace (1.3.2)
74
49
  redis (~> 3.0.4)
75
50
  rubystats (0.2.3)
76
- shoulda (3.0.1)
77
- shoulda-context (~> 1.0.0)
78
- shoulda-matchers (~> 1.0.0)
79
- shoulda-context (1.0.0)
80
- shoulda-matchers (1.0.0)
81
51
  sqlite3 (1.3.8)
82
52
  syntax (1.0.0)
83
53
  thor (0.18.1)
@@ -92,24 +62,19 @@ PLATFORMS
92
62
 
93
63
  DEPENDENCIES
94
64
  RedCloth
95
- SystemTimer (= 1.2.3)
96
65
  appraisal (>= 1.0.0.beta2)
97
- backports
98
66
  bson_ext
99
67
  bundler (>= 1.0.0)
100
68
  garb
101
69
  integration
102
70
  jekyll
103
- mocha
71
+ minitest (>= 4.2)
104
72
  mongo
105
- passenger (~> 2.0)
106
73
  rack
107
- rails (~> 2.3.8)
108
74
  rake
109
75
  redis (>= 2.1)
110
76
  redis-namespace (>= 1.1.0)
111
77
  rubystats
112
- shoulda
113
78
  sqlite3
114
79
  timecop
115
80
  vanity!
data/README.rdoc CHANGED
@@ -21,15 +21,7 @@ Add to your Gemfile:
21
21
 
22
22
  gem "vanity"
23
23
 
24
- ===== Rails 2.x installation
25
-
26
- Rails::Initializer.run do |config|
27
- gem.config "vanity"
28
-
29
- config.after_initialize do
30
- require "vanity"
31
- end
32
- end
24
+ (For support for older versions of Rails and Ruby 1.8, please see the {1.9.x branch}[https://github.com/assaf/vanity/tree/1-9-stable].)
33
25
 
34
26
  ==== Step 1.2
35
27
 
@@ -168,12 +160,9 @@ To set this up simply do the following:
168
160
 
169
161
  Here's what's tested and known to work:
170
162
 
171
- Ruby 1.8.7
172
- Persistence: Redis, Mongo, ActiveRecord
173
- Rails: 2.3, 3, 3.1, 3.2
174
163
  Ruby 1.9.3
175
164
  Persistence: Redis, Mongo, ActiveRecord
176
- Rails: 3, 3.1, 3.2, 4.0
165
+ Rails: 3.2, 4.0
177
166
  Ruby 2.0
178
167
  Persistence: Redis, Mongo, ActiveRecord
179
168
  Rails: 3.2, 4.0
data/Rakefile CHANGED
@@ -8,7 +8,7 @@ desc "Test everything"
8
8
  task "test:all"=>"test:adapters"
9
9
 
10
10
  # Ruby versions we're testing with.
11
- RUBIES = %w{1.8.7 1.9.2 2.0.0}
11
+ RUBIES = %w{1.9.3 2.0.0}
12
12
 
13
13
  # Use rake test:rubies to run all combination of tests (see test:adapters) using
14
14
  # all the versions of Ruby specified in RUBIES. Or to test a specific version of
@@ -64,21 +64,15 @@ task "test:adapters", :adapter do |t, args|
64
64
  end
65
65
 
66
66
  # Run the test suit.
67
+ Rake::TestTask.new(:test) do |task|
68
+ task.libs << "lib"
69
+ task.libs << "test"
70
+ task.pattern = "test/**/*_test.rb"
71
+ task.verbose = false
72
+ end
67
73
 
68
74
  task :default=>:test
69
75
  desc "Run all tests"
70
- Rake::TestTask.new do |task|
71
- task.test_files = FileList['test/**/*_test.rb']
72
- if Rake.application.options.trace
73
- #task.warning = true
74
- task.verbose = true
75
- elsif Rake.application.options.silent
76
- task.ruby_opts << "-W0"
77
- else
78
- task.verbose = true
79
- end
80
- task.ruby_opts << "-I."
81
- end
82
76
 
83
77
  task(:clobber) { rm_rf "tmp" }
84
78
 
data/bin/vanity CHANGED
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
- # Is there a better way to detect Rails?
3
2
  if File.exist?("config/boot.rb") && File.exist?("config/environment.rb")
4
3
  require "./config/environment"
5
4
  else
data/doc/rails.textile CHANGED
@@ -20,18 +20,6 @@ Add Vanity to your Gemfile:
20
20
  gem "vanity"
21
21
  </pre>
22
22
 
23
- <em>Rails 2.x:</em>
24
-
25
- <pre>
26
- Rails::Initializer.run do |config|
27
- gem.config "vanity"
28
-
29
- config.after_initialize do
30
- require "vanity"
31
- end
32
- end
33
- </pre>
34
-
35
23
  h3(#config). Configuring Vanity
36
24
 
37
25
  h4. Configuring identity
@@ -8,15 +8,13 @@ gem "redis-namespace", ">= 1.1.0"
8
8
  gem "bson_ext"
9
9
  gem "mongo"
10
10
  gem "sqlite3"
11
- gem "backports", :platforms=>:mri_18
12
11
  gem "integration"
13
12
  gem "rubystats"
14
13
  gem "garb"
15
- gem "SystemTimer", "1.2.3", :platforms=>:mri_18
16
- gem "mocha", :require=>false
17
- gem "shoulda", :require=>false
18
14
  gem "timecop", :require=>false
19
15
  gem "webmock", :require=>false
16
+ gem "mocha", "~> 0.12.8", :require=>false
17
+ gem "minitest", "~>4.2.0"
20
18
  gem "rails", "3.2.1"
21
19
  gem "fastthread", :git=>"git://github.com/zoltankiss/fastthread.git", :platforms=>:mri_20
22
20
  gem "passenger", "~>3.0"
@@ -7,13 +7,12 @@ GIT
7
7
  PATH
8
8
  remote: ..
9
9
  specs:
10
- vanity (1.9.3)
10
+ vanity (2.0.0.beta)
11
11
 
12
12
  GEM
13
13
  remote: https://rubygems.org/
14
14
  specs:
15
15
  RedCloth (4.2.9)
16
- SystemTimer (1.2.3)
17
16
  actionmailer (3.2.1)
18
17
  actionpack (= 3.2.1)
19
18
  mail (~> 2.4.0)
@@ -49,7 +48,6 @@ GEM
49
48
  rake
50
49
  thor (>= 0.14.0)
51
50
  arel (3.0.2)
52
- backports (3.3.5)
53
51
  bson (1.6.0)
54
52
  bson_ext (1.6.0)
55
53
  bson (= 1.6.0)
@@ -84,9 +82,10 @@ GEM
84
82
  treetop (~> 1.4.8)
85
83
  maruku (0.6.0)
86
84
  syntax (>= 1.0.0)
87
- metaclass (0.0.1)
85
+ metaclass (0.0.4)
88
86
  mime-types (1.17.2)
89
- mocha (0.10.5)
87
+ minitest (4.2.0)
88
+ mocha (0.12.10)
90
89
  metaclass (~> 0.0.1)
91
90
  mongo (1.6.0)
92
91
  bson (= 1.6.0)
@@ -127,11 +126,6 @@ GEM
127
126
  redis-namespace (1.3.2)
128
127
  redis (~> 3.0.4)
129
128
  rubystats (0.2.3)
130
- shoulda (3.0.1)
131
- shoulda-context (~> 1.0.0)
132
- shoulda-matchers (~> 1.0.0)
133
- shoulda-context (1.0.0)
134
- shoulda-matchers (1.0.0)
135
129
  sprockets (2.1.2)
136
130
  hike (~> 1.2)
137
131
  rack (~> 1.0)
@@ -155,16 +149,15 @@ PLATFORMS
155
149
 
156
150
  DEPENDENCIES
157
151
  RedCloth
158
- SystemTimer (= 1.2.3)
159
152
  appraisal (>= 1.0.0.beta2)
160
- backports
161
153
  bson_ext
162
154
  bundler (>= 1.0.0)
163
155
  fastthread!
164
156
  garb
165
157
  integration
166
158
  jekyll
167
- mocha
159
+ minitest (~> 4.2.0)
160
+ mocha (~> 0.12.8)
168
161
  mongo
169
162
  passenger (~> 3.0)
170
163
  rack
@@ -173,7 +166,6 @@ DEPENDENCIES
173
166
  redis (>= 2.1)
174
167
  redis-namespace (>= 1.1.0)
175
168
  rubystats
176
- shoulda
177
169
  sqlite3
178
170
  timecop
179
171
  vanity!
@@ -8,15 +8,12 @@ gem "redis-namespace", ">= 1.1.0"
8
8
  gem "bson_ext"
9
9
  gem "mongo"
10
10
  gem "sqlite3"
11
- gem "backports", :platforms=>:mri_18
12
11
  gem "integration"
13
12
  gem "rubystats"
14
13
  gem "garb"
15
- gem "SystemTimer", "1.2.3", :platforms=>:mri_18
16
- gem "mocha", :require=>false
17
- gem "shoulda", :require=>false
18
14
  gem "timecop", :require=>false
19
15
  gem "webmock", :require=>false
16
+ gem "mocha", "~> 1.0", :require=>false
20
17
  gem "rails", "4.0.0"
21
18
  gem "fastthread", :git=>"git://github.com/zoltankiss/fastthread.git", :platforms=>:mri_20
22
19
  gem "passenger", "~>3.0"
@@ -7,13 +7,12 @@ GIT
7
7
  PATH
8
8
  remote: ..
9
9
  specs:
10
- vanity (1.9.3)
10
+ vanity (2.0.0.beta)
11
11
 
12
12
  GEM
13
13
  remote: https://rubygems.org/
14
14
  specs:
15
15
  RedCloth (4.2.9)
16
- SystemTimer (1.2.3)
17
16
  actionmailer (4.0.0)
18
17
  actionpack (= 4.0.0)
19
18
  mail (~> 2.5.3)
@@ -47,7 +46,6 @@ GEM
47
46
  thor (>= 0.14.0)
48
47
  arel (4.0.1)
49
48
  atomic (1.1.14)
50
- backports (3.3.5)
51
49
  bson (1.9.2)
52
50
  bson_ext (1.9.2)
53
51
  bson (~> 1.9.2)
@@ -80,10 +78,10 @@ GEM
80
78
  treetop (~> 1.4.8)
81
79
  maruku (0.6.0)
82
80
  syntax (>= 1.0.0)
83
- metaclass (0.0.1)
81
+ metaclass (0.0.4)
84
82
  mime-types (1.25)
85
83
  minitest (4.7.5)
86
- mocha (0.14.0)
84
+ mocha (1.0.0)
87
85
  metaclass (~> 0.0.1)
88
86
  mongo (1.9.2)
89
87
  bson (~> 1.9.2)
@@ -117,12 +115,6 @@ GEM
117
115
  redis (~> 3.0.4)
118
116
  rubystats (0.2.3)
119
117
  safe_yaml (0.9.7)
120
- shoulda (3.5.0)
121
- shoulda-context (~> 1.0, >= 1.0.1)
122
- shoulda-matchers (>= 1.4.1, < 3.0)
123
- shoulda-context (1.1.6)
124
- shoulda-matchers (2.4.0)
125
- activesupport (>= 3.0.0)
126
118
  sprockets (2.10.0)
127
119
  hike (~> 1.2)
128
120
  multi_json (~> 1.0)
@@ -153,16 +145,15 @@ PLATFORMS
153
145
 
154
146
  DEPENDENCIES
155
147
  RedCloth
156
- SystemTimer (= 1.2.3)
157
148
  appraisal (>= 1.0.0.beta2)
158
- backports
159
149
  bson_ext
160
150
  bundler (>= 1.0.0)
161
151
  fastthread!
162
152
  garb
163
153
  integration
164
154
  jekyll
165
- mocha
155
+ minitest (>= 4.2)
156
+ mocha (~> 1.0)
166
157
  mongo
167
158
  passenger (~> 3.0)
168
159
  rack
@@ -171,7 +162,6 @@ DEPENDENCIES
171
162
  redis (>= 2.1)
172
163
  redis-namespace (>= 1.1.0)
173
164
  rubystats
174
- shoulda
175
165
  sqlite3
176
166
  timecop
177
167
  vanity!
@@ -15,7 +15,7 @@ module Vanity
15
15
  self.abstract_class = true
16
16
 
17
17
  def self.needs_attr_accessible?
18
- respond_to?(:attr_accessible) && !defined?(ActionController::StrongParameters)
18
+ respond_to?(:attr_accessible) && (!defined?(ActionController::StrongParameters) || defined?(ProtectedAttributes))
19
19
  end
20
20
 
21
21
  def self.rails_agnostic_find_or_create_by(method, value)
@@ -25,6 +25,14 @@ module Vanity
25
25
  send :"find_or_create_by_#{method}", value
26
26
  end
27
27
  end
28
+
29
+ def self.rails_agnostic_find_first(conditions)
30
+ if respond_to? :where
31
+ where(conditions).first
32
+ else
33
+ find(:first, :conditions => conditions)
34
+ end
35
+ end
28
36
  end
29
37
 
30
38
  # Schema model
@@ -36,8 +44,7 @@ module Vanity
36
44
  class VanityMetric < VanityRecord
37
45
  UPDATED_AT_GRACE_PERIOD = 1.minute
38
46
  self.table_name = :vanity_metrics
39
- has_many :vanity_metric_values,
40
- :class_name => 'Vanity::Adapters::ActiveRecordAdapter::VanityMetricValue'
47
+ has_many :vanity_metric_values
41
48
 
42
49
  def self.retrieve(metric)
43
50
  rails_agnostic_find_or_create_by(:metric_id, metric.to_s)
@@ -60,15 +67,13 @@ module Vanity
60
67
  attr_accessible :date, :index, :value if needs_attr_accessible?
61
68
 
62
69
  self.table_name = :vanity_metric_values
63
- belongs_to :vanity_metric,
64
- :class_name => 'Vanity::Adapters::ActiveRecordAdapter::VanityMetric'
70
+ belongs_to :vanity_metric
65
71
  end
66
72
 
67
73
  # Experiment model
68
74
  class VanityExperiment < VanityRecord
69
75
  self.table_name = :vanity_experiments
70
- has_many :vanity_conversions, :dependent => :destroy,
71
- :class_name => 'Vanity::Adapters::ActiveRecordAdapter::VanityConversion'
76
+ has_many :vanity_conversions, :dependent => :destroy
72
77
  attr_accessible :experiment_id if needs_attr_accessible?
73
78
 
74
79
  # Finds or creates the experiment
@@ -85,8 +90,7 @@ module Vanity
85
90
  # Conversion model
86
91
  class VanityConversion < VanityRecord
87
92
  self.table_name = :vanity_conversions
88
- belongs_to :vanity_experiment,
89
- :class_name => 'Vanity::Adapters::ActiveRecordAdapter::VanityExperiment'
93
+ belongs_to :vanity_experiment
90
94
  end
91
95
 
92
96
  # Participant model
@@ -99,7 +103,7 @@ module Vanity
99
103
  # passed then this will be passed to create if creating, or will be
100
104
  # used to update the found participant.
101
105
  def self.retrieve(experiment, identity, create = true, update_with = nil)
102
- if record = VanityParticipant.first(:conditions=>{ :experiment_id=>experiment.to_s, :identity=>identity.to_s })
106
+ if record = VanityParticipant.rails_agnostic_find_first(:experiment_id=>experiment.to_s, :identity=>identity.to_s)
103
107
  record.update_attributes(update_with) if update_with
104
108
  elsif create
105
109
  record = VanityParticipant.create({ :experiment_id=>experiment.to_s, :identity=>identity.to_s }.merge(update_with || {}))
@@ -302,7 +302,7 @@ module Vanity
302
302
 
303
303
  # Use the result of #score or #bayes_bandit_score to derive a conclusion. Returns an
304
304
  # array of claims.
305
- def conclusion(score = score())
305
+ def conclusion(score = score)
306
306
  claims = []
307
307
  participants = score.alts.inject(0) { |t,alt| t + alt.participants }
308
308
  claims << case participants
@@ -59,13 +59,10 @@ module Vanity
59
59
  elsif symbol && object = send(symbol)
60
60
  @vanity_identity = object.id
61
61
  elsif response # everyday use
62
- #conditional for Rails2 support
63
- secure_random = defined?(SecureRandom) ? SecureRandom : ActiveSupport::SecureRandom
64
- @vanity_identity = cookies["vanity_id"] || secure_random.hex(16)
62
+ @vanity_identity = cookies["vanity_id"] || SecureRandom.hex(16)
65
63
  cookie = { :value=>@vanity_identity, :expires=>1.month.from_now }
66
64
  # Useful if application and admin console are on separate domains.
67
- # This only works in Rails 3.x.
68
- cookie[:domain] ||= ::Rails.application.config.session_options[:domain] if ::Rails.respond_to?(:application)
65
+ cookie[:domain] ||= ::Rails.application.config.session_options[:domain]
69
66
  cookies["vanity_id"] = cookie
70
67
  @vanity_identity
71
68
  else # during functional testing
@@ -95,8 +92,7 @@ module Vanity
95
92
  else
96
93
  class << self
97
94
  define_method :vanity_identity do
98
- secure_random = defined?(SecureRandom) ? SecureRandom : ActiveSupport::SecureRandom
99
- @vanity_identity = @vanity_identity || secure_random.hex(16)
95
+ @vanity_identity = @vanity_identity || SecureRandom.hex(16)
100
96
  end
101
97
  end
102
98
  end
@@ -104,7 +100,6 @@ module Vanity
104
100
  protected :use_vanity_mailer
105
101
  end
106
102
 
107
-
108
103
  # Vanity needs these filters. They are includes in ActionController and
109
104
  # automatically added when you use #use_vanity in your controller.
110
105
  module Filters
@@ -221,7 +216,7 @@ module Vanity
221
216
  def vanity_js
222
217
  return if @_vanity_experiments.nil? || @_vanity_experiments.empty?
223
218
  javascript_tag do
224
- render :file => Vanity.template("_vanity.js.erb")
219
+ render :file => Vanity.template("_vanity"), :formats => [:js]
225
220
  end
226
221
  end
227
222
 
@@ -346,7 +341,7 @@ end
346
341
 
347
342
 
348
343
  # Enhance ActionController with use_vanity, filters and helper methods.
349
- if defined?(ActionController)
344
+ ActiveSupport.on_load(:action_controller) do
350
345
  # Include in controller, add view helper methods.
351
346
  ActionController::Base.class_eval do
352
347
  extend Vanity::Rails::UseVanity
@@ -355,13 +350,12 @@ if defined?(ActionController)
355
350
  end
356
351
  end
357
352
 
358
- if defined?(ActionMailer)
359
- # Include in mailer, add view helper methods.
360
- ActionMailer::Base.class_eval do
361
- include Vanity::Rails::UseVanityMailer
362
- include Vanity::Rails::Filters
363
- helper Vanity::Rails::Helpers
364
- end
353
+
354
+ # Include in mailer, add view helper methods.
355
+ ActiveSupport.on_load(:action_mailer) do
356
+ include Vanity::Rails::UseVanityMailer
357
+ include Vanity::Rails::Filters
358
+ helper Vanity::Rails::Helpers
365
359
  end
366
360
 
367
361
  # Reconnect whenever we fork under Passenger.