flipper 0.9.2 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Changelog.md +12 -0
- data/README.md +8 -0
- data/docs/Adapters.md +1 -1
- data/docs/api/README.md +775 -0
- data/examples/group_dynamic_lookup.rb +90 -0
- data/lib/flipper/feature.rb +12 -10
- data/lib/flipper/feature_check_context.rb +44 -0
- data/lib/flipper/gates/actor.rb +5 -4
- data/lib/flipper/gates/boolean.rb +2 -2
- data/lib/flipper/gates/group.rb +4 -3
- data/lib/flipper/gates/percentage_of_actors.rb +7 -6
- data/lib/flipper/gates/percentage_of_time.rb +2 -1
- data/lib/flipper/spec/shared_adapter_specs.rb +1 -1
- data/lib/flipper/types/group.rb +14 -3
- data/lib/flipper/version.rb +1 -1
- data/spec/flipper/feature_check_context_spec.rb +67 -0
- data/spec/flipper/feature_spec.rb +1 -1
- data/spec/flipper/gates/boolean_spec.rb +10 -2
- data/spec/flipper/gates/group_spec.rb +10 -2
- data/spec/flipper/gates/percentage_of_actors_spec.rb +10 -2
- data/spec/flipper/middleware/memoizer_spec.rb +1 -1
- data/spec/flipper/types/group_spec.rb +29 -4
- data/spec/helper.rb +4 -2
- metadata +7 -2
@@ -2,6 +2,8 @@ require 'helper'
|
|
2
2
|
require 'flipper/types/group'
|
3
3
|
|
4
4
|
RSpec.describe Flipper::Types::Group do
|
5
|
+
let(:fake_context) { double("FeatureCheckContext") }
|
6
|
+
|
5
7
|
subject do
|
6
8
|
Flipper.register(:admins) { |actor| actor.admin? }
|
7
9
|
end
|
@@ -42,25 +44,48 @@ RSpec.describe Flipper::Types::Group do
|
|
42
44
|
let(:non_admin_actor) { double('Actor', :admin? => false) }
|
43
45
|
|
44
46
|
it "returns true if block matches" do
|
45
|
-
expect(subject.match?(admin_actor)).to eq(true)
|
47
|
+
expect(subject.match?(admin_actor, fake_context)).to eq(true)
|
46
48
|
end
|
47
49
|
|
48
50
|
it "returns false if block does not match" do
|
49
|
-
expect(subject.match?(non_admin_actor)).to eq(false)
|
51
|
+
expect(subject.match?(non_admin_actor, fake_context)).to eq(false)
|
50
52
|
end
|
51
53
|
|
52
54
|
it "returns true for truthy block results" do
|
53
55
|
group = Flipper::Types::Group.new(:examples) do |actor|
|
54
56
|
actor.email =~ /@example\.com/
|
55
57
|
end
|
56
|
-
expect(group.match?(double('Actor', :email => "foo@example.com"))).to be_truthy
|
58
|
+
expect(group.match?(double('Actor', :email => "foo@example.com"), fake_context)).to be_truthy
|
57
59
|
end
|
58
60
|
|
59
61
|
it "returns false for falsey block results" do
|
60
62
|
group = Flipper::Types::Group.new(:examples) do |actor|
|
61
63
|
nil
|
62
64
|
end
|
63
|
-
expect(group.match?(double('Actor'))).to be_falsey
|
65
|
+
expect(group.match?(double('Actor'), fake_context)).to be_falsey
|
66
|
+
end
|
67
|
+
|
68
|
+
it "can yield without context as block argument" do
|
69
|
+
context = Flipper::FeatureCheckContext.new(
|
70
|
+
feature_name: :my_feature,
|
71
|
+
values: Flipper::GateValues.new({}),
|
72
|
+
thing: Flipper::Types::Actor.new(Struct.new(:flipper_id).new(1)),
|
73
|
+
)
|
74
|
+
group = Flipper.register(:group_with_context) { |actor| actor }
|
75
|
+
yielded_actor = group.match?(admin_actor, context)
|
76
|
+
expect(yielded_actor).to be(admin_actor)
|
77
|
+
end
|
78
|
+
|
79
|
+
it "can yield with context as block argument" do
|
80
|
+
context = Flipper::FeatureCheckContext.new(
|
81
|
+
feature_name: :my_feature,
|
82
|
+
values: Flipper::GateValues.new({}),
|
83
|
+
thing: Flipper::Types::Actor.new(Struct.new(:flipper_id).new(1)),
|
84
|
+
)
|
85
|
+
group = Flipper.register(:group_with_context) { |actor, context| [actor, context] }
|
86
|
+
yielded_actor, yielded_context = group.match?(admin_actor, context)
|
87
|
+
expect(yielded_actor).to be(admin_actor)
|
88
|
+
expect(yielded_context).to be(context)
|
64
89
|
end
|
65
90
|
end
|
66
91
|
end
|
data/spec/helper.rb
CHANGED
@@ -19,6 +19,8 @@ RSpec.configure do |config|
|
|
19
19
|
Flipper.unregister_groups
|
20
20
|
end
|
21
21
|
|
22
|
+
config.disable_monkey_patching!
|
23
|
+
|
22
24
|
config.filter_run focus: true
|
23
25
|
config.run_all_when_everything_filtered = true
|
24
26
|
end
|
@@ -52,7 +54,7 @@ RSpec.shared_examples_for 'a percentage' do
|
|
52
54
|
end
|
53
55
|
end
|
54
56
|
|
55
|
-
shared_examples_for 'a DSL feature' do
|
57
|
+
RSpec.shared_examples_for 'a DSL feature' do
|
56
58
|
it "returns instance of feature" do
|
57
59
|
expect(feature).to be_instance_of(Flipper::Feature)
|
58
60
|
end
|
@@ -80,7 +82,7 @@ shared_examples_for 'a DSL feature' do
|
|
80
82
|
end
|
81
83
|
end
|
82
84
|
|
83
|
-
shared_examples_for "a DSL boolean method" do
|
85
|
+
RSpec.shared_examples_for "a DSL boolean method" do
|
84
86
|
it "returns boolean with value set" do
|
85
87
|
result = subject.send(method_name, true)
|
86
88
|
expect(result).to be_instance_of(Flipper::Types::Boolean)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flipper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Nunemaker
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-11-17 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Feature flipper is the act of enabling/disabling features in your application,
|
14
14
|
ideally without re-deploying or changing anything in your code base. Flipper makes
|
@@ -29,11 +29,13 @@ files:
|
|
29
29
|
- docs/Gates.md
|
30
30
|
- docs/Instrumentation.md
|
31
31
|
- docs/Optimization.md
|
32
|
+
- docs/api/README.md
|
32
33
|
- examples/basic.rb
|
33
34
|
- examples/dsl.rb
|
34
35
|
- examples/enabled_for_actor.rb
|
35
36
|
- examples/example_setup.rb
|
36
37
|
- examples/group.rb
|
38
|
+
- examples/group_dynamic_lookup.rb
|
37
39
|
- examples/group_with_members.rb
|
38
40
|
- examples/individual_actor.rb
|
39
41
|
- examples/instrumentation.rb
|
@@ -52,6 +54,7 @@ files:
|
|
52
54
|
- lib/flipper/dsl.rb
|
53
55
|
- lib/flipper/errors.rb
|
54
56
|
- lib/flipper/feature.rb
|
57
|
+
- lib/flipper/feature_check_context.rb
|
55
58
|
- lib/flipper/gate.rb
|
56
59
|
- lib/flipper/gate_values.rb
|
57
60
|
- lib/flipper/gates/actor.rb
|
@@ -87,6 +90,7 @@ files:
|
|
87
90
|
- spec/flipper/adapters/pstore_spec.rb
|
88
91
|
- spec/flipper/adapters/read_only_spec.rb
|
89
92
|
- spec/flipper/dsl_spec.rb
|
93
|
+
- spec/flipper/feature_check_context_spec.rb
|
90
94
|
- spec/flipper/feature_spec.rb
|
91
95
|
- spec/flipper/gate_spec.rb
|
92
96
|
- spec/flipper/gate_values_spec.rb
|
@@ -150,6 +154,7 @@ test_files:
|
|
150
154
|
- spec/flipper/adapters/pstore_spec.rb
|
151
155
|
- spec/flipper/adapters/read_only_spec.rb
|
152
156
|
- spec/flipper/dsl_spec.rb
|
157
|
+
- spec/flipper/feature_check_context_spec.rb
|
153
158
|
- spec/flipper/feature_spec.rb
|
154
159
|
- spec/flipper/gate_spec.rb
|
155
160
|
- spec/flipper/gate_values_spec.rb
|