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 +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
|