process_settings 0.5.1 → 0.5.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 +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:
|