vanity 2.0.0.beta4 → 2.0.0.beta5

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 (42) hide show
  1. checksums.yaml +7 -0
  2. data/.travis.yml +4 -0
  3. data/Appraisals +14 -0
  4. data/Gemfile +2 -2
  5. data/Gemfile.lock +5 -3
  6. data/README.rdoc +5 -1
  7. data/config/locales/vanity.en.yml +39 -0
  8. data/config/locales/vanity.pt-BR.yml +41 -0
  9. data/doc/ab_testing.textile +1 -1
  10. data/doc/rails.textile +13 -0
  11. data/gemfiles/rails32.gemfile +2 -2
  12. data/gemfiles/rails32.gemfile.lock +4 -3
  13. data/gemfiles/rails4.gemfile +2 -2
  14. data/gemfiles/rails4.gemfile.lock +4 -3
  15. data/gemfiles/rails41.gemfile +29 -0
  16. data/gemfiles/rails41.gemfile.lock +196 -0
  17. data/gemfiles/rails42.gemfile +29 -0
  18. data/gemfiles/rails42.gemfile.lock +235 -0
  19. data/lib/generators/templates/vanity_migration.rb +1 -1
  20. data/lib/generators/vanity/views_generator.rb +16 -0
  21. data/lib/vanity.rb +1 -0
  22. data/lib/vanity/experiment/ab_test.rb +15 -15
  23. data/lib/vanity/experiment/alternative.rb +2 -2
  24. data/lib/vanity/frameworks/rails.rb +16 -3
  25. data/lib/vanity/metric/active_record.rb +1 -1
  26. data/lib/vanity/playground.rb +19 -25
  27. data/lib/vanity/templates.rb +29 -0
  28. data/lib/vanity/templates/_ab_test.erb +12 -12
  29. data/lib/vanity/templates/_experiment.erb +4 -2
  30. data/lib/vanity/templates/_participant.erb +2 -2
  31. data/lib/vanity/templates/_report.erb +6 -6
  32. data/lib/vanity/templates/_vanity.js.erb +13 -15
  33. data/lib/vanity/templates/vanity.css +4 -4
  34. data/lib/vanity/version.rb +1 -1
  35. data/test/frameworks/rails/action_controller_test.rb +1 -1
  36. data/test/frameworks/rails/rails_test.rb +118 -102
  37. data/test/playground_test.rb +13 -0
  38. data/test/templates_test.rb +28 -0
  39. data/test/test_helper.rb +15 -17
  40. data/test/web/rails/dashboard_test.rb +25 -4
  41. data/vanity.gemspec +2 -0
  42. metadata +36 -18
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 64da19676a0a785baf7a4fad506d4919282a4622
4
+ data.tar.gz: 4fde55bdf334eb8947891156e8ffa8e2c4db3d84
5
+ SHA512:
6
+ metadata.gz: f363b4c0d159729aab12104b5c748437fab61eabdec113eca24c6eb6e9f0b5bfc3b6a8490f467e7158a19c97cd28303a97af0a8cce059b32ffec77599e4e056a
7
+ data.tar.gz: f4519c3151ff503cf5c329c528c6c55c7809342576739d66a2fb2cfa3d3bebb046a9d8e546569b744300867ee5b4519586adbbf8f57982ac89bd03613ac3dac0
data/.travis.yml CHANGED
@@ -1,3 +1,5 @@
1
+ sudo: false
2
+ cache: bundler
1
3
  language: ruby
2
4
  bundler_args: --without development
3
5
  script: 'bundle exec rake test'
@@ -16,6 +18,8 @@ env:
16
18
  gemfile:
17
19
  - gemfiles/rails32.gemfile
18
20
  - gemfiles/rails4.gemfile
21
+ - gemfiles/rails41.gemfile
22
+ - gemfiles/rails42.gemfile
19
23
  before_script:
20
24
  - 'echo ''gem: --no-ri --no-rdoc'' > ~/.gemrc' # skip installing docs for gems
21
25
  matrix:
data/Appraisals CHANGED
@@ -11,4 +11,18 @@ appraise "rails4" do
11
11
  gem "rails", "4.0.0"
12
12
  gem "fastthread", :git => "git://github.com/zoltankiss/fastthread.git", :platforms => :mri_20
13
13
  gem "passenger", "~>3.0"
14
+ end
15
+
16
+ appraise "rails41" do
17
+ gem "mocha", "~> 1.0", :require=>false
18
+ gem "rails", "4.1.0"
19
+ gem "fastthread", :git => "git://github.com/zoltankiss/fastthread.git", :platforms => :mri_20
20
+ gem "passenger", "~>3.0"
21
+ end
22
+
23
+ appraise "rails42" do
24
+ gem "mocha", "~> 1.0", :require=>false
25
+ gem "rails", "4.2.0"
26
+ gem "fastthread", :git => "git://github.com/zoltankiss/fastthread.git", :platforms => :mri_20
27
+ gem "passenger", "~>3.0"
14
28
  end
data/Gemfile CHANGED
@@ -12,11 +12,11 @@ gem "mongo"
12
12
  gem "sqlite3"
13
13
 
14
14
  # Math libraries
15
- gem "integration"
15
+ gem "integration", "<= 0.1.0"
16
16
  gem "rubystats"
17
17
 
18
18
  # APIs
19
- gem "garb"
19
+ gem "garb", "< 0.9.2" # API changes at this version
20
20
 
21
21
  # Testing
22
22
  gem "timecop", :require=>false
data/Gemfile.lock CHANGED
@@ -1,7 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- vanity (2.0.0.beta4)
4
+ vanity (2.0.0.beta5)
5
+ i18n
5
6
 
6
7
  GEM
7
8
  remote: https://rubygems.org/
@@ -26,6 +27,7 @@ GEM
26
27
  garb (0.9.1)
27
28
  activesupport (>= 2.2.0)
28
29
  crack (>= 0.1.6)
30
+ i18n (0.7.0)
29
31
  integration (0.1.0)
30
32
  jekyll (0.11.2)
31
33
  albino (~> 1.3)
@@ -65,8 +67,8 @@ DEPENDENCIES
65
67
  appraisal (>= 1.0.0.beta2)
66
68
  bson_ext
67
69
  bundler (>= 1.0.0)
68
- garb
69
- integration
70
+ garb (< 0.9.2)
71
+ integration (<= 0.1.0)
70
72
  jekyll
71
73
  minitest (>= 4.2)
72
74
  mongo
data/README.rdoc CHANGED
@@ -137,7 +137,11 @@ To view metrics and experiment results with the dashboard in Rails 3 & Rails 4:
137
137
 
138
138
  In <code>config/routes.rb</code>, add:
139
139
 
140
- match '/vanity(/:action(/:id(.:format)))', :controller => :vanity, :via => [:get, :post]
140
+ get '/vanity' =>'vanity#index'
141
+ get '/vanity/participant/:id' => 'vanity#participant'
142
+ post '/vanity/complete'
143
+ post '/vanity/chooses'
144
+ post '/vanity/add_participant'
141
145
 
142
146
  The controller should look like:
143
147
 
@@ -0,0 +1,39 @@
1
+ en:
2
+ vanity:
3
+ best_alternative: '(%{probability}% this is best)'
4
+ best_alternative_is_significant: 'With %{probability}% probability this result is statistically significant.'
5
+ best_alternative_probability: 'With %{probability}% probability this result is the best.'
6
+ best_alternative_measure: 'The best choice is %{best_alternative}: it converted at %{measure}% %{better_than}.'
7
+ better_alternative_than: '(%{probability}% better than %{alternative})'
8
+ choose_experiment: 'Show me this alternative from now on'
9
+ complete_and_confirm_experiment: 'Confirm experiment completion and assignment of all current and future participants to %{name}'
10
+ complete_and_confirm_experiment_label: 'Finish this experiment and assign all current and future participants to %{name}?'
11
+ complete_experiment: 'Complete the experiment and assign all current and future participants to %{name}'
12
+ completed_at: 'Completed %{timestamp}'
13
+ confirm: 'confirm'
14
+ converted: '%{count} converted'
15
+ converted_percentage: '%{alternative} converted at %{percentage}%.'
16
+ currently_shown: 'currently shown'
17
+ didnt_convert: '%{alternative} did not convert.'
18
+ experiment_participants:
19
+ one: 'There is one participant in this experiment.'
20
+ other: 'There are %{count} participants in this experiment.'
21
+ experiments: 'Experiments'
22
+ experiments_out_of_sync: "Vanity's cached experiments are out of sync with those on the filesystem and/or those in the datastore. Please restart your server and/or turn on collecting."
23
+ generated_by: 'Generated by %{link}'
24
+ low_result_confidence: 'This result does not have strong confidence behind it, suggest you continue this experiment.'
25
+ make_permanent: 'make permanent'
26
+ metrics: 'Metrics'
27
+ no_clear_winner: 'This experiment did not run long enough to find a clear winner.'
28
+ no_participants: 'There are no participants in this experiment yet.'
29
+ not_collecting_data: 'Vanity is currently not collecting data or metrics. To turn on data collection, set %{setting} in %{file}.'
30
+ option_number: 'option %{char}'
31
+ participant_taking_part_on: 'Participant id %{participant_id} is taking part in the following experiments:'
32
+ participants:
33
+ one: '1 participant'
34
+ other: '%{count} participants'
35
+ report: 'Vanity Report: %{timestamp}'
36
+ result_isnt_significant: 'This result is not statistically significant, suggest you continue this experiment.'
37
+ selected_as_best: '%{alternative} selected as the best alternative.'
38
+ show_me: 'show me'
39
+ started_at: 'Started %{timestamp}'
@@ -0,0 +1,41 @@
1
+ pt-BR:
2
+ vanity:
3
+ best_alternative: '(%{probability}% de ser a melhor)'
4
+ best_alternative_is_significant: '%{probability}% de probabilidade deste resultado ser estatisticamente significativo.'
5
+ best_alternative_probability: '%{probability}% de probabilidade deste ser o melhor resultado.'
6
+ best_alternative_measure: 'A melhor escolha é %{best_alternative}: converteu %{measure}% %{better_than}.'
7
+ better_alternative_than: '(%{probability}% melhor do que %{alternative})'
8
+ choose_experiment: 'Mostrar esta alternativa a partir de agora'
9
+ complete_and_confirm_experiment: 'Confirme o término da experiência e atribuição de todos os participantes atuais e futuros para %{name}'
10
+ complete_and_confirm_experiment_label: 'Terminar esta experiência e atribuir todos os participantes atuais e futuros para %{name}?'
11
+ complete_experiment: 'Complete o experimento e atribuição de todos os participantes atuais e futuros para %{name}'
12
+ completed_at: 'Completado em %{timestamp}'
13
+ confirm: 'confirmar'
14
+ converted:
15
+ one: '1 convertido'
16
+ other: '%{count} convertidos'
17
+ converted_percentage: '%{alternative} converteu %{percentage}%'
18
+ currently_shown: 'atualmente exibido'
19
+ didnt_convert: '%{alternative} não converteu.'
20
+ experiment_participants:
21
+ one: 'Há um participante neste experimento.'
22
+ other: 'Há %{count} participantes neste experimento.'
23
+ experiments: 'Experimentos'
24
+ experiments_out_of_sync: 'Os experimentos em cache do Vanity estão fora de sincronia com o sistema de arquivos e/ou com o banco de dados. Por favor reinicie seu servidor e/ou ative a coleta.'
25
+ generated_by: 'Gerado por %{link}'
26
+ low_result_confidence: 'Este resultado não apresenta boa confiabilidade, sugiro que continue esta experiência.'
27
+ make_permanent: 'tornar permanente'
28
+ metrics: 'Métricas'
29
+ no_clear_winner: 'Esta experiência não correu tempo suficiente para definir um vencedor claro.'
30
+ no_participants: 'Não há participantes neste experimento ainda.'
31
+ not_collecting_data: 'Vanity não está a recolher dados ou métricas no momento. Para ativar a coleta de dados, definir %{setting} no %{file}.'
32
+ option_number: 'Opção %{char}'
33
+ participant_taking_part_on: 'Participante #%{participant_id} está participando das seguintes experiências:'
34
+ participants:
35
+ one: '1 participante'
36
+ other: '%{count} participantes'
37
+ report: 'Relatório Vanity: %{timestamp}'
38
+ result_isnt_significant: 'Este resultado não é estatisticamente significativo, sugiro que continue esta experiência.'
39
+ selected_as_best: "%{alternative} selecionada como a melhor alternativa."
40
+ show_me: 'mostrar'
41
+ started_at: 'Iniciado em %{timestamp}'
@@ -26,7 +26,7 @@ Let's start with a simple experiment. We have this idea that a bigger sign-up l
26
26
  We already have a "metric":metrics.html we're monitoring, and our experiment will measure against it:
27
27
 
28
28
  <pre>
29
- ab_test "Big singup link" do
29
+ ab_test "Big signup link" do
30
30
  description "Testing to see if a bigger sign-up link increases number of signups."
31
31
  metrics :signup
32
32
  end
data/doc/rails.textile CHANGED
@@ -64,6 +64,19 @@ h4. Enabling/disable collection
64
64
 
65
65
  When collection is off, Vanity doesn't connect to the database server, so there's no need to set a database configuration for these environments.
66
66
 
67
+ h4. Overriding default views
68
+
69
+ If you would like to customize Vanity's dashboard, you can create create copies of the default views in @app/views/vanity@ by running a generator:
70
+
71
+ <pre>
72
+ rails g vanity:views
73
+ </pre>
74
+
75
+ You can then edit them to your heart's content. If you need to use an alternative location for your custom templates, set the configuration variable @custom_templates_path@ on @Vanity.playground@ like this:
76
+
77
+ <pre>
78
+ Vanity.playground.custom_templates_path = 'views/vanity'
79
+ </pre>
67
80
 
68
81
  h3(#fork). Unicorn and Forking Servers
69
82
 
@@ -8,9 +8,9 @@ gem "redis-namespace", ">= 1.1.0"
8
8
  gem "bson_ext"
9
9
  gem "mongo"
10
10
  gem "sqlite3"
11
- gem "integration"
11
+ gem "integration", "<= 0.1.0"
12
12
  gem "rubystats"
13
- gem "garb"
13
+ gem "garb", "< 0.9.2"
14
14
  gem "timecop", :require=>false
15
15
  gem "webmock", :require=>false
16
16
  gem "mocha", "~> 0.12.8", :require=>false
@@ -7,7 +7,8 @@ GIT
7
7
  PATH
8
8
  remote: ..
9
9
  specs:
10
- vanity (2.0.0.beta4)
10
+ vanity (2.0.0.beta5)
11
+ i18n
11
12
 
12
13
  GEM
13
14
  remote: https://rubygems.org/
@@ -153,8 +154,8 @@ DEPENDENCIES
153
154
  bson_ext
154
155
  bundler (>= 1.0.0)
155
156
  fastthread!
156
- garb
157
- integration
157
+ garb (< 0.9.2)
158
+ integration (<= 0.1.0)
158
159
  jekyll
159
160
  minitest (~> 4.2.0)
160
161
  mocha (~> 0.12.8)
@@ -8,9 +8,9 @@ gem "redis-namespace", ">= 1.1.0"
8
8
  gem "bson_ext"
9
9
  gem "mongo"
10
10
  gem "sqlite3"
11
- gem "integration"
11
+ gem "integration", "<= 0.1.0"
12
12
  gem "rubystats"
13
- gem "garb"
13
+ gem "garb", "< 0.9.2"
14
14
  gem "timecop", :require=>false
15
15
  gem "webmock", :require=>false
16
16
  gem "mocha", "~> 1.0", :require=>false
@@ -7,7 +7,8 @@ GIT
7
7
  PATH
8
8
  remote: ..
9
9
  specs:
10
- vanity (2.0.0.beta4)
10
+ vanity (2.0.0.beta5)
11
+ i18n
11
12
 
12
13
  GEM
13
14
  remote: https://rubygems.org/
@@ -149,8 +150,8 @@ DEPENDENCIES
149
150
  bson_ext
150
151
  bundler (>= 1.0.0)
151
152
  fastthread!
152
- garb
153
- integration
153
+ garb (< 0.9.2)
154
+ integration (<= 0.1.0)
154
155
  jekyll
155
156
  minitest (>= 4.2)
156
157
  mocha (~> 1.0)
@@ -0,0 +1,29 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rack"
6
+ gem "redis", ">= 2.1"
7
+ gem "redis-namespace", ">= 1.1.0"
8
+ gem "bson_ext"
9
+ gem "mongo"
10
+ gem "sqlite3"
11
+ gem "integration", "<= 0.1.0"
12
+ gem "rubystats"
13
+ gem "garb", "< 0.9.2"
14
+ gem "timecop", :require=>false
15
+ gem "webmock", :require=>false
16
+ gem "mocha", "~> 1.0", :require=>false
17
+ gem "rails", "4.1.0"
18
+ gem "fastthread", :git=>"git://github.com/zoltankiss/fastthread.git", :platforms=>:mri_20
19
+ gem "passenger", "~>3.0"
20
+
21
+ group :development do
22
+ gem "appraisal", ">= 1.0.0.beta2"
23
+ gem "jekyll"
24
+ gem "rake"
25
+ gem "RedCloth"
26
+ gem "yard"
27
+ end
28
+
29
+ gemspec :path=>".././"
@@ -0,0 +1,196 @@
1
+ GIT
2
+ remote: git://github.com/zoltankiss/fastthread.git
3
+ revision: 56e6ce7c1780797a354d5befe9a9a9869bbc7e3e
4
+ specs:
5
+ fastthread (1.0.7)
6
+
7
+ PATH
8
+ remote: .././
9
+ specs:
10
+ vanity (2.0.0.beta5)
11
+ i18n
12
+
13
+ GEM
14
+ remote: https://rubygems.org/
15
+ specs:
16
+ RedCloth (4.2.9)
17
+ actionmailer (4.1.0)
18
+ actionpack (= 4.1.0)
19
+ actionview (= 4.1.0)
20
+ mail (~> 2.5.4)
21
+ actionpack (4.1.0)
22
+ actionview (= 4.1.0)
23
+ activesupport (= 4.1.0)
24
+ rack (~> 1.5.2)
25
+ rack-test (~> 0.6.2)
26
+ actionview (4.1.0)
27
+ activesupport (= 4.1.0)
28
+ builder (~> 3.1)
29
+ erubis (~> 2.7.0)
30
+ activemodel (4.1.0)
31
+ activesupport (= 4.1.0)
32
+ builder (~> 3.1)
33
+ activerecord (4.1.0)
34
+ activemodel (= 4.1.0)
35
+ activesupport (= 4.1.0)
36
+ arel (~> 5.0.0)
37
+ activesupport (4.1.0)
38
+ i18n (~> 0.6, >= 0.6.9)
39
+ json (~> 1.7, >= 1.7.7)
40
+ minitest (~> 5.1)
41
+ thread_safe (~> 0.1)
42
+ tzinfo (~> 1.1)
43
+ addressable (2.3.6)
44
+ appraisal (1.0.0)
45
+ bundler
46
+ rake
47
+ thor (>= 0.14.0)
48
+ arel (5.0.1.20140414130214)
49
+ blankslate (2.1.2.4)
50
+ bson (1.10.0)
51
+ bson_ext (1.10.0)
52
+ bson (~> 1.10.0)
53
+ builder (3.2.2)
54
+ classifier (1.3.4)
55
+ fast-stemmer (>= 1.0.0)
56
+ colorator (0.1)
57
+ commander (4.1.6)
58
+ highline (~> 1.6.11)
59
+ crack (0.4.2)
60
+ safe_yaml (~> 1.0.0)
61
+ daemon_controller (1.2.0)
62
+ erubis (2.7.0)
63
+ fast-stemmer (1.0.2)
64
+ ffi (1.9.3)
65
+ garb (0.9.1)
66
+ activesupport (>= 2.2.0)
67
+ crack (>= 0.1.6)
68
+ highline (1.6.21)
69
+ hike (1.2.3)
70
+ i18n (0.6.9)
71
+ integration (0.1.0)
72
+ jekyll (1.5.1)
73
+ classifier (~> 1.3)
74
+ colorator (~> 0.1)
75
+ commander (~> 4.1.3)
76
+ liquid (~> 2.5.5)
77
+ listen (~> 1.3)
78
+ maruku (= 0.7.0)
79
+ pygments.rb (~> 0.5.0)
80
+ redcarpet (~> 2.3.0)
81
+ safe_yaml (~> 1.0)
82
+ toml (~> 0.1.0)
83
+ json (1.8.1)
84
+ liquid (2.5.5)
85
+ listen (1.3.1)
86
+ rb-fsevent (>= 0.9.3)
87
+ rb-inotify (>= 0.9)
88
+ rb-kqueue (>= 0.2)
89
+ mail (2.5.4)
90
+ mime-types (~> 1.16)
91
+ treetop (~> 1.4.8)
92
+ maruku (0.7.0)
93
+ metaclass (0.0.4)
94
+ mime-types (1.25.1)
95
+ minitest (5.3.3)
96
+ mocha (1.1.0)
97
+ metaclass (~> 0.0.1)
98
+ mongo (1.10.0)
99
+ bson (~> 1.10.0)
100
+ multi_json (1.9.2)
101
+ parslet (1.5.0)
102
+ blankslate (~> 2.0)
103
+ passenger (3.0.21)
104
+ daemon_controller (>= 1.0.0)
105
+ fastthread (>= 1.0.1)
106
+ rack
107
+ rake (>= 0.8.1)
108
+ polyglot (0.3.4)
109
+ posix-spawn (0.3.8)
110
+ pygments.rb (0.5.4)
111
+ posix-spawn (~> 0.3.6)
112
+ yajl-ruby (~> 1.1.0)
113
+ rack (1.5.2)
114
+ rack-test (0.6.2)
115
+ rack (>= 1.0)
116
+ rails (4.1.0)
117
+ actionmailer (= 4.1.0)
118
+ actionpack (= 4.1.0)
119
+ actionview (= 4.1.0)
120
+ activemodel (= 4.1.0)
121
+ activerecord (= 4.1.0)
122
+ activesupport (= 4.1.0)
123
+ bundler (>= 1.3.0, < 2.0)
124
+ railties (= 4.1.0)
125
+ sprockets-rails (~> 2.0)
126
+ railties (4.1.0)
127
+ actionpack (= 4.1.0)
128
+ activesupport (= 4.1.0)
129
+ rake (>= 0.8.7)
130
+ thor (>= 0.18.1, < 2.0)
131
+ rake (10.3.1)
132
+ rb-fsevent (0.9.4)
133
+ rb-inotify (0.9.3)
134
+ ffi (>= 0.5.0)
135
+ rb-kqueue (0.2.2)
136
+ ffi (>= 0.5.0)
137
+ redcarpet (2.3.0)
138
+ redis (3.0.7)
139
+ redis-namespace (1.4.1)
140
+ redis (~> 3.0.4)
141
+ rubystats (0.2.3)
142
+ safe_yaml (1.0.3)
143
+ sprockets (2.12.1)
144
+ hike (~> 1.2)
145
+ multi_json (~> 1.0)
146
+ rack (~> 1.0)
147
+ tilt (~> 1.1, != 1.3.0)
148
+ sprockets-rails (2.1.3)
149
+ actionpack (>= 3.0)
150
+ activesupport (>= 3.0)
151
+ sprockets (~> 2.8)
152
+ sqlite3 (1.3.9)
153
+ thor (0.19.1)
154
+ thread_safe (0.3.3)
155
+ tilt (1.4.1)
156
+ timecop (0.7.1)
157
+ toml (0.1.1)
158
+ parslet (~> 1.5.0)
159
+ treetop (1.4.15)
160
+ polyglot
161
+ polyglot (>= 0.3.1)
162
+ tzinfo (1.1.0)
163
+ thread_safe (~> 0.1)
164
+ webmock (1.17.4)
165
+ addressable (>= 2.2.7)
166
+ crack (>= 0.3.2)
167
+ yajl-ruby (1.1.0)
168
+ yard (0.8.7.4)
169
+
170
+ PLATFORMS
171
+ ruby
172
+
173
+ DEPENDENCIES
174
+ RedCloth
175
+ appraisal (>= 1.0.0.beta2)
176
+ bson_ext
177
+ bundler (>= 1.0.0)
178
+ fastthread!
179
+ garb (< 0.9.2)
180
+ integration (<= 0.1.0)
181
+ jekyll
182
+ minitest (>= 4.2)
183
+ mocha (~> 1.0)
184
+ mongo
185
+ passenger (~> 3.0)
186
+ rack
187
+ rails (= 4.1.0)
188
+ rake
189
+ redis (>= 2.1)
190
+ redis-namespace (>= 1.1.0)
191
+ rubystats
192
+ sqlite3
193
+ timecop
194
+ vanity!
195
+ webmock
196
+ yard