process_settings 0.5.1 → 0.5.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +22 -6
- data/bin/process_settings_for_services +4 -4
- data/lib/process_settings/monitor.rb +1 -1
- data/lib/process_settings/target_and_settings.rb +6 -6
- data/lib/process_settings/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d346028f0e5292862f740f24b653940c321d802eeb52cec982dd5b8db2a3152e
|
4
|
+
data.tar.gz: 9eb2b3d22bedacf239a777ee23606badf82c664d2b69cc28067bd47aaef6e90f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 38e4b19aa83dd76fd8ba875bc8aad8c96e924e8dc44eaf080f7dcb42cb20c8c761fe31b9e691d5547df8c3eb9ba1111696e6bf04251cbd2462681f685ea77574
|
7
|
+
data.tar.gz: 69fe761830b9ae703a6a976590d641b289b26fa95add7e1b6258ad72736f528aa871f2c77de3f3119f9a143adb0b3f45df5c9b4dba6af4b05820dd29abc7212f
|
data/README.md
CHANGED
@@ -3,7 +3,7 @@ This gem provides dynamic settings for Ruby processes. The settings are stored i
|
|
3
3
|
Settings are managed in a git repo, in separate YAML files for each concern (for example, each micro-service). Each YAML file can be targeted based on matching context values (for example, `service_name`).
|
4
4
|
|
5
5
|
|
6
|
-
The context can be either static to the process (for example, `service_name` or `
|
6
|
+
The context can be either static to the process (for example, `service_name` or `datacenter`) or dynamic (for example, the current web request `domain`).
|
7
7
|
|
8
8
|
## Installation
|
9
9
|
To install this gem directly on your machine from rubygems, run the following:
|
@@ -37,7 +37,7 @@ The monitor should be initialized with static (unchanging) context for your proc
|
|
37
37
|
```
|
38
38
|
ProcessSettings::Monitor.static_context = {
|
39
39
|
"service_name" => "frontend",
|
40
|
-
"
|
40
|
+
"datacenter" => "AWS-US-EAST-1"
|
41
41
|
}
|
42
42
|
```
|
43
43
|
The `static_context` is important because it is used to pre-filter settings for the process.
|
@@ -143,22 +143,38 @@ To `target` on context values, provide a hash of key-value pairs. All keys must
|
|
143
143
|
```
|
144
144
|
target:
|
145
145
|
service_name: frontend
|
146
|
-
|
146
|
+
datacenter: AWS-US-EAST-1
|
147
147
|
```
|
148
|
-
This will be applied in any process that has `service_name == "frontend"` AND is running in `
|
148
|
+
This will be applied in any process that has `service_name == "frontend"` AND is running in `datacenter == "AWS-US-EAST-1"`.
|
149
149
|
|
150
150
|
### Multiple Values Are OR'd
|
151
151
|
Values may be set to an array, in which case the key matches if _any_ of the values matches. For example, consider this target hash:
|
152
152
|
```
|
153
153
|
target:
|
154
154
|
service_name: [frontend, auth]
|
155
|
-
|
155
|
+
datacenter: AWS-US-EAST-1
|
156
156
|
```
|
157
|
-
This will be applied in any process that has (`service_name == "frontend"` OR `service_name == "auth"`) AND `
|
157
|
+
This will be applied in any process that has (`service_name == "frontend"` OR `service_name == "auth"`) AND `datacenter == "AWS-US-EAST-1"`.
|
158
158
|
|
159
159
|
### Precedence
|
160
160
|
The settings YAML files are always combined in alphabetical order by file path. Later settings take precedence over the earlier ones.
|
161
161
|
|
162
|
+
### Testing
|
163
|
+
For testing, it is often necessary to set a specific hash for the process_settings values to use in that test case.
|
164
|
+
The `ProcessSettings::Testing::MonitorStub` class is provided for this purpose. It can be initialized with a hash and assigned to `ProcessSettings::Monitor.instance`. After the test runs, make sure to call `clear_instance`.
|
165
|
+
Note that it has no `targeting` or `settings` keys; it is stubbing the resulting settings hash _after_ targeting has been applied.
|
166
|
+
Here is an example using `rspec` conventions:
|
167
|
+
```
|
168
|
+
before do
|
169
|
+
settings = { "honeypot" => { "answer_odds" => 100 } }
|
170
|
+
ProcessSettings::Monitor.instance = ProcessSettings::Testing::MonitorStub.new(settings)
|
171
|
+
end
|
172
|
+
|
173
|
+
after do
|
174
|
+
ProcessSettings::Monitor.clear_instance
|
175
|
+
end
|
176
|
+
```
|
177
|
+
|
162
178
|
## Contributions
|
163
179
|
|
164
180
|
Contributions to this project are always welcome. Please thoroughly read our [Contribution Guidelines](https://github.com/Invoca/process_settings/blob/master/CONTRIBUTING.md) before starting any work.
|
@@ -62,14 +62,14 @@ flat_services_yml_json_doc.each do |service, nodes|
|
|
62
62
|
if (changed = node_targeted_process_settings_old != node_targeted_process_settings_new)
|
63
63
|
node_old = node_targeted_process_settings_old.map do |node_targeted_process_setting|
|
64
64
|
{
|
65
|
-
'target'
|
66
|
-
"
|
65
|
+
'target' => node_targeted_process_setting.target,
|
66
|
+
"settings" => node_targeted_process_setting.settings
|
67
67
|
}
|
68
68
|
end
|
69
69
|
node_new = node_targeted_process_settings_new.map do |node_targeted_process_setting|
|
70
70
|
{
|
71
|
-
'target'
|
72
|
-
"
|
71
|
+
'target' => node_targeted_process_setting.target,
|
72
|
+
"settings" => node_targeted_process_setting.settings
|
73
73
|
}
|
74
74
|
end
|
75
75
|
|
@@ -81,7 +81,7 @@ module ProcessSettings
|
|
81
81
|
result = statically_targeted_settings.reduce(:not_found) do |latest_result, target_and_settings|
|
82
82
|
# find last value from matching targets
|
83
83
|
if target_and_settings.target.target_key_matches?(full_context)
|
84
|
-
if (value = target_and_settings.
|
84
|
+
if (value = target_and_settings.settings.json_doc.mine(*path, not_found_value: :not_found)) != :not_found
|
85
85
|
latest_result = value
|
86
86
|
end
|
87
87
|
end
|
@@ -6,7 +6,7 @@ require_relative 'settings'
|
|
6
6
|
module ProcessSettings
|
7
7
|
# This class encapsulates a single YAML file with target and process_settings.
|
8
8
|
class TargetAndSettings
|
9
|
-
attr_reader :filename, :target, :
|
9
|
+
attr_reader :filename, :target, :settings
|
10
10
|
|
11
11
|
def initialize(filename, target, settings)
|
12
12
|
@filename = filename
|
@@ -15,7 +15,7 @@ module ProcessSettings
|
|
15
15
|
@target = target
|
16
16
|
|
17
17
|
settings.is_a?(Settings) or raise ArgumentError, "settings must be a ProcessSettings; got #{settings.inspect}"
|
18
|
-
@
|
18
|
+
@settings = settings
|
19
19
|
end
|
20
20
|
|
21
21
|
def ==(rhs)
|
@@ -29,7 +29,7 @@ module ProcessSettings
|
|
29
29
|
def to_json_doc
|
30
30
|
{
|
31
31
|
"target" => @target.json_doc,
|
32
|
-
"settings" => @
|
32
|
+
"settings" => @settings.json_doc
|
33
33
|
}
|
34
34
|
end
|
35
35
|
|
@@ -37,9 +37,9 @@ module ProcessSettings
|
|
37
37
|
def from_json_docs(filename, target_json_doc, settings_json_doc)
|
38
38
|
target_json_doc = Target.new(target_json_doc)
|
39
39
|
|
40
|
-
|
40
|
+
settings = Settings.new(settings_json_doc)
|
41
41
|
|
42
|
-
new(filename, target_json_doc,
|
42
|
+
new(filename, target_json_doc, settings)
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
@@ -49,7 +49,7 @@ module ProcessSettings
|
|
49
49
|
if new_target == @target
|
50
50
|
self
|
51
51
|
else
|
52
|
-
self.class.new(@filename, new_target, @
|
52
|
+
self.class.new(@filename, new_target, @settings)
|
53
53
|
end
|
54
54
|
end
|
55
55
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: process_settings
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Invoca
|
@@ -86,6 +86,7 @@ licenses:
|
|
86
86
|
- MIT
|
87
87
|
metadata:
|
88
88
|
source_code_uri: https://github.com/Invoca/process_settings
|
89
|
+
allowed_push_host: https://rubygems.org
|
89
90
|
post_install_message:
|
90
91
|
rdoc_options: []
|
91
92
|
require_paths:
|