prefab-cloud-ruby 0.24.1 → 0.24.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 +4 -4
- data/README.md +2 -2
- data/VERSION +1 -1
- data/lib/prefab/client.rb +9 -0
- data/lib/prefab/config_client.rb +3 -2
- data/lib/prefab/config_resolver.rb +4 -4
- data/lib/prefab/config_value_unwrapper.rb +1 -1
- data/lib/prefab/context.rb +0 -12
- data/lib/prefab/resolved_config_presenter.rb +2 -2
- data/prefab-cloud-ruby.gemspec +3 -3
- data/test/integration_test.rb +3 -1
- data/test/test_config_value_unwrapper.rb +9 -8
- data/test/test_context.rb +2 -12
- data/test/test_integration.rb +5 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0ba1dd85add1fd682905bb54cfa2ab75baa3f4b3bc1c31fe762d8389b10c8aea
|
4
|
+
data.tar.gz: 4fb1d5bdc68d1dcd566afe681b02970288fbdcbbcf5c9706705c3d857b3422d4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0cbdd3e8d1c04b3f113ccbf9a6fdd8f46f3240f71db26d2feb86b18dfbf25237c1df24325aa90d433c20ef017138fd0f847d5599d27e746fc983dac680f1278c
|
7
|
+
data.tar.gz: e09ed434ec40557b2ba8b684abdf2da3ae32103715e200162898b002031b9e175a401f9c435424b937d4929302f5dd7066813bdfd8d9fe1048fc6d74579815c9
|
data/README.md
CHANGED
@@ -41,7 +41,7 @@ $prefab.set_rails_loggers
|
|
41
41
|
```ruby
|
42
42
|
#puma.rb
|
43
43
|
on_worker_boot do
|
44
|
-
$prefab =
|
44
|
+
$prefab = $prefab.fork
|
45
45
|
$prefab.set_rails_loggers
|
46
46
|
end
|
47
47
|
```
|
@@ -49,7 +49,7 @@ end
|
|
49
49
|
```ruby
|
50
50
|
# unicorn.rb
|
51
51
|
after_fork do |server, worker|
|
52
|
-
$prefab =
|
52
|
+
$prefab = $prefab.fork
|
53
53
|
$prefab.set_rails_loggers
|
54
54
|
end
|
55
55
|
```
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.24.
|
1
|
+
0.24.2
|
data/lib/prefab/client.rb
CHANGED
@@ -111,6 +111,15 @@ module Prefab
|
|
111
111
|
config_client.resolver
|
112
112
|
end
|
113
113
|
|
114
|
+
# When starting a forked process, use this to re-use the options
|
115
|
+
# on_worker_boot do
|
116
|
+
# $prefab = $prefab.fork
|
117
|
+
# $prefab.set_rails_loggers
|
118
|
+
# end
|
119
|
+
def fork
|
120
|
+
Prefab::Client.new(@options)
|
121
|
+
end
|
122
|
+
|
114
123
|
private
|
115
124
|
|
116
125
|
def is_ff?(key)
|
data/lib/prefab/config_client.rb
CHANGED
@@ -55,10 +55,11 @@ module Prefab
|
|
55
55
|
end
|
56
56
|
|
57
57
|
def get(key, default = NO_DEFAULT_PROVIDED, properties = NO_DEFAULT_PROVIDED)
|
58
|
-
|
58
|
+
context = @config_resolver.make_context(properties)
|
59
|
+
value = _get(key, context)
|
59
60
|
|
60
61
|
if value
|
61
|
-
Prefab::ConfigValueUnwrapper.unwrap(value, key,
|
62
|
+
Prefab::ConfigValueUnwrapper.unwrap(value, key, context)
|
62
63
|
else
|
63
64
|
handle_default(key, default)
|
64
65
|
end
|
@@ -42,7 +42,7 @@ module Prefab
|
|
42
42
|
project_env_id: @project_env_id,
|
43
43
|
resolver: self,
|
44
44
|
namespace: @base_client.options.namespace,
|
45
|
-
base_client: @base_client).evaluate(
|
45
|
+
base_client: @base_client).evaluate(make_context(properties))
|
46
46
|
end
|
47
47
|
|
48
48
|
def update
|
@@ -55,9 +55,7 @@ module Prefab
|
|
55
55
|
@on_update = block
|
56
56
|
end
|
57
57
|
|
58
|
-
|
59
|
-
|
60
|
-
def context(properties)
|
58
|
+
def make_context(properties)
|
61
59
|
if properties == NO_DEFAULT_PROVIDED
|
62
60
|
Context.current
|
63
61
|
elsif properties.is_a?(Context)
|
@@ -67,6 +65,8 @@ module Prefab
|
|
67
65
|
end
|
68
66
|
end
|
69
67
|
|
68
|
+
private
|
69
|
+
|
70
70
|
def make_local
|
71
71
|
@lock.with_write_lock do
|
72
72
|
@local_store = @config_loader.calc_config
|
@@ -14,7 +14,7 @@ module Prefab
|
|
14
14
|
value = Prefab::WeightedValueResolver.new(
|
15
15
|
config_value.weighted_values.weighted_values,
|
16
16
|
config_key,
|
17
|
-
context
|
17
|
+
context.get(config_value.weighted_values.hash_by_property_name)
|
18
18
|
).resolve
|
19
19
|
|
20
20
|
unwrap(value.value, config_key, context)
|
data/lib/prefab/context.rb
CHANGED
@@ -77,18 +77,10 @@ module Prefab
|
|
77
77
|
end
|
78
78
|
end
|
79
79
|
|
80
|
-
def merge!(name, hash)
|
81
|
-
@contexts[name.to_s] = context(name).merge!(hash)
|
82
|
-
end
|
83
|
-
|
84
80
|
def set(name, hash)
|
85
81
|
@contexts[name.to_s] = NamedContext.new(name, hash)
|
86
82
|
end
|
87
83
|
|
88
|
-
def []=(name, hash)
|
89
|
-
set(name, hash)
|
90
|
-
end
|
91
|
-
|
92
84
|
def get(property_key)
|
93
85
|
name, key = property_key.split('.', 2)
|
94
86
|
|
@@ -100,10 +92,6 @@ module Prefab
|
|
100
92
|
contexts[name] && contexts[name].get(key)
|
101
93
|
end
|
102
94
|
|
103
|
-
def [](property_key)
|
104
|
-
get(property_key)
|
105
|
-
end
|
106
|
-
|
107
95
|
def to_h
|
108
96
|
contexts.map { |name, context| [name, context.to_h] }.to_h
|
109
97
|
end
|
@@ -45,7 +45,7 @@ module Prefab
|
|
45
45
|
hash[k] = ConfigRow.new(k, nil, nil, nil)
|
46
46
|
else
|
47
47
|
config = @resolver.evaluate(v[:config])
|
48
|
-
value = Prefab::ConfigValueUnwrapper.unwrap(config, k,
|
48
|
+
value = Prefab::ConfigValueUnwrapper.unwrap(config, k, Prefab::Context.new)
|
49
49
|
hash[k] = ConfigRow.new(k, value, v[:match], v[:source])
|
50
50
|
end
|
51
51
|
end
|
@@ -67,7 +67,7 @@ module Prefab
|
|
67
67
|
elements << 'tombstone'
|
68
68
|
else
|
69
69
|
config = @resolver.evaluate(v[:config], {})
|
70
|
-
value = Prefab::ConfigValueUnwrapper.unwrap(config, k,
|
70
|
+
value = Prefab::ConfigValueUnwrapper.unwrap(config, k, Prefab::Context.new)
|
71
71
|
elements << value.to_s.slice(0..34).ljust(35)
|
72
72
|
elements << value.class.to_s.slice(0..6).ljust(7)
|
73
73
|
elements << "Match: #{v[:match]}".slice(0..29).ljust(30)
|
data/prefab-cloud-ruby.gemspec
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: prefab-cloud-ruby 0.24.
|
5
|
+
# stub: prefab-cloud-ruby 0.24.2 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "prefab-cloud-ruby".freeze
|
9
|
-
s.version = "0.24.
|
9
|
+
s.version = "0.24.2"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib".freeze]
|
13
13
|
s.authors = ["Jeff Dwyer".freeze]
|
14
|
-
s.date = "2023-
|
14
|
+
s.date = "2023-05-12"
|
15
15
|
s.description = "Feature Flags, Live Config, and Dynamic Log Levels as a service".freeze
|
16
16
|
s.email = "jdwyer@prefab.cloud".freeze
|
17
17
|
s.extra_rdoc_files = [
|
data/test/integration_test.rb
CHANGED
@@ -4,45 +4,46 @@ require 'test_helper'
|
|
4
4
|
|
5
5
|
class TestConfigValueUnwrapper < Minitest::Test
|
6
6
|
CONFIG_KEY = 'config_key'
|
7
|
+
EMPTY_CONTEXT = Prefab::Context.new()
|
7
8
|
|
8
9
|
def test_unwrapping_int
|
9
10
|
config_value = Prefab::ConfigValue.new(int: 123)
|
10
|
-
assert_equal 123, Prefab::ConfigValueUnwrapper.unwrap(config_value, CONFIG_KEY,
|
11
|
+
assert_equal 123, Prefab::ConfigValueUnwrapper.unwrap(config_value, CONFIG_KEY, EMPTY_CONTEXT)
|
11
12
|
end
|
12
13
|
|
13
14
|
def test_unwrapping_string
|
14
15
|
config_value = Prefab::ConfigValue.new(string: 'abc')
|
15
|
-
assert_equal 'abc', Prefab::ConfigValueUnwrapper.unwrap(config_value, CONFIG_KEY,
|
16
|
+
assert_equal 'abc', Prefab::ConfigValueUnwrapper.unwrap(config_value, CONFIG_KEY, EMPTY_CONTEXT)
|
16
17
|
end
|
17
18
|
|
18
19
|
def test_unwrapping_double
|
19
20
|
config_value = Prefab::ConfigValue.new(double: 1.23)
|
20
|
-
assert_equal 1.23, Prefab::ConfigValueUnwrapper.unwrap(config_value, CONFIG_KEY,
|
21
|
+
assert_equal 1.23, Prefab::ConfigValueUnwrapper.unwrap(config_value, CONFIG_KEY, EMPTY_CONTEXT)
|
21
22
|
end
|
22
23
|
|
23
24
|
def test_unwrapping_bool
|
24
25
|
config_value = Prefab::ConfigValue.new(bool: true)
|
25
|
-
assert_equal true, Prefab::ConfigValueUnwrapper.unwrap(config_value, CONFIG_KEY,
|
26
|
+
assert_equal true, Prefab::ConfigValueUnwrapper.unwrap(config_value, CONFIG_KEY, EMPTY_CONTEXT)
|
26
27
|
|
27
28
|
config_value = Prefab::ConfigValue.new(bool: false)
|
28
|
-
assert_equal false, Prefab::ConfigValueUnwrapper.unwrap(config_value, CONFIG_KEY,
|
29
|
+
assert_equal false, Prefab::ConfigValueUnwrapper.unwrap(config_value, CONFIG_KEY, EMPTY_CONTEXT)
|
29
30
|
end
|
30
31
|
|
31
32
|
def test_unwrapping_log_level
|
32
33
|
config_value = Prefab::ConfigValue.new(log_level: :INFO)
|
33
|
-
assert_equal :INFO, Prefab::ConfigValueUnwrapper.unwrap(config_value, CONFIG_KEY,
|
34
|
+
assert_equal :INFO, Prefab::ConfigValueUnwrapper.unwrap(config_value, CONFIG_KEY, EMPTY_CONTEXT)
|
34
35
|
end
|
35
36
|
|
36
37
|
def test_unwrapping_string_list
|
37
38
|
config_value = Prefab::ConfigValue.new(string_list: Prefab::StringList.new(values: %w[a b c]))
|
38
|
-
assert_equal %w[a b c], Prefab::ConfigValueUnwrapper.unwrap(config_value, CONFIG_KEY,
|
39
|
+
assert_equal %w[a b c], Prefab::ConfigValueUnwrapper.unwrap(config_value, CONFIG_KEY, EMPTY_CONTEXT)
|
39
40
|
end
|
40
41
|
|
41
42
|
def test_unwrapping_weighted_values
|
42
43
|
# single value
|
43
44
|
config_value = Prefab::ConfigValue.new(weighted_values: weighted_values([['abc', 1]]))
|
44
45
|
|
45
|
-
assert_equal 'abc', Prefab::ConfigValueUnwrapper.unwrap(config_value, CONFIG_KEY,
|
46
|
+
assert_equal 'abc', Prefab::ConfigValueUnwrapper.unwrap(config_value, CONFIG_KEY, EMPTY_CONTEXT)
|
46
47
|
|
47
48
|
# multiple values, evenly distributed
|
48
49
|
config_value = Prefab::ConfigValue.new(weighted_values: weighted_values([['abc', 1], ['def', 1], ['ghi', 1]]))
|
data/test/test_context.rb
CHANGED
@@ -86,7 +86,7 @@ class TestContext < Minitest::Test
|
|
86
86
|
Prefab::Context.with_context(EXAMPLE_PROPERTIES) do
|
87
87
|
context = Prefab::Context.current
|
88
88
|
assert_equal(stringify(EXAMPLE_PROPERTIES), context.to_h)
|
89
|
-
assert_equal('some-user-key', context
|
89
|
+
assert_equal('some-user-key', context.get('user.key'))
|
90
90
|
end
|
91
91
|
end
|
92
92
|
|
@@ -105,34 +105,24 @@ class TestContext < Minitest::Test
|
|
105
105
|
def test_setting
|
106
106
|
context = Prefab::Context.new({})
|
107
107
|
context.set('user', { key: 'value' })
|
108
|
-
context
|
108
|
+
context.set(:other, { key: 'different', something: 'other' })
|
109
109
|
assert_equal(stringify({ user: { key: 'value' }, other: { key: 'different', something: 'other' } }), context.to_h)
|
110
110
|
end
|
111
111
|
|
112
112
|
def test_getting
|
113
113
|
context = Prefab::Context.new(EXAMPLE_PROPERTIES)
|
114
114
|
assert_equal('some-user-key', context.get('user.key'))
|
115
|
-
assert_equal('some-user-key', context['user.key'])
|
116
115
|
assert_equal('pro', context.get('team.plan'))
|
117
|
-
assert_equal('pro', context['team.plan'])
|
118
116
|
end
|
119
117
|
|
120
118
|
def test_dot_notation_getting
|
121
119
|
context = Prefab::Context.new({ 'user' => { 'key' => 'value' } })
|
122
120
|
assert_equal('value', context.get('user.key'))
|
123
|
-
assert_equal('value', context['user.key'])
|
124
121
|
end
|
125
122
|
|
126
123
|
def test_dot_notation_getting_with_symbols
|
127
124
|
context = Prefab::Context.new({ user: { key: 'value' } })
|
128
125
|
assert_equal('value', context.get('user.key'))
|
129
|
-
assert_equal('value', context['user.key'])
|
130
|
-
end
|
131
|
-
|
132
|
-
def test_merge
|
133
|
-
context = Prefab::Context.new(EXAMPLE_PROPERTIES)
|
134
|
-
context.merge!(:other, { key: 'different' })
|
135
|
-
assert_equal(stringify(EXAMPLE_PROPERTIES.merge(other: { key: 'different' })), context.to_h)
|
136
126
|
end
|
137
127
|
|
138
128
|
def test_clear
|
data/test/test_integration.rb
CHANGED
@@ -13,7 +13,7 @@ class TestIntegration < Minitest::Test
|
|
13
13
|
parent_context = test['context']
|
14
14
|
|
15
15
|
test['cases'].each do |test_case|
|
16
|
-
define_method(:"test_#{test_case['name']}") do
|
16
|
+
define_method(:"test_#{test['name']}_#{test_case['name']}") do
|
17
17
|
it = IntegrationTest.new(test_case)
|
18
18
|
|
19
19
|
with_parent_context_maybe(parent_context) do
|
@@ -30,6 +30,10 @@ class TestIntegration < Minitest::Test
|
|
30
30
|
assert_equal it.expected[:value], it.test_client.send(it.func, flag, context)
|
31
31
|
when :simple_equality
|
32
32
|
assert_equal it.expected[:value], it.test_client.send(it.func, *it.input)
|
33
|
+
when :log_level
|
34
|
+
assert_equal it.expected[:value].to_sym, it.test_client.send(it.func, *it.input)
|
35
|
+
else
|
36
|
+
raise "Unknown test type: #{it.test_type}"
|
33
37
|
end
|
34
38
|
end
|
35
39
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: prefab-cloud-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.24.
|
4
|
+
version: 0.24.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeff Dwyer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-05-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|