vanity 2.0.1 → 2.1.0
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.
- 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
|
+
[](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
|
+
[](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
|