flipper 0.7.1 → 0.7.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +4 -0
  3. data/Gemfile +1 -1
  4. data/docs/Adapters.md +2 -1
  5. data/examples/enabled_for_actor.rb +43 -0
  6. data/lib/flipper/spec/shared_adapter_specs.rb +71 -71
  7. data/lib/flipper/version.rb +1 -1
  8. data/spec/flipper/adapters/instrumented_spec.rb +44 -44
  9. data/spec/flipper/adapters/memoizable_spec.rb +21 -21
  10. data/spec/flipper/adapters/memory_spec.rb +1 -1
  11. data/spec/flipper/adapters/operation_logger_spec.rb +11 -11
  12. data/spec/flipper/adapters/pstore_spec.rb +2 -2
  13. data/spec/flipper/dsl_spec.rb +34 -34
  14. data/spec/flipper/feature_spec.rb +167 -167
  15. data/spec/flipper/gate_spec.rb +5 -5
  16. data/spec/flipper/gate_values_spec.rb +17 -17
  17. data/spec/flipper/gates/actor_spec.rb +1 -1
  18. data/spec/flipper/gates/boolean_spec.rb +13 -13
  19. data/spec/flipper/gates/group_spec.rb +6 -6
  20. data/spec/flipper/gates/percentage_of_actors_spec.rb +3 -3
  21. data/spec/flipper/gates/percentage_of_time_spec.rb +1 -1
  22. data/spec/flipper/instrumentation/log_subscriber_spec.rb +10 -10
  23. data/spec/flipper/instrumentation/metriks_subscriber_spec.rb +14 -14
  24. data/spec/flipper/instrumentation/statsd_subscriber_spec.rb +5 -3
  25. data/spec/flipper/instrumenters/memory_spec.rb +4 -4
  26. data/spec/flipper/instrumenters/noop_spec.rb +3 -3
  27. data/spec/flipper/middleware/memoizer_spec.rb +8 -8
  28. data/spec/flipper/registry_spec.rb +17 -17
  29. data/spec/flipper/typecast_spec.rb +4 -4
  30. data/spec/flipper/types/actor_spec.rb +14 -14
  31. data/spec/flipper/types/boolean_spec.rb +5 -5
  32. data/spec/flipper/types/group_spec.rb +8 -8
  33. data/spec/flipper/types/percentage_of_actors_spec.rb +1 -1
  34. data/spec/flipper/types/percentage_of_time_spec.rb +1 -1
  35. data/spec/flipper/types/percentage_spec.rb +8 -8
  36. data/spec/flipper_spec.rb +19 -19
  37. data/spec/helper.rb +14 -14
  38. data/spec/integration_spec.rb +80 -80
  39. metadata +4 -3
@@ -1,13 +1,13 @@
1
1
  require 'helper'
2
2
  require 'flipper/instrumenters/noop'
3
3
 
4
- describe Flipper::Instrumenters::Noop do
4
+ RSpec.describe Flipper::Instrumenters::Noop do
5
5
  describe ".instrument" do
6
6
  context "with name" do
7
7
  it "yields block" do
8
8
  yielded = false
9
9
  described_class.instrument(:foo) { yielded = true }
10
- yielded.should eq(true)
10
+ expect(yielded).to 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 eq(true)
18
+ expect(yielded).to eq(true)
19
19
  end
20
20
  end
21
21
  end
@@ -4,7 +4,7 @@ require 'flipper/middleware/memoizer'
4
4
  require 'flipper/adapters/operation_logger'
5
5
  require 'flipper/adapters/memory'
6
6
 
7
- describe Flipper::Middleware::Memoizer do
7
+ RSpec.describe Flipper::Middleware::Memoizer do
8
8
  include Rack::Test::Methods
9
9
 
10
10
  let(:memory_adapter) { Flipper::Adapters::Memory.new }
@@ -26,7 +26,7 @@ describe Flipper::Middleware::Memoizer do
26
26
  }
27
27
  middleware = described_class.new app, flipper
28
28
  middleware.call({})
29
- called.should eq(true)
29
+ expect(called).to eq(true)
30
30
  end
31
31
 
32
32
  it "disables local cache after body close" do
@@ -34,9 +34,9 @@ describe Flipper::Middleware::Memoizer do
34
34
  middleware = described_class.new app, flipper
35
35
  body = middleware.call({}).last
36
36
 
37
- flipper.adapter.memoizing?.should eq(true)
37
+ expect(flipper.adapter.memoizing?).to eq(true)
38
38
  body.close
39
- flipper.adapter.memoizing?.should eq(false)
39
+ expect(flipper.adapter.memoizing?).to eq(false)
40
40
  end
41
41
 
42
42
  it "clears local cache after body close" do
@@ -46,19 +46,19 @@ describe Flipper::Middleware::Memoizer do
46
46
 
47
47
  flipper.adapter.cache['hello'] = 'world'
48
48
  body.close
49
- flipper.adapter.cache.should be_empty
49
+ expect(flipper.adapter.cache).to be_empty
50
50
  end
51
51
 
52
52
  it "clears the local cache with a successful request" do
53
53
  flipper.adapter.cache['hello'] = 'world'
54
54
  get '/'
55
- flipper.adapter.cache.should be_empty
55
+ expect(flipper.adapter.cache).to be_empty
56
56
  end
57
57
 
58
58
  it "clears the local cache even when the request raises an error" do
59
59
  flipper.adapter.cache['hello'] = 'world'
60
60
  get '/fail' rescue nil
61
- flipper.adapter.cache.should be_empty
61
+ expect(flipper.adapter.cache).to be_empty
62
62
  end
63
63
 
64
64
  it "caches getting a feature for duration of request" do
@@ -80,7 +80,7 @@ describe Flipper::Middleware::Memoizer do
80
80
  middleware = described_class.new app, flipper
81
81
  middleware.call({})
82
82
 
83
- adapter.count(:get).should be(1)
83
+ expect(adapter.count(:get)).to be(1)
84
84
  end
85
85
  end
86
86
 
@@ -1,7 +1,7 @@
1
1
  require 'helper'
2
2
  require 'flipper/registry'
3
3
 
4
- describe Flipper::Registry do
4
+ RSpec.describe Flipper::Registry do
5
5
  subject { Flipper::Registry.new(source) }
6
6
 
7
7
  let(:source) { {} }
@@ -10,13 +10,13 @@ describe Flipper::Registry do
10
10
  it "adds to source" do
11
11
  value = 'thing'
12
12
  subject.add(:admins, value)
13
- source[:admins].should eq(value)
13
+ expect(source[:admins]).to eq(value)
14
14
  end
15
15
 
16
16
  it "converts key to symbol" do
17
17
  value = 'thing'
18
18
  subject.add('admins', value)
19
- source[:admins].should eq(value)
19
+ expect(source[:admins]).to eq(value)
20
20
  end
21
21
 
22
22
  it "raises exception if key already registered" do
@@ -35,11 +35,11 @@ describe Flipper::Registry do
35
35
  end
36
36
 
37
37
  it "returns value" do
38
- subject.get(:admins).should eq('thing')
38
+ expect(subject.get(:admins)).to eq('thing')
39
39
  end
40
40
 
41
41
  it "returns value if given string key" do
42
- subject.get('admins').should eq('thing')
42
+ expect(subject.get('admins')).to eq('thing')
43
43
  end
44
44
  end
45
45
 
@@ -58,11 +58,11 @@ describe Flipper::Registry do
58
58
  end
59
59
 
60
60
  it "returns true if the key exists" do
61
- subject.key?(:admins).should eq true
61
+ expect(subject.key?(:admins)).to eq true
62
62
  end
63
63
 
64
64
  it "returns false if the key does not exists" do
65
- subject.key?(:unknown_key).should eq false
65
+ expect(subject.key?(:unknown_key)).to eq false
66
66
  end
67
67
  end
68
68
 
@@ -77,10 +77,10 @@ describe Flipper::Registry do
77
77
  subject.each do |key, value|
78
78
  results[key] = value
79
79
  end
80
- results.should eq({
81
- :admins => 'admins',
82
- :devs => 'devs',
83
- })
80
+ expect(results).to eq({
81
+ :admins => 'admins',
82
+ :devs => 'devs',
83
+ })
84
84
  end
85
85
  end
86
86
 
@@ -91,12 +91,12 @@ describe Flipper::Registry do
91
91
  end
92
92
 
93
93
  it "returns the keys" do
94
- subject.keys.map(&:to_s).sort.should eq(['admins', 'devs'])
94
+ expect(subject.keys.map(&:to_s).sort).to eq(['admins', 'devs'])
95
95
  end
96
96
 
97
97
  it "returns the keys as symbols" do
98
98
  subject.keys.each do |key|
99
- key.should be_instance_of(Symbol)
99
+ expect(key).to be_instance_of(Symbol)
100
100
  end
101
101
  end
102
102
  end
@@ -108,7 +108,7 @@ describe Flipper::Registry do
108
108
  end
109
109
 
110
110
  it "returns the values" do
111
- subject.values.map(&:to_s).sort.should eq(['admins', 'devs'])
111
+ expect(subject.values.map(&:to_s).sort).to eq(['admins', 'devs'])
112
112
  end
113
113
  end
114
114
 
@@ -127,8 +127,8 @@ describe Flipper::Registry do
127
127
  values << value
128
128
  end
129
129
 
130
- keys.map(&:to_s).sort.should eq(['admins', 'devs'])
131
- values.sort.should eq(['admins', 'devs'])
130
+ expect(keys.map(&:to_s).sort).to eq(['admins', 'devs'])
131
+ expect(values.sort).to eq(['admins', 'devs'])
132
132
  end
133
133
  end
134
134
 
@@ -139,7 +139,7 @@ describe Flipper::Registry do
139
139
 
140
140
  it "clears the source" do
141
141
  subject.clear
142
- source.should be_empty
142
+ expect(source).to be_empty
143
143
  end
144
144
  end
145
145
  end
@@ -1,7 +1,7 @@
1
1
  require 'helper'
2
2
  require 'flipper/typecast'
3
3
 
4
- describe Flipper::Typecast do
4
+ RSpec.describe Flipper::Typecast do
5
5
  {
6
6
  nil => false,
7
7
  "" => false,
@@ -16,7 +16,7 @@ describe Flipper::Typecast do
16
16
  }.each do |value, expected|
17
17
  context "#to_boolean for #{value.inspect}" do
18
18
  it "returns #{expected}" do
19
- described_class.to_boolean(value).should be(expected)
19
+ expect(described_class.to_boolean(value)).to be(expected)
20
20
  end
21
21
  end
22
22
  end
@@ -31,7 +31,7 @@ describe Flipper::Typecast do
31
31
  }.each do |value, expected|
32
32
  context "#to_integer for #{value.inspect}" do
33
33
  it "returns #{expected}" do
34
- described_class.to_integer(value).should be(expected)
34
+ expect(described_class.to_integer(value)).to be(expected)
35
35
  end
36
36
  end
37
37
  end
@@ -44,7 +44,7 @@ describe Flipper::Typecast do
44
44
  }.each do |value, expected|
45
45
  context "#to_set for #{value.inspect}" do
46
46
  it "returns #{expected}" do
47
- described_class.to_set(value).should eq(expected)
47
+ expect(described_class.to_set(value)).to eq(expected)
48
48
  end
49
49
  end
50
50
  end
@@ -1,7 +1,7 @@
1
1
  require 'helper'
2
2
  require 'flipper/types/actor'
3
3
 
4
- describe Flipper::Types::Actor do
4
+ RSpec.describe Flipper::Types::Actor do
5
5
  subject {
6
6
  thing = thing_class.new('2')
7
7
  described_class.new(thing)
@@ -25,16 +25,16 @@ 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 eq(true)
28
+ expect(described_class.wrappable?(actor)).to eq(true)
29
29
  end
30
30
 
31
31
  it "returns true if responds to flipper_id" do
32
32
  thing = thing_class.new(10)
33
- described_class.wrappable?(thing).should eq(true)
33
+ expect(described_class.wrappable?(thing)).to eq(true)
34
34
  end
35
35
 
36
36
  it "returns false if nil" do
37
- described_class.wrappable?(nil).should be(false)
37
+ expect(described_class.wrappable?(nil)).to be(false)
38
38
  end
39
39
  end
40
40
 
@@ -42,8 +42,8 @@ describe Flipper::Types::Actor do
42
42
  context "for actor" do
43
43
  it "returns actor" do
44
44
  actor = described_class.wrap(subject)
45
- actor.should be_instance_of(described_class)
46
- actor.should be(subject)
45
+ expect(actor).to be_instance_of(described_class)
46
+ expect(actor).to be(subject)
47
47
  end
48
48
  end
49
49
 
@@ -51,7 +51,7 @@ describe Flipper::Types::Actor do
51
51
  it "returns actor" do
52
52
  thing = thing_class.new('1')
53
53
  actor = described_class.wrap(thing)
54
- actor.should be_instance_of(described_class)
54
+ expect(actor).to be_instance_of(described_class)
55
55
  end
56
56
  end
57
57
  end
@@ -59,7 +59,7 @@ describe Flipper::Types::Actor do
59
59
  it "initializes with thing that responds to id" do
60
60
  thing = thing_class.new('1')
61
61
  actor = described_class.new(thing)
62
- actor.value.should eq('1')
62
+ expect(actor.value).to eq('1')
63
63
  end
64
64
 
65
65
  it "raises error when initialized with nil" do
@@ -78,38 +78,38 @@ describe Flipper::Types::Actor do
78
78
  it "converts id to string" do
79
79
  thing = thing_class.new(2)
80
80
  actor = described_class.new(thing)
81
- actor.value.should eq('2')
81
+ expect(actor.value).to eq('2')
82
82
  end
83
83
 
84
84
  it "proxies everything to thing" do
85
85
  thing = thing_class.new(10)
86
86
  actor = described_class.new(thing)
87
- actor.admin?.should eq(true)
87
+ expect(actor.admin?).to eq(true)
88
88
  end
89
89
 
90
90
  it "exposes thing" do
91
91
  thing = thing_class.new(10)
92
92
  actor = described_class.new(thing)
93
- actor.thing.should be(thing)
93
+ expect(actor.thing).to be(thing)
94
94
  end
95
95
 
96
96
  describe "#respond_to?" do
97
97
  it "returns true if responds to method" do
98
98
  thing = thing_class.new('1')
99
99
  actor = described_class.new(thing)
100
- actor.respond_to?(:value).should eq(true)
100
+ expect(actor.respond_to?(:value)).to eq(true)
101
101
  end
102
102
 
103
103
  it "returns true if thing responds to method" do
104
104
  thing = thing_class.new(10)
105
105
  actor = described_class.new(thing)
106
- actor.respond_to?(:admin?).should eq(true)
106
+ expect(actor.respond_to?(:admin?)).to eq(true)
107
107
  end
108
108
 
109
109
  it "returns false if does not respond to method and thing does not respond to method" do
110
110
  thing = thing_class.new(10)
111
111
  actor = described_class.new(thing)
112
- actor.respond_to?(:frankenstein).should eq(false)
112
+ expect(actor.respond_to?(:frankenstein)).to eq(false)
113
113
  end
114
114
  end
115
115
  end
@@ -1,24 +1,24 @@
1
1
  require 'helper'
2
2
  require 'flipper/types/boolean'
3
3
 
4
- describe Flipper::Types::Boolean do
4
+ RSpec.describe Flipper::Types::Boolean do
5
5
  it "defaults value to true" do
6
6
  boolean = Flipper::Types::Boolean.new
7
- boolean.value.should be(true)
7
+ expect(boolean.value).to be(true)
8
8
  end
9
9
 
10
10
  it "allows overriding default value" do
11
11
  boolean = Flipper::Types::Boolean.new(false)
12
- boolean.value.should be(false)
12
+ expect(boolean.value).to be(false)
13
13
  end
14
14
 
15
15
  it "returns true for nil value" do
16
16
  boolean = Flipper::Types::Boolean.new(nil)
17
- boolean.value.should be(true)
17
+ expect(boolean.value).to be(true)
18
18
  end
19
19
 
20
20
  it "typecasts value" do
21
21
  boolean = Flipper::Types::Boolean.new(1)
22
- boolean.value.should be(true)
22
+ expect(boolean.value).to be(true)
23
23
  end
24
24
  end
@@ -1,7 +1,7 @@
1
1
  require 'helper'
2
2
  require 'flipper/types/group'
3
3
 
4
- describe Flipper::Types::Group do
4
+ RSpec.describe Flipper::Types::Group do
5
5
  subject do
6
6
  Flipper.register(:admins) { |actor| actor.admin? }
7
7
  end
@@ -9,31 +9,31 @@ describe Flipper::Types::Group do
9
9
  describe ".wrap" do
10
10
  context "with group instance" do
11
11
  it "returns group instance" do
12
- described_class.wrap(subject).should eq(subject)
12
+ expect(described_class.wrap(subject)).to eq(subject)
13
13
  end
14
14
  end
15
15
 
16
16
  context "with Symbol group name" do
17
17
  it "returns group instance" do
18
- described_class.wrap(subject.name).should eq(subject)
18
+ expect(described_class.wrap(subject.name)).to eq(subject)
19
19
  end
20
20
  end
21
21
 
22
22
  context "with String group name" do
23
23
  it "returns group instance" do
24
- described_class.wrap(subject.name.to_s).should eq(subject)
24
+ expect(described_class.wrap(subject.name.to_s)).to eq(subject)
25
25
  end
26
26
  end
27
27
  end
28
28
 
29
29
  it "initializes with name" do
30
30
  group = Flipper::Types::Group.new(:admins)
31
- group.should be_instance_of(Flipper::Types::Group)
31
+ expect(group).to be_instance_of(Flipper::Types::Group)
32
32
  end
33
33
 
34
34
  describe "#name" do
35
35
  it "returns name" do
36
- subject.name.should eq(:admins)
36
+ expect(subject.name).to eq(:admins)
37
37
  end
38
38
  end
39
39
 
@@ -42,11 +42,11 @@ describe Flipper::Types::Group do
42
42
  let(:non_admin_actor) { double('Actor', :admin? => false) }
43
43
 
44
44
  it "returns true if block matches" do
45
- subject.match?(admin_actor).should eq(true)
45
+ expect(subject.match?(admin_actor)).to eq(true)
46
46
  end
47
47
 
48
48
  it "returns false if block does not match" do
49
- subject.match?(non_admin_actor).should eq(false)
49
+ expect(subject.match?(non_admin_actor)).to eq(false)
50
50
  end
51
51
  end
52
52
  end
@@ -1,6 +1,6 @@
1
1
  require 'helper'
2
2
  require 'flipper/types/percentage_of_actors'
3
3
 
4
- describe Flipper::Types::PercentageOfActors do
4
+ RSpec.describe Flipper::Types::PercentageOfActors do
5
5
  it_should_behave_like 'a percentage'
6
6
  end
@@ -1,6 +1,6 @@
1
1
  require 'helper'
2
2
  require 'flipper/types/percentage_of_time'
3
3
 
4
- describe Flipper::Types::PercentageOfTime do
4
+ RSpec.describe Flipper::Types::PercentageOfTime do
5
5
  it_should_behave_like 'a percentage'
6
6
  end
@@ -1,7 +1,7 @@
1
1
  require 'helper'
2
2
  require 'flipper/types/percentage_of_actors'
3
3
 
4
- describe Flipper::Types::Percentage do
4
+ RSpec.describe Flipper::Types::Percentage do
5
5
  subject {
6
6
  described_class.new(5)
7
7
  }
@@ -10,38 +10,38 @@ describe Flipper::Types::Percentage do
10
10
  describe ".wrap" do
11
11
  context "with percentage instance" do
12
12
  it "returns percentage instance" do
13
- described_class.wrap(subject).should eq(subject)
13
+ expect(described_class.wrap(subject)).to eq(subject)
14
14
  end
15
15
  end
16
16
 
17
17
  context "with Integer" do
18
18
  it "returns percentage instance" do
19
- described_class.wrap(subject.value).should eq(subject)
19
+ expect(described_class.wrap(subject.value)).to eq(subject)
20
20
  end
21
21
  end
22
22
 
23
23
  context "with String" do
24
24
  it "returns percentage instance" do
25
- described_class.wrap(subject.value.to_s).should eq(subject)
25
+ expect(described_class.wrap(subject.value.to_s)).to eq(subject)
26
26
  end
27
27
  end
28
28
  end
29
29
 
30
30
  describe "#eql?" do
31
31
  it "returns true for same class and value" do
32
- subject.eql?(described_class.new(subject.value)).should eq(true)
32
+ expect(subject.eql?(described_class.new(subject.value))).to eq(true)
33
33
  end
34
34
 
35
35
  it "returns false for different value" do
36
- subject.eql?(described_class.new(subject.value + 1)).should eq(false)
36
+ expect(subject.eql?(described_class.new(subject.value + 1))).to eq(false)
37
37
  end
38
38
 
39
39
  it "returns false for different class" do
40
- subject.eql?(Object.new).should eq(false)
40
+ expect(subject.eql?(Object.new)).to eq(false)
41
41
  end
42
42
 
43
43
  it "is aliased to ==" do
44
- (subject == described_class.new(subject.value)).should eq(true)
44
+ expect((subject == described_class.new(subject.value))).to eq(true)
45
45
  end
46
46
  end
47
47
  end