vanity 2.0.1 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -2
- data/Appraisals +6 -6
- data/CHANGELOG +9 -3
- data/Gemfile.lock +1 -1
- data/README.md +299 -0
- data/doc/configuring.textile +8 -1
- data/doc/identity.textile +2 -0
- data/doc/metrics.textile +10 -0
- data/gemfiles/rails32.gemfile.lock +1 -1
- data/gemfiles/rails41.gemfile.lock +1 -1
- data/gemfiles/rails42.gemfile.lock +1 -1
- data/gemfiles/{rails4.gemfile → rails42_protected_attributes.gemfile} +2 -2
- data/gemfiles/rails42_protected_attributes.gemfile.lock +209 -0
- data/lib/generators/templates/vanity_migration.rb +1 -0
- data/lib/vanity/adapters/abstract_adapter.rb +11 -0
- data/lib/vanity/adapters/active_record_adapter.rb +15 -1
- data/lib/vanity/adapters/mock_adapter.rb +14 -0
- data/lib/vanity/adapters/mongodb_adapter.rb +14 -0
- data/lib/vanity/adapters/redis_adapter.rb +15 -0
- data/lib/vanity/configuration.rb +43 -11
- data/lib/vanity/experiment/ab_test.rb +145 -15
- data/lib/vanity/experiment/alternative.rb +4 -0
- data/lib/vanity/frameworks/rails.rb +69 -31
- data/lib/vanity/locales/vanity.en.yml +9 -0
- data/lib/vanity/locales/vanity.pt-BR.yml +4 -0
- data/lib/vanity/metric/active_record.rb +9 -1
- data/lib/vanity/templates/_ab_test.erb +9 -2
- data/lib/vanity/templates/_experiment.erb +21 -1
- data/lib/vanity/templates/vanity.css +11 -3
- data/lib/vanity/templates/vanity.js +35 -6
- data/lib/vanity/version.rb +1 -1
- data/test/commands/report_test.rb +1 -0
- data/test/dummy/config/application.rb +1 -0
- data/test/experiment/ab_test.rb +414 -0
- data/test/experiment/base_test.rb +16 -10
- data/test/frameworks/rails/action_controller_test.rb +14 -6
- data/test/frameworks/rails/action_mailer_test.rb +8 -6
- data/test/frameworks/rails/action_view_test.rb +1 -0
- data/test/helper_test.rb +2 -0
- data/test/metric/active_record_test.rb +56 -0
- data/test/playground_test.rb +3 -0
- data/test/test_helper.rb +28 -2
- data/test/web/rails/dashboard_test.rb +2 -0
- data/vanity.gemspec +2 -2
- metadata +8 -8
- data/README.rdoc +0 -231
- data/gemfiles/rails4.gemfile.lock +0 -179
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 785019e8d6f59f84073d7645a9b8a12c7c07edf0
|
4
|
+
data.tar.gz: 75b44173bbc79629b5c70d6bc545e3cdffb73962
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a5b228f3a04a5f28db6a9c927b685c211340f3d6f4612e156d533683b35ede1089571c22119ff1db522259cb285948c63fba9d0c1b78ce9624f8c48b85ffb4ba
|
7
|
+
data.tar.gz: 1b337660bc064b51074dfd3979cfa32696b4a103d98ad1adac987e58376f613a8a384a8f58423a317a36b08ec94f39784688477053347281918f5278b19e5a52
|
data/.travis.yml
CHANGED
@@ -11,7 +11,6 @@ services:
|
|
11
11
|
- mongodb
|
12
12
|
- redis-server
|
13
13
|
rvm:
|
14
|
-
- 1.9.3
|
15
14
|
- 2.0.0
|
16
15
|
- 2.1.0
|
17
16
|
- 2.2.0
|
@@ -22,6 +21,6 @@ env:
|
|
22
21
|
- DB=active_record
|
23
22
|
gemfile:
|
24
23
|
- gemfiles/rails32.gemfile
|
25
|
-
- gemfiles/rails4.gemfile
|
26
24
|
- gemfiles/rails41.gemfile
|
27
25
|
- gemfiles/rails42.gemfile
|
26
|
+
- gemfiles/rails42_protected_attributes.gemfile
|
data/Appraisals
CHANGED
@@ -7,22 +7,22 @@ appraise "rails32" do
|
|
7
7
|
gem "passenger", "~>3.0"
|
8
8
|
end
|
9
9
|
|
10
|
-
appraise "
|
10
|
+
appraise "rails41" do
|
11
11
|
gem "mocha", "~> 1.0", :require=>false
|
12
|
-
gem "rails", "4.
|
12
|
+
gem "rails", "4.1.9"
|
13
13
|
gem "fastthread", :git => "git://github.com/zoltankiss/fastthread.git", :platforms => :mri_20
|
14
14
|
gem "passenger", "~>3.0"
|
15
|
-
gem 'test-unit'
|
16
15
|
end
|
17
16
|
|
18
|
-
appraise "
|
17
|
+
appraise "rails42" do
|
19
18
|
gem "mocha", "~> 1.0", :require=>false
|
20
|
-
gem "rails", "4.
|
19
|
+
gem "rails", "4.2.0"
|
21
20
|
gem "fastthread", :git => "git://github.com/zoltankiss/fastthread.git", :platforms => :mri_20
|
22
21
|
gem "passenger", "~>3.0"
|
23
22
|
end
|
24
23
|
|
25
|
-
appraise "rails42" do
|
24
|
+
appraise "rails42-protected_attributes" do
|
25
|
+
gem "protected_attributes", "1.1.0"
|
26
26
|
gem "mocha", "~> 1.0", :require=>false
|
27
27
|
gem "rails", "4.2.0"
|
28
28
|
gem "fastthread", :git => "git://github.com/zoltankiss/fastthread.git", :platforms => :mri_20
|
data/CHANGELOG
CHANGED
@@ -1,6 +1,12 @@
|
|
1
|
-
== 2.
|
2
|
-
|
3
|
-
Add
|
1
|
+
== 2.1.0 (2015-1-19)
|
2
|
+
|
3
|
+
Add ability to define test alternatives with custom probabilities, #283. (@peterkovacs)
|
4
|
+
Allow ActiveRecord model metrics to provide their own identity source, #285. (@peterkovacs)
|
5
|
+
Add individual cookie options for name, domain, path, secure, and httponly properties of the cookie in the `Vanity.configuration`, #282. (@peterkovacs)
|
6
|
+
Update default_request_filter to exclude more bots, #284. (@peterkovacs)
|
7
|
+
Remove testing support for ruby 1.9.3. (@phillbaker)
|
8
|
+
Remove testing support for rails 4.0. (@phillbaker)
|
9
|
+
Add attr_accessible for VanityConversion model alternative attribute (@mikem836)
|
4
10
|
|
5
11
|
== 2.0.0 (2015-12-14)
|
6
12
|
|
data/Gemfile.lock
CHANGED
data/README.md
ADDED
@@ -0,0 +1,299 @@
|
|
1
|
+
# Vanity
|
2
|
+
[![Build
|
3
|
+
Status](https://travis-ci.org/assaf/vanity.png?branch=master)](https://travis-ci.org/assaf/vanity)
|
4
|
+
|
5
|
+
Vanity is an A/B testing framework for Rails that is datastore agnostic.
|
6
|
+
|
7
|
+
* All about Vanity: http://vanity.labnotes.org
|
8
|
+
* On Github: http://github.com/assaf/vanity
|
9
|
+
|
10
|
+
[![Dashboard](doc/images/sidebar_test.png)](http://github.com/assaf/vanity)
|
11
|
+
|
12
|
+
## A/B Testing With Rails
|
13
|
+
|
14
|
+
### **Step 1:** Start using Vanity in your Rails application
|
15
|
+
|
16
|
+
#### Step 1.1
|
17
|
+
|
18
|
+
##### Rails 3 & Rails 4 installation
|
19
|
+
|
20
|
+
Add to your Gemfile:
|
21
|
+
|
22
|
+
gem "vanity"
|
23
|
+
|
24
|
+
(For support for older versions of Rails and Ruby 1.8, please see the [1.9.x
|
25
|
+
branch](https://github.com/assaf/vanity/tree/1-9-stable).)
|
26
|
+
|
27
|
+
#### Step 1.2
|
28
|
+
|
29
|
+
Choose a datastore that best fits your needs and preferences for storing
|
30
|
+
experiment results. Choose one of: Redis, MongoDB or an SQL database. While
|
31
|
+
Redis is usually faster, it may add additional complexity to your stack.
|
32
|
+
Datastores should be configured using a `config/vanity.yml`.
|
33
|
+
|
34
|
+
##### Redis Setup
|
35
|
+
|
36
|
+
Add to your Gemfile:
|
37
|
+
|
38
|
+
gem "redis", ">= 2.1"
|
39
|
+
gem "redis-namespace", ">= 1.1.0"
|
40
|
+
|
41
|
+
By default Vanity is configured to use Redis on localhost port 6379 with
|
42
|
+
database 0.
|
43
|
+
|
44
|
+
A sample `config/vanity.yml` might look like:
|
45
|
+
|
46
|
+
```yaml
|
47
|
+
test:
|
48
|
+
collecting: false
|
49
|
+
production:
|
50
|
+
adapter: redis
|
51
|
+
url: redis://<%= ENV["REDIS_USER"] %>:<%= ENV["REDIS_PASSWORD"] %>@<%= ENV["REDIS_HOST"] %>:<%= ENV["REDIS_PORT"] %>/0
|
52
|
+
```
|
53
|
+
|
54
|
+
If you want to use your test environment with RSpec you will need to add an
|
55
|
+
adapter to test:
|
56
|
+
|
57
|
+
```yaml
|
58
|
+
test:
|
59
|
+
adapter: redis
|
60
|
+
collecting: false
|
61
|
+
```
|
62
|
+
|
63
|
+
##### MongoDB Setup
|
64
|
+
|
65
|
+
Add to your Gemfile:
|
66
|
+
|
67
|
+
```ruby
|
68
|
+
gem "bson_ext"
|
69
|
+
gem "mongo"
|
70
|
+
```
|
71
|
+
|
72
|
+
A sample `config/vanity.yml` might look like:
|
73
|
+
|
74
|
+
```yaml
|
75
|
+
development:
|
76
|
+
adapter: mongodb
|
77
|
+
database: analytics
|
78
|
+
test:
|
79
|
+
collecting: false
|
80
|
+
production:
|
81
|
+
adapter: mongodb
|
82
|
+
database: analytics
|
83
|
+
```
|
84
|
+
|
85
|
+
##### SQL Database Setup
|
86
|
+
|
87
|
+
Vanity supports multiple SQL stores (like MySQL, MariaDB, Postgres, Sqlite,
|
88
|
+
etc.) using ActiveRecord, which is built into Rails. If you're using
|
89
|
+
DataMapper, Sequel or another persistence framework, add to your Gemfile:
|
90
|
+
|
91
|
+
```ruby
|
92
|
+
gem "active_record"
|
93
|
+
```
|
94
|
+
|
95
|
+
A sample `config/vanity.yml` might look like:
|
96
|
+
|
97
|
+
```yaml
|
98
|
+
development:
|
99
|
+
adapter: active_record
|
100
|
+
active_record_adapter: sqlite3
|
101
|
+
database: db/development.sqlite3
|
102
|
+
test:
|
103
|
+
collecting: false
|
104
|
+
production:
|
105
|
+
adapter: active_record
|
106
|
+
active_record_adapter: default
|
107
|
+
```
|
108
|
+
|
109
|
+
If you're going to store data in the database, run the generator and
|
110
|
+
migrations to create the database schema:
|
111
|
+
|
112
|
+
```sh
|
113
|
+
$ rails generate vanity
|
114
|
+
$ rake db:migrate
|
115
|
+
```
|
116
|
+
|
117
|
+
#### Step 1.3
|
118
|
+
|
119
|
+
Turn Vanity on, and pass a reference to a method that identifies a user. For
|
120
|
+
example:
|
121
|
+
|
122
|
+
```ruby
|
123
|
+
class ApplicationController < ActionController::Base
|
124
|
+
use_vanity :current_user
|
125
|
+
end
|
126
|
+
```
|
127
|
+
|
128
|
+
For more information, please see the [identity
|
129
|
+
documentation](http://vanity.labnotes.org/identity.html).
|
130
|
+
|
131
|
+
### **Step 2:** Define your first A/B test
|
132
|
+
|
133
|
+
This experiment goes in the file `experiments/price_options.rb`:
|
134
|
+
|
135
|
+
```ruby
|
136
|
+
ab_test "Price options" do
|
137
|
+
description "Mirror, mirror on the wall, who's the better price of all?"
|
138
|
+
alternatives 19, 25, 29
|
139
|
+
metrics :signups
|
140
|
+
end
|
141
|
+
```
|
142
|
+
|
143
|
+
If the experiment uses a metric as above ("signups"), there needs to be a
|
144
|
+
corresponding ruby file for that metric, `experiments/metrics/signups.rb`.
|
145
|
+
|
146
|
+
```ruby
|
147
|
+
metric "Signup (Activation)" do
|
148
|
+
description "Measures how many people signed up for our awesome service."
|
149
|
+
end
|
150
|
+
```
|
151
|
+
|
152
|
+
### **Step 3:** Present the different options to your users
|
153
|
+
|
154
|
+
```erb
|
155
|
+
<h2>Get started for only $<%= ab_test :price_options %> a month!</h2>
|
156
|
+
```
|
157
|
+
|
158
|
+
### **Step 4:** Measure conversion
|
159
|
+
|
160
|
+
Conversions are created via the `Vanity.track!` method. For example:
|
161
|
+
|
162
|
+
```ruby
|
163
|
+
class SignupController < ApplicationController
|
164
|
+
def signup
|
165
|
+
@account = Account.new(params[:account])
|
166
|
+
if @account.save
|
167
|
+
Vanity.track!(:signups)
|
168
|
+
redirect_to @acccount
|
169
|
+
else
|
170
|
+
render action: :offer
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
174
|
+
```
|
175
|
+
|
176
|
+
### **Step 5:** Check the report:
|
177
|
+
|
178
|
+
```sh
|
179
|
+
vanity report --output vanity.html
|
180
|
+
```
|
181
|
+
|
182
|
+
To view metrics and experiment results with the dashboard in Rails 3 & Rails
|
183
|
+
4:
|
184
|
+
|
185
|
+
```sh
|
186
|
+
rails generate controller Vanity --helper=false
|
187
|
+
```
|
188
|
+
|
189
|
+
In `config/routes.rb`, add:
|
190
|
+
|
191
|
+
```ruby
|
192
|
+
get '/vanity' =>'vanity#index'
|
193
|
+
get '/vanity/participant/:id' => 'vanity#participant'
|
194
|
+
post '/vanity/complete'
|
195
|
+
post '/vanity/chooses'
|
196
|
+
post '/vanity/reset'
|
197
|
+
post '/vanity/enable'
|
198
|
+
post '/vanity/disable'
|
199
|
+
post '/vanity/add_participant'
|
200
|
+
get '/vanity/image'
|
201
|
+
```
|
202
|
+
|
203
|
+
The controller should look like:
|
204
|
+
|
205
|
+
```ruby
|
206
|
+
class VanityController < ApplicationController
|
207
|
+
include Vanity::Rails::Dashboard
|
208
|
+
layout false # exclude this if you want to use your application layout
|
209
|
+
end
|
210
|
+
```
|
211
|
+
|
212
|
+
## Registering participants with Javascript
|
213
|
+
|
214
|
+
If robots or spiders make up a significant portion of your sites traffic they
|
215
|
+
can affect your conversion rate. Vanity can optionally add participants to the
|
216
|
+
experiments using asynchronous javascript callbacks, which will keep many
|
217
|
+
robots out. For those robots that do execute Javascript and are well-behaved
|
218
|
+
(like Googlebot), Vanity filters out requests based on their user-agent
|
219
|
+
string.
|
220
|
+
|
221
|
+
In Rails, add the following to `application.rb`:
|
222
|
+
|
223
|
+
```ruby
|
224
|
+
Vanity.configure do |config|
|
225
|
+
config.use_js = true
|
226
|
+
|
227
|
+
# Optionally configure the add_participant route that is added with Vanity::Rails::Dashboard,
|
228
|
+
# make sure that this action does not require authentication
|
229
|
+
# config.add_participant_route = '/vanity/add_participant'
|
230
|
+
end
|
231
|
+
```
|
232
|
+
|
233
|
+
Then add `<%= vanity_js %>` to any page that calls an A/B test **after calling
|
234
|
+
`ab_test`**. `vanity_js` needs to be included after your call to ab_test so
|
235
|
+
that it knows which version of the experiment the participant is a member of.
|
236
|
+
The helper will render nothing if the there are no ab_tests running on the
|
237
|
+
current page, so adding `vanity_js` to the bottom of your layouts is a good
|
238
|
+
option. Keep in mind that if you set `use_js` and don't include `vanity_js` in
|
239
|
+
your view no participants will be recorded.
|
240
|
+
|
241
|
+
## Compatibility
|
242
|
+
|
243
|
+
Here's what's tested and known to work:
|
244
|
+
|
245
|
+
Ruby 2.0
|
246
|
+
Persistence: Redis, Mongo, ActiveRecord
|
247
|
+
Rails: 3.2, 4.1, 4.2
|
248
|
+
Ruby 2.1
|
249
|
+
Persistence: Redis, Mongo, ActiveRecord
|
250
|
+
Rails: 3.2, 4.1, 4.2
|
251
|
+
Ruby 2.2
|
252
|
+
Persistence: Redis, Mongo, ActiveRecord
|
253
|
+
Rails: 3.2, 4.1, 4.2
|
254
|
+
|
255
|
+
## Testing
|
256
|
+
|
257
|
+
For view tests/specs or integration testing, it's handy to set the outcome of
|
258
|
+
an experiment. This may be done using the `chooses` method. For example:
|
259
|
+
|
260
|
+
```ruby
|
261
|
+
Vanity.playground.experiment(:price_options).chooses(19)
|
262
|
+
|
263
|
+
## Updating documentation
|
264
|
+
|
265
|
+
Documenation is written in the textile format in the [docs](docs/) directory,
|
266
|
+
and is hosted on Github Pages. To update the docs commit changes to the master
|
267
|
+
branch in this repository, then:
|
268
|
+
|
269
|
+
```sh
|
270
|
+
bundle exec rake docs # output HTML files into html/
|
271
|
+
git checkout gh-pages
|
272
|
+
mv html/* . # Move generated html to the top of the repo
|
273
|
+
git commit # Add, commit and push any changes!
|
274
|
+
```
|
275
|
+
|
276
|
+
Go ahead and target a pull request against the `gh-pages` branch.
|
277
|
+
|
278
|
+
## Contributing
|
279
|
+
|
280
|
+
* Fork the project
|
281
|
+
* Please use a feature branch to make your changes, it's easier to test them
|
282
|
+
that way
|
283
|
+
* To set up the test suite run `bundle`, then run `appraisal install` to
|
284
|
+
prepare the test suite to run against multiple versions of Rails
|
285
|
+
* Fix, patch, enhance, document, improve, sprinkle pixie dust
|
286
|
+
* Tests. Please. Run `appraisal rake test`, of if you can, `rake test:all`.
|
287
|
+
(This project uses Travis CI where the test suite is run against multiple
|
288
|
+
versions of ruby, rails and backends.)
|
289
|
+
* Send a pull request on GitHub
|
290
|
+
|
291
|
+
|
292
|
+
## Credits/License
|
293
|
+
|
294
|
+
Original code, copyright of Assaf Arkin, released under the MIT license.
|
295
|
+
|
296
|
+
Documentation available under the Creative Commons Attribution license.
|
297
|
+
|
298
|
+
For full list of credits and licenses:
|
299
|
+
http://vanity.labnotes.org/credits.html.
|
data/doc/configuring.textile
CHANGED
@@ -44,6 +44,13 @@ Available configuration options are:
|
|
44
44
|
| request_filter | A proc that returns whether to to ignore the request for the add JS participant route | Ignore requests with a HTTP_USER_AGENT that contain a URL |
|
45
45
|
| templates_path | Path to templates for Vanity admin | the templates in the gem |
|
46
46
|
| use_js | Whether to use JS to add particpants, useful to ignore bots | false |
|
47
|
+
| experiments_start_enabled | Whether new experiments start in the enabled or disabled state | true |
|
48
|
+
| cookie_name | The name of the anonymous tracking cookie | @vanity_id@ |
|
49
|
+
| cookie_expires | The duration of the cookie | 20 years |
|
50
|
+
| cookie_domain | The domain for the cookie. Rails.application.config.session_options[:domain] will be substituted if @nil@. | @nil@ |
|
51
|
+
| cookie_path | The path of the cookie | @nil@ |
|
52
|
+
| cookie_secure | The secure (ssl-only) parameter of the cookie. | @false@ |
|
53
|
+
| cookie_httponly | The httponly parameter of the cookie | @false@ |
|
47
54
|
|
48
55
|
When "running under Rails":rails.html, Vanity defaults to using the Rails logger, locates the load_path relative to Rails root, uses the @config/vanity.yml@ configuration file (if present) and turns collection on only in production mode.
|
49
56
|
|
@@ -68,4 +75,4 @@ config.after_initialize do
|
|
68
75
|
require "garb"
|
69
76
|
Garb::Session.login('..ga email..', '..ga pwd..', account_type: "GOOGLE")
|
70
77
|
end
|
71
|
-
</pre>
|
78
|
+
</pre>
|
data/doc/identity.textile
CHANGED
@@ -31,6 +31,8 @@ end
|
|
31
31
|
|
32
32
|
If you use either block or method name and they return @nil@, Vanity will fallback on persistent cookie mechanism.
|
33
33
|
|
34
|
+
Note that @current_user@ in this case must return @nil@ for non-persisted accounts. That is, @current_user.id@ *must* be non-@nil@.
|
35
|
+
|
34
36
|
An identity can be anything. For example, if you're running an experiment to test a new feature that will be available in some projects but not others, you'll want to slice the audience by project identifier, not user ID.
|
35
37
|
|
36
38
|
You can also give each experiment a different identity using the @identify@ callback. Here's an example that tells one experiment to use a project identifier:
|
data/doc/metrics.textile
CHANGED
@@ -133,6 +133,16 @@ metric "Signups (Unlimited)" do
|
|
133
133
|
end
|
134
134
|
</pre>
|
135
135
|
|
136
|
+
The @model@ specifier can also take an @:identity@ option. @:identity:@ should be a @Proc@ that specifies how to fetch the identity of the experiment participant. This is useful when constructing objects outside the ActionController context (perhaps in a background task). However, note that your experiment participants may still be identified by their anonymous cookie identifier, if you started any experiments before the user was identifiable.
|
137
|
+
|
138
|
+
This example will record conversions for the Account to which the Subscription belongs:
|
139
|
+
|
140
|
+
<pre>
|
141
|
+
metric "Subscriptions finished on backend" do
|
142
|
+
description "These signups were actually created in a background task."
|
143
|
+
model Subscription, :identity => lambda { |record| record.account_id }
|
144
|
+
end
|
145
|
+
</pre>
|
136
146
|
|
137
147
|
h3(#ga). Google Analytics
|
138
148
|
|
@@ -12,11 +12,11 @@ gem "garb", "< 0.9.2", :require => false
|
|
12
12
|
gem "timecop", :require => false
|
13
13
|
gem "webmock", :require => false
|
14
14
|
gem "fakefs", :require => "fakefs/safe"
|
15
|
+
gem "protected_attributes", "1.1.0"
|
15
16
|
gem "mocha", "~> 1.0", :require => false
|
16
|
-
gem "rails", "4.0
|
17
|
+
gem "rails", "4.2.0"
|
17
18
|
gem "fastthread", :git => "git://github.com/zoltankiss/fastthread.git", :platforms => :mri_20
|
18
19
|
gem "passenger", "~>3.0"
|
19
|
-
gem "test-unit"
|
20
20
|
|
21
21
|
group :development do
|
22
22
|
gem "appraisal", "~> 1.0.2"
|
@@ -0,0 +1,209 @@
|
|
1
|
+
GIT
|
2
|
+
remote: git://github.com/zoltankiss/fastthread.git
|
3
|
+
revision: cefbca3009b9c68df5e473d840462ebcc7fa1504
|
4
|
+
specs:
|
5
|
+
fastthread (1.0.7)
|
6
|
+
|
7
|
+
PATH
|
8
|
+
remote: ../
|
9
|
+
specs:
|
10
|
+
vanity (2.1.0)
|
11
|
+
i18n
|
12
|
+
|
13
|
+
GEM
|
14
|
+
remote: https://rubygems.org/
|
15
|
+
specs:
|
16
|
+
RedCloth (4.2.9)
|
17
|
+
actionmailer (4.2.0)
|
18
|
+
actionpack (= 4.2.0)
|
19
|
+
actionview (= 4.2.0)
|
20
|
+
activejob (= 4.2.0)
|
21
|
+
mail (~> 2.5, >= 2.5.4)
|
22
|
+
rails-dom-testing (~> 1.0, >= 1.0.5)
|
23
|
+
actionpack (4.2.0)
|
24
|
+
actionview (= 4.2.0)
|
25
|
+
activesupport (= 4.2.0)
|
26
|
+
rack (~> 1.6.0)
|
27
|
+
rack-test (~> 0.6.2)
|
28
|
+
rails-dom-testing (~> 1.0, >= 1.0.5)
|
29
|
+
rails-html-sanitizer (~> 1.0, >= 1.0.1)
|
30
|
+
actionview (4.2.0)
|
31
|
+
activesupport (= 4.2.0)
|
32
|
+
builder (~> 3.1)
|
33
|
+
erubis (~> 2.7.0)
|
34
|
+
rails-dom-testing (~> 1.0, >= 1.0.5)
|
35
|
+
rails-html-sanitizer (~> 1.0, >= 1.0.1)
|
36
|
+
activejob (4.2.0)
|
37
|
+
activesupport (= 4.2.0)
|
38
|
+
globalid (>= 0.3.0)
|
39
|
+
activemodel (4.2.0)
|
40
|
+
activesupport (= 4.2.0)
|
41
|
+
builder (~> 3.1)
|
42
|
+
activerecord (4.2.0)
|
43
|
+
activemodel (= 4.2.0)
|
44
|
+
activesupport (= 4.2.0)
|
45
|
+
arel (~> 6.0)
|
46
|
+
activesupport (4.2.0)
|
47
|
+
i18n (~> 0.7)
|
48
|
+
json (~> 1.7, >= 1.7.7)
|
49
|
+
minitest (~> 5.1)
|
50
|
+
thread_safe (~> 0.3, >= 0.3.4)
|
51
|
+
tzinfo (~> 1.1)
|
52
|
+
addressable (2.3.8)
|
53
|
+
appraisal (1.0.3)
|
54
|
+
bundler
|
55
|
+
rake
|
56
|
+
thor (>= 0.14.0)
|
57
|
+
arel (6.0.3)
|
58
|
+
bson (1.12.5)
|
59
|
+
bson_ext (1.12.5)
|
60
|
+
bson (~> 1.12.5)
|
61
|
+
builder (3.2.2)
|
62
|
+
colorator (0.1)
|
63
|
+
concurrent-ruby (1.0.0)
|
64
|
+
crack (0.4.3)
|
65
|
+
safe_yaml (~> 1.0.0)
|
66
|
+
daemon_controller (1.2.0)
|
67
|
+
erubis (2.7.0)
|
68
|
+
fakefs (0.6.7)
|
69
|
+
ffi (1.9.10)
|
70
|
+
garb (0.9.1)
|
71
|
+
activesupport (>= 2.2.0)
|
72
|
+
crack (>= 0.1.6)
|
73
|
+
globalid (0.3.6)
|
74
|
+
activesupport (>= 4.1.0)
|
75
|
+
hashdiff (0.2.3)
|
76
|
+
i18n (0.7.0)
|
77
|
+
integration (0.1.0)
|
78
|
+
jekyll (3.0.1)
|
79
|
+
colorator (~> 0.1)
|
80
|
+
jekyll-sass-converter (~> 1.0)
|
81
|
+
jekyll-watch (~> 1.1)
|
82
|
+
kramdown (~> 1.3)
|
83
|
+
liquid (~> 3.0)
|
84
|
+
mercenary (~> 0.3.3)
|
85
|
+
rouge (~> 1.7)
|
86
|
+
safe_yaml (~> 1.0)
|
87
|
+
jekyll-sass-converter (1.4.0)
|
88
|
+
sass (~> 3.4)
|
89
|
+
jekyll-watch (1.3.0)
|
90
|
+
listen (~> 3.0)
|
91
|
+
json (1.8.3)
|
92
|
+
kramdown (1.9.0)
|
93
|
+
liquid (3.0.6)
|
94
|
+
listen (3.0.5)
|
95
|
+
rb-fsevent (>= 0.9.3)
|
96
|
+
rb-inotify (>= 0.9)
|
97
|
+
loofah (2.0.3)
|
98
|
+
nokogiri (>= 1.5.9)
|
99
|
+
mail (2.6.3)
|
100
|
+
mime-types (>= 1.16, < 3)
|
101
|
+
mercenary (0.3.5)
|
102
|
+
metaclass (0.0.4)
|
103
|
+
mime-types (2.99)
|
104
|
+
mini_portile2 (2.0.0)
|
105
|
+
minitest (5.8.3)
|
106
|
+
mocha (1.1.0)
|
107
|
+
metaclass (~> 0.0.1)
|
108
|
+
mongo (1.12.5)
|
109
|
+
bson (= 1.12.5)
|
110
|
+
nokogiri (1.6.7.1)
|
111
|
+
mini_portile2 (~> 2.0.0.rc2)
|
112
|
+
passenger (3.0.21)
|
113
|
+
daemon_controller (>= 1.0.0)
|
114
|
+
fastthread (>= 1.0.1)
|
115
|
+
rack
|
116
|
+
rake (>= 0.8.1)
|
117
|
+
protected_attributes (1.1.0)
|
118
|
+
activemodel (>= 4.0.1, < 5.0)
|
119
|
+
rack (1.6.4)
|
120
|
+
rack-test (0.6.3)
|
121
|
+
rack (>= 1.0)
|
122
|
+
rails (4.2.0)
|
123
|
+
actionmailer (= 4.2.0)
|
124
|
+
actionpack (= 4.2.0)
|
125
|
+
actionview (= 4.2.0)
|
126
|
+
activejob (= 4.2.0)
|
127
|
+
activemodel (= 4.2.0)
|
128
|
+
activerecord (= 4.2.0)
|
129
|
+
activesupport (= 4.2.0)
|
130
|
+
bundler (>= 1.3.0, < 2.0)
|
131
|
+
railties (= 4.2.0)
|
132
|
+
sprockets-rails
|
133
|
+
rails-deprecated_sanitizer (1.0.3)
|
134
|
+
activesupport (>= 4.2.0.alpha)
|
135
|
+
rails-dom-testing (1.0.7)
|
136
|
+
activesupport (>= 4.2.0.beta, < 5.0)
|
137
|
+
nokogiri (~> 1.6.0)
|
138
|
+
rails-deprecated_sanitizer (>= 1.0.1)
|
139
|
+
rails-html-sanitizer (1.0.2)
|
140
|
+
loofah (~> 2.0)
|
141
|
+
railties (4.2.0)
|
142
|
+
actionpack (= 4.2.0)
|
143
|
+
activesupport (= 4.2.0)
|
144
|
+
rake (>= 0.8.7)
|
145
|
+
thor (>= 0.18.1, < 2.0)
|
146
|
+
rake (10.4.2)
|
147
|
+
rb-fsevent (0.9.7)
|
148
|
+
rb-inotify (0.9.5)
|
149
|
+
ffi (>= 0.5.0)
|
150
|
+
redis (3.2.2)
|
151
|
+
redis-namespace (1.5.2)
|
152
|
+
redis (~> 3.0, >= 3.0.4)
|
153
|
+
rouge (1.10.1)
|
154
|
+
rubystats (0.2.3)
|
155
|
+
safe_yaml (1.0.4)
|
156
|
+
sass (3.4.20)
|
157
|
+
sprockets (3.5.2)
|
158
|
+
concurrent-ruby (~> 1.0)
|
159
|
+
rack (> 1, < 3)
|
160
|
+
sprockets-rails (3.0.0)
|
161
|
+
actionpack (>= 4.0)
|
162
|
+
activesupport (>= 4.0)
|
163
|
+
sprockets (>= 3.0.0)
|
164
|
+
sqlite3 (1.3.11)
|
165
|
+
thor (0.19.1)
|
166
|
+
thread_safe (0.3.5)
|
167
|
+
timecop (0.8.0)
|
168
|
+
tzinfo (1.2.2)
|
169
|
+
thread_safe (~> 0.1)
|
170
|
+
webmock (1.22.5)
|
171
|
+
addressable (< 2.4.0)
|
172
|
+
crack (>= 0.3.2)
|
173
|
+
hashdiff
|
174
|
+
yard (0.8.7.6)
|
175
|
+
|
176
|
+
PLATFORMS
|
177
|
+
ruby
|
178
|
+
|
179
|
+
DEPENDENCIES
|
180
|
+
RedCloth
|
181
|
+
activerecord-jdbc-adapter
|
182
|
+
appraisal (~> 1.0.2)
|
183
|
+
bson_ext
|
184
|
+
bundler (>= 1.0.0)
|
185
|
+
fakefs
|
186
|
+
fastthread!
|
187
|
+
garb (< 0.9.2)
|
188
|
+
integration (<= 0.1.0)
|
189
|
+
jdbc-sqlite3
|
190
|
+
jekyll
|
191
|
+
minitest (>= 4.2)
|
192
|
+
mocha (~> 1.0)
|
193
|
+
mongo
|
194
|
+
passenger (~> 3.0)
|
195
|
+
protected_attributes (= 1.1.0)
|
196
|
+
rack
|
197
|
+
rails (= 4.2.0)
|
198
|
+
rake
|
199
|
+
redis (>= 2.1)
|
200
|
+
redis-namespace (>= 1.1.0)
|
201
|
+
rubystats
|
202
|
+
sqlite3 (~> 1.3.10)
|
203
|
+
timecop
|
204
|
+
vanity!
|
205
|
+
webmock
|
206
|
+
yard
|
207
|
+
|
208
|
+
BUNDLED WITH
|
209
|
+
1.11.2
|