verdict 0.8.0 → 0.9.0
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 +5 -5
- data/.github/probots.yml +2 -0
- data/CHANGELOG.md +5 -0
- data/README.md +1 -1
- data/lib/verdict/railtie.rb +1 -0
- data/lib/verdict/version.rb +1 -1
- data/test/app/experiments/test_rails_app_experiment.rb +10 -0
- data/test/assignment_test.rb +4 -4
- data/test/experiment_test.rb +5 -5
- data/test/fake_app.rb +12 -0
- data/test/rake_tasks_test.rb +1 -1
- data/test/segmenters/static_segmenter_test.rb +1 -1
- data/test/storage/legacy_redis_storage_test.rb +2 -1
- data/test/storage/redis_storage_test.rb +2 -1
- data/test/verdict_rails_test.rb +19 -0
- data/verdict.gemspec +1 -0
- metadata +24 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: ef6e75a9737694176e2d31ed58fe999222189c2f86a30099fd34a2892756b570
|
4
|
+
data.tar.gz: 5010e420ef5cc2bfd79223ba1ef91526fe429d8040272cc2eaa0cf072a05246e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a4389fc051d535c43bd81198023ab8dc38c26eca9805f751f235b3dc08fddcb9d123c70c513751b118c24470303448577047802f86b23f81e18a926218231b8c
|
7
|
+
data.tar.gz: 1b478420092e7fd734e14d11f28a7bfcca6c019a56d8eb4d193b331993a7596e770a25ca0f63e82a648292ca331feffcc18523bbe3799d1db077a98bc1ddbc6d
|
data/.github/probots.yml
ADDED
data/CHANGELOG.md
CHANGED
@@ -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['
|
58
|
+
case Verdict['my_experiment'].switch(shop, context)
|
59
59
|
when :test
|
60
60
|
# Handle test group
|
61
61
|
when :control
|
data/lib/verdict/railtie.rb
CHANGED
@@ -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
|
data/lib/verdict/version.rb
CHANGED
data/test/assignment_test.rb
CHANGED
@@ -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
|
-
|
23
|
+
assert_nil non_assignment.group
|
24
24
|
assert !non_assignment.returning?
|
25
25
|
assert !non_assignment.qualified?
|
26
|
-
|
27
|
-
|
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
|
-
|
71
|
+
assert_nil json['group']
|
72
72
|
assert_equal '2012-01-01T00:00:00Z', json['created_at']
|
73
73
|
end
|
74
74
|
end
|
data/test/experiment_test.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
142
|
+
assert_nil e.switch(3)
|
143
143
|
end
|
144
144
|
|
145
145
|
def test_experiment_without_manual_assignment_timestamps_option
|
data/test/fake_app.rb
ADDED
@@ -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
|
data/test/rake_tasks_test.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
-
|
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
|
data/verdict.gemspec
CHANGED
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.
|
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:
|
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.
|
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
|