vanity 1.8.4 → 1.9.0.beta
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +3 -2
- data/CHANGELOG +12 -0
- data/Gemfile +6 -3
- data/Gemfile.lock +12 -10
- data/README.rdoc +45 -16
- data/Rakefile +14 -9
- data/doc/_layouts/page.html +4 -6
- data/doc/ab_testing.textile +1 -1
- data/doc/configuring.textile +2 -4
- data/doc/email.textile +1 -3
- data/doc/index.textile +3 -63
- data/doc/rails.textile +34 -8
- data/gemfiles/rails3.gemfile +12 -3
- data/gemfiles/rails3.gemfile.lock +37 -11
- data/gemfiles/rails31.gemfile +12 -3
- data/gemfiles/rails31.gemfile.lock +37 -11
- data/gemfiles/rails32.gemfile +12 -3
- data/gemfiles/rails32.gemfile.lock +37 -11
- data/gemfiles/rails4.gemfile +12 -3
- data/gemfiles/rails4.gemfile.lock +37 -11
- data/lib/vanity/adapters/abstract_adapter.rb +4 -0
- data/lib/vanity/adapters/active_record_adapter.rb +18 -10
- data/lib/vanity/adapters/mock_adapter.rb +8 -4
- data/lib/vanity/adapters/mongodb_adapter.rb +11 -7
- data/lib/vanity/adapters/redis_adapter.rb +88 -37
- data/lib/vanity/commands/report.rb +9 -9
- data/lib/vanity/experiment/ab_test.rb +120 -101
- data/lib/vanity/experiment/alternative.rb +21 -21
- data/lib/vanity/experiment/base.rb +5 -5
- data/lib/vanity/experiment/bayesian_bandit_score.rb +51 -51
- data/lib/vanity/experiment/definition.rb +10 -10
- data/lib/vanity/frameworks/rails.rb +39 -36
- data/lib/vanity/helpers.rb +6 -4
- data/lib/vanity/metric/active_record.rb +1 -1
- data/lib/vanity/metric/base.rb +23 -24
- data/lib/vanity/metric/google_analytics.rb +5 -5
- data/lib/vanity/playground.rb +118 -24
- data/lib/vanity/templates/_report.erb +20 -6
- data/lib/vanity/templates/vanity.css +2 -0
- data/lib/vanity/version.rb +1 -1
- data/test/adapters/redis_adapter_test.rb +106 -1
- data/test/dummy/config/database.yml +21 -4
- data/test/dummy/config/routes.rb +1 -1
- data/test/experiment/ab_test.rb +93 -13
- data/test/metric/active_record_test.rb +9 -4
- data/test/passenger_test.rb +43 -42
- data/test/playground_test.rb +50 -1
- data/test/rails_dashboard_test.rb +38 -1
- data/test/rails_helper_test.rb +5 -0
- data/test/rails_test.rb +66 -15
- data/test/test_helper.rb +24 -2
- data/vanity.gemspec +0 -2
- metadata +45 -57
data/doc/rails.textile
CHANGED
@@ -4,30 +4,52 @@ title: Using with Rails
|
|
4
4
|
---
|
5
5
|
|
6
6
|
<div id="toc">
|
7
|
+
# "Installing Vanity":#install
|
7
8
|
# "Configuring Vanity":#config
|
8
9
|
# "Test Environment":#test
|
9
10
|
# "Dashboard":#dashboard
|
10
11
|
# "Unicorn and Forking Servers":#fork
|
11
12
|
</div>
|
12
13
|
|
13
|
-
|
14
|
+
h3(#install). Installing Vanity
|
14
15
|
|
16
|
+
<em>Rails 3.x and 4.x:</em>
|
15
17
|
|
16
|
-
|
18
|
+
Add Vanity to your Gemfile:
|
17
19
|
|
18
|
-
|
20
|
+
<pre>
|
21
|
+
gem "vanity"
|
22
|
+
</pre>
|
19
23
|
|
20
|
-
|
24
|
+
<em>Rails 2.x:</em>
|
21
25
|
|
22
26
|
<pre>
|
23
27
|
Rails::Initializer.run do |config|
|
24
|
-
.
|
28
|
+
gem.config "vanity"
|
29
|
+
|
25
30
|
config.after_initialize do
|
26
31
|
require "vanity"
|
27
32
|
end
|
28
33
|
end
|
29
34
|
</pre>
|
30
35
|
|
36
|
+
h3(#config). Configuring Vanity
|
37
|
+
|
38
|
+
h4. Configuring identity
|
39
|
+
|
40
|
+
Once the gem is setup, enable Vanity in your ActionController:
|
41
|
+
|
42
|
+
<pre>
|
43
|
+
class ApplicationController < ActionController::Base
|
44
|
+
use_vanity :current_user
|
45
|
+
end
|
46
|
+
</pre>
|
47
|
+
|
48
|
+
This example assumes you have a @current_user@ controller method which will return a consistent value for each user.
|
49
|
+
There are other ways to identify people as well, you can read more about the options in Managing Identity.
|
50
|
+
|
51
|
+
h4. Configuring datastore
|
52
|
+
|
31
53
|
If you have a @config/vanity.yml@ file, Vanity will read the configuration for the current environment. For example:
|
32
54
|
|
33
55
|
<pre>
|
@@ -40,7 +62,9 @@ production:
|
|
40
62
|
database: vanity
|
41
63
|
</pre>
|
42
64
|
|
43
|
-
|
65
|
+
h4. Using metrics from Google Analytics
|
66
|
+
|
67
|
+
If you want to use Vanity with metrics from Google Analytics, you must also tell Rails to include the @garb@ gem, and login for a new session. You'll want to do that for production, not for development if you like developing offline:
|
44
68
|
|
45
69
|
<pre>
|
46
70
|
config.after_initialize do
|
@@ -49,7 +73,9 @@ config.after_initialize do
|
|
49
73
|
end
|
50
74
|
</pre>
|
51
75
|
|
52
|
-
|
76
|
+
h4. Enabling/disable collection
|
77
|
+
|
78
|
+
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.
|
53
79
|
|
54
80
|
|
55
81
|
h3(#dashboard). Dashboard
|
@@ -64,7 +90,7 @@ Create a new controller for Vanity:
|
|
64
90
|
|
65
91
|
<pre>
|
66
92
|
class VanityController < ApplicationController
|
67
|
-
include Vanity::Rails::Dashboard
|
93
|
+
include Vanity::Rails::Dashboard
|
68
94
|
end
|
69
95
|
</pre>
|
70
96
|
|
data/gemfiles/rails3.gemfile
CHANGED
@@ -3,16 +3,17 @@
|
|
3
3
|
source "https://rubygems.org"
|
4
4
|
|
5
5
|
gem "rack"
|
6
|
+
gem "redis", ">= 2.1"
|
7
|
+
gem "redis-namespace", ">= 1.1.0"
|
6
8
|
gem "bson_ext"
|
7
9
|
gem "mongo"
|
8
10
|
gem "mysql"
|
9
|
-
gem "
|
11
|
+
gem "sqlite3"
|
10
12
|
gem "backports", :platforms=>:mri_18
|
11
13
|
gem "integration"
|
12
14
|
gem "rubystats"
|
13
15
|
gem "garb"
|
14
16
|
gem "SystemTimer", "1.2.3", :platforms=>:mri_18
|
15
|
-
gem "appraisal"
|
16
17
|
gem "mocha", :require=>false
|
17
18
|
gem "shoulda", :require=>false
|
18
19
|
gem "timecop", :require=>false
|
@@ -21,4 +22,12 @@ gem "rails", "3.0.11"
|
|
21
22
|
gem "fastthread", :git=>"git://github.com/zoltankiss/fastthread.git", :platforms=>:mri_20
|
22
23
|
gem "passenger", "~>3.0"
|
23
24
|
|
24
|
-
|
25
|
+
group :development do
|
26
|
+
gem "appraisal", ">= 1.0.0.beta2"
|
27
|
+
gem "jekyll"
|
28
|
+
gem "rake"
|
29
|
+
gem "RedCloth"
|
30
|
+
gem "yard"
|
31
|
+
end
|
32
|
+
|
33
|
+
gemspec :path=>".././"
|
@@ -5,15 +5,14 @@ GIT
|
|
5
5
|
fastthread (1.0.7)
|
6
6
|
|
7
7
|
PATH
|
8
|
-
remote:
|
8
|
+
remote: ..
|
9
9
|
specs:
|
10
|
-
vanity (1.8.
|
11
|
-
redis (>= 2.1)
|
12
|
-
redis-namespace (>= 1.1.0)
|
10
|
+
vanity (1.8.3)
|
13
11
|
|
14
12
|
GEM
|
15
13
|
remote: https://rubygems.org/
|
16
14
|
specs:
|
15
|
+
RedCloth (4.2.9)
|
17
16
|
SystemTimer (1.2.3)
|
18
17
|
abstract (1.0.0)
|
19
18
|
actionmailer (3.0.11)
|
@@ -43,30 +42,48 @@ GEM
|
|
43
42
|
activesupport (= 3.0.11)
|
44
43
|
activesupport (3.0.11)
|
45
44
|
addressable (2.2.7)
|
46
|
-
|
45
|
+
albino (1.3.3)
|
46
|
+
posix-spawn (>= 0.3.6)
|
47
|
+
appraisal (1.0.0.beta2)
|
47
48
|
bundler
|
48
49
|
rake
|
50
|
+
thor (>= 0.14.0)
|
49
51
|
arel (2.0.10)
|
50
52
|
backports (3.3.5)
|
51
53
|
bson (1.6.0)
|
52
54
|
bson_ext (1.6.0)
|
53
55
|
bson (= 1.6.0)
|
54
56
|
builder (2.1.2)
|
57
|
+
classifier (1.3.3)
|
58
|
+
fast-stemmer (>= 1.0.0)
|
55
59
|
crack (0.3.1)
|
56
60
|
daemon_controller (1.0.0)
|
61
|
+
directory_watcher (1.4.1)
|
57
62
|
erubis (2.6.6)
|
58
63
|
abstract (>= 1.0.0)
|
64
|
+
fast-stemmer (1.0.0)
|
59
65
|
garb (0.9.1)
|
60
66
|
activesupport (>= 2.2.0)
|
61
67
|
crack (>= 0.1.6)
|
62
68
|
i18n (0.5.0)
|
63
69
|
integration (0.1.0)
|
70
|
+
jekyll (0.11.2)
|
71
|
+
albino (~> 1.3)
|
72
|
+
classifier (~> 1.3)
|
73
|
+
directory_watcher (~> 1.1)
|
74
|
+
kramdown (~> 0.13)
|
75
|
+
liquid (~> 2.3)
|
76
|
+
maruku (~> 0.5)
|
64
77
|
json (1.6.5)
|
78
|
+
kramdown (0.13.5)
|
79
|
+
liquid (2.3.0)
|
65
80
|
mail (2.2.19)
|
66
81
|
activesupport (>= 2.3.6)
|
67
82
|
i18n (>= 0.4.0)
|
68
83
|
mime-types (~> 1.16)
|
69
84
|
treetop (~> 1.4.8)
|
85
|
+
maruku (0.6.0)
|
86
|
+
syntax (>= 1.0.0)
|
70
87
|
metaclass (0.0.1)
|
71
88
|
mime-types (1.17.2)
|
72
89
|
mocha (0.10.5)
|
@@ -79,8 +96,8 @@ GEM
|
|
79
96
|
fastthread (>= 1.0.1)
|
80
97
|
rack
|
81
98
|
rake (>= 0.8.1)
|
82
|
-
pg (0.13.2)
|
83
99
|
polyglot (0.3.3)
|
100
|
+
posix-spawn (0.3.6)
|
84
101
|
rack (1.2.5)
|
85
102
|
rack-mount (0.6.14)
|
86
103
|
rack (>= 1.0.0)
|
@@ -103,15 +120,17 @@ GEM
|
|
103
120
|
rake (0.9.2.2)
|
104
121
|
rdoc (3.12)
|
105
122
|
json (~> 1.4)
|
106
|
-
redis (3.
|
107
|
-
redis-namespace (1.
|
108
|
-
redis (~> 3.0
|
123
|
+
redis (3.0.6)
|
124
|
+
redis-namespace (1.3.2)
|
125
|
+
redis (~> 3.0.4)
|
109
126
|
rubystats (0.2.3)
|
110
127
|
shoulda (3.0.1)
|
111
128
|
shoulda-context (~> 1.0.0)
|
112
129
|
shoulda-matchers (~> 1.0.0)
|
113
130
|
shoulda-context (1.0.0)
|
114
131
|
shoulda-matchers (1.0.0)
|
132
|
+
sqlite3 (1.3.8)
|
133
|
+
syntax (1.0.0)
|
115
134
|
thor (0.14.6)
|
116
135
|
timecop (0.3.5)
|
117
136
|
treetop (1.4.10)
|
@@ -121,27 +140,34 @@ GEM
|
|
121
140
|
webmock (1.8.0)
|
122
141
|
addressable (>= 2.2.7)
|
123
142
|
crack (>= 0.1.7)
|
143
|
+
yard (0.7.5)
|
124
144
|
|
125
145
|
PLATFORMS
|
126
146
|
ruby
|
127
147
|
|
128
148
|
DEPENDENCIES
|
149
|
+
RedCloth
|
129
150
|
SystemTimer (= 1.2.3)
|
130
|
-
appraisal
|
151
|
+
appraisal (>= 1.0.0.beta2)
|
131
152
|
backports
|
132
153
|
bson_ext
|
133
154
|
fastthread!
|
134
155
|
garb
|
135
156
|
integration
|
157
|
+
jekyll
|
136
158
|
mocha
|
137
159
|
mongo
|
138
160
|
mysql
|
139
161
|
passenger (~> 3.0)
|
140
|
-
pg
|
141
162
|
rack
|
142
163
|
rails (= 3.0.11)
|
164
|
+
rake
|
165
|
+
redis (>= 2.1)
|
166
|
+
redis-namespace (>= 1.1.0)
|
143
167
|
rubystats
|
144
168
|
shoulda
|
169
|
+
sqlite3
|
145
170
|
timecop
|
146
171
|
vanity!
|
147
172
|
webmock
|
173
|
+
yard
|
data/gemfiles/rails31.gemfile
CHANGED
@@ -3,16 +3,17 @@
|
|
3
3
|
source "https://rubygems.org"
|
4
4
|
|
5
5
|
gem "rack"
|
6
|
+
gem "redis", ">= 2.1"
|
7
|
+
gem "redis-namespace", ">= 1.1.0"
|
6
8
|
gem "bson_ext"
|
7
9
|
gem "mongo"
|
8
10
|
gem "mysql"
|
9
|
-
gem "
|
11
|
+
gem "sqlite3"
|
10
12
|
gem "backports", :platforms=>:mri_18
|
11
13
|
gem "integration"
|
12
14
|
gem "rubystats"
|
13
15
|
gem "garb"
|
14
16
|
gem "SystemTimer", "1.2.3", :platforms=>:mri_18
|
15
|
-
gem "appraisal"
|
16
17
|
gem "mocha", :require=>false
|
17
18
|
gem "shoulda", :require=>false
|
18
19
|
gem "timecop", :require=>false
|
@@ -21,4 +22,12 @@ gem "rails", "3.1.3"
|
|
21
22
|
gem "fastthread", :git=>"git://github.com/zoltankiss/fastthread.git", :platforms=>:mri_20
|
22
23
|
gem "passenger", "~>3.0"
|
23
24
|
|
24
|
-
|
25
|
+
group :development do
|
26
|
+
gem "appraisal", ">= 1.0.0.beta2"
|
27
|
+
gem "jekyll"
|
28
|
+
gem "rake"
|
29
|
+
gem "RedCloth"
|
30
|
+
gem "yard"
|
31
|
+
end
|
32
|
+
|
33
|
+
gemspec :path=>".././"
|
@@ -5,15 +5,14 @@ GIT
|
|
5
5
|
fastthread (1.0.7)
|
6
6
|
|
7
7
|
PATH
|
8
|
-
remote:
|
8
|
+
remote: ..
|
9
9
|
specs:
|
10
|
-
vanity (1.8.
|
11
|
-
redis (>= 2.1)
|
12
|
-
redis-namespace (>= 1.1.0)
|
10
|
+
vanity (1.8.3)
|
13
11
|
|
14
12
|
GEM
|
15
13
|
remote: https://rubygems.org/
|
16
14
|
specs:
|
15
|
+
RedCloth (4.2.9)
|
17
16
|
SystemTimer (1.2.3)
|
18
17
|
actionmailer (3.1.3)
|
19
18
|
actionpack (= 3.1.3)
|
@@ -44,28 +43,46 @@ GEM
|
|
44
43
|
activesupport (3.1.3)
|
45
44
|
multi_json (~> 1.0)
|
46
45
|
addressable (2.2.7)
|
47
|
-
|
46
|
+
albino (1.3.3)
|
47
|
+
posix-spawn (>= 0.3.6)
|
48
|
+
appraisal (1.0.0.beta2)
|
48
49
|
bundler
|
49
50
|
rake
|
51
|
+
thor (>= 0.14.0)
|
50
52
|
arel (2.2.3)
|
51
53
|
backports (3.3.5)
|
52
54
|
bson (1.6.0)
|
53
55
|
bson_ext (1.6.0)
|
54
56
|
bson (= 1.6.0)
|
55
57
|
builder (3.0.0)
|
58
|
+
classifier (1.3.3)
|
59
|
+
fast-stemmer (>= 1.0.0)
|
56
60
|
crack (0.3.1)
|
57
61
|
daemon_controller (1.0.0)
|
62
|
+
directory_watcher (1.4.1)
|
58
63
|
erubis (2.7.0)
|
64
|
+
fast-stemmer (1.0.0)
|
59
65
|
garb (0.9.1)
|
60
66
|
activesupport (>= 2.2.0)
|
61
67
|
crack (>= 0.1.6)
|
62
68
|
i18n (0.6.0)
|
63
69
|
integration (0.1.0)
|
70
|
+
jekyll (0.11.2)
|
71
|
+
albino (~> 1.3)
|
72
|
+
classifier (~> 1.3)
|
73
|
+
directory_watcher (~> 1.1)
|
74
|
+
kramdown (~> 0.13)
|
75
|
+
liquid (~> 2.3)
|
76
|
+
maruku (~> 0.5)
|
64
77
|
json (1.6.5)
|
78
|
+
kramdown (0.13.5)
|
79
|
+
liquid (2.3.0)
|
65
80
|
mail (2.3.0)
|
66
81
|
i18n (>= 0.4.0)
|
67
82
|
mime-types (~> 1.16)
|
68
83
|
treetop (~> 1.4.8)
|
84
|
+
maruku (0.6.0)
|
85
|
+
syntax (>= 1.0.0)
|
69
86
|
metaclass (0.0.1)
|
70
87
|
mime-types (1.17.2)
|
71
88
|
mocha (0.10.5)
|
@@ -79,8 +96,8 @@ GEM
|
|
79
96
|
fastthread (>= 1.0.1)
|
80
97
|
rack
|
81
98
|
rake (>= 0.8.1)
|
82
|
-
pg (0.13.2)
|
83
99
|
polyglot (0.3.3)
|
100
|
+
posix-spawn (0.3.6)
|
84
101
|
rack (1.3.6)
|
85
102
|
rack-cache (1.1)
|
86
103
|
rack (>= 0.4)
|
@@ -108,9 +125,9 @@ GEM
|
|
108
125
|
rake (0.9.2.2)
|
109
126
|
rdoc (3.12)
|
110
127
|
json (~> 1.4)
|
111
|
-
redis (3.
|
112
|
-
redis-namespace (1.
|
113
|
-
redis (~> 3.0
|
128
|
+
redis (3.0.6)
|
129
|
+
redis-namespace (1.3.2)
|
130
|
+
redis (~> 3.0.4)
|
114
131
|
rubystats (0.2.3)
|
115
132
|
shoulda (3.0.1)
|
116
133
|
shoulda-context (~> 1.0.0)
|
@@ -120,6 +137,8 @@ GEM
|
|
120
137
|
sprockets (2.0.3)
|
121
138
|
rack (~> 1.0)
|
122
139
|
tilt (~> 1.1, != 1.3.0)
|
140
|
+
sqlite3 (1.3.8)
|
141
|
+
syntax (1.0.0)
|
123
142
|
thor (0.14.6)
|
124
143
|
tilt (1.3.3)
|
125
144
|
timecop (0.3.5)
|
@@ -130,27 +149,34 @@ GEM
|
|
130
149
|
webmock (1.8.0)
|
131
150
|
addressable (>= 2.2.7)
|
132
151
|
crack (>= 0.1.7)
|
152
|
+
yard (0.7.5)
|
133
153
|
|
134
154
|
PLATFORMS
|
135
155
|
ruby
|
136
156
|
|
137
157
|
DEPENDENCIES
|
158
|
+
RedCloth
|
138
159
|
SystemTimer (= 1.2.3)
|
139
|
-
appraisal
|
160
|
+
appraisal (>= 1.0.0.beta2)
|
140
161
|
backports
|
141
162
|
bson_ext
|
142
163
|
fastthread!
|
143
164
|
garb
|
144
165
|
integration
|
166
|
+
jekyll
|
145
167
|
mocha
|
146
168
|
mongo
|
147
169
|
mysql
|
148
170
|
passenger (~> 3.0)
|
149
|
-
pg
|
150
171
|
rack
|
151
172
|
rails (= 3.1.3)
|
173
|
+
rake
|
174
|
+
redis (>= 2.1)
|
175
|
+
redis-namespace (>= 1.1.0)
|
152
176
|
rubystats
|
153
177
|
shoulda
|
178
|
+
sqlite3
|
154
179
|
timecop
|
155
180
|
vanity!
|
156
181
|
webmock
|
182
|
+
yard
|
data/gemfiles/rails32.gemfile
CHANGED
@@ -3,16 +3,17 @@
|
|
3
3
|
source "https://rubygems.org"
|
4
4
|
|
5
5
|
gem "rack"
|
6
|
+
gem "redis", ">= 2.1"
|
7
|
+
gem "redis-namespace", ">= 1.1.0"
|
6
8
|
gem "bson_ext"
|
7
9
|
gem "mongo"
|
8
10
|
gem "mysql"
|
9
|
-
gem "
|
11
|
+
gem "sqlite3"
|
10
12
|
gem "backports", :platforms=>:mri_18
|
11
13
|
gem "integration"
|
12
14
|
gem "rubystats"
|
13
15
|
gem "garb"
|
14
16
|
gem "SystemTimer", "1.2.3", :platforms=>:mri_18
|
15
|
-
gem "appraisal"
|
16
17
|
gem "mocha", :require=>false
|
17
18
|
gem "shoulda", :require=>false
|
18
19
|
gem "timecop", :require=>false
|
@@ -21,4 +22,12 @@ gem "rails", "3.2.1"
|
|
21
22
|
gem "fastthread", :git=>"git://github.com/zoltankiss/fastthread.git", :platforms=>:mri_20
|
22
23
|
gem "passenger", "~>3.0"
|
23
24
|
|
24
|
-
|
25
|
+
group :development do
|
26
|
+
gem "appraisal", ">= 1.0.0.beta2"
|
27
|
+
gem "jekyll"
|
28
|
+
gem "rake"
|
29
|
+
gem "RedCloth"
|
30
|
+
gem "yard"
|
31
|
+
end
|
32
|
+
|
33
|
+
gemspec :path=>".././"
|