vignette 0.0.4pre2 → 0.0.5pre1

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,6 +1,20 @@
1
1
  # Vignette
2
2
 
3
- TODO: Write a gem description
3
+ Vignette makes it dead simple to run reliable A/b tests in your Rails project.
4
+
5
+ ## Examples
6
+
7
+ Vignette is as simple as sampling from an Array:
8
+
9
+ @price = [5, 10, 15].vignette
10
+
11
+ We've also added a filter to HAML for testing:
12
+
13
+ %h1
14
+ :vignette
15
+ Welcome to the Zoo.
16
+ Come to see the Lions!
17
+ Don't get caught by a lemur!
4
18
 
5
19
  ## Installation
6
20
 
@@ -18,7 +32,32 @@ Or install it yourself as:
18
32
 
19
33
  ## Usage
20
34
 
21
- TODO: Write usage instructions here
35
+ Vignette was crafted to make A/b testing as simple as possible. Simply run the `vignette` function on any Array and get the result from a A/b test. Vignette will store this choice in session, a cookies or nowhere, based on how you configure Vignette. For this to work, all calls to Vignette must be within the request cycle (within an around_filter in ActionController::Base). Test are identified by a checksum of the Array, and thus, changing the Array will restart that test.
36
+
37
+ # To store in session (default)
38
+ Vignette.init(:session)
39
+
40
+ # To use cookies
41
+ Vignette.init(:cookies)
42
+
43
+ # Or random sampling
44
+ Vignette.init(:random)
45
+
46
+ Running tests:
47
+
48
+ [ 1,2,3 ].vignette # Chooses an option and stores test as indicated above
49
+ %w{one two three}.vignette # Same with strings
50
+
51
+ # or in HAML
52
+
53
+ :vignette
54
+ Test one
55
+ Test <strong>two</strong>
56
+ Test #{three}
57
+
58
+ Finally, to store in analytics which tests were run, simple check
59
+
60
+ Vignette.test -> { 'views/orders/new.html.haml:54d3c10a1b21' => 0 } # First choice was select for new.html.haml test
22
61
 
23
62
  ## Contributing
24
63
 
@@ -35,28 +35,19 @@ module ObjectExtensions
35
35
  name
36
36
  end
37
37
 
38
- store = case Vignette.store
39
- when :cookies
40
- raise VignetteError::ConfigError, "Missing cookies configuration in Vignette. Must access Vignette in controller within around_filter." if Vignette.cookies.nil?
41
- Rails.logger.debug [ 'Vignette::vignette', 'Cookies Sampling', key, Vignette.cookies[key] ] if Vignette.logging
42
- Vignette.cookies
43
- when :session
44
- raise VignetteError::ConfigError, "Missing session configuration in Vignette. Must access Vignette in controller within around_filter." if Vignette.session.nil?
45
- Rails.logger.debug [ 'Vignette::vignette', 'Session Sampling', key, Vignette.session[key] ] if Vignette.logging
46
- Vignette.session
47
- else
48
- Rails.logger.debug [ 'Vignette::vignette', 'Random Sampling' ] if Vignette.logging
49
- {} # This is an empty storage
50
- end
51
-
38
+ store = Vignette.get_store
39
+
52
40
  choice = store[key] ||= rand(length) # Store key into storage if not available
53
-
54
- # We're going to track all tests in request
55
- Vignette.request[:vignette] ||= {}
56
- Vignette.request[:vignette][:tests] ||= {}
57
- Vignette.request[:vignette][:tests][test_name] = choice
41
+ result = self[choice.to_i]
58
42
 
59
- self[choice.to_i]
43
+ # TODO: Make this clearer for how to store the test items
44
+ if Vignette.session
45
+ Vignette.session[:vignette] ||= {}
46
+ Vignette.session[:vignette][:tests] ||= {}
47
+ Vignette.session[:vignette][:tests][test_name] = result
48
+ end
49
+
50
+ return result
60
51
  end
61
52
 
62
53
  end
@@ -1,3 +1,3 @@
1
1
  module Vignette
2
- VERSION = "0.0.4pre2"
2
+ VERSION = "0.0.5pre1"
3
3
  end
data/lib/vignette.rb CHANGED
@@ -35,17 +35,29 @@ module Vignette
35
35
  Vignette.session = session
36
36
  Vignette.cookies = cookies
37
37
  end
38
-
38
+
39
39
  def self.clear_request
40
40
  Vignette.request = Vignette.session = Vignette.cookies = nil # clear items
41
41
  end
42
-
43
- def self.tests
44
- return {} if Vignette.request.nil? # Can't return tests outside of yield
45
-
46
- Vignette.request[:vignette] ||= {}
47
- Vignette.request[:vignette][:tests] ||= {}
48
- Vignette.request[:vignette][:tests]
42
+
43
+ def self.tests(session=Vignette.session)
44
+ session[:vignette] && session[:vignette][:tests] ? session[:vignette][:tests] : {}
45
+ end
46
+
47
+ def self.get_store(session=Vignette.session, cookies=Vignette.cookies)
48
+ case Vignette.store
49
+ when :cookies
50
+ raise VignetteError::ConfigError, "Missing cookies configuration in Vignette. Must access Vignette in controller within around_filter." if cookies.nil?
51
+ Rails.logger.debug [ 'Vignette::vignette', 'Cookies Sampling', cookies ] if Vignette.logging
52
+ cookies
53
+ when :session
54
+ raise VignetteError::ConfigError, "Missing session configuration in Vignette. Must access Vignette in controller within around_filter." if session.nil?
55
+ Rails.logger.debug [ 'Vignette::vignette', 'Session Sampling', session ] if Vignette.logging
56
+ session
57
+ else
58
+ Rails.logger.debug [ 'Vignette::vignette', 'Random Sampling' ] if Vignette.logging
59
+ {} # This is an empty storage
60
+ end
49
61
  end
50
62
 
51
63
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vignette
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4pre2
4
+ version: 0.0.5pre1
5
5
  prerelease: 5
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-06-21 00:00:00.000000000 Z
12
+ date: 2013-10-09 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Simple, effective A/b testing made easy.
15
15
  email:
@@ -54,3 +54,4 @@ signing_key:
54
54
  specification_version: 3
55
55
  summary: With a few simple features, get A/b testing up in your application.
56
56
  test_files: []
57
+ has_rdoc: