flipper 0.15.0 → 0.16.0
Sign up to get free protection for your applications and to get access to all the features.
- 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://avatars3.githubusercontent.com/u/3260042?s=64) | [@alexwheeler](https://github.com/alexwheeler) | api |
|
106
105
|
| ![@thetimbanks](https://avatars1.githubusercontent.com/u/471801?s=64) | [@thetimbanks](https://github.com/thetimbanks) | ui |
|
107
106
|
| ![@lazebny](https://avatars1.githubusercontent.com/u/6276766?s=64) | [@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:
|