determinator 1.0.0 → 1.1.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
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