flipper 0.6.1 → 0.6.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 443602b7b9c4e35349dcf1a0f78da58839d7ce63
4
+ data.tar.gz: beba70f2d2cadf459ac88a90bddb723e3ccefcef
5
+ SHA512:
6
+ metadata.gz: 5635c48d957d327148478fb2d5b2e1995d902be5c8f9eb80be4bf6d8465c1a8add294a67c53657716680ae5b597b777af0a998dfaf96d17a3ef62d91bc76e486
7
+ data.tar.gz: 60d23d5b7a1795828e3fbfd513b593360ab19e4cd6318b4ec6eb6850ab4da9c1dc2c2d4291b5a75e66cdbd458781af1dbc2ba60bf4296f606630e61341d26193
data/Gemfile CHANGED
@@ -6,7 +6,7 @@ gem 'metriks', :require => false
6
6
  gem 'statsd-ruby', :require => false
7
7
  gem 'rspec'
8
8
  gem 'rack-test'
9
- gem 'activesupport', :require => false
9
+ gem 'activesupport', '< 4.0.0', :require => false
10
10
 
11
11
  group(:guard) do
12
12
  gem 'guard'
@@ -16,7 +16,7 @@ module Flipper
16
16
  #
17
17
  # Examples
18
18
  #
19
- # Flipper.registry(:admins) { |thing|
19
+ # Flipper.register(:admins) { |thing|
20
20
  # thing.respond_to?(:admin?) && thing.admin?
21
21
  # }
22
22
  #
@@ -37,6 +37,13 @@ module Flipper
37
37
  groups.clear
38
38
  end
39
39
 
40
+ # Public: Check if a group exists
41
+ #
42
+ # Returns boolean
43
+ def self.group_exists?(name)
44
+ self.groups.key?(name)
45
+ end
46
+
40
47
  # Internal: Fetches a group by name.
41
48
  #
42
49
  # name - The Symbol name of the group.
@@ -8,7 +8,7 @@ module Flipper
8
8
  # Private: The name of instrumentation events.
9
9
  InstrumentationName = "feature_operation.#{InstrumentationNamespace}"
10
10
 
11
- # Internal: The name of the feature.
11
+ # Public: The name of the feature.
12
12
  attr_reader :name
13
13
 
14
14
  # Internal: Name converted to value safe for adapter.
@@ -1,5 +1,5 @@
1
1
  # Note: You should never need to require this file directly if you are using
2
- # ActiveSupport::Notifications. Instead, you should require the metriks file
2
+ # ActiveSupport::Notifications. Instead, you should require the statsd file
3
3
  # that lives in the same directory as this file. The benefit is that it
4
4
  # subscribes to the correct events and does everything for your.
5
5
  require 'flipper/instrumentation/subscriber'
@@ -45,7 +45,6 @@ module Flipper
45
45
 
46
46
  def get(key)
47
47
  key = key.to_sym
48
-
49
48
  @mutex.synchronize {
50
49
  @source.fetch(key) {
51
50
  raise KeyNotFound.new(key)
@@ -53,6 +52,13 @@ module Flipper
53
52
  }
54
53
  end
55
54
 
55
+ def key?(key)
56
+ key = key.to_sym
57
+ @mutex.synchronize {
58
+ @source.has_key?(key)
59
+ }
60
+ end
61
+
56
62
  def each(&block)
57
63
  @mutex.synchronize { @source.dup }.each(&block)
58
64
  end
@@ -46,26 +46,26 @@ shared_examples_for 'a flipper adapter' do
46
46
  end
47
47
 
48
48
  it "can enable, disable and get value for boolean gate" do
49
- subject.enable(feature, boolean_gate, flipper.boolean).should be_true
49
+ subject.enable(feature, boolean_gate, flipper.boolean).should eq(true)
50
50
 
51
51
  result = subject.get(feature)
52
52
  result[:boolean].should eq('true')
53
53
 
54
- subject.disable(feature, boolean_gate, flipper.boolean(false)).should be_true
54
+ subject.disable(feature, boolean_gate, flipper.boolean(false)).should eq(true)
55
55
 
56
56
  result = subject.get(feature)
57
- result[:boolean].should be_nil
57
+ result[:boolean].should eq(nil)
58
58
  end
59
59
 
60
60
  it "fully disables all enabled things when boolean gate disabled" do
61
61
  actor_22 = actor_class.new('22')
62
- subject.enable(feature, boolean_gate, flipper.boolean).should be_true
63
- subject.enable(feature, group_gate, flipper.group(:admins)).should be_true
64
- subject.enable(feature, actor_gate, flipper.actor(actor_22)).should be_true
65
- subject.enable(feature, actors_gate, flipper.actors(25)).should be_true
66
- subject.enable(feature, random_gate, flipper.random(45)).should be_true
62
+ subject.enable(feature, boolean_gate, flipper.boolean).should eq(true)
63
+ subject.enable(feature, group_gate, flipper.group(:admins)).should eq(true)
64
+ subject.enable(feature, actor_gate, flipper.actor(actor_22)).should eq(true)
65
+ subject.enable(feature, actors_gate, flipper.actors(25)).should eq(true)
66
+ subject.enable(feature, random_gate, flipper.random(45)).should eq(true)
67
67
 
68
- subject.disable(feature, boolean_gate, flipper.boolean).should be_true
68
+ subject.disable(feature, boolean_gate, flipper.boolean).should eq(true)
69
69
 
70
70
  subject.get(feature).should eq({
71
71
  :boolean => nil,
@@ -77,17 +77,17 @@ shared_examples_for 'a flipper adapter' do
77
77
  end
78
78
 
79
79
  it "can enable, disable and get value for group gate" do
80
- subject.enable(feature, group_gate, flipper.group(:admins)).should be_true
81
- subject.enable(feature, group_gate, flipper.group(:early_access)).should be_true
80
+ subject.enable(feature, group_gate, flipper.group(:admins)).should eq(true)
81
+ subject.enable(feature, group_gate, flipper.group(:early_access)).should eq(true)
82
82
 
83
83
  result = subject.get(feature)
84
84
  result[:groups].should eq(Set['admins', 'early_access'])
85
85
 
86
- subject.disable(feature, group_gate, flipper.group(:early_access)).should be_true
86
+ subject.disable(feature, group_gate, flipper.group(:early_access)).should eq(true)
87
87
  result = subject.get(feature)
88
88
  result[:groups].should eq(Set['admins'])
89
89
 
90
- subject.disable(feature, group_gate, flipper.group(:admins)).should be_true
90
+ subject.disable(feature, group_gate, flipper.group(:admins)).should eq(true)
91
91
  result = subject.get(feature)
92
92
  result[:groups].should eq(Set.new)
93
93
  end
@@ -96,67 +96,67 @@ shared_examples_for 'a flipper adapter' do
96
96
  actor_22 = actor_class.new('22')
97
97
  actor_asdf = actor_class.new('asdf')
98
98
 
99
- subject.enable(feature, actor_gate, flipper.actor(actor_22)).should be_true
100
- subject.enable(feature, actor_gate, flipper.actor(actor_asdf)).should be_true
99
+ subject.enable(feature, actor_gate, flipper.actor(actor_22)).should eq(true)
100
+ subject.enable(feature, actor_gate, flipper.actor(actor_asdf)).should eq(true)
101
101
 
102
102
  result = subject.get(feature)
103
103
  result[:actors].should eq(Set['22', 'asdf'])
104
104
 
105
- subject.disable(feature, actor_gate, flipper.actor(actor_22)).should be_true
105
+ subject.disable(feature, actor_gate, flipper.actor(actor_22)).should eq(true)
106
106
  result = subject.get(feature)
107
107
  result[:actors].should eq(Set['asdf'])
108
108
 
109
- subject.disable(feature, actor_gate, flipper.actor(actor_asdf)).should be_true
109
+ subject.disable(feature, actor_gate, flipper.actor(actor_asdf)).should eq(true)
110
110
  result = subject.get(feature)
111
111
  result[:actors].should eq(Set.new)
112
112
  end
113
113
 
114
114
  it "can enable, disable and get value for percentage of actors gate" do
115
- subject.enable(feature, actors_gate, flipper.actors(15)).should be_true
115
+ subject.enable(feature, actors_gate, flipper.actors(15)).should eq(true)
116
116
  result = subject.get(feature)
117
117
  result[:percentage_of_actors].should eq('15')
118
118
 
119
- subject.disable(feature, actors_gate, flipper.actors(0)).should be_true
119
+ subject.disable(feature, actors_gate, flipper.actors(0)).should eq(true)
120
120
  result = subject.get(feature)
121
121
  result[:percentage_of_actors].should eq('0')
122
122
  end
123
123
 
124
124
  it "can enable, disable and get value for percentage of random gate" do
125
- subject.enable(feature, random_gate, flipper.random(10)).should be_true
125
+ subject.enable(feature, random_gate, flipper.random(10)).should eq(true)
126
126
  result = subject.get(feature)
127
127
  result[:percentage_of_random].should eq('10')
128
128
 
129
- subject.disable(feature, random_gate, flipper.random(0)).should be_true
129
+ subject.disable(feature, random_gate, flipper.random(0)).should eq(true)
130
130
  result = subject.get(feature)
131
131
  result[:percentage_of_random].should eq('0')
132
132
  end
133
133
 
134
134
  it "converts boolean value to a string" do
135
- subject.enable(feature, boolean_gate, flipper.boolean).should be_true
135
+ subject.enable(feature, boolean_gate, flipper.boolean).should eq(true)
136
136
  result = subject.get(feature)
137
137
  result[:boolean].should eq('true')
138
138
  end
139
139
 
140
140
  it "converts the actor value to a string" do
141
- subject.enable(feature, actor_gate, flipper.actor(actor_class.new(22))).should be_true
141
+ subject.enable(feature, actor_gate, flipper.actor(actor_class.new(22))).should eq(true)
142
142
  result = subject.get(feature)
143
143
  result[:actors].should eq(Set['22'])
144
144
  end
145
145
 
146
146
  it "converts group value to a string" do
147
- subject.enable(feature, group_gate, flipper.group(:admins)).should be_true
147
+ subject.enable(feature, group_gate, flipper.group(:admins)).should eq(true)
148
148
  result = subject.get(feature)
149
149
  result[:groups].should eq(Set['admins'])
150
150
  end
151
151
 
152
152
  it "converts percentage of random integer value to a string" do
153
- subject.enable(feature, random_gate, flipper.random(10)).should be_true
153
+ subject.enable(feature, random_gate, flipper.random(10)).should eq(true)
154
154
  result = subject.get(feature)
155
155
  result[:percentage_of_random].should eq('10')
156
156
  end
157
157
 
158
158
  it "converts percentage of actors integer value to a string" do
159
- subject.enable(feature, actors_gate, flipper.actors(10)).should be_true
159
+ subject.enable(feature, actors_gate, flipper.actors(10)).should eq(true)
160
160
  result = subject.get(feature)
161
161
  result[:percentage_of_actors].should eq('10')
162
162
  end
@@ -164,28 +164,28 @@ shared_examples_for 'a flipper adapter' do
164
164
  it "can add, remove and list known features" do
165
165
  subject.features.should eq(Set.new)
166
166
 
167
- subject.add(flipper[:stats]).should be_true
167
+ subject.add(flipper[:stats]).should eq(true)
168
168
  subject.features.should eq(Set['stats'])
169
169
 
170
- subject.add(flipper[:search]).should be_true
170
+ subject.add(flipper[:search]).should eq(true)
171
171
  subject.features.should eq(Set['stats', 'search'])
172
172
 
173
- subject.remove(flipper[:stats]).should be_true
173
+ subject.remove(flipper[:stats]).should eq(true)
174
174
  subject.features.should eq(Set['search'])
175
175
 
176
- subject.remove(flipper[:search]).should be_true
176
+ subject.remove(flipper[:search]).should eq(true)
177
177
  subject.features.should eq(Set.new)
178
178
  end
179
179
 
180
180
  it "clears all the gate values for the feature on remove" do
181
181
  actor_22 = actor_class.new('22')
182
- subject.enable(feature, boolean_gate, flipper.boolean).should be_true
183
- subject.enable(feature, group_gate, flipper.group(:admins)).should be_true
184
- subject.enable(feature, actor_gate, flipper.actor(actor_22)).should be_true
185
- subject.enable(feature, actors_gate, flipper.actors(25)).should be_true
186
- subject.enable(feature, random_gate, flipper.random(45)).should be_true
182
+ subject.enable(feature, boolean_gate, flipper.boolean).should eq(true)
183
+ subject.enable(feature, group_gate, flipper.group(:admins)).should eq(true)
184
+ subject.enable(feature, actor_gate, flipper.actor(actor_22)).should eq(true)
185
+ subject.enable(feature, actors_gate, flipper.actors(25)).should eq(true)
186
+ subject.enable(feature, random_gate, flipper.random(45)).should eq(true)
187
187
 
188
- subject.remove(feature).should be_true
188
+ subject.remove(feature).should eq(true)
189
189
 
190
190
  subject.get(feature).should eq({
191
191
  :boolean => nil,
@@ -198,13 +198,13 @@ shared_examples_for 'a flipper adapter' do
198
198
 
199
199
  it "can clear all the gate values for a feature" do
200
200
  actor_22 = actor_class.new('22')
201
- subject.enable(feature, boolean_gate, flipper.boolean).should be_true
202
- subject.enable(feature, group_gate, flipper.group(:admins)).should be_true
203
- subject.enable(feature, actor_gate, flipper.actor(actor_22)).should be_true
204
- subject.enable(feature, actors_gate, flipper.actors(25)).should be_true
205
- subject.enable(feature, random_gate, flipper.random(45)).should be_true
201
+ subject.enable(feature, boolean_gate, flipper.boolean).should eq(true)
202
+ subject.enable(feature, group_gate, flipper.group(:admins)).should eq(true)
203
+ subject.enable(feature, actor_gate, flipper.actor(actor_22)).should eq(true)
204
+ subject.enable(feature, actors_gate, flipper.actors(25)).should eq(true)
205
+ subject.enable(feature, random_gate, flipper.random(45)).should eq(true)
206
206
 
207
- subject.clear(feature).should be_true
207
+ subject.clear(feature).any?.should eq(true)
208
208
 
209
209
  subject.get(feature).should eq({
210
210
  :boolean => nil,
@@ -216,6 +216,6 @@ shared_examples_for 'a flipper adapter' do
216
216
  end
217
217
 
218
218
  it "does not complain clearing a feature that does not exist in adapter" do
219
- subject.clear(flipper[:stats]).should be_true
219
+ subject.clear(flipper[:stats]).any?.should eq(true)
220
220
  end
221
221
  end
@@ -1,3 +1,3 @@
1
1
  module Flipper
2
- VERSION = "0.6.1"
2
+ VERSION = "0.6.2"
3
3
  end
@@ -21,10 +21,10 @@ describe Flipper::Adapters::Memoizable do
21
21
  describe "#memoize=" do
22
22
  it "sets value" do
23
23
  subject.memoize = true
24
- subject.memoizing?.should be_true
24
+ subject.memoizing?.should eq(true)
25
25
 
26
26
  subject.memoize = false
27
- subject.memoizing?.should be_false
27
+ subject.memoizing?.should eq(false)
28
28
  end
29
29
 
30
30
  it "clears the local cache" do
@@ -37,12 +37,12 @@ describe Flipper::Adapters::Memoizable do
37
37
  describe "#memoizing?" do
38
38
  it "returns true if enabled" do
39
39
  subject.memoize = true
40
- subject.memoizing?.should be_true
40
+ subject.memoizing?.should eq(true)
41
41
  end
42
42
 
43
43
  it "returns false if disabled" do
44
44
  subject.memoize = false
45
- subject.memoizing?.should be_false
45
+ subject.memoizing?.should eq(false)
46
46
  end
47
47
  end
48
48
 
@@ -142,7 +142,7 @@ describe Flipper::Feature do
142
142
  event.payload[:feature_name].should eq(:search)
143
143
  event.payload[:operation].should eq(:enabled?)
144
144
  event.payload[:thing].should eq(thing)
145
- event.payload[:result].should be_false
145
+ event.payload[:result].should eq(false)
146
146
  end
147
147
  end
148
148
 
@@ -26,37 +26,37 @@ describe Flipper::Gates::Boolean do
26
26
  describe "#enabled?" do
27
27
  context "for true value" do
28
28
  it "returns true" do
29
- subject.enabled?(true).should be_true
29
+ subject.enabled?(true).should eq(true)
30
30
  end
31
31
  end
32
32
 
33
33
  context "for false value" do
34
34
  it "returns false" do
35
- subject.enabled?(false).should be_false
35
+ subject.enabled?(false).should eq(false)
36
36
  end
37
37
  end
38
38
 
39
39
  context "for nil value" do
40
40
  it "returns false" do
41
- subject.enabled?(nil).should be_false
41
+ subject.enabled?(nil).should eq(false)
42
42
  end
43
43
  end
44
44
 
45
45
  context "for empty string value" do
46
46
  it "returns false" do
47
- subject.enabled?('').should be_false
47
+ subject.enabled?('').should eq(false)
48
48
  end
49
49
  end
50
50
 
51
51
  context "for the string true value" do
52
52
  it "returns true" do
53
- subject.enabled?('true').should be_true
53
+ subject.enabled?('true').should eq(true)
54
54
  end
55
55
  end
56
56
 
57
57
  context "for the string false value" do
58
58
  it "returns false" do
59
- subject.enabled?('false').should be_false
59
+ subject.enabled?('false').should eq(false)
60
60
  end
61
61
  end
62
62
  end
@@ -64,37 +64,37 @@ describe Flipper::Gates::Boolean do
64
64
  describe "#open?" do
65
65
  context "for true value" do
66
66
  it "returns true" do
67
- subject.open?(Object.new, true).should be_true
67
+ subject.open?(Object.new, true).should eq(true)
68
68
  end
69
69
  end
70
70
 
71
71
  context "for false value" do
72
72
  it "returns false" do
73
- subject.open?(Object.new, false).should be_false
73
+ subject.open?(Object.new, false).should eq(false)
74
74
  end
75
75
  end
76
76
 
77
77
  context "for nil value" do
78
78
  it "returns false" do
79
- subject.open?(Object.new, nil).should be_false
79
+ subject.open?(Object.new, nil).should eq(false)
80
80
  end
81
81
  end
82
82
 
83
83
  context "for string true value" do
84
84
  it "returns true" do
85
- subject.open?(Object.new, 'true').should be_true
85
+ subject.open?(Object.new, 'true').should eq(true)
86
86
  end
87
87
  end
88
88
 
89
89
  context "for string false value" do
90
90
  it "returns false" do
91
- subject.open?(Object.new, 'false').should be_false
91
+ subject.open?(Object.new, 'false').should eq(false)
92
92
  end
93
93
  end
94
94
 
95
95
  context "for an empty string value" do
96
96
  it "returns false" do
97
- subject.open?(Object.new, '').should be_false
97
+ subject.open?(Object.new, '').should eq(false)
98
98
  end
99
99
  end
100
100
  end
@@ -50,7 +50,7 @@ describe Flipper::Gates::Group do
50
50
 
51
51
  it "ignores group" do
52
52
  thing = Struct.new(:flipper_id).new('5')
53
- subject.open?(thing, Set[:newbs, :staff]).should be_true
53
+ subject.open?(thing, Set[:newbs, :staff]).should eq(true)
54
54
  end
55
55
  end
56
56
 
@@ -24,7 +24,7 @@ describe Flipper::Gates::PercentageOfRandom do
24
24
  event.payload[:feature_name].should eq(:search)
25
25
 
26
26
  # random so don't test value
27
- event.payload.key?(:result).should be_true
27
+ event.payload.key?(:result).should eq(true)
28
28
  event.payload[:result].should_not be_nil
29
29
  end
30
30
  end
@@ -7,7 +7,7 @@ describe Flipper::Instrumenters::Noop do
7
7
  it "yields block" do
8
8
  yielded = false
9
9
  described_class.instrument(:foo) { yielded = true }
10
- yielded.should be_true
10
+ yielded.should eq(true)
11
11
  end
12
12
  end
13
13
 
@@ -15,7 +15,7 @@ describe Flipper::Instrumenters::Noop do
15
15
  it "yields block" do
16
16
  yielded = false
17
17
  described_class.instrument(:foo, {:pay => :load}) { yielded = true }
18
- yielded.should be_true
18
+ yielded.should eq(true)
19
19
  end
20
20
  end
21
21
  end
@@ -27,7 +27,7 @@ describe Flipper::Middleware::Memoizer do
27
27
  }
28
28
  middleware = described_class.new app, flipper
29
29
  middleware.call({})
30
- called.should be_true
30
+ called.should eq(true)
31
31
  end
32
32
 
33
33
  it "disables local cache after body close" do
@@ -35,9 +35,9 @@ describe Flipper::Middleware::Memoizer do
35
35
  middleware = described_class.new app, flipper
36
36
  body = middleware.call({}).last
37
37
 
38
- flipper.adapter.memoizing?.should be_true
38
+ flipper.adapter.memoizing?.should eq(true)
39
39
  body.close
40
- flipper.adapter.memoizing?.should be_false
40
+ flipper.adapter.memoizing?.should eq(false)
41
41
  end
42
42
 
43
43
  it "clears local cache after body close" do
@@ -52,6 +52,20 @@ describe Flipper::Registry do
52
52
  end
53
53
  end
54
54
 
55
+ describe "#key?" do
56
+ before do
57
+ source[:admins] = "admins"
58
+ end
59
+
60
+ it "returns true if the key exists" do
61
+ subject.key?(:admins).should eq true
62
+ end
63
+
64
+ it "returns false if the key does not exists" do
65
+ subject.key?(:unknown_key).should eq false
66
+ end
67
+ end
68
+
55
69
  describe "#each" do
56
70
  before do
57
71
  source[:admins] = 'admins'
@@ -25,12 +25,12 @@ describe Flipper::Types::Actor do
25
25
  it "returns true if actor" do
26
26
  thing = thing_class.new('1')
27
27
  actor = described_class.new(thing)
28
- described_class.wrappable?(actor).should be_true
28
+ described_class.wrappable?(actor).should eq(true)
29
29
  end
30
30
 
31
31
  it "returns true if responds to id" do
32
32
  thing = thing_class.new(10)
33
- described_class.wrappable?(thing).should be_true
33
+ described_class.wrappable?(thing).should eq(true)
34
34
  end
35
35
  end
36
36
 
@@ -80,26 +80,26 @@ describe Flipper::Types::Actor do
80
80
  it "proxies everything to thing" do
81
81
  thing = thing_class.new(10)
82
82
  actor = described_class.new(thing)
83
- actor.admin?.should be_true
83
+ actor.admin?.should eq(true)
84
84
  end
85
85
 
86
86
  describe "#respond_to?" do
87
87
  it "returns true if responds to method" do
88
88
  thing = thing_class.new('1')
89
89
  actor = described_class.new(thing)
90
- actor.respond_to?(:value).should be_true
90
+ actor.respond_to?(:value).should eq(true)
91
91
  end
92
92
 
93
93
  it "returns true if thing responds to method" do
94
94
  thing = thing_class.new(10)
95
95
  actor = described_class.new(thing)
96
- actor.respond_to?(:admin?).should be_true
96
+ actor.respond_to?(:admin?).should eq(true)
97
97
  end
98
98
 
99
99
  it "returns false if does not respond to method and thing does not respond to method" do
100
100
  thing = thing_class.new(10)
101
101
  actor = described_class.new(thing)
102
- actor.respond_to?(:frankenstein).should be_false
102
+ actor.respond_to?(:frankenstein).should eq(false)
103
103
  end
104
104
  end
105
105
  end
@@ -22,11 +22,11 @@ describe Flipper::Types::Group do
22
22
  let(:non_admin_actor) { double('Actor', :admin? => false) }
23
23
 
24
24
  it "returns true if block matches" do
25
- subject.match?(admin_actor).should be_true
25
+ subject.match?(admin_actor).should eq(true)
26
26
  end
27
27
 
28
28
  it "returns false if block does not match" do
29
- subject.match?(non_admin_actor).should be_false
29
+ subject.match?(non_admin_actor).should eq(false)
30
30
  end
31
31
  end
32
32
  end
@@ -9,19 +9,19 @@ describe Flipper::Types::Percentage do
9
9
 
10
10
  describe "#eql?" do
11
11
  it "returns true for same class and value" do
12
- subject.eql?(described_class.new(subject.value)).should be_true
12
+ subject.eql?(described_class.new(subject.value)).should eq(true)
13
13
  end
14
14
 
15
15
  it "returns false for different value" do
16
- subject.eql?(described_class.new(subject.value + 1)).should be_false
16
+ subject.eql?(described_class.new(subject.value + 1)).should eq(false)
17
17
  end
18
18
 
19
19
  it "returns false for different class" do
20
- subject.eql?(Object.new).should be_false
20
+ subject.eql?(Object.new).should eq(false)
21
21
  end
22
22
 
23
23
  it "is aliased to ==" do
24
- (subject == described_class.new(subject.value)).should be_true
24
+ (subject == described_class.new(subject.value)).should eq(true)
25
25
  end
26
26
  end
27
27
  end
@@ -8,6 +8,17 @@ describe Flipper do
8
8
  end
9
9
  end
10
10
 
11
+ describe ".group_exists" do
12
+ it "returns true if the group is already created" do
13
+ group = Flipper.register('admins') { |actor| actor.admin? }
14
+ Flipper.group_exists?(:admins).should eq(true)
15
+ end
16
+
17
+ it "returns false when the group is not yet registered" do
18
+ Flipper.group_exists?(:non_existing).should eq(false)
19
+ end
20
+ end
21
+
11
22
  describe ".groups" do
12
23
  it "returns a registry instance" do
13
24
  Flipper.groups.should be_instance_of(Flipper::Registry)
@@ -35,11 +35,11 @@ describe Flipper do
35
35
  end
36
36
 
37
37
  it "returns true" do
38
- @result.should be_true
38
+ @result.should eq(true)
39
39
  end
40
40
 
41
41
  it "enables feature for all" do
42
- feature.enabled?.should be_true
42
+ feature.enabled?.should eq(true)
43
43
  end
44
44
 
45
45
  it "adds feature to set of features" do
@@ -53,27 +53,27 @@ describe Flipper do
53
53
  end
54
54
 
55
55
  it "returns true" do
56
- @result.should be_true
56
+ @result.should eq(true)
57
57
  end
58
58
 
59
59
  it "enables feature for non flipper thing in group" do
60
- feature.enabled?(admin_thing).should be_true
60
+ feature.enabled?(admin_thing).should eq(true)
61
61
  end
62
62
 
63
63
  it "does not enable feature for non flipper thing in other group" do
64
- feature.enabled?(dev_thing).should be_false
64
+ feature.enabled?(dev_thing).should eq(false)
65
65
  end
66
66
 
67
67
  it "enables feature for flipper actor in group" do
68
- feature.enabled?(flipper.actor(admin_thing)).should be_true
68
+ feature.enabled?(flipper.actor(admin_thing)).should eq(true)
69
69
  end
70
70
 
71
71
  it "does not enable for flipper actor not in group" do
72
- feature.enabled?(flipper.actor(dev_thing)).should be_false
72
+ feature.enabled?(flipper.actor(dev_thing)).should eq(false)
73
73
  end
74
74
 
75
75
  it "does not enable feature for all" do
76
- feature.enabled?.should be_false
76
+ feature.enabled?.should eq(false)
77
77
  end
78
78
 
79
79
  it "adds feature to set of features" do
@@ -87,15 +87,15 @@ describe Flipper do
87
87
  end
88
88
 
89
89
  it "returns true" do
90
- @result.should be_true
90
+ @result.should eq(true)
91
91
  end
92
92
 
93
93
  it "enables feature for actor" do
94
- feature.enabled?(pitt).should be_true
94
+ feature.enabled?(pitt).should eq(true)
95
95
  end
96
96
 
97
97
  it "does not enable feature for other actors" do
98
- feature.enabled?(clooney).should be_false
98
+ feature.enabled?(clooney).should eq(false)
99
99
  end
100
100
 
101
101
  it "adds feature to set of features" do
@@ -109,7 +109,7 @@ describe Flipper do
109
109
  end
110
110
 
111
111
  it "returns true" do
112
- @result.should be_true
112
+ @result.should eq(true)
113
113
  end
114
114
 
115
115
  it "enables feature for actor within percentage" do
@@ -133,17 +133,17 @@ describe Flipper do
133
133
  end
134
134
 
135
135
  it "returns true" do
136
- @result.should be_true
136
+ @result.should eq(true)
137
137
  end
138
138
 
139
139
  it "enables feature for time within percentage" do
140
140
  @gate.stub(:rand => 0.04)
141
- feature.enabled?.should be_true
141
+ feature.enabled?.should eq(true)
142
142
  end
143
143
 
144
144
  it "does not enable feature for time not within percentage" do
145
145
  @gate.stub(:rand => 0.10)
146
- feature.enabled?.should be_false
146
+ feature.enabled?.should eq(false)
147
147
  end
148
148
 
149
149
  it "adds feature to set of features" do
@@ -176,19 +176,19 @@ describe Flipper do
176
176
  end
177
177
 
178
178
  it "returns true" do
179
- @result.should be_true
179
+ @result.should be_truthy
180
180
  end
181
181
 
182
182
  it "disables feature" do
183
- feature.enabled?.should be_false
183
+ feature.enabled?.should eq(false)
184
184
  end
185
185
 
186
186
  it "disables for individual actor" do
187
- feature.enabled?(pitt).should be_false
187
+ feature.enabled?(pitt).should eq(false)
188
188
  end
189
189
 
190
190
  it "disables actor in group" do
191
- feature.enabled?(admin_thing).should be_false
191
+ feature.enabled?(admin_thing).should eq(false)
192
192
  end
193
193
 
194
194
  it "disables actor in percentage of actors" do
@@ -201,7 +201,7 @@ describe Flipper do
201
201
  end
202
202
 
203
203
  it "disables percentage of random" do
204
- feature.enabled?(pitt).should be_false
204
+ feature.enabled?(pitt).should eq(false)
205
205
  end
206
206
 
207
207
  it "adds feature to set of features" do
@@ -217,23 +217,23 @@ describe Flipper do
217
217
  end
218
218
 
219
219
  it "returns true" do
220
- @result.should be_true
220
+ @result.should eq(true)
221
221
  end
222
222
 
223
223
  it "disables the feature for non flipper thing in the group" do
224
- feature.enabled?(admin_thing).should be_false
224
+ feature.enabled?(admin_thing).should eq(false)
225
225
  end
226
226
 
227
227
  it "does not disable feature for non flipper thing in other groups" do
228
- feature.enabled?(dev_thing).should be_true
228
+ feature.enabled?(dev_thing).should eq(true)
229
229
  end
230
230
 
231
231
  it "disables feature for flipper actor in group" do
232
- feature.enabled?(flipper.actor(admin_thing)).should be_false
232
+ feature.enabled?(flipper.actor(admin_thing)).should eq(false)
233
233
  end
234
234
 
235
235
  it "does not disable feature for flipper actor in other groups" do
236
- feature.enabled?(flipper.actor(dev_thing)).should be_true
236
+ feature.enabled?(flipper.actor(dev_thing)).should eq(true)
237
237
  end
238
238
 
239
239
  it "adds feature to set of features" do
@@ -249,15 +249,15 @@ describe Flipper do
249
249
  end
250
250
 
251
251
  it "returns true" do
252
- @result.should be_true
252
+ @result.should eq(true)
253
253
  end
254
254
 
255
255
  it "disables feature for actor" do
256
- feature.enabled?(pitt).should be_false
256
+ feature.enabled?(pitt).should eq(false)
257
257
  end
258
258
 
259
259
  it "does not disable feature for other actors" do
260
- feature.enabled?(clooney).should be_true
260
+ feature.enabled?(clooney).should eq(true)
261
261
  end
262
262
 
263
263
  it "adds feature to set of features" do
@@ -271,7 +271,7 @@ describe Flipper do
271
271
  end
272
272
 
273
273
  it "returns true" do
274
- @result.should be_true
274
+ @result.should eq(true)
275
275
  end
276
276
 
277
277
  it "disables feature" do
@@ -295,17 +295,17 @@ describe Flipper do
295
295
  end
296
296
 
297
297
  it "returns true" do
298
- @result.should be_true
298
+ @result.should eq(true)
299
299
  end
300
300
 
301
301
  it "disables feature for time within percentage" do
302
302
  @gate.stub(:rand => 0.04)
303
- feature.enabled?.should be_false
303
+ feature.enabled?.should eq(false)
304
304
  end
305
305
 
306
306
  it "disables feature for time not within percentage" do
307
307
  @gate.stub(:rand => 0.10)
308
- feature.enabled?.should be_false
308
+ feature.enabled?.should eq(false)
309
309
  end
310
310
 
311
311
  it "adds feature to set of features" do
@@ -326,7 +326,7 @@ describe Flipper do
326
326
  describe "#enabled?" do
327
327
  context "with no arguments" do
328
328
  it "defaults to false" do
329
- feature.enabled?.should be_false
329
+ feature.enabled?.should eq(false)
330
330
  end
331
331
  end
332
332
 
@@ -336,7 +336,7 @@ describe Flipper do
336
336
  end
337
337
 
338
338
  it "returns true" do
339
- feature.enabled?.should be_true
339
+ feature.enabled?.should eq(true)
340
340
  end
341
341
  end
342
342
 
@@ -346,15 +346,15 @@ describe Flipper do
346
346
  end
347
347
 
348
348
  it "returns true" do
349
- feature.enabled?(flipper.actor(admin_thing)).should be_true
350
- feature.enabled?(admin_thing).should be_true
349
+ feature.enabled?(flipper.actor(admin_thing)).should eq(true)
350
+ feature.enabled?(admin_thing).should eq(true)
351
351
  end
352
352
  end
353
353
 
354
354
  context "for actor in disabled group" do
355
355
  it "returns false" do
356
- feature.enabled?(flipper.actor(dev_thing)).should be_false
357
- feature.enabled?(dev_thing).should be_false
356
+ feature.enabled?(flipper.actor(dev_thing)).should eq(false)
357
+ feature.enabled?(dev_thing).should eq(false)
358
358
  end
359
359
  end
360
360
 
@@ -364,18 +364,18 @@ describe Flipper do
364
364
  end
365
365
 
366
366
  it "returns true" do
367
- feature.enabled?(pitt).should be_true
367
+ feature.enabled?(pitt).should eq(true)
368
368
  end
369
369
  end
370
370
 
371
371
  context "for not enabled actor" do
372
372
  it "returns false" do
373
- feature.enabled?(clooney).should be_false
373
+ feature.enabled?(clooney).should eq(false)
374
374
  end
375
375
 
376
376
  it "returns true if boolean enabled" do
377
377
  feature.enable
378
- feature.enabled?(clooney).should be_true
378
+ feature.enabled?(clooney).should eq(true)
379
379
  end
380
380
  end
381
381
 
@@ -389,10 +389,10 @@ describe Flipper do
389
389
  end
390
390
 
391
391
  it "returns true" do
392
- feature.enabled?.should be_true
393
- feature.enabled?(nil).should be_true
394
- feature.enabled?(pitt).should be_true
395
- feature.enabled?(admin_thing).should be_true
392
+ feature.enabled?.should eq(true)
393
+ feature.enabled?(nil).should eq(true)
394
+ feature.enabled?(pitt).should eq(true)
395
+ feature.enabled?(admin_thing).should eq(true)
396
396
  end
397
397
  end
398
398
 
@@ -406,18 +406,18 @@ describe Flipper do
406
406
  end
407
407
 
408
408
  it "returns false" do
409
- feature.enabled?.should be_false
410
- feature.enabled?(nil).should be_false
411
- feature.enabled?(pitt).should be_false
412
- feature.enabled?(admin_thing).should be_false
409
+ feature.enabled?.should eq(false)
410
+ feature.enabled?(nil).should eq(false)
411
+ feature.enabled?(pitt).should eq(false)
412
+ feature.enabled?(admin_thing).should eq(false)
413
413
  end
414
414
 
415
415
  it "returns true if boolean enabled" do
416
416
  feature.enable
417
- feature.enabled?.should be_true
418
- feature.enabled?(nil).should be_true
419
- feature.enabled?(pitt).should be_true
420
- feature.enabled?(admin_thing).should be_true
417
+ feature.enabled?.should eq(true)
418
+ feature.enabled?(nil).should eq(true)
419
+ feature.enabled?(pitt).should eq(true)
420
+ feature.enabled?(admin_thing).should eq(true)
421
421
  end
422
422
  end
423
423
 
@@ -427,17 +427,17 @@ describe Flipper do
427
427
  end
428
428
 
429
429
  it "returns true if in enabled group" do
430
- feature.enabled?(admin_thing).should be_true
430
+ feature.enabled?(admin_thing).should eq(true)
431
431
  end
432
432
 
433
433
  it "returns false if not in enabled group" do
434
- feature.enabled?(dev_thing).should be_false
434
+ feature.enabled?(dev_thing).should eq(false)
435
435
  end
436
436
 
437
437
  it "returns true if boolean enabled" do
438
438
  feature.enable
439
- feature.enabled?(admin_thing).should be_true
440
- feature.enabled?(dev_thing).should be_true
439
+ feature.enabled?(admin_thing).should eq(true)
440
+ feature.enabled?(dev_thing).should eq(true)
441
441
  end
442
442
  end
443
443
  end
@@ -451,11 +451,11 @@ describe Flipper do
451
451
  end
452
452
 
453
453
  it "enables feature for object in enabled group" do
454
- feature.enabled?(admin_thing).should be_true
454
+ feature.enabled?(admin_thing).should eq(true)
455
455
  end
456
456
 
457
457
  it "does not enable feature for object in not enabled group" do
458
- feature.enabled?(dev_thing).should be_false
458
+ feature.enabled?(dev_thing).should eq(false)
459
459
  end
460
460
  end
461
461
  end
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flipper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
5
- prerelease:
4
+ version: 0.6.2
6
5
  platform: ruby
7
6
  authors:
8
7
  - John Nunemaker
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-04-27 00:00:00.000000000 Z
11
+ date: 2014-10-07 00:00:00.000000000 Z
13
12
  dependencies: []
14
13
  description: Feature flipper for any adapter
15
14
  email:
@@ -18,9 +17,9 @@ executables: []
18
17
  extensions: []
19
18
  extra_rdoc_files: []
20
19
  files:
21
- - .gitignore
22
- - .rspec
23
- - .travis.yml
20
+ - ".gitignore"
21
+ - ".rspec"
22
+ - ".travis.yml"
24
23
  - Changelog.md
25
24
  - Gemfile
26
25
  - Guardfile
@@ -103,33 +102,26 @@ files:
103
102
  - spec/support/fake_udp_socket.rb
104
103
  homepage: http://jnunemaker.github.com/flipper
105
104
  licenses: []
105
+ metadata: {}
106
106
  post_install_message:
107
107
  rdoc_options: []
108
108
  require_paths:
109
109
  - lib
110
110
  required_ruby_version: !ruby/object:Gem::Requirement
111
- none: false
112
111
  requirements:
113
- - - ! '>='
112
+ - - ">="
114
113
  - !ruby/object:Gem::Version
115
114
  version: '0'
116
- segments:
117
- - 0
118
- hash: -2625440176401499604
119
115
  required_rubygems_version: !ruby/object:Gem::Requirement
120
- none: false
121
116
  requirements:
122
- - - ! '>='
117
+ - - ">="
123
118
  - !ruby/object:Gem::Version
124
119
  version: '0'
125
- segments:
126
- - 0
127
- hash: -2625440176401499604
128
120
  requirements: []
129
121
  rubyforge_project:
130
- rubygems_version: 1.8.23
122
+ rubygems_version: 2.2.2
131
123
  signing_key:
132
- specification_version: 3
124
+ specification_version: 4
133
125
  summary: Feature flipper for any adapter
134
126
  test_files:
135
127
  - spec/flipper/adapters/instrumented_spec.rb