flipper 0.7.0.beta5 → 0.7.0.beta6
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 +4 -4
- data/lib/flipper/feature.rb +15 -13
- data/lib/flipper/gates/group.rb +5 -1
- data/lib/flipper/types/actor.rb +2 -0
- data/lib/flipper/version.rb +1 -1
- data/spec/flipper/feature_spec.rb +72 -2
- data/spec/flipper/gates/group_spec.rb +23 -0
- data/spec/flipper/instrumentation/log_subscriber_spec.rb +2 -2
- data/spec/flipper/types/actor_spec.rb +6 -0
- data/spec/support/spec_helpers.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fbc4122278d701b4a97828cb9fbfe1f66328ff48
|
4
|
+
data.tar.gz: 87a4ad6f4b5da8b4a3c9d61fae53231a156f10c3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0f870e8966135ca803eb0aabe97dce999cd710db15720d67374a8b81e1fc13f608e7ba0ec082b079075b6b8c2a6509bc37db5b8b5af1e27f758b5de4a31de7db
|
7
|
+
data.tar.gz: b5f89715dcb5e10989f1e2fd2f63cc19d62854011d1f08aee29f1d3e7cc17d7280638c12d98576dcf099f5960cbc0f6e25d7f3868fac0a942f6259d6a8eb92a3
|
data/lib/flipper/feature.rb
CHANGED
@@ -43,13 +43,15 @@ module Flipper
|
|
43
43
|
#
|
44
44
|
# Returns the result of Adapter#enable.
|
45
45
|
def enable(thing = true)
|
46
|
-
instrument(:enable
|
46
|
+
instrument(:enable) { |payload|
|
47
47
|
adapter.add self
|
48
48
|
|
49
49
|
gate = gate_for(thing)
|
50
|
+
wrapped_thing = gate.wrap(thing)
|
50
51
|
payload[:gate_name] = gate.name
|
52
|
+
payload[:thing] = wrapped_thing
|
51
53
|
|
52
|
-
adapter.enable self, gate,
|
54
|
+
adapter.enable self, gate, wrapped_thing
|
53
55
|
}
|
54
56
|
end
|
55
57
|
|
@@ -57,16 +59,18 @@ module Flipper
|
|
57
59
|
#
|
58
60
|
# Returns the result of Adapter#disable.
|
59
61
|
def disable(thing = false)
|
60
|
-
instrument(:disable
|
62
|
+
instrument(:disable) { |payload|
|
61
63
|
adapter.add self
|
62
64
|
|
63
65
|
gate = gate_for(thing)
|
66
|
+
wrapped_thing = gate.wrap(thing)
|
64
67
|
payload[:gate_name] = gate.name
|
68
|
+
payload[:thing] = wrapped_thing
|
65
69
|
|
66
70
|
if gate.is_a?(Gates::Boolean)
|
67
71
|
adapter.clear self
|
68
72
|
else
|
69
|
-
adapter.disable self, gate,
|
73
|
+
adapter.disable self, gate, wrapped_thing
|
70
74
|
end
|
71
75
|
}
|
72
76
|
end
|
@@ -75,9 +79,11 @@ module Flipper
|
|
75
79
|
#
|
76
80
|
# Returns true if enabled, false if not.
|
77
81
|
def enabled?(thing = nil)
|
78
|
-
instrument(:enabled
|
82
|
+
instrument(:enabled?) { |payload|
|
79
83
|
values = gate_values
|
80
84
|
|
85
|
+
payload[:thing] = gate(:actor).wrap(thing) unless thing.nil?
|
86
|
+
|
81
87
|
open_gate = gates.detect { |gate|
|
82
88
|
instrument_gate(gate, :open?, thing) { |gate_payload|
|
83
89
|
gate.open?(thing, values[gate.key], feature_name: @name)
|
@@ -343,14 +349,10 @@ module Flipper
|
|
343
349
|
private
|
344
350
|
|
345
351
|
# Private: Instrument a feature operation.
|
346
|
-
def instrument(operation
|
347
|
-
|
348
|
-
:feature_name
|
349
|
-
:operation
|
350
|
-
:thing => thing,
|
351
|
-
}
|
352
|
-
|
353
|
-
@instrumenter.instrument(InstrumentationName, payload) { |payload|
|
352
|
+
def instrument(operation)
|
353
|
+
@instrumenter.instrument(InstrumentationName) { |payload|
|
354
|
+
payload[:feature_name] = name
|
355
|
+
payload[:operation] = operation
|
354
356
|
payload[:result] = yield(payload) if block_given?
|
355
357
|
}
|
356
358
|
end
|
data/lib/flipper/gates/group.rb
CHANGED
data/lib/flipper/types/actor.rb
CHANGED
data/lib/flipper/version.rb
CHANGED
@@ -115,7 +115,7 @@ describe Flipper::Feature do
|
|
115
115
|
}
|
116
116
|
|
117
117
|
it "is recorded for enable" do
|
118
|
-
thing = Flipper::Types::
|
118
|
+
thing = Flipper::Types::Actor.new(Struct.new(:flipper_id).new("1"))
|
119
119
|
gate = subject.gate_for(thing)
|
120
120
|
|
121
121
|
subject.enable(thing)
|
@@ -129,6 +129,17 @@ describe Flipper::Feature do
|
|
129
129
|
event.payload[:result].should_not be_nil
|
130
130
|
end
|
131
131
|
|
132
|
+
it "always instruments flipper type instance for enable" do
|
133
|
+
thing = Struct.new(:flipper_id).new("1")
|
134
|
+
gate = subject.gate_for(thing)
|
135
|
+
|
136
|
+
subject.enable(thing)
|
137
|
+
|
138
|
+
event = instrumenter.events.last
|
139
|
+
event.should_not be_nil
|
140
|
+
event.payload[:thing].should eq(Flipper::Types::Actor.new(thing))
|
141
|
+
end
|
142
|
+
|
132
143
|
it "is recorded for disable" do
|
133
144
|
thing = Flipper::Types::Boolean.new
|
134
145
|
gate = subject.gate_for(thing)
|
@@ -144,8 +155,50 @@ describe Flipper::Feature do
|
|
144
155
|
event.payload[:result].should_not be_nil
|
145
156
|
end
|
146
157
|
|
158
|
+
user = Struct.new(:flipper_id).new("1")
|
159
|
+
actor = Flipper::Types::Actor.new(user)
|
160
|
+
boolean_true = Flipper::Types::Boolean.new(true)
|
161
|
+
boolean_false = Flipper::Types::Boolean.new(false)
|
162
|
+
group = Flipper::Types::Group.new(:admins)
|
163
|
+
percentage_of_time = Flipper::Types::PercentageOfTime.new(10)
|
164
|
+
percentage_of_actors = Flipper::Types::PercentageOfActors.new(10)
|
165
|
+
{
|
166
|
+
user => actor,
|
167
|
+
actor => actor,
|
168
|
+
true => boolean_true,
|
169
|
+
false => boolean_false,
|
170
|
+
boolean_true => boolean_true,
|
171
|
+
boolean_false => boolean_false,
|
172
|
+
:admins => group,
|
173
|
+
group => group,
|
174
|
+
percentage_of_time => percentage_of_time,
|
175
|
+
percentage_of_actors => percentage_of_actors,
|
176
|
+
}.each do |thing, wrapped_thing|
|
177
|
+
it "always instruments #{thing.inspect} as #{wrapped_thing.class} for enable" do
|
178
|
+
Flipper.register(:admins) {}
|
179
|
+
subject.enable(thing)
|
180
|
+
|
181
|
+
event = instrumenter.events.last
|
182
|
+
event.should_not be_nil
|
183
|
+
event.payload[:operation].should eq(:enable)
|
184
|
+
event.payload[:thing].should eq(wrapped_thing)
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
188
|
+
it "always instruments flipper type instance for disable" do
|
189
|
+
thing = Struct.new(:flipper_id).new("1")
|
190
|
+
gate = subject.gate_for(thing)
|
191
|
+
|
192
|
+
subject.disable(thing)
|
193
|
+
|
194
|
+
event = instrumenter.events.last
|
195
|
+
event.should_not be_nil
|
196
|
+
event.payload[:operation].should eq(:disable)
|
197
|
+
event.payload[:thing].should eq(Flipper::Types::Actor.new(thing))
|
198
|
+
end
|
199
|
+
|
147
200
|
it "is recorded for enabled?" do
|
148
|
-
thing = Flipper::Types::
|
201
|
+
thing = Flipper::Types::Actor.new(Struct.new(:flipper_id).new("1"))
|
149
202
|
gate = subject.gate_for(thing)
|
150
203
|
|
151
204
|
subject.enabled?(thing)
|
@@ -158,6 +211,23 @@ describe Flipper::Feature do
|
|
158
211
|
event.payload[:thing].should eq(thing)
|
159
212
|
event.payload[:result].should eq(false)
|
160
213
|
end
|
214
|
+
|
215
|
+
user = Struct.new(:flipper_id).new("1")
|
216
|
+
actor = Flipper::Types::Actor.new(user)
|
217
|
+
{
|
218
|
+
nil => nil,
|
219
|
+
user => actor,
|
220
|
+
actor => actor,
|
221
|
+
}.each do |thing, wrapped_thing|
|
222
|
+
it "always instruments #{thing.inspect} as #{wrapped_thing.class} for enabled?" do
|
223
|
+
subject.enabled?(thing)
|
224
|
+
|
225
|
+
event = instrumenter.events.last
|
226
|
+
event.should_not be_nil
|
227
|
+
event.payload[:operation].should eq(:enabled?)
|
228
|
+
event.payload[:thing].should eq(wrapped_thing)
|
229
|
+
end
|
230
|
+
end
|
161
231
|
end
|
162
232
|
|
163
233
|
describe "#state" do
|
@@ -31,4 +31,27 @@ describe Flipper::Gates::Group do
|
|
31
31
|
end
|
32
32
|
end
|
33
33
|
end
|
34
|
+
|
35
|
+
describe "#wrap" do
|
36
|
+
it "returns group instance for symbol" do
|
37
|
+
group = Flipper.register(:admins) {}
|
38
|
+
subject.wrap(:admins).should eq(group)
|
39
|
+
end
|
40
|
+
|
41
|
+
it "returns group instance for group instance" do
|
42
|
+
group = Flipper.register(:admins) {}
|
43
|
+
subject.wrap(group).should eq(group)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe "#protects?" do
|
48
|
+
it "returns true for group" do
|
49
|
+
group = Flipper.register(:admins) {}
|
50
|
+
subject.protects?(group).should be(true)
|
51
|
+
end
|
52
|
+
|
53
|
+
it "returns true for symbol" do
|
54
|
+
subject.protects?(:admins).should be(true)
|
55
|
+
end
|
56
|
+
end
|
34
57
|
end
|
@@ -50,7 +50,7 @@ describe Flipper::Instrumentation::LogSubscriber do
|
|
50
50
|
end
|
51
51
|
|
52
52
|
context "feature enabled checks with a thing" do
|
53
|
-
let(:user) { Struct.new(:flipper_id).new('1') }
|
53
|
+
let(:user) { Flipper::Types::Actor.new(Struct.new(:flipper_id).new('1')) }
|
54
54
|
|
55
55
|
before do
|
56
56
|
clear_logs
|
@@ -69,7 +69,7 @@ describe Flipper::Instrumentation::LogSubscriber do
|
|
69
69
|
end
|
70
70
|
|
71
71
|
context "changing feature enabled state" do
|
72
|
-
let(:user) { Struct.new(:flipper_id).new('1') }
|
72
|
+
let(:user) { Flipper::Types::Actor.new(Struct.new(:flipper_id).new('1')) }
|
73
73
|
|
74
74
|
before do
|
75
75
|
clear_logs
|
@@ -87,6 +87,12 @@ describe Flipper::Types::Actor do
|
|
87
87
|
actor.admin?.should eq(true)
|
88
88
|
end
|
89
89
|
|
90
|
+
it "exposes thing" do
|
91
|
+
thing = thing_class.new(10)
|
92
|
+
actor = described_class.new(thing)
|
93
|
+
actor.thing.should be(thing)
|
94
|
+
end
|
95
|
+
|
90
96
|
describe "#respond_to?" do
|
91
97
|
it "returns true if responds to method" do
|
92
98
|
thing = thing_class.new('1')
|
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.7.0.
|
4
|
+
version: 0.7.0.beta6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Nunemaker
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-05-13 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
|
@@ -129,7 +129,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
129
129
|
version: 1.3.1
|
130
130
|
requirements: []
|
131
131
|
rubyforge_project:
|
132
|
-
rubygems_version: 2.2.
|
132
|
+
rubygems_version: 2.2.3
|
133
133
|
signing_key:
|
134
134
|
specification_version: 4
|
135
135
|
summary: Feature flipper for ANYTHING
|