determinator 1.0.0 → 1.1.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
2
  SHA1:
3
- metadata.gz: 3b01c8573e10fbc219e4cd44c85696a8c34f4283
4
- data.tar.gz: f7a43c6e60f22ef9947fbe04e5313db4b28982c8
3
+ metadata.gz: 532bf3e49ff1811ae99eb4e9655c1ab8c3f4ec9b
4
+ data.tar.gz: 69a37c14086d2a79fad647ad9a7924a35f3b6050
5
5
  SHA512:
6
- metadata.gz: 66c567515540a0cc5adc1b9978b2a33b57d7f66135a0d6413847bccc68ee69d7a0954979333dda96bad701eba3879b1ac9e4c38785f18a4bf5c9ddc0f51ac668
7
- data.tar.gz: 3329ee1b0ea3c1f59dc010675e2e2f89173dfc7c346b06ccb4248cb67e8c29b1ff13041a969f0400911a41fa93e0656b921ec5c9d9984e7d44f4634cec2c1a59
6
+ metadata.gz: 486f995cedb81e7053aa5baecc54861bfc3153a382c0614d1917652f9c785e720804a031027494759d0a817b292581c1c3f20b369d5385212cce676298802a66
7
+ data.tar.gz: c5325f6116a94d4f2e0af17d814a1cb7ca72bf3d3ac0fe72ecd4c7c9a31a58f84247e36e9af52225de670afb03824ce2a8c1d653eb86cde070b6a21b712c7cdc
@@ -1,3 +1,13 @@
1
+ # v1.1.0 (2018-02-07)
2
+
3
+ ⚠️ This release includes breaking changes to `RSpec::Determinator` ⚠️
4
+
5
+ Breaking change:
6
+ - If two `forced_determination`s are made within one rspec test case, it is now the _last_ one that takes precedence (not the first). (#47)
7
+
8
+ Bug fix:
9
+ - `forced_determination`s which are called with differently typed parameters (eg. integer vs. string, boolean vs. string) will now work in the same way that real determination will. (#47)
10
+
1
11
  # v1.0.0 (2018-02-05)
2
12
 
3
13
  ⚠️ This release includes breaking changes ⚠️
data/README.md CHANGED
@@ -179,10 +179,21 @@ RSpec.describe "something", :determinator_support do
179
179
  forced_determination(:my_lazyexperiment, :some_lazy_variable)
180
180
  let(:some_lazy_variable) { 'variant_b' }
181
181
 
182
+ forced_determination(:my_targeted_feature_flag, true, only_for: { employee: true })
183
+ forced_determination(:my_targeted_feature_flag, false, only_for: { id: 12345 })
184
+
182
185
  it "uses forced_determination" do
183
- expect(Determinator.instance.feature_flag_on?(:my_feature_flag)).to eq(true)
184
- expect(Determinator.instance.which_variant(:my_experiment)).to eq("variant_a")
185
- expect(Determinator.instance.which_variant(:my_lazy_experiment)).to eq("variant_b")
186
+ determinator = Determinator.for_actor(id: 1)
187
+
188
+ expect(determinator.feature_flag_on?(:my_feature_flag)).to be true
189
+ expect(determinator.which_variant(:my_experiment)).to eq("variant_a")
190
+ expect(determinator.which_variant(:my_lazy_experiment)).to eq("variant_b")
191
+
192
+ expect(determinator.feature_flag_on?(:my_targeted_feature_flag, properties: { employee: false })).to be false
193
+ expect(determinator.feature_flag_on?(:my_targeted_feature_flag, properties: { employee: true })).to be true
194
+
195
+ # The last forced determination takes precedence
196
+ expect(Determinator.instance.feature_flag_on?(:my_targeted_feature_flag, id: 12345, properties: { employee: true })).to be false
186
197
  end
187
198
  end
188
199
  end
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ../..
3
3
  specs:
4
- determinator (0.12.1)
4
+ determinator (1.0.0)
5
5
  routemaster-drain (~> 3.0)
6
6
 
7
7
  GEM
@@ -65,7 +65,7 @@ GEM
65
65
  multipart-post (>= 1.2, < 3)
66
66
  faraday_middleware (0.12.2)
67
67
  faraday (>= 0.7.4, < 1.0)
68
- ffi (1.9.18)
68
+ ffi (1.9.21)
69
69
  globalid (0.3.7)
70
70
  activesupport (>= 4.1.0)
71
71
  hashie (3.5.7)
@@ -1,3 +1,3 @@
1
1
  module Determinator
2
- VERSION = '1.0.0'
2
+ VERSION = '1.1.0'
3
3
  end
@@ -45,14 +45,14 @@ module RSpec
45
45
  end
46
46
 
47
47
  def mock_result(name, result, only_for: {})
48
- @mocked_results[name.to_s][only_for] = result
48
+ @mocked_results[name.to_s][normalize_properties(only_for)] = result
49
49
  end
50
50
 
51
51
  def fake_determinate(name, id: nil, guid: nil, properties: {})
52
52
  properties[:id] = id if id
53
53
  properties[:guid] = guid if guid
54
54
 
55
- outcome_for_feature_given_properties(name.to_s, properties)
55
+ outcome_for_feature_given_properties(name.to_s, normalize_properties(properties))
56
56
  end
57
57
  alias_method :feature_flag_on?, :fake_determinate
58
58
  alias_method :which_variant, :fake_determinate
@@ -62,11 +62,18 @@ module RSpec
62
62
  def outcome_for_feature_given_properties(feature_name, requirements)
63
63
  req_array = requirements.to_a
64
64
 
65
- _, forced = @mocked_results[feature_name].find do |given, outcome|
65
+ keys_in_priority_order = @mocked_results[feature_name].keys.reverse
66
+ key = keys_in_priority_order.find do |given|
66
67
  (given.to_a - req_array).empty?
67
68
  end
68
69
 
69
- forced || false
70
+ @mocked_results[feature_name][key] || false
71
+ end
72
+
73
+ def normalize_properties(properties)
74
+ properties.each_with_object({}) do |(key, value), hash|
75
+ hash[key.to_s] = [*value].map(&:to_s)
76
+ end
70
77
  end
71
78
  end
72
79
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: determinator
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - JP Hastings-Spital
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-02-05 00:00:00.000000000 Z
11
+ date: 2018-02-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: routemaster-drain