verdict 0.8.0 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: dd82ab981cc4c81f2b23f45dbfd6085ee4516a70
4
- data.tar.gz: 02e7e6e193a70f05ade2cc207f396f7e249a49ae
2
+ SHA256:
3
+ metadata.gz: ef6e75a9737694176e2d31ed58fe999222189c2f86a30099fd34a2892756b570
4
+ data.tar.gz: 5010e420ef5cc2bfd79223ba1ef91526fe429d8040272cc2eaa0cf072a05246e
5
5
  SHA512:
6
- metadata.gz: a5c0c8723feb906c79ceb96358a5fd7d1fd2abc59358a6c430741f275cb8293f84357cda76a885925c7db071864acdb4e0f17b6639c15f60a5b3ad1e4e289f86
7
- data.tar.gz: d7c49f872ca05140a5f7b555ea9fddc18b06f749b5b50b9f074f5f921f464b5e253a8039b2f61521334f9c01c65d5059ea2a3e2e3072c6a9b9667ce5ebf2d375
6
+ metadata.gz: a4389fc051d535c43bd81198023ab8dc38c26eca9805f751f235b3dc08fddcb9d123c70c513751b118c24470303448577047802f86b23f81e18a926218231b8c
7
+ data.tar.gz: 1b478420092e7fd734e14d11f28a7bfcca6c019a56d8eb4d193b331993a7596e770a25ca0f63e82a648292ca331feffcc18523bbe3799d1db077a98bc1ddbc6d
@@ -0,0 +1,2 @@
1
+ enabled:
2
+ - cla
@@ -1,3 +1,8 @@
1
+ ## v0.9.0
2
+ **This version has breaking changes**
3
+ * Eagerly load experiment definitions when booting Rails, so that multi-threaded applications do not face a race-condition when populating experiments.
4
+ * Fixes deprecated `assert_equal` tests that return nil.
5
+
1
6
  ## v0.8.0
2
7
  **This version has breaking changes**
3
8
 
data/README.md CHANGED
@@ -55,7 +55,7 @@ You'll need to pass along the subject (think User, Product or any other Model cl
55
55
 
56
56
  ``` ruby
57
57
  context = { ... } # anything you want to pass along to the qualify block.
58
- case Verdict['my experiment'].switch(shop, context)
58
+ case Verdict['my_experiment'].switch(shop, context)
59
59
  when :test
60
60
  # Handle test group
61
61
  when :control
@@ -12,6 +12,7 @@ class Verdict::Railtie < Rails::Railtie
12
12
  config.to_prepare do
13
13
  # Clear Verdict's cache in order to avoid "A copy of ... has been removed from the module tree but is still active!"
14
14
  Verdict.clear_repository_cache
15
+ Verdict.discovery
15
16
  end
16
17
 
17
18
  rake_tasks do
@@ -1,3 +1,3 @@
1
1
  module Verdict
2
- VERSION = "0.8.0"
2
+ VERSION = "0.9.0"
3
3
  end
@@ -0,0 +1,10 @@
1
+ Verdict::Experiment.define(:test_rails_app_experiment) do
2
+ qualify { true }
3
+
4
+ groups do
5
+ group(:test, 4)
6
+ group(:control, :rest)
7
+ end
8
+
9
+ storage(Verdict::Storage::RedisStorage.new(Redis.current))
10
+ end
@@ -20,11 +20,11 @@ class AssignmentTest < Minitest::Test
20
20
  assert_kind_of Time, assignment.created_at
21
21
 
22
22
  non_assignment = Verdict::Assignment.new(@experiment, 'test_subject_id', nil, nil)
23
- assert_equal nil, non_assignment.group
23
+ assert_nil non_assignment.group
24
24
  assert !non_assignment.returning?
25
25
  assert !non_assignment.qualified?
26
- assert_equal nil, non_assignment.to_sym
27
- assert_equal nil, non_assignment.handle
26
+ assert_nil non_assignment.to_sym
27
+ assert_nil non_assignment.handle
28
28
  assert_kind_of Time, assignment.created_at
29
29
  end
30
30
 
@@ -68,7 +68,7 @@ class AssignmentTest < Minitest::Test
68
68
  assert_equal 'test_subject_id', json['subject']
69
69
  assert_equal false, json['qualified']
70
70
  assert_equal false, json['returning']
71
- assert_equal nil, json['group']
71
+ assert_nil json['group']
72
72
  assert_equal '2012-01-01T00:00:00Z', json['created_at']
73
73
  end
74
74
  end
@@ -34,7 +34,7 @@ class ExperimentTest < Minitest::Test
34
34
  non_qualified = e.assign(us_subject)
35
35
  assert_kind_of Verdict::Assignment, non_qualified
36
36
  refute non_qualified.qualified?
37
- assert_equal nil, non_qualified.group
37
+ assert_nil non_qualified.group
38
38
  end
39
39
 
40
40
  def test_multiple_qualifier
@@ -64,7 +64,7 @@ class ExperimentTest < Minitest::Test
64
64
  non_qualified = e.assign(en_subject)
65
65
  assert_kind_of Verdict::Assignment, non_qualified
66
66
  refute non_qualified.qualified?
67
- assert_equal nil, non_qualified.group
67
+ assert_nil non_qualified.group
68
68
  end
69
69
 
70
70
  module CountryIsCanadaHelper
@@ -101,7 +101,7 @@ class ExperimentTest < Minitest::Test
101
101
  non_qualified = e.assign(us_subject)
102
102
  assert_kind_of Verdict::Assignment, non_qualified
103
103
  refute non_qualified.qualified?
104
- assert_equal nil, non_qualified.group
104
+ assert_nil non_qualified.group
105
105
  end
106
106
 
107
107
  def test_disqualify_empty_identifier
@@ -113,7 +113,7 @@ class ExperimentTest < Minitest::Test
113
113
  end
114
114
 
115
115
  refute e.assign(nil).qualified?
116
- assert_equal nil, e.convert('', :mygoal)
116
+ assert_nil e.convert('', :mygoal)
117
117
  end
118
118
 
119
119
  def test_assignment
@@ -139,7 +139,7 @@ class ExperimentTest < Minitest::Test
139
139
 
140
140
  assert_equal :a, e.switch(1)
141
141
  assert_equal :b, e.switch(2)
142
- assert_equal nil, e.switch(3)
142
+ assert_nil e.switch(3)
143
143
  end
144
144
 
145
145
  def test_experiment_without_manual_assignment_timestamps_option
@@ -0,0 +1,12 @@
1
+ require 'rails'
2
+ require "active_model/railtie"
3
+ require "action_controller/railtie"
4
+ require "action_view/railtie"
5
+ require "verdict/railtie"
6
+
7
+ # Create a rails app
8
+ module Dummy
9
+ class Application < Rails::Application
10
+ config.root = "test"
11
+ end
12
+ end
@@ -12,7 +12,7 @@ class RakeTasksTest < Minitest::Test
12
12
 
13
13
  def setup
14
14
  require 'rake' unless defined?(Rake)
15
- Rake::Task.define_task(:environment)
15
+ Rake::Task.define_task(:environment)
16
16
  Rake.application.rake_require('verdict/tasks')
17
17
 
18
18
  @experiment = TestExperiment.define(:rake, store_unqualified: true) do
@@ -20,6 +20,6 @@ class StaticSegmenterTest < Minitest::Test
20
20
 
21
21
  def test_assigment
22
22
  assert_equal @segmenter.groups['beta'], @segmenter.assign('id2', stub(id: 'id2'), nil)
23
- assert_equal nil, @segmenter.assign('id3', stub(id: 'id3'), nil)
23
+ assert_nil @segmenter.assign('id3', stub(id: 'id3'), nil)
24
24
  end
25
25
  end
@@ -50,7 +50,8 @@ class LegacyRedisStorageTest < Minitest::Test
50
50
  returning_assignment = @experiment.assign('subject_2')
51
51
  assert returning_assignment.returning?
52
52
  assert_equal new_assignment.experiment, returning_assignment.experiment
53
- assert_equal new_assignment.group, returning_assignment.group
53
+ assert_nil new_assignment.group
54
+ assert_nil returning_assignment.group
54
55
  end
55
56
 
56
57
  def test_assign_should_return_unqualified_when_redis_is_unavailable_for_reads
@@ -47,7 +47,8 @@ class RedisStorageTest < Minitest::Test
47
47
  returning_assignment = @experiment.assign('subject_2')
48
48
  assert returning_assignment.returning?
49
49
  assert_equal new_assignment.experiment, returning_assignment.experiment
50
- assert_equal new_assignment.group, returning_assignment.group
50
+ assert_nil new_assignment.group
51
+ assert_nil returning_assignment.group
51
52
  end
52
53
 
53
54
  def test_assign_should_return_unqualified_when_redis_is_unavailable_for_reads
@@ -0,0 +1,19 @@
1
+ require 'test_helper'
2
+ require 'fake_app'
3
+
4
+ class VerdictRailsTest < Minitest::Test
5
+ def setup
6
+ Verdict.clear_repository_cache
7
+ new_rails_app = Dummy::Application.new
8
+ new_rails_app.initialize!
9
+ end
10
+
11
+ def test_verdict_railtie_should_find_directory_path
12
+ assert_equal Verdict.directory, Rails.root.join('app', 'experiments')
13
+ end
14
+
15
+ def test_verdict_should_eager_load_discovery
16
+ expected_experiment = Verdict.instance_variable_get('@repository')
17
+ assert expected_experiment.include?("test_rails_app_experiment")
18
+ end
19
+ end
@@ -22,4 +22,5 @@ Gem::Specification.new do |gem|
22
22
  gem.add_development_dependency("mocha")
23
23
  gem.add_development_dependency("timecop")
24
24
  gem.add_development_dependency("redis")
25
+ gem.add_development_dependency("rails")
25
26
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: verdict
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shopify
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-02 00:00:00.000000000 Z
11
+ date: 2019-06-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rails
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  description: Shopify Experiments classes
84
98
  email:
85
99
  - kevin.mcphillips@shopify.com
@@ -88,6 +102,7 @@ executables: []
88
102
  extensions: []
89
103
  extra_rdoc_files: []
90
104
  files:
105
+ - ".github/probots.yml"
91
106
  - ".gitignore"
92
107
  - ".travis.yml"
93
108
  - CHANGELOG.md
@@ -118,11 +133,13 @@ files:
118
133
  - lib/verdict/tasks.rake
119
134
  - lib/verdict/version.rb
120
135
  - shipit.rubygems.yml
136
+ - test/app/experiments/test_rails_app_experiment.rb
121
137
  - test/assignment_test.rb
122
138
  - test/conversion_test.rb
123
139
  - test/event_logger_test.rb
124
140
  - test/experiment_test.rb
125
141
  - test/experiments_repository_test.rb
142
+ - test/fake_app.rb
126
143
  - test/group_test.rb
127
144
  - test/metadata_test.rb
128
145
  - test/rake_tasks_test.rb
@@ -135,6 +152,7 @@ files:
135
152
  - test/storage/memory_storage_test.rb
136
153
  - test/storage/redis_storage_test.rb
137
154
  - test/test_helper.rb
155
+ - test/verdict_rails_test.rb
138
156
  - verdict.gemspec
139
157
  homepage: http://github.com/Shopify/verdict
140
158
  licenses: []
@@ -155,17 +173,19 @@ required_rubygems_version: !ruby/object:Gem::Requirement
155
173
  version: '0'
156
174
  requirements: []
157
175
  rubyforge_project:
158
- rubygems_version: 2.5.2
176
+ rubygems_version: 2.7.6
159
177
  signing_key:
160
178
  specification_version: 4
161
179
  summary: A library to centrally define experiments for your application, and collect
162
180
  assignment information.
163
181
  test_files:
182
+ - test/app/experiments/test_rails_app_experiment.rb
164
183
  - test/assignment_test.rb
165
184
  - test/conversion_test.rb
166
185
  - test/event_logger_test.rb
167
186
  - test/experiment_test.rb
168
187
  - test/experiments_repository_test.rb
188
+ - test/fake_app.rb
169
189
  - test/group_test.rb
170
190
  - test/metadata_test.rb
171
191
  - test/rake_tasks_test.rb
@@ -178,3 +198,4 @@ test_files:
178
198
  - test/storage/memory_storage_test.rb
179
199
  - test/storage/redis_storage_test.rb
180
200
  - test/test_helper.rb
201
+ - test/verdict_rails_test.rb