flipper 0.17.1 → 0.17.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: df515c2e52128d5b5508b4aa16799850313e11cc519d5a21894f2d968d5de19c
4
- data.tar.gz: 5747f267aad32feb4a7b63207905f74096fd4f2a2b7037bed5909b4b37446586
3
+ metadata.gz: 74b7be3b37819e554e11bfc661794d50f90804ae5665bd7913c08239bb2d14aa
4
+ data.tar.gz: 1045e365f31c98ce51e441d0ea0aacac5eeb36e4a9158aa246bd9c3fa778ab81
5
5
  SHA512:
6
- metadata.gz: eef86eef8bcd970d5f4e96daa3f7c4296a74cec026ba94a1d8c9679ef50cb9515c490d0b3bd1479a780f3c98f115c1023f2c5ed9f216230ebba1c0ca402e89f6
7
- data.tar.gz: 6fa04470cdf9e5c3b53b7489dff534780e6a8855ffb8fb6fdd74017caf392c7955fe45d18f209054eca7f26d35747d34719fee895e35a8877485adc6edd6083b
6
+ metadata.gz: 78acbd2f020a59b1b4912cea78715195e6956918a3c4ad5158053a233709d98ee73f464b6f24bd081e25428ad04721538f8dde7ae4b76d994e421926bd9c11f9
7
+ data.tar.gz: d81461bbaacf4028e4f1eb5c9e7ce633d94176ba42c9a5da8504f3123b5caa8c5c73355a17fd5623b5b9c0d2c3c41ab76952e923183a7ae3fbe466a034472506
@@ -33,7 +33,7 @@ Style/GuardClause:
33
33
  Style/IfUnlessModifier:
34
34
  Enabled: false
35
35
 
36
- Metrics/LineLength:
36
+ Layout/LineLength:
37
37
  Max: 100
38
38
 
39
39
  Style/RegexpLiteral:
@@ -48,5 +48,5 @@ Style/TrailingCommaInHashLiteral:
48
48
  RSpec/InstanceVariable:
49
49
  Enabled: false
50
50
 
51
- Lint/HandleExceptions:
51
+ Lint/SuppressedException:
52
52
  Enabled: false
@@ -32,7 +32,7 @@ Gemspec/OrderedDependencies:
32
32
  # SupportedHashRocketStyles: key, separator, table
33
33
  # SupportedColonStyles: key, separator, table
34
34
  # SupportedLastArgumentHashStyles: always_inspect, always_ignore, ignore_implicit, ignore_explicit
35
- Layout/AlignHash:
35
+ Layout/HashAlignment:
36
36
  Exclude:
37
37
  - 'lib/flipper/typecast.rb'
38
38
 
@@ -81,7 +81,7 @@ Layout/EmptyLinesAroundExceptionHandlingKeywords:
81
81
  # Cop supports --auto-correct.
82
82
  # Configuration parameters: EnforcedStyle.
83
83
  # SupportedStyles: squiggly, active_support, powerpack, unindent
84
- Layout/IndentHeredoc:
84
+ Layout/HeredocIndentation:
85
85
  Exclude:
86
86
  - 'test/generators/flipper/active_record_generator_test.rb'
87
87
 
@@ -138,13 +138,13 @@ Lint/ShadowingOuterLocalVariable:
138
138
 
139
139
  # Offense count: 2
140
140
  # Cop supports --auto-correct.
141
- Lint/UnneededCopDisableDirective:
141
+ Lint/RedundantCopDisableDirective:
142
142
  Exclude:
143
143
  - 'spec/flipper/adapter_spec.rb'
144
144
 
145
145
  # Offense count: 1
146
146
  # Cop supports --auto-correct.
147
- Lint/UnneededRequireStatement:
147
+ Lint/RedundantRequireStatement:
148
148
  Exclude:
149
149
  - 'lib/flipper/registry.rb'
150
150
 
@@ -174,13 +174,13 @@ Metrics/BlockLength:
174
174
  # Offense count: 11
175
175
  # Configuration parameters: CountComments.
176
176
  Metrics/ClassLength:
177
- Max: 150
177
+ Max: 160
178
178
 
179
179
  # Offense count: 20
180
180
  # Cop supports --auto-correct.
181
181
  # Configuration parameters: AutoCorrect, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
182
182
  # URISchemes: http, https
183
- Metrics/LineLength:
183
+ Layout/LineLength:
184
184
  Max: 251
185
185
 
186
186
  # Offense count: 59
@@ -1,3 +1,12 @@
1
+ ## 0.17.2
2
+
3
+ ### Additions/Changes
4
+
5
+ * Avoid errors on import when there are no features and shared specs/tests for get all with no features (https://github.com/jnunemaker/flipper/pull/441 and https://github.com/jnunemaker/flipper/pull/442)
6
+ * ::ActiveRecord::RecordNotUnique > ActiveRecord::RecordNotUnique (https://github.com/jnunemaker/flipper/pull/444)
7
+ * Clear gate values on enable (https://github.com/jnunemaker/flipper/pull/454)
8
+ * Remove use of multi from redis adapter (https://github.com/jnunemaker/flipper/pull/451)
9
+
1
10
  ## 0.17.1
2
11
 
3
12
  * Fix require in flipper-active_record (https://github.com/jnunemaker/flipper/pull/437)
@@ -139,7 +139,7 @@ Flipper.register(:admins) do |actor|
139
139
  actor.respond_to?(:admin?) && actor.admin?
140
140
  end
141
141
  ```
142
- - The above first registers a group called `admins` which essentially saves a [Proc](http://www.eriktrautman.com/posts/ruby-explained-blocks-procs-and-lambdas-aka-closures) to be called later.
142
+ - The above first registers a group called `admins` which essentially saves a [Proc](http://www.eriktrautman.com/posts/ruby-explained-blocks-procs-and-lambdas-aka-closures) to be called later. The `actor` is an instance of the `Flipper::Types::Actor` that wraps the thing being checked against and `actor.thing` is the original object being checked.
143
143
 
144
144
  ```
145
145
  flipper[:stats].enable flipper.group(:admins)
@@ -25,13 +25,13 @@ Gem::Specification.new do |gem|
25
25
  gem.authors = ['John Nunemaker']
26
26
  gem.email = ['nunemaker@gmail.com']
27
27
  gem.summary = 'Feature flipper for ANYTHING'
28
- gem.description = 'Feature flipper is the act of enabling/disabling features in your application, ideally without re-deploying or changing anything in your code base. Flipper makes this extremely easy to do with any backend you would like to use.' # rubocop:disable Metrics/LineLength
28
+ gem.description = 'Feature flipper is the act of enabling/disabling features in your application, ideally without re-deploying or changing anything in your code base. Flipper makes this extremely easy to do with any backend you would like to use.' # rubocop:disable Layout/LineLength
29
29
  gem.homepage = 'https://github.com/jnunemaker/flipper'
30
30
  gem.license = 'MIT'
31
31
 
32
- gem.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) } # rubocop:disable Metrics/LineLength
33
- gem.files = `git ls-files`.split("\n") - ignored_files + ['lib/flipper/version.rb'] # rubocop:disable Metrics/LineLength
34
- gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n") - ignored_test_files # rubocop:disable Metrics/LineLength
32
+ gem.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
33
+ gem.files = `git ls-files`.split("\n") - ignored_files + ['lib/flipper/version.rb']
34
+ gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n") - ignored_test_files
35
35
  gem.name = 'flipper'
36
36
  gem.require_paths = ['lib']
37
37
  gem.version = Flipper::VERSION
@@ -65,7 +65,10 @@ module Flipper
65
65
  # Public
66
66
  def enable(feature, gate, thing)
67
67
  case gate.data_type
68
- when :boolean, :integer
68
+ when :boolean
69
+ clear(feature)
70
+ write key(feature, gate), thing.value.to_s
71
+ when :integer
69
72
  write key(feature, gate), thing.value.to_s
70
73
  when :set
71
74
  set_add key(feature, gate), thing.value.to_s
@@ -84,7 +84,10 @@ module Flipper
84
84
  def enable(feature, gate, thing)
85
85
  @store.transaction do
86
86
  case gate.data_type
87
- when :boolean, :integer
87
+ when :boolean
88
+ clear_gates(feature)
89
+ write key(feature, gate), thing.value.to_s
90
+ when :integer
88
91
  write key(feature, gate), thing.value.to_s
89
92
  when :set
90
93
  set_add key(feature, gate), thing.value.to_s
@@ -23,7 +23,7 @@ module Flipper
23
23
  #
24
24
  def initialize(app, opts = {})
25
25
  if opts.is_a?(Flipper::DSL) || opts.is_a?(Proc)
26
- raise 'Flipper::Middleware::Memoizer no longer initializes with a flipper instance or block. Read more at: https://git.io/vSo31.' # rubocop:disable LineLength
26
+ raise 'Flipper::Middleware::Memoizer no longer initializes with a flipper instance or block. Read more at: https://git.io/vSo31.' # rubocop:disable Layout/LineLength
27
27
  end
28
28
 
29
29
  @app = app
@@ -289,4 +289,19 @@ RSpec.shared_examples_for 'a flipper adapter' do
289
289
  expect(subject.enable(feature, boolean_gate, flipper.boolean)).to eq(true)
290
290
  expect(subject.enable(feature, boolean_gate, flipper.boolean)).to eq(true)
291
291
  end
292
+
293
+ it 'can get_all features when there are none' do
294
+ expect(subject.features).to eq(Set.new)
295
+ expect(subject.get_all).to eq({})
296
+ end
297
+
298
+ it 'clears other gate values on enable' do
299
+ actor = Flipper::Actor.new('Flipper::Actor;22')
300
+ subject.enable(feature, actors_gate, flipper.actors(25))
301
+ subject.enable(feature, time_gate, flipper.time(25))
302
+ subject.enable(feature, group_gate, flipper.group(:admins))
303
+ subject.enable(feature, actor_gate, flipper.actor(actor))
304
+ subject.enable(feature, boolean_gate, flipper.boolean(true))
305
+ expect(subject.get(feature)).to eq(subject.default_config.merge(boolean: "true"))
306
+ end
292
307
  end
@@ -285,6 +285,22 @@ module Flipper
285
285
  assert_equal true, @adapter.enable(@feature, @boolean_gate, @flipper.boolean)
286
286
  assert_equal true, @adapter.enable(@feature, @boolean_gate, @flipper.boolean)
287
287
  end
288
+
289
+ def test_can_get_all_features_when_there_are_none
290
+ expected = {}
291
+ assert_equal Set.new, @adapter.features
292
+ assert_equal expected, @adapter.get_all
293
+ end
294
+
295
+ def test_clears_other_gate_values_on_enable
296
+ actor = Flipper::Actor.new('Flipper::Actor;22')
297
+ assert_equal true, @adapter.enable(@feature, @actors_gate, @flipper.actors(25))
298
+ assert_equal true, @adapter.enable(@feature, @time_gate, @flipper.time(25))
299
+ assert_equal true, @adapter.enable(@feature, @group_gate, @flipper.group(:admins))
300
+ assert_equal true, @adapter.enable(@feature, @actor_gate, @flipper.actor(actor))
301
+ assert_equal true, @adapter.enable(@feature, @boolean_gate, @flipper.boolean(true))
302
+ assert_equal @adapter.default_config.merge(boolean: "true"), @adapter.get(@feature)
303
+ end
288
304
  end
289
305
  end
290
306
  end
@@ -1,3 +1,3 @@
1
1
  module Flipper
2
- VERSION = '0.17.1'.freeze
2
+ VERSION = '0.17.2'.freeze
3
3
  end
@@ -17,7 +17,7 @@ require 'flipper'
17
17
  require 'flipper-ui'
18
18
  require 'flipper-api'
19
19
 
20
- Dir[FlipperRoot.join('spec/support/**/*.rb')].each { |f| require f }
20
+ Dir[FlipperRoot.join('spec/support/**/*.rb')].sort.each { |f| require f }
21
21
 
22
22
  RSpec.configure do |config|
23
23
  config.before(:example) do
@@ -1,6 +1,6 @@
1
1
  require 'flipper'
2
2
  require 'minitest/autorun'
3
3
  require 'minitest/unit'
4
- Dir['./lib/flipper/test/*.rb'].each { |f| require(f) }
4
+ Dir['./lib/flipper/test/*.rb'].sort.each { |f| require(f) }
5
5
 
6
6
  FlipperRoot = Pathname(__FILE__).dirname.join('..').expand_path
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.17.1
4
+ version: 0.17.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Nunemaker
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-09-14 00:00:00.000000000 Z
11
+ date: 2020-01-04 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Feature flipper is the act of enabling/disabling features in your application,
14
14
  ideally without re-deploying or changing anything in your code base. Flipper makes