flipper 0.17.2 → 0.20.0.beta2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,71 @@
1
+ require 'helper'
2
+ require 'flipper/adapters/dual_write'
3
+ require 'flipper/adapters/operation_logger'
4
+ require 'flipper/spec/shared_adapter_specs'
5
+ require 'active_support/notifications'
6
+
7
+ RSpec.describe Flipper::Adapters::DualWrite do
8
+ let(:local_adapter) do
9
+ Flipper::Adapters::OperationLogger.new Flipper::Adapters::Memory.new
10
+ end
11
+ let(:remote_adapter) do
12
+ Flipper::Adapters::OperationLogger.new Flipper::Adapters::Memory.new
13
+ end
14
+ let(:local) { Flipper.new(local_adapter) }
15
+ let(:remote) { Flipper.new(remote_adapter) }
16
+ let(:sync) { Flipper.new(subject) }
17
+
18
+ subject do
19
+ described_class.new(local_adapter, remote_adapter)
20
+ end
21
+
22
+ it_should_behave_like 'a flipper adapter'
23
+
24
+ it 'only uses local for #features' do
25
+ subject.features
26
+ end
27
+
28
+ it 'only uses local for #get' do
29
+ subject.get sync[:search]
30
+ end
31
+
32
+ it 'only uses local for #get_multi' do
33
+ subject.get_multi [sync[:search]]
34
+ end
35
+
36
+ it 'only uses local for #get_all' do
37
+ subject.get_all
38
+ end
39
+
40
+ it 'updates remote and local for #add' do
41
+ subject.add sync[:search]
42
+ expect(remote_adapter.count(:add)).to be(1)
43
+ expect(local_adapter.count(:add)).to be(1)
44
+ end
45
+
46
+ it 'updates remote and local for #remove' do
47
+ subject.remove sync[:search]
48
+ expect(remote_adapter.count(:remove)).to be(1)
49
+ expect(local_adapter.count(:remove)).to be(1)
50
+ end
51
+
52
+ it 'updates remote and local for #clear' do
53
+ subject.clear sync[:search]
54
+ expect(remote_adapter.count(:clear)).to be(1)
55
+ expect(local_adapter.count(:clear)).to be(1)
56
+ end
57
+
58
+ it 'updates remote and local for #enable' do
59
+ feature = sync[:search]
60
+ subject.enable feature, feature.gate(:boolean), local.boolean
61
+ expect(remote_adapter.count(:enable)).to be(1)
62
+ expect(local_adapter.count(:enable)).to be(1)
63
+ end
64
+
65
+ it 'updates remote and local for #disable' do
66
+ feature = sync[:search]
67
+ subject.disable feature, feature.gate(:boolean), local.boolean(false)
68
+ expect(remote_adapter.count(:disable)).to be(1)
69
+ expect(local_adapter.count(:disable)).to be(1)
70
+ end
71
+ end
@@ -11,6 +11,15 @@ RSpec.describe Flipper::Adapters::OperationLogger do
11
11
 
12
12
  it_should_behave_like 'a flipper adapter'
13
13
 
14
+ it 'shows itself when inspect' do
15
+ subject.features
16
+ output = subject.inspect
17
+ expect(output).to match(/OperationLogger/)
18
+ expect(output).to match(/operation_logger/)
19
+ expect(output).to match(/@type=:features/)
20
+ expect(output).to match(/@adapter=#<Flipper::Adapters::Memory/)
21
+ end
22
+
14
23
  it 'forwards missing methods to underlying adapter' do
15
24
  adapter = Class.new do
16
25
  def foo
@@ -175,22 +175,22 @@ RSpec.describe Flipper::Adapters::Sync do
175
175
  end
176
176
 
177
177
  it 'synchronizes for #features' do
178
- expect(subject).to receive(:sync)
178
+ expect(subject).to receive(:synchronize)
179
179
  subject.features
180
180
  end
181
181
 
182
182
  it 'synchronizes for #get' do
183
- expect(subject).to receive(:sync)
183
+ expect(subject).to receive(:synchronize)
184
184
  subject.get sync[:search]
185
185
  end
186
186
 
187
187
  it 'synchronizes for #get_multi' do
188
- expect(subject).to receive(:sync)
188
+ expect(subject).to receive(:synchronize)
189
189
  subject.get_multi [sync[:search]]
190
190
  end
191
191
 
192
192
  it 'synchronizes for #get_all' do
193
- expect(subject).to receive(:sync)
193
+ expect(subject).to receive(:synchronize)
194
194
  subject.get_all
195
195
  end
196
196
 
@@ -359,19 +359,19 @@ RSpec.describe Flipper::Feature do
359
359
  end
360
360
 
361
361
  it 'returns :on' do
362
- expect(subject.state).to be(:on)
362
+ expect(subject.state).to be(:conditional)
363
363
  end
364
364
 
365
- it 'returns true for on?' do
366
- expect(subject.on?).to be(true)
365
+ it 'returns false for on?' do
366
+ expect(subject.on?).to be(false)
367
367
  end
368
368
 
369
369
  it 'returns false for off?' do
370
370
  expect(subject.off?).to be(false)
371
371
  end
372
372
 
373
- it 'returns false for conditional?' do
374
- expect(subject.conditional?).to be(false)
373
+ it 'returns true for conditional?' do
374
+ expect(subject.conditional?).to be(true)
375
375
  end
376
376
  end
377
377
 
@@ -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
345
+ cache = ActiveSupport::Cache::DalliStore.new(ENV['MEMCACHED_URL'])
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)
@@ -56,21 +56,57 @@ RSpec.describe Flipper::Middleware::SetupEnv do
56
56
  end
57
57
  end
58
58
 
59
- context 'when flipper instance is nil' do
59
+ context 'when flipper instance or block are nil but env flipper is configured' do
60
60
  let(:app) do
61
61
  app = lambda do |env|
62
62
  [200, { 'Content-Type' => 'text/html' }, [env['flipper'].object_id.to_s]]
63
63
  end
64
64
  builder = Rack::Builder.new
65
- builder.use described_class, nil
65
+ builder.use described_class
66
66
  builder.run app
67
67
  builder
68
68
  end
69
69
 
70
- it 'leaves env flipper alone' do
70
+ it 'can use env flipper' do
71
71
  env_flipper = build_flipper
72
72
  get '/', {}, 'flipper' => env_flipper
73
73
  expect(last_response.body).to eq(env_flipper.object_id.to_s)
74
74
  end
75
75
  end
76
+
77
+ context 'when flipper instance or block are nil and default Flipper is configured' do
78
+ let(:app) do
79
+ Flipper.configure do |config|
80
+ config.default { flipper }
81
+ end
82
+ app = lambda do |env|
83
+ [200, { 'Content-Type' => 'text/html' }, [env['flipper'].object_id.to_s]]
84
+ end
85
+ builder = Rack::Builder.new
86
+ builder.use described_class
87
+ builder.run app
88
+ builder
89
+ end
90
+
91
+ it 'can use env flipper' do
92
+ get '/', {}, {}
93
+ expect(last_response.body).to eq(Flipper.object_id.to_s)
94
+ end
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
76
112
  end
@@ -1,4 +1,5 @@
1
1
  require 'helper'
2
+ require 'flipper/cloud'
2
3
 
3
4
  RSpec.describe Flipper do
4
5
  describe '.new' do
@@ -215,6 +216,32 @@ RSpec.describe Flipper do
215
216
  it 'delegates memoizing? to instance' do
216
217
  expect(described_class.memoizing?).to eq(described_class.adapter.memoizing?)
217
218
  end
219
+
220
+ it 'delegates sync stuff to instance and does nothing' do
221
+ expect(described_class.sync).to be(nil)
222
+ expect(described_class.sync_secret).to be(nil)
223
+ end
224
+
225
+ it 'delegates sync stuff to instance for Flipper::Cloud' do
226
+ stub = stub_request(:get, "https://www.flippercloud.io/adapter/features").
227
+ with({
228
+ headers: {
229
+ 'Flipper-Cloud-Token'=>'asdf',
230
+ },
231
+ }).to_return(status: 200, body: '{"features": {}}', headers: {})
232
+ cloud_configuration = Flipper::Cloud::Configuration.new({
233
+ token: "asdf",
234
+ sync_secret: "tasty",
235
+ sync_method: :webhook,
236
+ })
237
+
238
+ described_class.configure do |config|
239
+ config.default { Flipper::Cloud::DSL.new(cloud_configuration) }
240
+ end
241
+ described_class.sync
242
+ expect(described_class.sync_secret).to eq("tasty")
243
+ expect(stub).to have_been_requested
244
+ end
218
245
  end
219
246
 
220
247
  describe '.register' do
@@ -0,0 +1 @@
1
+ some_awesome_feature: 'Awesome feature description'
@@ -1,3 +1,4 @@
1
+ require 'climate_control'
1
2
  require 'json'
2
3
  require 'rack/test'
3
4
 
@@ -56,6 +57,10 @@ module SpecHelpers
56
57
  'more_info' => api_error_code_reference_url,
57
58
  }
58
59
  end
60
+
61
+ def with_modified_env(options, &block)
62
+ ClimateControl.modify(options, &block)
63
+ end
59
64
  end
60
65
 
61
66
  RSpec.configure do |config|
metadata CHANGED
@@ -1,18 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flipper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.17.2
4
+ version: 0.20.0.beta2
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-01-04 00:00:00.000000000 Z
11
+ date: 2020-12-14 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description: Feature flipper is the act of enabling/disabling features in your application,
14
- ideally without re-deploying or changing anything in your code base. Flipper makes
15
- this extremely easy to do with any backend you would like to use.
13
+ description:
16
14
  email:
17
15
  - nunemaker@gmail.com
18
16
  executables: []
@@ -20,8 +18,6 @@ extensions: []
20
18
  extra_rdoc_files: []
21
19
  files:
22
20
  - ".codeclimate.yml"
23
- - ".rubocop.yml"
24
- - ".rubocop_todo.yml"
25
21
  - CODE_OF_CONDUCT.md
26
22
  - Changelog.md
27
23
  - Dockerfile
@@ -50,6 +46,7 @@ files:
50
46
  - examples/importing.rb
51
47
  - examples/individual_actor.rb
52
48
  - examples/instrumentation.rb
49
+ - examples/memoizing.rb
53
50
  - examples/percentage_of_actors.rb
54
51
  - examples/percentage_of_actors_enabled_check.rb
55
52
  - examples/percentage_of_actors_group.rb
@@ -58,6 +55,7 @@ files:
58
55
  - lib/flipper.rb
59
56
  - lib/flipper/actor.rb
60
57
  - lib/flipper/adapter.rb
58
+ - lib/flipper/adapters/dual_write.rb
61
59
  - lib/flipper/adapters/http.rb
62
60
  - lib/flipper/adapters/http/client.rb
63
61
  - lib/flipper/adapters/http/error.rb
@@ -107,6 +105,7 @@ files:
107
105
  - spec/fixtures/feature.json
108
106
  - spec/flipper/actor_spec.rb
109
107
  - spec/flipper/adapter_spec.rb
108
+ - spec/flipper/adapters/dual_write_spec.rb
110
109
  - spec/flipper/adapters/http_spec.rb
111
110
  - spec/flipper/adapters/instrumented_spec.rb
112
111
  - spec/flipper/adapters/memoizable_spec.rb
@@ -143,9 +142,10 @@ files:
143
142
  - spec/flipper/types/percentage_of_actors_spec.rb
144
143
  - spec/flipper/types/percentage_of_time_spec.rb
145
144
  - spec/flipper/types/percentage_spec.rb
145
+ - spec/flipper_integration_spec.rb
146
146
  - spec/flipper_spec.rb
147
147
  - spec/helper.rb
148
- - spec/integration_spec.rb
148
+ - spec/support/descriptions.yml
149
149
  - spec/support/fake_udp_socket.rb
150
150
  - spec/support/spec_helpers.rb
151
151
  - test/adapters/memory_test.rb
@@ -168,9 +168,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
168
168
  version: '0'
169
169
  required_rubygems_version: !ruby/object:Gem::Requirement
170
170
  requirements:
171
- - - ">="
171
+ - - ">"
172
172
  - !ruby/object:Gem::Version
173
- version: '0'
173
+ version: 1.3.1
174
174
  requirements: []
175
175
  rubygems_version: 3.0.3
176
176
  signing_key:
@@ -180,6 +180,7 @@ test_files:
180
180
  - spec/fixtures/feature.json
181
181
  - spec/flipper/actor_spec.rb
182
182
  - spec/flipper/adapter_spec.rb
183
+ - spec/flipper/adapters/dual_write_spec.rb
183
184
  - spec/flipper/adapters/http_spec.rb
184
185
  - spec/flipper/adapters/instrumented_spec.rb
185
186
  - spec/flipper/adapters/memoizable_spec.rb
@@ -216,9 +217,10 @@ test_files:
216
217
  - spec/flipper/types/percentage_of_actors_spec.rb
217
218
  - spec/flipper/types/percentage_of_time_spec.rb
218
219
  - spec/flipper/types/percentage_spec.rb
220
+ - spec/flipper_integration_spec.rb
219
221
  - spec/flipper_spec.rb
220
222
  - spec/helper.rb
221
- - spec/integration_spec.rb
223
+ - spec/support/descriptions.yml
222
224
  - spec/support/fake_udp_socket.rb
223
225
  - spec/support/spec_helpers.rb
224
226
  - test/adapters/memory_test.rb
@@ -1,52 +0,0 @@
1
- # This is the configuration used to check the rubocop source code.
2
-
3
- require: rubocop-rspec
4
- inherit_from:
5
- - .rubocop_todo.yml
6
-
7
- AllCops:
8
- Exclude:
9
- - 'docker-compose/**/*'
10
- - 'examples/**/*'
11
- - 'tmp/**/*'
12
- - 'bin/**/*'
13
- - 'vendor/bundle/**/*'
14
- TargetRubyVersion: 2.6
15
- Style/Alias:
16
- Enabled: false
17
-
18
- Style/Documentation:
19
- Enabled: false
20
-
21
- Style/Encoding:
22
- Enabled: false
23
-
24
- Style/NumericLiterals:
25
- Enabled: false
26
-
27
- Style/StringLiterals:
28
- Enabled: false
29
-
30
- Style/GuardClause:
31
- Enabled: false
32
-
33
- Style/IfUnlessModifier:
34
- Enabled: false
35
-
36
- Layout/LineLength:
37
- Max: 100
38
-
39
- Style/RegexpLiteral:
40
- EnforcedStyle: mixed
41
-
42
- Style/TrailingCommaInArrayLiteral:
43
- EnforcedStyleForMultiline: consistent_comma
44
-
45
- Style/TrailingCommaInHashLiteral:
46
- EnforcedStyleForMultiline: consistent_comma
47
-
48
- RSpec/InstanceVariable:
49
- Enabled: false
50
-
51
- Lint/SuppressedException:
52
- Enabled: false
@@ -1,562 +0,0 @@
1
- # This configuration was generated by
2
- # `rubocop --auto-gen-config`
3
- # on 2019-09-13 08:34:35 -0400 using RuboCop version 0.74.0.
4
- # The point is for the user to remove these configuration records
5
- # one by one as the offenses are removed from the code base.
6
- # Note that changes in the inspected code, or installation of new
7
- # versions of RuboCop, may require this file to be generated again.
8
-
9
- # Offense count: 6
10
- # Cop supports --auto-correct.
11
- # Configuration parameters: TreatCommentsAsGroupSeparators, Include.
12
- # Include: **/*.gemfile, **/Gemfile, **/gems.rb
13
- Bundler/OrderedGems:
14
- Exclude:
15
- - 'Gemfile'
16
-
17
- # Offense count: 6
18
- # Cop supports --auto-correct.
19
- # Configuration parameters: TreatCommentsAsGroupSeparators, Include.
20
- # Include: **/*.gemspec
21
- Gemspec/OrderedDependencies:
22
- Exclude:
23
- - 'flipper-active_record.gemspec'
24
- - 'flipper-active_support_cache_store.gemspec'
25
- - 'flipper-api.gemspec'
26
- - 'flipper-dalli.gemspec'
27
- - 'flipper-ui.gemspec'
28
-
29
- # Offense count: 4
30
- # Cop supports --auto-correct.
31
- # Configuration parameters: AllowMultipleStyles, EnforcedHashRocketStyle, EnforcedColonStyle, EnforcedLastArgumentHashStyle.
32
- # SupportedHashRocketStyles: key, separator, table
33
- # SupportedColonStyles: key, separator, table
34
- # SupportedLastArgumentHashStyles: always_inspect, always_ignore, ignore_implicit, ignore_explicit
35
- Layout/HashAlignment:
36
- Exclude:
37
- - 'lib/flipper/typecast.rb'
38
-
39
- # Offense count: 1
40
- # Cop supports --auto-correct.
41
- Layout/ClosingHeredocIndentation:
42
- Exclude:
43
- - 'test/generators/flipper/active_record_generator_test.rb'
44
-
45
- # Offense count: 8
46
- # Cop supports --auto-correct.
47
- Layout/EmptyLineAfterGuardClause:
48
- Exclude:
49
- - 'lib/flipper/adapters/sync/feature_synchronizer.rb'
50
- - 'lib/flipper/api/json_params.rb'
51
- - 'lib/flipper/api/v1/actions/feature.rb'
52
- - 'lib/flipper/type.rb'
53
- - 'lib/flipper/types/actor.rb'
54
- - 'lib/flipper/types/group.rb'
55
- - 'lib/flipper/ui/action.rb'
56
-
57
- # Offense count: 12
58
- # Cop supports --auto-correct.
59
- Layout/EmptyLineAfterMagicComment:
60
- Exclude:
61
- - 'flipper-active_record.gemspec'
62
- - 'flipper-active_support_cache_store.gemspec'
63
- - 'flipper-api.gemspec'
64
- - 'flipper-cloud.gemspec'
65
- - 'flipper-dalli.gemspec'
66
- - 'flipper-moneta.gemspec'
67
- - 'flipper-mongo.gemspec'
68
- - 'flipper-redis.gemspec'
69
- - 'flipper-rollout.gemspec'
70
- - 'flipper-sequel.gemspec'
71
- - 'flipper-ui.gemspec'
72
- - 'flipper.gemspec'
73
-
74
- # Offense count: 1
75
- # Cop supports --auto-correct.
76
- Layout/EmptyLinesAroundExceptionHandlingKeywords:
77
- Exclude:
78
- - 'test/adapters/active_record_test.rb'
79
-
80
- # Offense count: 1
81
- # Cop supports --auto-correct.
82
- # Configuration parameters: EnforcedStyle.
83
- # SupportedStyles: squiggly, active_support, powerpack, unindent
84
- Layout/HeredocIndentation:
85
- Exclude:
86
- - 'test/generators/flipper/active_record_generator_test.rb'
87
-
88
- # Offense count: 2
89
- # Cop supports --auto-correct.
90
- Layout/RescueEnsureAlignment:
91
- Exclude:
92
- - 'lib/flipper/api/v1/actions/percentage_of_actors_gate.rb'
93
- - 'lib/flipper/api/v1/actions/percentage_of_time_gate.rb'
94
-
95
- # Offense count: 1
96
- Lint/AmbiguousRegexpLiteral:
97
- Exclude:
98
- - 'lib/flipper/instrumentation/statsd.rb'
99
-
100
- # Offense count: 6
101
- # Configuration parameters: AllowSafeAssignment.
102
- Lint/AssignmentInCondition:
103
- Exclude:
104
- - 'lib/flipper/adapters/active_record.rb'
105
- - 'lib/flipper/adapters/sequel.rb'
106
- - 'lib/flipper/feature.rb'
107
- - 'lib/flipper/gate_values.rb'
108
-
109
- # Offense count: 2
110
- Lint/DuplicateMethods:
111
- Exclude:
112
- - 'lib/flipper/ui.rb'
113
- - 'lib/flipper/ui/configuration.rb'
114
-
115
- # Offense count: 3
116
- # Configuration parameters: MaximumRangeSize.
117
- Lint/MissingCopEnableDirective:
118
- Exclude:
119
- - 'lib/flipper/feature.rb'
120
- - 'lib/flipper/spec/shared_adapter_specs.rb'
121
- - 'lib/flipper/test/shared_adapter_test.rb'
122
-
123
- # Offense count: 1
124
- # Cop supports --auto-correct.
125
- Lint/ScriptPermission:
126
- Exclude:
127
- - 'Rakefile'
128
-
129
- # Offense count: 21
130
- Lint/ShadowingOuterLocalVariable:
131
- Exclude:
132
- - 'spec/flipper/api/v1/actions/actors_gate_spec.rb'
133
- - 'spec/flipper/api/v1/actions/percentage_of_actors_gate_spec.rb'
134
- - 'spec/flipper/api/v1/actions/percentage_of_time_gate_spec.rb'
135
- - 'spec/flipper/dsl_spec.rb'
136
- - 'spec/flipper/feature_spec.rb'
137
- - 'spec/flipper/types/group_spec.rb'
138
-
139
- # Offense count: 2
140
- # Cop supports --auto-correct.
141
- Lint/RedundantCopDisableDirective:
142
- Exclude:
143
- - 'spec/flipper/adapter_spec.rb'
144
-
145
- # Offense count: 1
146
- # Cop supports --auto-correct.
147
- Lint/RedundantRequireStatement:
148
- Exclude:
149
- - 'lib/flipper/registry.rb'
150
-
151
- # Offense count: 27
152
- Lint/UselessAssignment:
153
- Exclude:
154
- - 'lib/flipper/instrumentation/log_subscriber.rb'
155
- - 'lib/flipper/instrumentation/subscriber.rb'
156
- - 'spec/flipper/api/action_spec.rb'
157
- - 'spec/flipper/dsl_spec.rb'
158
- - 'spec/flipper/feature_spec.rb'
159
- - 'spec/flipper/gates/group_spec.rb'
160
- - 'spec/flipper/instrumentation/statsd_subscriber_spec.rb'
161
- - 'spec/flipper/middleware/memoizer_spec.rb'
162
- - 'spec/flipper_spec.rb'
163
-
164
- # Offense count: 35
165
- Metrics/AbcSize:
166
- Max: 29
167
-
168
- # Offense count: 136
169
- # Configuration parameters: CountComments, ExcludedMethods.
170
- # ExcludedMethods: refine
171
- Metrics/BlockLength:
172
- Max: 683
173
-
174
- # Offense count: 11
175
- # Configuration parameters: CountComments.
176
- Metrics/ClassLength:
177
- Max: 160
178
-
179
- # Offense count: 20
180
- # Cop supports --auto-correct.
181
- # Configuration parameters: AutoCorrect, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
182
- # URISchemes: http, https
183
- Layout/LineLength:
184
- Max: 251
185
-
186
- # Offense count: 59
187
- # Configuration parameters: CountComments, ExcludedMethods.
188
- Metrics/MethodLength:
189
- Max: 23
190
-
191
- # Offense count: 18
192
- Naming/AccessorMethodName:
193
- Enabled: false
194
-
195
- # Offense count: 25
196
- Naming/ConstantName:
197
- Exclude:
198
- - 'lib/flipper.rb'
199
- - 'lib/flipper/adapters/active_support_cache_store.rb'
200
- - 'lib/flipper/adapters/dalli.rb'
201
- - 'lib/flipper/adapters/instrumented.rb'
202
- - 'lib/flipper/adapters/memoizable.rb'
203
- - 'lib/flipper/adapters/memory.rb'
204
- - 'lib/flipper/adapters/mongo.rb'
205
- - 'lib/flipper/adapters/operation_logger.rb'
206
- - 'lib/flipper/adapters/pstore.rb'
207
- - 'lib/flipper/adapters/redis.rb'
208
- - 'lib/flipper/adapters/redis_cache.rb'
209
- - 'lib/flipper/feature.rb'
210
- - 'lib/flipper/gate_values.rb'
211
- - 'lib/flipper/typecast.rb'
212
- - 'lib/flipper/ui/decorators/feature.rb'
213
-
214
- # Offense count: 9
215
- # Configuration parameters: ExpectMatchingDefinition, Regex, IgnoreExecutableScripts, AllowedAcronyms.
216
- # AllowedAcronyms: CLI, DSL, ACL, API, ASCII, CPU, CSS, DNS, EOF, GUID, HTML, HTTP, HTTPS, ID, IP, JSON, LHS, QPS, RAM, RHS, RPC, SLA, SMTP, SQL, SSH, TCP, TLS, TTL, UDP, UI, UID, UUID, URI, URL, UTF8, VM, XML, XMPP, XSRF, XSS
217
- Naming/FileName:
218
- Exclude:
219
- - 'lib/flipper-active_record.rb'
220
- - 'lib/flipper-active_support_cache_store.rb'
221
- - 'lib/flipper-api.rb'
222
- - 'lib/flipper-cloud.rb'
223
- - 'lib/flipper-dalli.rb'
224
- - 'lib/flipper-mongo.rb'
225
- - 'lib/flipper-redis.rb'
226
- - 'lib/flipper-sequel.rb'
227
- - 'lib/flipper-ui.rb'
228
-
229
- # Offense count: 1
230
- # Configuration parameters: Blacklist.
231
- # Blacklist: (?-mix:(^|\s)(EO[A-Z]{1}|END)(\s|$))
232
- Naming/HeredocDelimiterNaming:
233
- Exclude:
234
- - 'test/generators/flipper/active_record_generator_test.rb'
235
-
236
- # Offense count: 4
237
- # Cop supports --auto-correct.
238
- # Configuration parameters: PreferredName.
239
- Naming/RescuedExceptionsVariableName:
240
- Exclude:
241
- - 'lib/flipper/adapters/active_record.rb'
242
- - 'lib/flipper/adapters/sync/synchronizer.rb'
243
- - 'lib/flipper/ui/actions/percentage_of_actors_gate.rb'
244
- - 'lib/flipper/ui/actions/percentage_of_time_gate.rb'
245
-
246
- # Offense count: 3
247
- RSpec/BeforeAfterAll:
248
- Exclude:
249
- - 'spec/spec_helper.rb'
250
- - 'spec/rails_helper.rb'
251
- - 'spec/support/**/*.rb'
252
- - 'spec/flipper/adapters/active_record_spec.rb'
253
- - 'spec/flipper/adapters/http_spec.rb'
254
-
255
- # Offense count: 76
256
- # Configuration parameters: Prefixes.
257
- # Prefixes: when, with, without
258
- RSpec/ContextWording:
259
- Enabled: false
260
-
261
- # Offense count: 1
262
- # Configuration parameters: CustomIncludeMethods.
263
- RSpec/EmptyExampleGroup:
264
- Exclude:
265
- - 'spec/flipper/gates/actor_spec.rb'
266
-
267
- # Offense count: 3
268
- # Cop supports --auto-correct.
269
- RSpec/EmptyLineAfterFinalLet:
270
- Exclude:
271
- - 'spec/flipper/adapters/moneta_spec.rb'
272
- - 'spec/flipper/ui/actions/features_spec.rb'
273
-
274
- # Offense count: 2
275
- # Cop supports --auto-correct.
276
- RSpec/EmptyLineAfterSubject:
277
- Exclude:
278
- - 'spec/flipper/adapters/http_spec.rb'
279
- - 'spec/flipper/types/percentage_spec.rb'
280
-
281
- # Offense count: 138
282
- # Configuration parameters: Max.
283
- RSpec/ExampleLength:
284
- Enabled: false
285
-
286
- # Offense count: 1
287
- # Configuration parameters: CustomTransform, IgnoreMethods.
288
- RSpec/FilePath:
289
- Exclude:
290
- - 'spec/flipper/adapters/pstore_spec.rb'
291
-
292
- # Offense count: 6
293
- # Cop supports --auto-correct.
294
- # Configuration parameters: EnforcedStyle.
295
- # SupportedStyles: implicit, each, example
296
- RSpec/HookArgument:
297
- Exclude:
298
- - 'spec/flipper/adapters/active_record_spec.rb'
299
- - 'spec/flipper/adapters/http_spec.rb'
300
- - 'spec/flipper/adapters/sequel_spec.rb'
301
- - 'spec/helper.rb'
302
-
303
- # Offense count: 4
304
- # Cop supports --auto-correct.
305
- RSpec/HooksBeforeExamples:
306
- Exclude:
307
- - 'spec/flipper/ui_spec.rb'
308
-
309
- # Offense count: 22
310
- # Cop supports --auto-correct.
311
- # Configuration parameters: EnforcedStyle.
312
- # SupportedStyles: it_behaves_like, it_should_behave_like
313
- RSpec/ItBehavesLike:
314
- Enabled: false
315
-
316
- # Offense count: 4
317
- RSpec/IteratedExpectation:
318
- Exclude:
319
- - 'spec/flipper/dsl_spec.rb'
320
- - 'spec/flipper/feature_spec.rb'
321
- - 'spec/flipper/gates/percentage_of_actors_spec.rb'
322
- - 'spec/flipper/registry_spec.rb'
323
-
324
- # Offense count: 26
325
- # Cop supports --auto-correct.
326
- RSpec/LeadingSubject:
327
- Enabled: false
328
-
329
- # Offense count: 17
330
- # Configuration parameters: .
331
- # SupportedStyles: have_received, receive
332
- RSpec/MessageSpies:
333
- EnforcedStyle: receive
334
-
335
- # Offense count: 233
336
- # Configuration parameters: AggregateFailuresByDefault.
337
- RSpec/MultipleExpectations:
338
- Max: 20
339
-
340
- # Offense count: 449
341
- # Configuration parameters: IgnoreSharedExamples.
342
- RSpec/NamedSubject:
343
- Enabled: false
344
-
345
- # Offense count: 25
346
- RSpec/NestedGroups:
347
- Max: 5
348
-
349
- # Offense count: 19
350
- # Cop supports --auto-correct.
351
- # Configuration parameters: Strict, EnforcedStyle.
352
- # SupportedStyles: inflected, explicit
353
- RSpec/PredicateMatcher:
354
- Exclude:
355
- - 'spec/flipper/api/v1/actions/actors_gate_spec.rb'
356
- - 'spec/flipper/api/v1/actions/boolean_gate_spec.rb'
357
- - 'spec/flipper/api/v1/actions/clear_feature_spec.rb'
358
- - 'spec/flipper/api/v1/actions/features_spec.rb'
359
- - 'spec/flipper/api/v1/actions/groups_gate_spec.rb'
360
- - 'spec/flipper/types/group_spec.rb'
361
-
362
- # Offense count: 1
363
- # Cop supports --auto-correct.
364
- RSpec/ReceiveNever:
365
- Exclude:
366
- - 'spec/flipper/middleware/memoizer_spec.rb'
367
-
368
- # Offense count: 2
369
- RSpec/RepeatedDescription:
370
- Exclude:
371
- - 'spec/flipper/gates/boolean_spec.rb'
372
-
373
- # Offense count: 4
374
- RSpec/RepeatedExample:
375
- Exclude:
376
- - 'spec/flipper/cloud_spec.rb'
377
- - 'spec/integration_spec.rb'
378
-
379
- # Offense count: 2
380
- RSpec/ScatteredLet:
381
- Exclude:
382
- - 'spec/flipper/adapters/http_spec.rb'
383
- - 'spec/flipper/instrumentation/log_subscriber_spec.rb'
384
-
385
- # Offense count: 4
386
- RSpec/SubjectStub:
387
- Exclude:
388
- - 'spec/flipper/adapters/sync_spec.rb'
389
-
390
- # Offense count: 17
391
- # Configuration parameters: IgnoreNameless, IgnoreSymbolicNames.
392
- RSpec/VerifiedDoubles:
393
- Exclude:
394
- - 'spec/flipper/api/v1/actions/features_spec.rb'
395
- - 'spec/flipper/dsl_spec.rb'
396
- - 'spec/flipper/feature_spec.rb'
397
- - 'spec/flipper/types/group_spec.rb'
398
- - 'spec/flipper_spec.rb'
399
- - 'spec/integration_spec.rb'
400
-
401
- # Offense count: 1
402
- Security/Eval:
403
- Exclude:
404
- - 'flipper.gemspec'
405
-
406
- # Offense count: 5
407
- Security/MarshalLoad:
408
- Exclude:
409
- - 'lib/flipper/adapters/redis_cache.rb'
410
- - 'spec/flipper/adapters/redis_cache_spec.rb'
411
-
412
- # Offense count: 2
413
- # Configuration parameters: EnforcedStyle.
414
- # SupportedStyles: inline, group
415
- Style/AccessModifierDeclarations:
416
- Exclude:
417
- - 'lib/flipper/api/action.rb'
418
- - 'lib/flipper/ui/action.rb'
419
-
420
- # Offense count: 3
421
- Style/DoubleNegation:
422
- Exclude:
423
- - 'lib/flipper/adapters/memoizable.rb'
424
- - 'lib/flipper/gates/boolean.rb'
425
- - 'lib/flipper/typecast.rb'
426
-
427
- # Offense count: 1
428
- # Cop supports --auto-correct.
429
- Style/EmptyLambdaParameter:
430
- Exclude:
431
- - 'lib/flipper/ui.rb'
432
-
433
- # Offense count: 1
434
- # Cop supports --auto-correct.
435
- # Configuration parameters: EnforcedStyle.
436
- # SupportedStyles: compact, expanded
437
- Style/EmptyMethod:
438
- Exclude:
439
- - 'lib/flipper/gate.rb'
440
-
441
- # Offense count: 27
442
- # Cop supports --auto-correct.
443
- Style/ExpandPathArguments:
444
- Enabled: false
445
-
446
- # Offense count: 2
447
- # Cop supports --auto-correct.
448
- # Configuration parameters: EnforcedStyle.
449
- # SupportedStyles: format, sprintf, percent
450
- Style/FormatString:
451
- Exclude:
452
- - 'lib/flipper/instrumentation/log_subscriber.rb'
453
-
454
- # Offense count: 2
455
- # Configuration parameters: .
456
- # SupportedStyles: annotated, template, unannotated
457
- Style/FormatStringToken:
458
- EnforcedStyle: unannotated
459
-
460
- # Offense count: 219
461
- # Cop supports --auto-correct.
462
- # Configuration parameters: EnforcedStyle.
463
- # SupportedStyles: always, never
464
- Style/FrozenStringLiteralComment:
465
- Enabled: false
466
-
467
- # Offense count: 1
468
- # Configuration parameters: AllowIfModifier.
469
- Style/IfInsideElse:
470
- Exclude:
471
- - 'lib/flipper/gates/actor.rb'
472
-
473
- # Offense count: 1
474
- Style/MethodMissingSuper:
475
- Exclude:
476
- - 'lib/flipper/types/actor.rb'
477
-
478
- # Offense count: 1
479
- Style/MissingRespondToMissing:
480
- Exclude:
481
- - 'lib/flipper/types/actor.rb'
482
-
483
- # Offense count: 1
484
- # Cop supports --auto-correct.
485
- # Configuration parameters: EnforcedStyle.
486
- # SupportedStyles: literals, strict
487
- Style/MutableConstant:
488
- Exclude:
489
- - 'lib/flipper/ui/util.rb'
490
-
491
- # Offense count: 5
492
- # Cop supports --auto-correct.
493
- # Configuration parameters: AutoCorrect, EnforcedStyle, IgnoredMethods.
494
- # SupportedStyles: predicate, comparison
495
- Style/NumericPredicate:
496
- Exclude:
497
- - 'spec/**/*'
498
- - 'lib/flipper/api/v1/actions/percentage_of_actors_gate.rb'
499
- - 'lib/flipper/api/v1/actions/percentage_of_time_gate.rb'
500
- - 'lib/flipper/gates/percentage_of_actors.rb'
501
- - 'lib/flipper/gates/percentage_of_time.rb'
502
- - 'lib/flipper/types/percentage.rb'
503
-
504
- # Offense count: 34
505
- # Cop supports --auto-correct.
506
- # Configuration parameters: PreferredDelimiters.
507
- Style/PercentLiteralDelimiters:
508
- Exclude:
509
- - 'Rakefile'
510
- - 'lib/flipper/spec/shared_adapter_specs.rb'
511
- - 'lib/flipper/test/shared_adapter_test.rb'
512
- - 'lib/flipper/ui.rb'
513
- - 'lib/flipper/ui/configuration.rb'
514
- - 'spec/flipper/adapter_spec.rb'
515
- - 'spec/flipper/adapters/http_spec.rb'
516
- - 'spec/flipper/adapters/memoizable_spec.rb'
517
- - 'spec/flipper/adapters/sync/synchronizer_spec.rb'
518
- - 'spec/flipper/adapters/sync_spec.rb'
519
- - 'spec/flipper/api/v1/actions/features_spec.rb'
520
- - 'spec/flipper/api_spec.rb'
521
- - 'spec/flipper/dsl_spec.rb'
522
- - 'spec/flipper/middleware/memoizer_spec.rb'
523
- - 'spec/flipper/registry_spec.rb'
524
-
525
- # Offense count: 3
526
- # Cop supports --auto-correct.
527
- Style/RedundantBegin:
528
- Exclude:
529
- - 'spec/flipper/middleware/memoizer_spec.rb'
530
- - 'spec/flipper/ui/actions/feature_spec.rb'
531
- - 'spec/flipper/ui_spec.rb'
532
-
533
- # Offense count: 2
534
- # Cop supports --auto-correct.
535
- # Configuration parameters: EnforcedStyle.
536
- # SupportedStyles: implicit, explicit
537
- Style/RescueStandardError:
538
- Exclude:
539
- - 'lib/flipper/adapters/sync/synchronizer.rb'
540
- - 'spec/flipper/middleware/memoizer_spec.rb'
541
-
542
- # Offense count: 4
543
- # Cop supports --auto-correct.
544
- # Configuration parameters: ConvertCodeThatCanStartToReturnNil, Whitelist.
545
- # Whitelist: present?, blank?, presence, try, try!
546
- Style/SafeNavigation:
547
- Exclude:
548
- - 'lib/flipper/instrumentation/statsd_subscriber.rb'
549
- - 'lib/flipper/middleware/memoizer.rb'
550
- - 'spec/flipper/adapters/http_spec.rb'
551
-
552
- # Offense count: 8
553
- # Cop supports --auto-correct.
554
- # Configuration parameters: EnforcedStyle, MinSize.
555
- # SupportedStyles: percent, brackets
556
- Style/SymbolArray:
557
- Exclude:
558
- - 'Rakefile'
559
- - 'lib/flipper/adapters/operation_logger.rb'
560
- - 'lib/generators/flipper/templates/sequel_migration.rb'
561
- - 'spec/flipper/adapters/rollout_spec.rb'
562
- - 'spec/flipper/gate_values_spec.rb'