flipper 0.17.1 → 0.17.2

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.
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