flipper 0.15.0 → 0.16.0
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 +4 -4
- data/Changelog.md +12 -1
- data/README.md +0 -2
- data/docs/Adapters.md +1 -2
- data/docs/Optimization.md +0 -5
- data/docs/read-only/README.md +0 -1
- data/examples/basic.rb +0 -1
- data/examples/configuring_default.rb +0 -1
- data/examples/dsl.rb +0 -1
- data/examples/enabled_for_actor.rb +0 -1
- data/examples/group.rb +0 -1
- data/examples/group_dynamic_lookup.rb +0 -1
- data/examples/group_with_members.rb +0 -1
- data/examples/individual_actor.rb +0 -1
- data/examples/instrumentation.rb +0 -1
- data/examples/percentage_of_actors.rb +0 -1
- data/examples/percentage_of_actors_enabled_check.rb +0 -1
- data/examples/percentage_of_actors_group.rb +0 -1
- data/examples/percentage_of_time.rb +0 -1
- data/flipper.gemspec +2 -0
- data/lib/flipper.rb +15 -2
- data/lib/flipper/adapter.rb +2 -0
- data/lib/flipper/adapters/instrumented.rb +0 -1
- data/lib/flipper/adapters/pstore.rb +1 -0
- data/lib/flipper/adapters/read_only.rb +2 -0
- data/lib/flipper/adapters/sync.rb +0 -1
- data/lib/flipper/adapters/sync/interval_synchronizer.rb +7 -6
- data/lib/flipper/adapters/sync/synchronizer.rb +0 -1
- data/lib/flipper/dsl.rb +10 -3
- data/lib/flipper/feature.rb +8 -2
- data/lib/flipper/gate_values.rb +1 -0
- data/lib/flipper/metadata.rb +5 -0
- data/lib/flipper/type.rb +0 -7
- data/lib/flipper/typecast.rb +2 -0
- data/lib/flipper/types/boolean.rb +2 -0
- data/lib/flipper/types/percentage.rb +2 -0
- data/lib/flipper/version.rb +1 -1
- data/spec/flipper/adapter_spec.rb +0 -1
- data/spec/flipper/adapters/instrumented_spec.rb +0 -1
- data/spec/flipper/adapters/memoizable_spec.rb +0 -1
- data/spec/flipper/adapters/memory_spec.rb +0 -1
- data/spec/flipper/adapters/operation_logger_spec.rb +0 -1
- data/spec/flipper/adapters/sync/interval_synchronizer_spec.rb +4 -4
- data/spec/flipper/adapters/sync_spec.rb +0 -1
- data/spec/flipper/dsl_spec.rb +11 -1
- data/spec/flipper/feature_spec.rb +22 -1
- data/spec/flipper/instrumentation/log_subscriber_spec.rb +0 -1
- data/spec/flipper/instrumentation/statsd_subscriber_spec.rb +0 -1
- data/spec/flipper/instrumenters/noop_spec.rb +0 -1
- data/spec/flipper/middleware/memoizer_spec.rb +0 -2
- data/spec/flipper_spec.rb +4 -0
- data/spec/integration_spec.rb +0 -1
- data/spec/support/spec_helpers.rb +0 -1
- data/test/adapters/memory_test.rb +0 -1
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 49607173763cd256cdb8f6a9ef1ada1fb213092a
|
4
|
+
data.tar.gz: 123bcd59f941d0a4673526132bab358c75ada4ae
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bf6951c97102685c5222c8b096133857b0a7a3251190cd3e6cf8885b0260463c341b8bb9f02e100e2ea2f541999ff6c7c53e6d4f73abed1cea09c8327f70acd4
|
7
|
+
data.tar.gz: 10ecb72720e4b8a58956d025351118810baa6c20c82ec629ea6c5117b870cf2ef499958ba6efd6e924ecfadc86776a73be66a11c200251e39d08c64897452c72
|
data/Changelog.md
CHANGED
@@ -1,4 +1,15 @@
|
|
1
|
-
##
|
1
|
+
## 0.16.0
|
2
|
+
|
3
|
+
### Bug Fixes
|
4
|
+
|
5
|
+
* Support slashes in feature names (https://github.com/jnunemaker/flipper/pull/362).
|
6
|
+
|
7
|
+
### Additions/Changes
|
8
|
+
|
9
|
+
* Re-order gates for improved performance in some cases (https://github.com/jnunemaker/flipper/pull/370).
|
10
|
+
* Add Feature#exist?, DSL#exist? and Flipper#exist? (https://github.com/jnunemaker/flipper/pull/371).
|
11
|
+
|
12
|
+
## 0.15.0
|
2
13
|
|
3
14
|
* Move Flipper::UI configuration options to Flipper::UI::Configuration (https://github.com/jnunemaker/flipper/pull/345).
|
4
15
|
* Bug fix in adapter synchronizing and switched DSL#import to use Synchronizer (https://github.com/jnunemaker/flipper/pull/347).
|
data/README.md
CHANGED
@@ -39,7 +39,6 @@ The goal of the API for flipper was to have everything revolve around features a
|
|
39
39
|
|
40
40
|
```ruby
|
41
41
|
require 'flipper'
|
42
|
-
require 'flipper/adapters/memory'
|
43
42
|
|
44
43
|
Flipper.configure do |config|
|
45
44
|
config.default do
|
@@ -105,4 +104,3 @@ Of course there are more [examples for you to peruse](examples/). You could also
|
|
105
104
|
|  | [@alexwheeler](https://github.com/alexwheeler) | api |
|
106
105
|
|  | [@thetimbanks](https://github.com/thetimbanks) | ui |
|
107
106
|
|  | [@lazebny](https://github.com/lazebny) | docker |
|
108
|
-
|
data/docs/Adapters.md
CHANGED
@@ -9,6 +9,7 @@ I plan on supporting the adapters in the flipper repo. Other adapters are welcom
|
|
9
9
|
* [Cassanity adapter](https://github.com/jnunemaker/flipper-cassanity)
|
10
10
|
* [Http adapter](https://github.com/jnunemaker/flipper/blob/master/docs/http)
|
11
11
|
* [memory adapter](https://github.com/jnunemaker/flipper/blob/master/lib/flipper/adapters/memory.rb) – great for tests
|
12
|
+
* [Moneta adapter](https://github.com/jnunemaker/flipper/blob/master/docs/moneta)
|
12
13
|
* [Mongo adapter](https://github.com/jnunemaker/flipper/blob/master/docs/mongo)
|
13
14
|
* [PStore adapter](https://github.com/jnunemaker/flipper/blob/master/lib/flipper/adapters/pstore.rb) – great for when a local file is enough
|
14
15
|
* [read-only adapter](https://github.com/jnunemaker/flipper/blob/master/docs/read-only)
|
@@ -43,7 +44,6 @@ For example, here is what the in-memory adapter spec looks like:
|
|
43
44
|
|
44
45
|
```ruby
|
45
46
|
require 'helper'
|
46
|
-
require 'flipper/adapters/memory'
|
47
47
|
|
48
48
|
# The shared specs are included with the flipper gem so you can use them in
|
49
49
|
# separate adapter specific gems.
|
@@ -67,7 +67,6 @@ Here is what an in-memory adapter MiniTest looks like:
|
|
67
67
|
|
68
68
|
```ruby
|
69
69
|
require 'test_helper'
|
70
|
-
require 'flipper/adapters/memory'
|
71
70
|
|
72
71
|
class MemoryTest < MiniTest::Test
|
73
72
|
prepend SharedAdapterTests
|
data/docs/Optimization.md
CHANGED
@@ -15,7 +15,6 @@ Flipper.configure do |config|
|
|
15
15
|
end
|
16
16
|
|
17
17
|
# This assumes you setup a default flipper instance using configure.
|
18
|
-
require 'flipper/middleware/memoizer'
|
19
18
|
config.middleware.use Flipper::Middleware::Memoizer
|
20
19
|
```
|
21
20
|
|
@@ -24,8 +23,6 @@ config.middleware.use Flipper::Middleware::Memoizer
|
|
24
23
|
**Also Note**: If you haven't setup a default instance, you can pass the instance to `SetupEnv` as `Memoizer` uses whatever is setup in the `env`:
|
25
24
|
|
26
25
|
```ruby
|
27
|
-
require 'flipper/middleware/setup_env'
|
28
|
-
require 'flipper/middleware/memoizer'
|
29
26
|
config.middleware.use Flipper::Middleware::SetupEnv, -> { Flipper.new(...) }
|
30
27
|
config.middleware.use Flipper::Middleware::Memoizer
|
31
28
|
```
|
@@ -78,7 +75,6 @@ Initialize `RedisCache` with a flipper [adapter](https://github.com/jnunemaker/
|
|
78
75
|
Example using the RedisCache adapter with the Memory adapter and a TTL of 4800 seconds:
|
79
76
|
|
80
77
|
```ruby
|
81
|
-
require 'flipper/adapters/memory'
|
82
78
|
require 'flipper/adapters/redis_cache'
|
83
79
|
|
84
80
|
redis = Redis.new(url: ENV['REDIS_URL'])
|
@@ -107,7 +103,6 @@ Example using the ActiveSupportCacheStore adapter with ActiveSupport's [MemorySt
|
|
107
103
|
|
108
104
|
```ruby
|
109
105
|
require 'active_support/cache'
|
110
|
-
require 'flipper/adapters/memory'
|
111
106
|
require 'flipper/adapters/active_support_cache_store'
|
112
107
|
|
113
108
|
memory_adapter = Flipper::Adapters::Memory.new
|
data/docs/read-only/README.md
CHANGED
@@ -8,7 +8,6 @@ Any attempted write raises `Flipper::Adapters::ReadOnly::WriteAttempted` with m
|
|
8
8
|
## Usage
|
9
9
|
```ruby
|
10
10
|
# example wrapping memory adapter
|
11
|
-
require 'flipper/adapters/memory'
|
12
11
|
require 'flipper/adapters/read_only'
|
13
12
|
|
14
13
|
memory_adapter = Flipper::Adapters::Memory.new
|
data/examples/basic.rb
CHANGED
data/examples/dsl.rb
CHANGED
data/examples/group.rb
CHANGED
data/examples/instrumentation.rb
CHANGED
data/flipper.gemspec
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
require File.expand_path('../lib/flipper/version', __FILE__)
|
3
|
+
require File.expand_path('../lib/flipper/metadata', __FILE__)
|
3
4
|
|
4
5
|
plugin_files = []
|
5
6
|
plugin_test_files = []
|
@@ -34,4 +35,5 @@ Gem::Specification.new do |gem|
|
|
34
35
|
gem.name = 'flipper'
|
35
36
|
gem.require_paths = ['lib']
|
36
37
|
gem.version = Flipper::VERSION
|
38
|
+
gem.metadata = Flipper::METADATA
|
37
39
|
end
|
data/lib/flipper.rb
CHANGED
@@ -64,7 +64,7 @@ module Flipper
|
|
64
64
|
:enable_percentage_of_time, :disable_percentage_of_time,
|
65
65
|
:time, :percentage_of_time,
|
66
66
|
:features, :feature, :[], :preload, :preload_all,
|
67
|
-
:adapter, :add, :remove, :import,
|
67
|
+
:adapter, :add, :exist?, :remove, :import,
|
68
68
|
:memoize=, :memoizing?
|
69
69
|
|
70
70
|
# Public: Use this to register a group by name.
|
@@ -140,12 +140,25 @@ module Flipper
|
|
140
140
|
end
|
141
141
|
|
142
142
|
require 'flipper/actor'
|
143
|
-
require 'flipper/configuration'
|
144
143
|
require 'flipper/adapter'
|
144
|
+
require 'flipper/adapters/memoizable'
|
145
|
+
require 'flipper/adapters/memory'
|
146
|
+
require 'flipper/adapters/instrumented'
|
147
|
+
require 'flipper/configuration'
|
145
148
|
require 'flipper/dsl'
|
146
149
|
require 'flipper/errors'
|
147
150
|
require 'flipper/feature'
|
148
151
|
require 'flipper/gate'
|
152
|
+
require 'flipper/instrumenters/memory'
|
153
|
+
require 'flipper/instrumenters/noop'
|
154
|
+
require 'flipper/middleware/memoizer'
|
155
|
+
require 'flipper/middleware/setup_env'
|
149
156
|
require 'flipper/registry'
|
150
157
|
require 'flipper/type'
|
158
|
+
require 'flipper/types/actor'
|
159
|
+
require 'flipper/types/boolean'
|
160
|
+
require 'flipper/types/group'
|
161
|
+
require 'flipper/types/percentage'
|
162
|
+
require 'flipper/types/percentage_of_actors'
|
163
|
+
require 'flipper/types/percentage_of_time'
|
151
164
|
require 'flipper/typecast'
|
data/lib/flipper/adapter.rb
CHANGED
@@ -8,8 +8,8 @@ module Flipper
|
|
8
8
|
DEFAULT_INTERVAL = 10
|
9
9
|
|
10
10
|
# Private
|
11
|
-
def self.
|
12
|
-
Process.clock_gettime(Process::CLOCK_MONOTONIC, :
|
11
|
+
def self.now
|
12
|
+
Process.clock_gettime(Process::CLOCK_MONOTONIC, :second)
|
13
13
|
end
|
14
14
|
|
15
15
|
# Public: The Float or Integer number of seconds between invocations of
|
@@ -32,7 +32,7 @@ module Flipper
|
|
32
32
|
def call
|
33
33
|
return unless time_to_sync?
|
34
34
|
|
35
|
-
@last_sync_at =
|
35
|
+
@last_sync_at = now
|
36
36
|
@synchronizer.call
|
37
37
|
|
38
38
|
nil
|
@@ -41,11 +41,12 @@ module Flipper
|
|
41
41
|
private
|
42
42
|
|
43
43
|
def time_to_sync?
|
44
|
-
|
44
|
+
seconds_since_last_sync = now - @last_sync_at
|
45
|
+
seconds_since_last_sync >= @interval
|
45
46
|
end
|
46
47
|
|
47
|
-
def
|
48
|
-
self.class.
|
48
|
+
def now
|
49
|
+
self.class.now
|
49
50
|
end
|
50
51
|
end
|
51
52
|
end
|
data/lib/flipper/dsl.rb
CHANGED
@@ -1,6 +1,4 @@
|
|
1
1
|
require 'forwardable'
|
2
|
-
require 'flipper/adapters/memoizable'
|
3
|
-
require 'flipper/instrumenters/noop'
|
4
2
|
|
5
3
|
module Flipper
|
6
4
|
class DSL
|
@@ -153,6 +151,15 @@ module Flipper
|
|
153
151
|
feature(name).add
|
154
152
|
end
|
155
153
|
|
154
|
+
# Public: Has a feature been added in the adapter.
|
155
|
+
#
|
156
|
+
# name - The String or Symbol name of the feature.
|
157
|
+
#
|
158
|
+
# Returns true if added else false.
|
159
|
+
def exist?(name)
|
160
|
+
feature(name).exist?
|
161
|
+
end
|
162
|
+
|
156
163
|
# Public: Remove a feature.
|
157
164
|
#
|
158
165
|
# name - The String or Symbol name of the feature.
|
@@ -210,7 +217,7 @@ module Flipper
|
|
210
217
|
Types::Boolean.new(value)
|
211
218
|
end
|
212
219
|
|
213
|
-
# Public:
|
220
|
+
# Public: Even shorter shortcut for getting a boolean type instance.
|
214
221
|
#
|
215
222
|
# value - The true or false value for the boolean.
|
216
223
|
#
|
data/lib/flipper/feature.rb
CHANGED
@@ -3,7 +3,6 @@ require 'flipper/type'
|
|
3
3
|
require 'flipper/gate'
|
4
4
|
require 'flipper/feature_check_context'
|
5
5
|
require 'flipper/gate_values'
|
6
|
-
require 'flipper/instrumenters/noop'
|
7
6
|
|
8
7
|
module Flipper
|
9
8
|
# rubocop:disable Metrics/ClassLength
|
@@ -77,6 +76,13 @@ module Flipper
|
|
77
76
|
instrument(:add) { adapter.add(self) }
|
78
77
|
end
|
79
78
|
|
79
|
+
# Public: Does this feature exist in the adapter.
|
80
|
+
#
|
81
|
+
# Returns true if exists in adapter else false.
|
82
|
+
def exist?
|
83
|
+
instrument(:exist?) { adapter.features.include?(key) }
|
84
|
+
end
|
85
|
+
|
80
86
|
# Public: Removes this feature.
|
81
87
|
#
|
82
88
|
# Returns the result of Adapter#remove.
|
@@ -336,10 +342,10 @@ module Flipper
|
|
336
342
|
def gates
|
337
343
|
@gates ||= [
|
338
344
|
Gates::Boolean.new,
|
339
|
-
Gates::Group.new,
|
340
345
|
Gates::Actor.new,
|
341
346
|
Gates::PercentageOfActors.new,
|
342
347
|
Gates::PercentageOfTime.new,
|
348
|
+
Gates::Group.new,
|
343
349
|
]
|
344
350
|
end
|
345
351
|
|
data/lib/flipper/gate_values.rb
CHANGED
data/lib/flipper/type.rb
CHANGED
@@ -14,10 +14,3 @@ module Flipper
|
|
14
14
|
alias_method :==, :eql?
|
15
15
|
end
|
16
16
|
end
|
17
|
-
|
18
|
-
require 'flipper/types/actor'
|
19
|
-
require 'flipper/types/boolean'
|
20
|
-
require 'flipper/types/group'
|
21
|
-
require 'flipper/types/percentage'
|
22
|
-
require 'flipper/types/percentage_of_actors'
|
23
|
-
require 'flipper/types/percentage_of_time'
|
data/lib/flipper/typecast.rb
CHANGED
data/lib/flipper/version.rb
CHANGED
@@ -3,7 +3,7 @@ require "flipper/adapters/sync/interval_synchronizer"
|
|
3
3
|
|
4
4
|
RSpec.describe Flipper::Adapters::Sync::IntervalSynchronizer do
|
5
5
|
let(:events) { [] }
|
6
|
-
let(:synchronizer) { -> { events << described_class.
|
6
|
+
let(:synchronizer) { -> { events << described_class.now } }
|
7
7
|
let(:interval) { 10 }
|
8
8
|
|
9
9
|
subject { described_class.new(synchronizer, interval: interval) }
|
@@ -15,19 +15,19 @@ RSpec.describe Flipper::Adapters::Sync::IntervalSynchronizer do
|
|
15
15
|
end
|
16
16
|
|
17
17
|
it "only invokes wrapped synchronizer every interval seconds" do
|
18
|
-
now = described_class.
|
18
|
+
now = described_class.now
|
19
19
|
subject.call
|
20
20
|
events.clear
|
21
21
|
|
22
22
|
# move time to one millisecond less than last sync + interval
|
23
23
|
1.upto(interval) do |i|
|
24
|
-
allow(described_class).to receive(:
|
24
|
+
allow(described_class).to receive(:now).and_return(now + i - 1)
|
25
25
|
subject.call
|
26
26
|
end
|
27
27
|
expect(events.size).to be(0)
|
28
28
|
|
29
29
|
# move time to last sync + interval in milliseconds
|
30
|
-
allow(described_class).to receive(:
|
30
|
+
allow(described_class).to receive(:now).and_return(now + interval)
|
31
31
|
subject.call
|
32
32
|
expect(events.size).to be(1)
|
33
33
|
end
|
data/spec/flipper/dsl_spec.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'helper'
|
2
2
|
require 'flipper/dsl'
|
3
|
-
require 'flipper/adapters/memory'
|
4
3
|
|
5
4
|
RSpec.describe Flipper::DSL do
|
6
5
|
subject { described_class.new(adapter) }
|
@@ -313,6 +312,17 @@ RSpec.describe Flipper::DSL do
|
|
313
312
|
end
|
314
313
|
end
|
315
314
|
|
315
|
+
describe '#exist?' do
|
316
|
+
it 'returns true if the feature is added in adapter' do
|
317
|
+
subject.add(:stats)
|
318
|
+
expect(subject.exist?(:stats)).to be(true)
|
319
|
+
end
|
320
|
+
|
321
|
+
it 'returns false if the feature is NOT added in adapter' do
|
322
|
+
expect(subject.exist?(:stats)).to be(false)
|
323
|
+
end
|
324
|
+
end
|
325
|
+
|
316
326
|
describe '#remove' do
|
317
327
|
it 'removes the feature' do
|
318
328
|
subject.adapter.add(subject[:stats])
|
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'helper'
|
2
2
|
require 'flipper/feature'
|
3
|
-
require 'flipper/adapters/memory'
|
4
3
|
require 'flipper/instrumenters/memory'
|
5
4
|
|
6
5
|
RSpec.describe Flipper::Feature do
|
@@ -97,6 +96,17 @@ RSpec.describe Flipper::Feature do
|
|
97
96
|
end
|
98
97
|
end
|
99
98
|
|
99
|
+
describe '#exist?' do
|
100
|
+
it 'returns true if feature is added in adapter' do
|
101
|
+
subject.add
|
102
|
+
expect(subject.exist?).to be(true)
|
103
|
+
end
|
104
|
+
|
105
|
+
it 'returns false if feature is NOT added in adapter' do
|
106
|
+
expect(subject.exist?).to be(false)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
100
110
|
describe '#remove' do
|
101
111
|
it 'removes feature from adapter' do
|
102
112
|
adapter.add(subject)
|
@@ -232,6 +242,17 @@ RSpec.describe Flipper::Feature do
|
|
232
242
|
expect(event.payload[:result]).not_to be_nil
|
233
243
|
end
|
234
244
|
|
245
|
+
it 'is recorded for exist?' do
|
246
|
+
subject.exist?
|
247
|
+
|
248
|
+
event = instrumenter.events.last
|
249
|
+
expect(event).not_to be_nil
|
250
|
+
expect(event.name).to eq('feature_operation.flipper')
|
251
|
+
expect(event.payload[:feature_name]).to eq(:search)
|
252
|
+
expect(event.payload[:operation]).to eq(:exist?)
|
253
|
+
expect(event.payload[:result]).not_to be_nil
|
254
|
+
end
|
255
|
+
|
235
256
|
it 'is recorded for remove' do
|
236
257
|
subject.remove
|
237
258
|
|
@@ -2,10 +2,8 @@ require 'helper'
|
|
2
2
|
require 'rack/test'
|
3
3
|
require 'active_support/cache'
|
4
4
|
require 'active_support/cache/dalli_store'
|
5
|
-
require 'flipper/middleware/memoizer'
|
6
5
|
require 'flipper/adapters/active_support_cache_store'
|
7
6
|
require 'flipper/adapters/operation_logger'
|
8
|
-
require 'flipper/adapters/memory'
|
9
7
|
|
10
8
|
RSpec.describe Flipper::Middleware::Memoizer do
|
11
9
|
include Rack::Test::Methods
|
data/spec/flipper_spec.rb
CHANGED
@@ -187,6 +187,10 @@ RSpec.describe Flipper do
|
|
187
187
|
expect(described_class.add(:search)).to eq(described_class.instance.add(:search))
|
188
188
|
end
|
189
189
|
|
190
|
+
it 'delegates exist? to instance' do
|
191
|
+
expect(described_class.exist?(:search)).to eq(described_class.instance.exist?(:search))
|
192
|
+
end
|
193
|
+
|
190
194
|
it 'delegates remove to instance' do
|
191
195
|
expect(described_class.remove(:search)).to eq(described_class.instance.remove(:search))
|
192
196
|
end
|
data/spec/integration_spec.rb
CHANGED
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.
|
4
|
+
version: 0.16.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Nunemaker
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-08-01 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
|
@@ -89,6 +89,7 @@ files:
|
|
89
89
|
- lib/flipper/instrumentation/subscriber.rb
|
90
90
|
- lib/flipper/instrumenters/memory.rb
|
91
91
|
- lib/flipper/instrumenters/noop.rb
|
92
|
+
- lib/flipper/metadata.rb
|
92
93
|
- lib/flipper/middleware/memoizer.rb
|
93
94
|
- lib/flipper/middleware/setup_env.rb
|
94
95
|
- lib/flipper/registry.rb
|
@@ -154,7 +155,8 @@ files:
|
|
154
155
|
homepage: https://github.com/jnunemaker/flipper
|
155
156
|
licenses:
|
156
157
|
- MIT
|
157
|
-
metadata:
|
158
|
+
metadata:
|
159
|
+
changelog_uri: https://github.com/jnunemaker/flipper/blob/master/Changelog.md
|
158
160
|
post_install_message:
|
159
161
|
rdoc_options: []
|
160
162
|
require_paths:
|