banana_split 0.0.1 → 0.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.
@@ -1,21 +1,25 @@
1
1
  module BananaSplit
2
2
  module Controller
3
- def self.included(base)
4
- base.class_eval do
5
- helper_method :current_user_id
6
- end
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ helper_method :session_id
7
7
  end
8
-
9
- def ab_goal(test_name, value = 1)
10
- test_run = AbTestRun.last :conditions => { :user_id => current_user_id }
11
- if test_run && test_run.value == 0
12
- test_run.update_attribute(:value, value)
8
+
9
+ module InstanceMethods
10
+
11
+ def ab_goal(test_name, value = 1)
12
+ test = AbTest.find_by_name(test_name)
13
+ test_run = AbTestRun.find_by_session_id_and_ab_test_id(session_id, test.id)
14
+ if test_run && test_run.value == 0
15
+ test_run.update_attribute(:value, value)
16
+ end
17
+ end
18
+
19
+ def session_id
20
+ request.session_options[:id]
13
21
  end
14
22
  end
15
-
16
- def current_user_id
17
- current_user.id
18
- end
19
-
23
+
20
24
  end
21
25
  end
@@ -2,7 +2,7 @@ module BananaSplit
2
2
  module VERSION
3
3
  MAJOR = 0
4
4
  MINOR = 0
5
- TINY = 1
5
+ TINY = 2
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
@@ -1,20 +1,26 @@
1
1
  module BananaSplit
2
2
  module ViewHelpers
3
-
3
+
4
4
  def ab_test(test_name, designs)
5
5
  test = AbTest.find_or_create_by_name(:name => test_name.to_s)
6
-
7
- design_name = designs.keys.sample
8
- design_render_options = designs[design_name]
9
- design = AbTestDesign.find_or_create_by_ab_test_id_and_name :ab_test_id => test.id, :name => design_name.to_s
10
-
11
- test_run = test.runs.create({
12
- :ab_test_design_id => design.id,
13
- :user_id => current_user_id
14
- })
15
-
6
+
7
+ test_run = AbTestRun.find_by_session_id_and_ab_test_id(session_id, test.id)
8
+
9
+ design = if test_run
10
+ test_run.ab_test_design
11
+ else
12
+ design_name = designs.keys.sample
13
+ AbTestDesign.find_or_create_by_ab_test_id_and_name(:ab_test_id => test.id, :name => design_name)
14
+ end
15
+
16
+ design_render_options = designs[design.name.to_sym]
17
+
18
+ test.runs.create({
19
+ :ab_test_design_id => design.id,
20
+ :session_id => session_id
21
+ }) unless test_run
22
+
16
23
  design_render_options ? render(design_render_options) : nil
17
24
  end
18
-
19
25
  end
20
26
  end
@@ -10,7 +10,7 @@ class CreateBananaSplitTables < ActiveRecord::Migration
10
10
  end
11
11
 
12
12
  create_table(:ab_test_runs) do |t|
13
- t.references :user
13
+ t.string :session_id
14
14
  t.references :ab_test
15
15
  t.references :ab_test_design
16
16
  t.integer :value, :null => false, :default => 0
@@ -1,3 +1,4 @@
1
1
  class AbTestRun < ActiveRecord::Base
2
2
  belongs_to :ab_test
3
+ belongs_to :ab_test_design
3
4
  end
metadata CHANGED
@@ -1,12 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: banana_split
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 0
8
- - 1
9
- version: 0.0.1
4
+ prerelease:
5
+ version: 0.0.2
10
6
  platform: ruby
11
7
  authors:
12
8
  - Dennis Plougman Buus
@@ -15,10 +11,20 @@ autorequire:
15
11
  bindir: bin
16
12
  cert_chain: []
17
13
 
18
- date: 2010-06-28 00:00:00 +02:00
14
+ date: 2011-02-25 00:00:00 +01:00
19
15
  default_executable:
20
- dependencies: []
21
-
16
+ dependencies:
17
+ - !ruby/object:Gem::Dependency
18
+ name: rails
19
+ prerelease: false
20
+ requirement: &id001 !ruby/object:Gem::Requirement
21
+ none: false
22
+ requirements:
23
+ - - ~>
24
+ - !ruby/object:Gem::Version
25
+ version: "3.0"
26
+ type: :runtime
27
+ version_requirements: *id001
22
28
  description: Description not written yet.
23
29
  email: rasmusrnielsen@gmail.com
24
30
  executables: []
@@ -53,21 +59,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
53
59
  requirements:
54
60
  - - ">="
55
61
  - !ruby/object:Gem::Version
56
- segments:
57
- - 0
58
62
  version: "0"
59
63
  required_rubygems_version: !ruby/object:Gem::Requirement
60
64
  none: false
61
65
  requirements:
62
66
  - - ">="
63
67
  - !ruby/object:Gem::Version
64
- segments:
65
- - 0
66
68
  version: "0"
67
69
  requirements: []
68
70
 
69
71
  rubyforge_project:
70
- rubygems_version: 1.3.7
72
+ rubygems_version: 1.5.0
71
73
  signing_key:
72
74
  specification_version: 3
73
75
  summary: AB testing for Rails