experimental 0.2.1 → 0.2.3

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 CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- Y2Y3MWRjY2E3ZThhNzZhNjFhNWJjMmVhYjA2YTlhNzA3NWUwYzljNQ==
5
- data.tar.gz: !binary |-
6
- ZDRmMjU5MTg5MDMwMmI4MjM5Y2IwMmU4M2ZmZDY1ZmIyYzZkODliOQ==
7
- !binary "U0hBNTEy":
8
- metadata.gz: !binary |-
9
- MDVhMDA3ZDg3YzI1ZjY5ZGI3ZjMzYzU5YWViYWIwZTVhMzg5Mjg2ZTMxMzAy
10
- YjIwYzllY2E3OWMyZTI3NmUwM2JlZGM3ZWU3N2UxOTFjMDU5Yzc1YmJjNGJh
11
- NTY0ODhlMWQwMjgzYTRlNGE0YzMwMmUyMWEyYzAzZmFmNzkyYmQ=
12
- data.tar.gz: !binary |-
13
- ZWNiMzRkYzhmMzU2MmQ3NTA3YjVmOGVjOGZiODI2OTFiNmMwOWIzZDdkMmE2
14
- YWQ4MDE2OGIyYjQ4MTU3MzE2NmEyMDcwYmI1NjgxYWJmZjE4ODkwOTVmZTA2
15
- YTk0YzM4N2UxZjliMTM5MDdjM2MxODc5YTc1NzBkYzA5MmExZDc=
2
+ SHA1:
3
+ metadata.gz: 83c50c67d6dd426e4854405cb9ffdf073501ae5e
4
+ data.tar.gz: 72a4707f81e9422629f77c972101238f22c31a00
5
+ SHA512:
6
+ metadata.gz: ee6381fc21a8e59ce7acae502650d4023a3ddb4df2be016497137ceb5876e7256e9d837fcf6b7fb4582336769f369db61ed7c06741d3ca8bb6aaefc2a17624f0
7
+ data.tar.gz: 33c24ea4e0ef978b55225e474969aa57424ae3bdb122a657fe7445b75426d311846b784f6f646ea17f1195b663a8693ace60c9323219f2237451905244cd8879
@@ -5,7 +5,7 @@ module Experimental
5
5
  attr_accessible :name, :num_buckets, :notes, :population
6
6
 
7
7
  validates_presence_of :name, :num_buckets
8
- validates_numericality_of :num_buckets, :greater_than_or_equal_to => 2
8
+ validates_numericality_of :num_buckets, :greater_than_or_equal_to => 1
9
9
  validates_numericality_of :winning_bucket,
10
10
  :greater_than_or_equal_to => 0,
11
11
  :less_than => :num_buckets,
@@ -47,6 +47,7 @@ module Experimental
47
47
 
48
48
  def experiments_create
49
49
  @experiment = Experiment.new(params[:experimental_experiment])
50
+ @experiment.admin = true
50
51
  @experiment.start_date = Time.now
51
52
 
52
53
  if @experiment.save
@@ -15,7 +15,8 @@ module Experimental
15
15
  active = Experimental.experiment_data.map do |name, attributes|
16
16
  experiment = Experimental::Experiment.find_or_initialize_by_name(name)
17
17
  logger.info " * #{experiment.id ? 'updating' : 'creating'} #{name}"
18
- experiment.assign_attributes(attributes)
18
+ defaults = {'num_buckets' => nil, 'notes' => nil, 'population' => nil}
19
+ experiment.assign_attributes(defaults.merge(attributes))
19
20
  experiment.start_date ||= Time.now
20
21
  experiment.tap(&:save!)
21
22
  end
@@ -23,6 +24,7 @@ module Experimental
23
24
  scope = Experimental::Experiment.in_code
24
25
  scope = scope.where('id NOT IN (?)', active.map(&:id)) unless active.empty?
25
26
  scope.find_each do |experiment|
27
+ next if experiment.admin?
26
28
  logger.info " * removing #{experiment.name}"
27
29
  experiment.remove
28
30
  end
@@ -4,16 +4,27 @@ module Experimental
4
4
  @overrides ||= Hash.new do |experiment_overrides, experiment_name|
5
5
  experiment_overrides[experiment_name] = {}
6
6
  end
7
+ @default_set = false
8
+ end
9
+
10
+ def set_default(value)
11
+ @default_set = true
12
+ @default = value
7
13
  end
8
14
 
9
15
  def include?(subject, experiment_name)
16
+ return true if @default_set
10
17
  experiment_name = experiment_name.to_s
11
18
  @overrides.key?(experiment_name) && @overrides[experiment_name].key?(subject)
12
19
  end
13
20
 
14
21
  def [](subject, experiment_name)
15
22
  experiment_name = experiment_name.to_s
16
- @overrides[experiment_name][subject]
23
+ if @overrides[experiment_name].key?(subject)
24
+ @overrides[experiment_name][subject]
25
+ else
26
+ @default
27
+ end
17
28
  end
18
29
 
19
30
  def []=(subject, experiment_name, bucket)
@@ -23,6 +34,8 @@ module Experimental
23
34
 
24
35
  def reset
25
36
  @overrides.clear
37
+ @default_set = false
38
+ @default = nil
26
39
  end
27
40
  end
28
41
  end
@@ -10,13 +10,22 @@ module Experimental
10
10
  # Calling it again isn't harmful, just unnecessary.
11
11
  def self.initialize
12
12
  return if @initialized
13
+ @initial_source = Experimental.source
13
14
  Experimental.source = Experimental::Source::Configuration.new
14
15
  @initialized = true
15
16
  end
16
17
 
17
- # Call this before each test.
18
+ # Call this before each test. It provides a deterministic default: all
19
+ # subjects are out of all experiments. Opt subjects into experiments using
20
+ # #set_experimental_bucket.
18
21
  def self.setup
19
22
  Experimental.overrides.reset
23
+ Experimental.overrides.set_default(nil)
24
+ end
25
+
26
+ def self.teardown
27
+ Experimental.source = @initial_source
28
+ @initialized = false
20
29
  end
21
30
 
22
31
  # Force the given subject into the given +bucket+ of the given +experiment+.
@@ -1,5 +1,5 @@
1
1
  module Experimental
2
- VERSION = [0, 2, 1]
2
+ VERSION = [0, 2, 3]
3
3
 
4
4
  class << VERSION
5
5
  include Comparable
@@ -8,6 +8,7 @@ class CreateExperimentsTable < ActiveRecord::Migration
8
8
  t.integer :winning_bucket
9
9
  t.text :notes, limit: 256
10
10
  t.string :population
11
+ t.boolean :admin, null: false, default: false
11
12
  t.datetime :removed_at
12
13
  t.timestamps
13
14
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: experimental
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - HowAboutWe.com
@@ -10,118 +10,34 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-11-14 00:00:00.000000000 Z
13
+ date: 2014-01-31 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rails
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
- - - <=
19
+ - - "<="
20
20
  - !ruby/object:Gem::Version
21
21
  version: '5.0'
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
- - - <=
26
+ - - "<="
27
27
  - !ruby/object:Gem::Version
28
28
  version: '5.0'
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: jquery-rails
31
31
  requirement: !ruby/object:Gem::Requirement
32
32
  requirements:
33
- - - ! '>='
33
+ - - ">="
34
34
  - !ruby/object:Gem::Version
35
35
  version: '0'
36
36
  type: :runtime
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
39
39
  requirements:
40
- - - ! '>='
41
- - !ruby/object:Gem::Version
42
- version: '0'
43
- - !ruby/object:Gem::Dependency
44
- name: sqlite3
45
- requirement: !ruby/object:Gem::Requirement
46
- requirements:
47
- - - ! '>='
48
- - !ruby/object:Gem::Version
49
- version: '0'
50
- type: :development
51
- prerelease: false
52
- version_requirements: !ruby/object:Gem::Requirement
53
- requirements:
54
- - - ! '>='
55
- - !ruby/object:Gem::Version
56
- version: '0'
57
- - !ruby/object:Gem::Dependency
58
- name: timecop
59
- requirement: !ruby/object:Gem::Requirement
60
- requirements:
61
- - - ! '>='
62
- - !ruby/object:Gem::Version
63
- version: '0'
64
- type: :development
65
- prerelease: false
66
- version_requirements: !ruby/object:Gem::Requirement
67
- requirements:
68
- - - ! '>='
69
- - !ruby/object:Gem::Version
70
- version: '0'
71
- - !ruby/object:Gem::Dependency
72
- name: rspec-rails
73
- requirement: !ruby/object:Gem::Requirement
74
- requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
77
- version: '0'
78
- type: :development
79
- prerelease: false
80
- version_requirements: !ruby/object:Gem::Requirement
81
- requirements:
82
- - - ! '>='
83
- - !ruby/object:Gem::Version
84
- version: '0'
85
- - !ruby/object:Gem::Dependency
86
- name: activeadmin
87
- requirement: !ruby/object:Gem::Requirement
88
- requirements:
89
- - - ! '>='
90
- - !ruby/object:Gem::Version
91
- version: '0'
92
- type: :development
93
- prerelease: false
94
- version_requirements: !ruby/object:Gem::Requirement
95
- requirements:
96
- - - ! '>='
97
- - !ruby/object:Gem::Version
98
- version: '0'
99
- - !ruby/object:Gem::Dependency
100
- name: sass-rails
101
- requirement: !ruby/object:Gem::Requirement
102
- requirements:
103
- - - ! '>='
104
- - !ruby/object:Gem::Version
105
- version: '0'
106
- type: :development
107
- prerelease: false
108
- version_requirements: !ruby/object:Gem::Requirement
109
- requirements:
110
- - - ! '>='
111
- - !ruby/object:Gem::Version
112
- version: '0'
113
- - !ruby/object:Gem::Dependency
114
- name: coffee-rails
115
- requirement: !ruby/object:Gem::Requirement
116
- requirements:
117
- - - ! '>='
118
- - !ruby/object:Gem::Version
119
- version: '0'
120
- type: :development
121
- prerelease: false
122
- version_requirements: !ruby/object:Gem::Requirement
123
- requirements:
124
- - - ! '>='
40
+ - - ">="
125
41
  - !ruby/object:Gem::Version
126
42
  version: '0'
127
43
  description: AB Test framework for Rails
@@ -131,6 +47,9 @@ executables: []
131
47
  extensions: []
132
48
  extra_rdoc_files: []
133
49
  files:
50
+ - MIT-LICENSE
51
+ - README.markdown
52
+ - Rakefile
134
53
  - app/models/experimental/experiment.rb
135
54
  - app/models/experimental/population/default.rb
136
55
  - app/models/experimental/population/filter.rb
@@ -141,31 +60,28 @@ files:
141
60
  - app/views/experimental/_links.html.erb
142
61
  - app/views/experimental/_new.html.erb
143
62
  - config/routes.rb
63
+ - lib/experimental.rb
144
64
  - lib/experimental/controller_actions.rb
145
65
  - lib/experimental/engine.rb
146
66
  - lib/experimental/loader.rb
147
67
  - lib/experimental/overrides.rb
148
68
  - lib/experimental/railtie.rb
149
69
  - lib/experimental/rspec_helpers.rb
70
+ - lib/experimental/source.rb
150
71
  - lib/experimental/source/active_record.rb
151
72
  - lib/experimental/source/base.rb
152
73
  - lib/experimental/source/cache.rb
153
74
  - lib/experimental/source/configuration.rb
154
- - lib/experimental/source.rb
75
+ - lib/experimental/test.rb
155
76
  - lib/experimental/test/cucumber.rb
156
77
  - lib/experimental/test/rspec.rb
157
78
  - lib/experimental/test/unit.rb
158
- - lib/experimental/test.rb
159
79
  - lib/experimental/version.rb
160
- - lib/experimental.rb
161
80
  - lib/generators/experimental/experimental_generator.rb
162
81
  - lib/generators/experimental/templates/create_experiments_table.rb
163
82
  - lib/generators/experimental/templates/experimental.rb
164
83
  - lib/generators/experimental/templates/experiments.yml
165
84
  - lib/tasks/experimental.rake
166
- - MIT-LICENSE
167
- - Rakefile
168
- - README.markdown
169
85
  homepage: https://github.com/howaboutwe/experimental
170
86
  licenses:
171
87
  - MIT
@@ -176,17 +92,17 @@ require_paths:
176
92
  - lib
177
93
  required_ruby_version: !ruby/object:Gem::Requirement
178
94
  requirements:
179
- - - ! '>='
95
+ - - ">="
180
96
  - !ruby/object:Gem::Version
181
97
  version: '0'
182
98
  required_rubygems_version: !ruby/object:Gem::Requirement
183
99
  requirements:
184
- - - ! '>='
100
+ - - ">="
185
101
  - !ruby/object:Gem::Version
186
102
  version: '0'
187
103
  requirements: []
188
104
  rubyforge_project:
189
- rubygems_version: 2.0.3
105
+ rubygems_version: 2.2.0
190
106
  signing_key:
191
107
  specification_version: 4
192
108
  summary: Adds support for database-backed AB tests in Rails apps