flipper 0.26.0.rc1 → 0.26.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 +4 -1
- data/Rakefile +1 -1
- data/lib/flipper/adapters/poll/poller.rb +17 -15
- data/lib/flipper/metadata.rb +1 -1
- data/lib/flipper/railtie.rb +5 -5
- data/lib/flipper/version.rb +1 -1
- data/spec/flipper/railtie_spec.rb +36 -0
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e5edb0409042f8d4d5905b8d526fd1d240a75dbee2d947b8ae4adae0c534af5f
|
4
|
+
data.tar.gz: 6bc01d5f7c0ee5f3d64d30faaa599b155d6220e249006d2ead7168bc47938202
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 60fee2e4a0d97a26b7403736b4422c0e69a0e9e452469e3f29e7af684001c38f2c957acdfa3f8f0554315d021a7e7091bb40898247e45d4658b14b31bc1de22f
|
7
|
+
data.tar.gz: bf45e695be511513be967bffd75c4e48d3af0f05b05264ee3b13a9df8bba8af929ccbf6b7a1f05c6c3a7d5476ceb757e3dda852f8e42b745bf7171f42538fb14
|
data/Changelog.md
CHANGED
@@ -2,9 +2,12 @@
|
|
2
2
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
4
4
|
|
5
|
-
## 0.26.0
|
5
|
+
## 0.26.0
|
6
6
|
|
7
7
|
* Cloud Background Polling (https://github.com/jnunemaker/flipper/pull/682)
|
8
|
+
* Changed default branch from master to main
|
9
|
+
* Allow configuring railtie via ENV vars (https://github.com/jnunemaker/flipper/pull/681)
|
10
|
+
* flipper-ui: Fix issue preventing feature flags being enabled when confirm_fully_enable is on and feature_removal_enabled is off (https://github.com/jnunemaker/flipper/pull/680)
|
8
11
|
|
9
12
|
## 0.25.4
|
10
13
|
|
data/Rakefile
CHANGED
@@ -18,7 +18,7 @@ end
|
|
18
18
|
desc 'Tags version, pushes to remote, and pushes gem'
|
19
19
|
task release: :build do
|
20
20
|
sh 'git', 'tag', "v#{Flipper::VERSION}"
|
21
|
-
sh 'git push origin
|
21
|
+
sh 'git push origin main'
|
22
22
|
sh "git push origin v#{Flipper::VERSION}"
|
23
23
|
puts "\nWhat OTP code should be used?"
|
24
24
|
otp_code = STDIN.gets.chomp
|
@@ -7,9 +7,7 @@ module Flipper
|
|
7
7
|
module Adapters
|
8
8
|
class Poll
|
9
9
|
class Poller
|
10
|
-
|
11
|
-
|
12
|
-
attr_reader :thread, :pid, :mutex, :logger, :interval, :last_synced_at
|
10
|
+
attr_reader :thread, :pid, :mutex, :interval, :last_synced_at
|
13
11
|
|
14
12
|
def self.instances
|
15
13
|
@instances ||= Concurrent::Map.new
|
@@ -21,7 +19,7 @@ module Flipper
|
|
21
19
|
end
|
22
20
|
|
23
21
|
def self.reset
|
24
|
-
instances.clear
|
22
|
+
instances.each {|_,poller| poller.stop }.clear
|
25
23
|
end
|
26
24
|
|
27
25
|
def initialize(options = {})
|
@@ -29,14 +27,14 @@ module Flipper
|
|
29
27
|
@pid = Process.pid
|
30
28
|
@mutex = Mutex.new
|
31
29
|
@adapter = Memory.new
|
30
|
+
@instrumenter = options.fetch(:instrumenter, Instrumenters::Noop)
|
32
31
|
@remote_adapter = options.fetch(:remote_adapter)
|
33
|
-
@logger = options.fetch(:logger) { Logger.new(STDOUT) }
|
34
32
|
@interval = options.fetch(:interval, 10).to_f
|
35
33
|
@lock = Concurrent::ReadWriteLock.new
|
36
34
|
@last_synced_at = Concurrent::AtomicFixnum.new(0)
|
37
35
|
|
38
36
|
if @interval < 1
|
39
|
-
warn "
|
37
|
+
warn "Flipper::Cloud poll interval must be greater than or equal to 1 but was #{@interval}. Setting @interval to 1."
|
40
38
|
@interval = 1
|
41
39
|
end
|
42
40
|
|
@@ -57,7 +55,9 @@ module Flipper
|
|
57
55
|
end
|
58
56
|
|
59
57
|
def stop
|
60
|
-
|
58
|
+
@instrumenter.instrument("poller.#{InstrumentationNamespace}", {
|
59
|
+
operation: :stop,
|
60
|
+
})
|
61
61
|
@thread&.kill
|
62
62
|
end
|
63
63
|
|
@@ -66,15 +66,15 @@ module Flipper
|
|
66
66
|
sleep jitter
|
67
67
|
start = Concurrent.monotonic_time
|
68
68
|
begin
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
adapter.import(@remote_adapter)
|
69
|
+
@instrumenter.instrument("poller.#{InstrumentationNamespace}", operation: :poll) do
|
70
|
+
adapter = Memory.new
|
71
|
+
adapter.import(@remote_adapter)
|
73
72
|
|
74
|
-
|
75
|
-
|
73
|
+
@lock.with_write_lock { @adapter.import(adapter) }
|
74
|
+
@last_synced_at.update { |time| Concurrent.monotonic_time }
|
75
|
+
end
|
76
76
|
rescue => exception
|
77
|
-
|
77
|
+
# you can instrument these using poller.flipper
|
78
78
|
end
|
79
79
|
|
80
80
|
sleep_interval = interval - (Concurrent.monotonic_time - start)
|
@@ -103,7 +103,9 @@ module Flipper
|
|
103
103
|
begin
|
104
104
|
return if thread_alive?
|
105
105
|
@thread = Thread.new { run }
|
106
|
-
|
106
|
+
@instrumenter.instrument("poller.#{InstrumentationNamespace}", {
|
107
|
+
operation: :thread_start,
|
108
|
+
})
|
107
109
|
ensure
|
108
110
|
mutex.unlock
|
109
111
|
end
|
data/lib/flipper/metadata.rb
CHANGED
data/lib/flipper/railtie.rb
CHANGED
@@ -2,11 +2,11 @@ module Flipper
|
|
2
2
|
class Railtie < Rails::Railtie
|
3
3
|
config.before_configuration do
|
4
4
|
config.flipper = ActiveSupport::OrderedOptions.new.update(
|
5
|
-
env_key:
|
6
|
-
memoize: true
|
7
|
-
preload: true
|
8
|
-
instrumenter: ActiveSupport::Notifications,
|
9
|
-
log: true
|
5
|
+
env_key: ENV.fetch('FLIPPER_ENV_KEY', 'flipper'),
|
6
|
+
memoize: ENV.fetch('FLIPPER_MEMOIZE', 'true').casecmp('true').zero?,
|
7
|
+
preload: ENV.fetch('FLIPPER_PRELOAD', 'true').casecmp('true').zero?,
|
8
|
+
instrumenter: ENV.fetch('FLIPPER_INSTRUMENTER', 'ActiveSupport::Notifications').constantize,
|
9
|
+
log: ENV.fetch('FLIPPER_LOG', 'true').casecmp('true').zero?
|
10
10
|
)
|
11
11
|
end
|
12
12
|
|
data/lib/flipper/version.rb
CHANGED
@@ -18,6 +18,42 @@ RSpec.describe Flipper::Railtie do
|
|
18
18
|
subject { application.initialize! }
|
19
19
|
|
20
20
|
describe 'initializers' do
|
21
|
+
it 'can set env_key from ENV' do
|
22
|
+
ENV['FLIPPER_ENV_KEY'] = 'flopper'
|
23
|
+
|
24
|
+
subject
|
25
|
+
expect(config.env_key).to eq('flopper')
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'can set memoize from ENV' do
|
29
|
+
ENV['FLIPPER_MEMOIZE'] = 'false'
|
30
|
+
|
31
|
+
subject
|
32
|
+
expect(config.memoize).to eq(false)
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'can set preload from ENV' do
|
36
|
+
ENV['FLIPPER_PRELOAD'] = 'false'
|
37
|
+
|
38
|
+
subject
|
39
|
+
expect(config.preload).to eq(false)
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'can set instrumenter from ENV' do
|
43
|
+
stub_const('My::Cool::Instrumenter', Class.new)
|
44
|
+
ENV['FLIPPER_INSTRUMENTER'] = 'My::Cool::Instrumenter'
|
45
|
+
|
46
|
+
subject
|
47
|
+
expect(config.instrumenter).to eq(My::Cool::Instrumenter)
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'can set log from ENV' do
|
51
|
+
ENV['FLIPPER_LOG'] = 'false'
|
52
|
+
|
53
|
+
subject
|
54
|
+
expect(config.log).to eq(false)
|
55
|
+
end
|
56
|
+
|
21
57
|
it 'sets defaults' do
|
22
58
|
subject # initialize
|
23
59
|
expect(config.env_key).to eq("flipper")
|
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.26.0
|
4
|
+
version: 0.26.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: 2022-
|
11
|
+
date: 2022-12-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|
@@ -183,7 +183,7 @@ homepage: https://github.com/jnunemaker/flipper
|
|
183
183
|
licenses:
|
184
184
|
- MIT
|
185
185
|
metadata:
|
186
|
-
changelog_uri: https://github.com/jnunemaker/flipper/blob/
|
186
|
+
changelog_uri: https://github.com/jnunemaker/flipper/blob/main/Changelog.md
|
187
187
|
post_install_message:
|
188
188
|
rdoc_options: []
|
189
189
|
require_paths:
|
@@ -195,9 +195,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
195
195
|
version: '0'
|
196
196
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
197
197
|
requirements:
|
198
|
-
- - "
|
198
|
+
- - ">="
|
199
199
|
- !ruby/object:Gem::Version
|
200
|
-
version:
|
200
|
+
version: '0'
|
201
201
|
requirements: []
|
202
202
|
rubygems_version: 3.3.7
|
203
203
|
signing_key:
|