flipper 0.20.0 → 0.21.0.rc1

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.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +57 -0
  3. data/Changelog.md +37 -1
  4. data/Gemfile +1 -0
  5. data/README.md +103 -47
  6. data/docs/Adapters.md +1 -0
  7. data/docs/Gates.md +74 -74
  8. data/docs/Optimization.md +7 -7
  9. data/docs/images/banner.jpg +0 -0
  10. data/examples/basic.rb +1 -12
  11. data/examples/configuring_default.rb +1 -2
  12. data/examples/dsl.rb +13 -24
  13. data/examples/enabled_for_actor.rb +8 -15
  14. data/examples/group.rb +3 -6
  15. data/examples/group_dynamic_lookup.rb +5 -19
  16. data/examples/group_with_members.rb +4 -14
  17. data/examples/importing.rb +1 -1
  18. data/examples/individual_actor.rb +2 -5
  19. data/examples/instrumentation.rb +1 -2
  20. data/examples/memoizing.rb +1 -2
  21. data/examples/percentage_of_actors.rb +6 -16
  22. data/examples/percentage_of_actors_enabled_check.rb +7 -10
  23. data/examples/percentage_of_actors_group.rb +5 -18
  24. data/examples/percentage_of_time.rb +3 -6
  25. data/lib/flipper.rb +1 -0
  26. data/lib/flipper/adapters/http.rb +32 -28
  27. data/lib/flipper/adapters/memory.rb +20 -94
  28. data/lib/flipper/adapters/sync/interval_synchronizer.rb +1 -1
  29. data/lib/flipper/configuration.rb +6 -6
  30. data/lib/flipper/errors.rb +2 -3
  31. data/lib/flipper/identifier.rb +17 -0
  32. data/lib/flipper/version.rb +1 -1
  33. data/spec/flipper/adapters/http_spec.rb +74 -8
  34. data/spec/flipper/adapters/memory_spec.rb +21 -1
  35. data/spec/flipper/configuration_spec.rb +5 -2
  36. data/spec/flipper/identifier_spec.rb +14 -0
  37. data/spec/flipper/middleware/memoizer_spec.rb +1 -1
  38. data/spec/flipper/middleware/setup_env_spec.rb +0 -16
  39. data/spec/flipper_spec.rb +0 -1
  40. data/spec/support/spec_helpers.rb +3 -0
  41. data/test/test_helper.rb +1 -0
  42. metadata +9 -5
  43. data/examples/example_setup.rb +0 -8
@@ -2,7 +2,27 @@ require 'helper'
2
2
  require 'flipper/spec/shared_adapter_specs'
3
3
 
4
4
  RSpec.describe Flipper::Adapters::Memory do
5
- subject { described_class.new }
5
+ let(:source) { {} }
6
+ subject { described_class.new(source) }
6
7
 
7
8
  it_should_behave_like 'a flipper adapter'
9
+
10
+ it "can initialize from big hash" do
11
+ flipper = Flipper.new(subject)
12
+ flipper.enable :subscriptions
13
+ flipper.disable :search
14
+ flipper.enable_percentage_of_actors :pro_deal, 20
15
+ flipper.enable_percentage_of_time :logging, 30
16
+ flipper.enable_actor :following, Flipper::Actor.new('1')
17
+ flipper.enable_actor :following, Flipper::Actor.new('3')
18
+ flipper.enable_group :following, Flipper::Types::Group.new(:staff)
19
+
20
+ expect(source).to eq({
21
+ "subscriptions" => subject.default_config.merge(boolean: "true"),
22
+ "search" => subject.default_config,
23
+ "logging" => subject.default_config.merge(:percentage_of_time => "30"),
24
+ "pro_deal" => subject.default_config.merge(:percentage_of_actors => "20"),
25
+ "following" => subject.default_config.merge(actors: Set["1", "3"], groups: Set["staff"]),
26
+ })
27
+ end
8
28
  end
@@ -3,12 +3,15 @@ require 'flipper/configuration'
3
3
 
4
4
  RSpec.describe Flipper::Configuration do
5
5
  describe '#default' do
6
- it 'raises if default not configured' do
7
- expect { subject.default }.to raise_error(Flipper::DefaultNotSet)
6
+ it 'returns instance using Memory adapter' do
7
+ expect(subject.default).to be_a(Flipper::DSL)
8
+ # All adapter are wrapped in Memoizable
9
+ expect(subject.default.adapter.adapter).to be_a(Flipper::Adapters::Memory)
8
10
  end
9
11
 
10
12
  it 'can be set default' do
11
13
  instance = Flipper.new(Flipper::Adapters::Memory.new)
14
+ expect(subject.default).not_to be(instance)
12
15
  subject.default { instance }
13
16
  expect(subject.default).to be(instance)
14
17
  end
@@ -0,0 +1,14 @@
1
+ require 'helper'
2
+ require 'flipper/identifier'
3
+
4
+ RSpec.describe Flipper::Identifier do
5
+ describe '#flipper_id' do
6
+ class User < Struct.new(:id)
7
+ include Flipper::Identifier
8
+ end
9
+
10
+ it 'uses class name and id' do
11
+ expect(User.new(5).flipper_id).to eq('User;5')
12
+ end
13
+ end
14
+ end
@@ -342,7 +342,7 @@ RSpec.describe Flipper::Middleware::Memoizer do
342
342
  it 'eagerly caches known features for duration of request' do
343
343
  memory = Flipper::Adapters::Memory.new
344
344
  logged_memory = Flipper::Adapters::OperationLogger.new(memory)
345
- cache = ActiveSupport::Cache::DalliStore.new(ENV['MEMCACHED_URL'])
345
+ cache = ActiveSupport::Cache::MemoryStore.new
346
346
  cache.clear
347
347
  cached = Flipper::Adapters::ActiveSupportCacheStore.new(logged_memory, cache, expires_in: 10)
348
348
  logged_cached = Flipper::Adapters::OperationLogger.new(cached)
@@ -93,20 +93,4 @@ RSpec.describe Flipper::Middleware::SetupEnv do
93
93
  expect(last_response.body).to eq(Flipper.object_id.to_s)
94
94
  end
95
95
  end
96
-
97
- context 'when flipper instance or block are nil and default Flipper is NOT configured' do
98
- let(:app) do
99
- app = lambda do |env|
100
- [200, { 'Content-Type' => 'text/html' }, [env['flipper'].enabled?(:search)]]
101
- end
102
- builder = Rack::Builder.new
103
- builder.use described_class
104
- builder.run app
105
- builder
106
- end
107
-
108
- it 'can use env flipper' do
109
- expect { get '/' }.to raise_error(Flipper::DefaultNotSet)
110
- end
111
- end
112
96
  end
data/spec/flipper_spec.rb CHANGED
@@ -232,7 +232,6 @@ RSpec.describe Flipper do
232
232
  cloud_configuration = Flipper::Cloud::Configuration.new({
233
233
  token: "asdf",
234
234
  sync_secret: "tasty",
235
- sync_method: :webhook,
236
235
  })
237
236
 
238
237
  described_class.configure do |config|
@@ -64,6 +64,9 @@ module SpecHelpers
64
64
  end
65
65
 
66
66
  RSpec.configure do |config|
67
+ config.order = :random
68
+ Kernel.srand config.seed
69
+
67
70
  config.include Rack::Test::Methods
68
71
  config.include SpecHelpers
69
72
  end
data/test/test_helper.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require 'bundler/setup'
1
2
  require 'flipper'
2
3
  require 'minitest/autorun'
3
4
  require 'minitest/unit'
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.20.0
4
+ version: 0.21.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Nunemaker
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-12-20 00:00:00.000000000 Z
11
+ date: 2021-05-01 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email:
@@ -18,6 +18,7 @@ extensions: []
18
18
  extra_rdoc_files: []
19
19
  files:
20
20
  - ".codeclimate.yml"
21
+ - ".github/workflows/ci.yml"
21
22
  - CODE_OF_CONDUCT.md
22
23
  - Changelog.md
23
24
  - Dockerfile
@@ -34,12 +35,12 @@ files:
34
35
  - docs/Optimization.md
35
36
  - docs/api/README.md
36
37
  - docs/http/README.md
38
+ - docs/images/banner.jpg
37
39
  - docs/read-only/README.md
38
40
  - examples/basic.rb
39
41
  - examples/configuring_default.rb
40
42
  - examples/dsl.rb
41
43
  - examples/enabled_for_actor.rb
42
- - examples/example_setup.rb
43
44
  - examples/group.rb
44
45
  - examples/group_dynamic_lookup.rb
45
46
  - examples/group_with_members.rb
@@ -81,6 +82,7 @@ files:
81
82
  - lib/flipper/gates/group.rb
82
83
  - lib/flipper/gates/percentage_of_actors.rb
83
84
  - lib/flipper/gates/percentage_of_time.rb
85
+ - lib/flipper/identifier.rb
84
86
  - lib/flipper/instrumentation/log_subscriber.rb
85
87
  - lib/flipper/instrumentation/statsd.rb
86
88
  - lib/flipper/instrumentation/statsd_subscriber.rb
@@ -128,6 +130,7 @@ files:
128
130
  - spec/flipper/gates/group_spec.rb
129
131
  - spec/flipper/gates/percentage_of_actors_spec.rb
130
132
  - spec/flipper/gates/percentage_of_time_spec.rb
133
+ - spec/flipper/identifier_spec.rb
131
134
  - spec/flipper/instrumentation/log_subscriber_spec.rb
132
135
  - spec/flipper/instrumentation/statsd_subscriber_spec.rb
133
136
  - spec/flipper/instrumenters/memory_spec.rb
@@ -168,9 +171,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
168
171
  version: '0'
169
172
  required_rubygems_version: !ruby/object:Gem::Requirement
170
173
  requirements:
171
- - - ">="
174
+ - - ">"
172
175
  - !ruby/object:Gem::Version
173
- version: '0'
176
+ version: 1.3.1
174
177
  requirements: []
175
178
  rubygems_version: 3.0.3
176
179
  signing_key:
@@ -203,6 +206,7 @@ test_files:
203
206
  - spec/flipper/gates/group_spec.rb
204
207
  - spec/flipper/gates/percentage_of_actors_spec.rb
205
208
  - spec/flipper/gates/percentage_of_time_spec.rb
209
+ - spec/flipper/identifier_spec.rb
206
210
  - spec/flipper/instrumentation/log_subscriber_spec.rb
207
211
  - spec/flipper/instrumentation/statsd_subscriber_spec.rb
208
212
  - spec/flipper/instrumenters/memory_spec.rb
@@ -1,8 +0,0 @@
1
- # Nothing to see here... move along.
2
- # Sets up load path for examples and requires some stuff
3
- require 'pp'
4
- require 'pathname'
5
-
6
- root_path = Pathname(__FILE__).dirname.join('..').expand_path
7
- lib_path = root_path.join('lib')
8
- $:.unshift(lib_path)