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