abingo 2.0.1 → 2.0.2
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.
- data/Gemfile.lock +4 -3
- data/{README → README.md} +33 -18
- data/abingo.gemspec +1 -0
- data/lib/abingo.rb +1 -1
- data/lib/abingo/version.rb +1 -1
- metadata +18 -7
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
abingo (2.0.
|
4
|
+
abingo (2.0.2)
|
5
5
|
rails (~> 3.0)
|
6
6
|
|
7
7
|
GEM
|
@@ -51,7 +51,7 @@ GEM
|
|
51
51
|
mime-types (~> 1.16)
|
52
52
|
treetop (~> 1.4.8)
|
53
53
|
mime-types (1.19)
|
54
|
-
multi_json (1.
|
54
|
+
multi_json (1.5.0)
|
55
55
|
pg (0.14.1)
|
56
56
|
polyglot (0.3.3)
|
57
57
|
rack (1.4.1)
|
@@ -76,7 +76,7 @@ GEM
|
|
76
76
|
rake (>= 0.8.7)
|
77
77
|
rdoc (~> 3.4)
|
78
78
|
thor (>= 0.14.6, < 2.0)
|
79
|
-
rake (
|
79
|
+
rake (0.8.7)
|
80
80
|
rdoc (3.12)
|
81
81
|
json (~> 1.4)
|
82
82
|
ruby-debug-base19 (0.11.25)
|
@@ -108,4 +108,5 @@ DEPENDENCIES
|
|
108
108
|
abingo!
|
109
109
|
contest
|
110
110
|
pg
|
111
|
+
rake (= 0.8.7)
|
111
112
|
ruby-debug19
|
data/{README → README.md}
RENAMED
@@ -1,5 +1,4 @@
|
|
1
|
-
A/Bingo
|
2
|
-
======
|
1
|
+
# A/Bingo
|
3
2
|
|
4
3
|
Rails A/B testing. One minute to install. One line to set up a new A/B test.
|
5
4
|
One line to track conversion.
|
@@ -9,48 +8,58 @@ For usage notes, see: http://www.bingocardcreator.com/abingo
|
|
9
8
|
Installation instructions are below usage examples.
|
10
9
|
|
11
10
|
Key default features:
|
12
|
-
-- Conversions only tracked once per individual.
|
13
|
-
-- Conversions only tracked if individual saw test.
|
14
|
-
-- Same individual ALWAYS sees same alternative for same test.
|
15
|
-
-- Syntax sugar. Specify alternatives as a range, array,
|
16
|
-
hash of alternative to weighting, or just let it default to true or false.
|
17
|
-
-- A simple z-test of statistical significance, with output so clear anyone in your organization
|
18
|
-
can understand it.
|
19
11
|
|
20
|
-
|
12
|
+
* Conversions only tracked once per individual.
|
13
|
+
* Conversions only tracked if individual saw test.
|
14
|
+
* Same individual ALWAYS sees same alternative for same test.
|
15
|
+
* Syntax sugar. Specify alternatives as a range, array, hash of alternative to weighting, or just let it default to true or false.
|
16
|
+
* A simple z-test of statistical significance, with output so clear anyone in your organization can understand it.
|
21
17
|
|
18
|
+
## Example: View
|
19
|
+
|
20
|
+
``` erb
|
22
21
|
<% ab_test(@abingo_identity, "login_button", ["/images/button1.jpg", "/images/button2.jpg"]) do |button_file| %>
|
23
22
|
<%= img_tag(button_file, :alt => "Login!") %>
|
24
23
|
<% end %>
|
24
|
+
```
|
25
25
|
|
26
|
-
Example: Controller
|
26
|
+
## Example: Controller
|
27
27
|
|
28
|
+
``` ruby
|
28
29
|
def register_new_user
|
29
30
|
#See what level of free points maximizes users' decision to buy replacement points.
|
30
31
|
@starter_points = ab_test(@abingo_identity, "new_user_free_points", [100, 200, 300])
|
31
32
|
end
|
33
|
+
```
|
32
34
|
|
33
|
-
Example: Controller
|
35
|
+
## Example: Controller
|
34
36
|
|
37
|
+
``` ruby
|
35
38
|
def registration
|
36
|
-
if (ab_test(@abingo_identity, "send_welcome_email"
|
39
|
+
if (ab_test(@abingo_identity, "send_welcome_email", :conversion => "purchase"))
|
37
40
|
#send the email, track to see if it later increases conversion to full version
|
38
41
|
end
|
39
42
|
end
|
43
|
+
```
|
40
44
|
|
41
|
-
Example: Conversion tracking (in a controller!)
|
45
|
+
## Example: Conversion tracking (in a controller!)
|
42
46
|
|
47
|
+
``` ruby
|
43
48
|
def buy_new_points
|
44
49
|
#some business logic
|
45
50
|
@abingo_identity.bingo!("buy_new_points") #Either a conversion named with :conversion or a test name.
|
46
51
|
end
|
52
|
+
```
|
47
53
|
|
48
|
-
Example: Conversion tracking (in a view)
|
54
|
+
## Example: Conversion tracking (in a view)
|
49
55
|
|
56
|
+
``` erb
|
50
57
|
Thanks for signing up, dude! <% @abingo_identity.bingo!("signup_page_redesign") >
|
58
|
+
```
|
51
59
|
|
52
|
-
Example: Statistical Significance Testing
|
60
|
+
## Example: Statistical Significance Testing
|
53
61
|
|
62
|
+
``` irb
|
54
63
|
Abingo::Experiment.last.describe_result_in_words
|
55
64
|
=> "The best alternative you have is: [0], which had 130 conversions from 5000 participants (2.60%).
|
56
65
|
The other alternative was [1], which had 1800 conversions from 100000 participants (1.80%).
|
@@ -58,23 +67,26 @@ Abingo::Experiment.last.describe_result_in_words
|
|
58
67
|
confident that it is the result of your alternatives actually mattering, rather than being due to
|
59
68
|
random chance. However, this doesn't say anything about how much the first alternative is really
|
60
69
|
likely to be better by."
|
70
|
+
```
|
61
71
|
|
62
|
-
Installation
|
63
|
-
=======
|
72
|
+
## Installation
|
64
73
|
|
65
74
|
1) REQUIRED: You'll need to generate a DB migration to prepare two tables,
|
66
75
|
then migrate your database. (Note: slight edits required if you use the table names
|
67
76
|
"experiments" or "alternatives" at present.) Note: if you are upgrading to A/Bingo 1.0.0, you'll
|
68
77
|
want to do this again.
|
69
78
|
|
79
|
+
``` shell
|
70
80
|
ruby script/generate abingo_migration
|
71
81
|
rake db:migrate
|
82
|
+
```
|
72
83
|
|
73
84
|
2) REQUIRED: You need to tell A/Bingo a user's identity so that it knows who is
|
74
85
|
who if they come back to a test. (The same identity will ALWAYS see the same
|
75
86
|
alternative for the same test.) How you do this is up to you -- I suggest integrating
|
76
87
|
with your login/account infrastructure. The simplest thing that can possibly work
|
77
88
|
|
89
|
+
``` ruby
|
78
90
|
#Somewhere in application.rb
|
79
91
|
before_filter :set_abingo_identity
|
80
92
|
|
@@ -86,6 +98,7 @@ def set_abingo_identity
|
|
86
98
|
session[:abingo_identity] = @abingo_identity.identity
|
87
99
|
end
|
88
100
|
end
|
101
|
+
```
|
89
102
|
|
90
103
|
3) RECOMMENDED: A/Bingo makes HEAVY use of the cache to reduce load on the
|
91
104
|
database and share potentially long-lived "temporary" data, such as what alternative
|
@@ -103,8 +116,10 @@ that may not be the worse thing in the world.
|
|
103
116
|
|
104
117
|
A/Bingo defaults to using the same cache store as Rails. If you want to change it
|
105
118
|
|
119
|
+
``` ruby
|
106
120
|
#production.rb
|
107
121
|
Abingo.cache = ActiveSupport::Cache::MemCacheStore.new("cache.example.com:12345") #best if really memcacheDB
|
122
|
+
```
|
108
123
|
|
109
124
|
|
110
125
|
Copyright (c) 2009-2010 Patrick McKenzie, released under the MIT license
|
data/abingo.gemspec
CHANGED
data/lib/abingo.rb
CHANGED
data/lib/abingo/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: abingo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-12-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
16
|
-
requirement: &
|
16
|
+
requirement: &70317691378360 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,7 +21,18 @@ dependencies:
|
|
21
21
|
version: '3.0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70317691378360
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rake
|
27
|
+
requirement: &70317691377460 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - =
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.8.7
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70317691377460
|
25
36
|
description: A split testing framework for Rails 3.x.x
|
26
37
|
email:
|
27
38
|
- me@glenngillen.com
|
@@ -33,7 +44,7 @@ files:
|
|
33
44
|
- Gemfile
|
34
45
|
- Gemfile.lock
|
35
46
|
- MIT-LICENSE
|
36
|
-
- README
|
47
|
+
- README.md
|
37
48
|
- Rakefile
|
38
49
|
- abingo.gemspec
|
39
50
|
- generators/abingo_migration/abingo_migration_generator.rb
|
@@ -66,7 +77,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
66
77
|
version: '0'
|
67
78
|
segments:
|
68
79
|
- 0
|
69
|
-
hash:
|
80
|
+
hash: 1702120110109038062
|
70
81
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
71
82
|
none: false
|
72
83
|
requirements:
|
@@ -75,7 +86,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
75
86
|
version: '0'
|
76
87
|
segments:
|
77
88
|
- 0
|
78
|
-
hash:
|
89
|
+
hash: 1702120110109038062
|
79
90
|
requirements: []
|
80
91
|
rubyforge_project:
|
81
92
|
rubygems_version: 1.8.15
|