process_settings 0.11.0.pre.8 → 0.13.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 48d483b1a29cf0442c77c1d5b1e95c13d25167e7314d903dc7389db16baebc5e
4
- data.tar.gz: e7b5463577055a1471af3d48f84e7968db665a565a9022beddf309c56407f6cc
3
+ metadata.gz: 60447e2f039f0d12d6f35a21b8b823c9f9dea2294900c0d3310ccf40dfe0a3e1
4
+ data.tar.gz: dceadf48d13853e709d5b35bfd5740551cc3baabd4df07e0d3b64c855f5caba7
5
5
  SHA512:
6
- metadata.gz: 1097d637758fe0eef6db447496056c14d4e5854a0d3a632f9d203e915996ce4e4cdf35afd59f06e084d8f875896199c6d765b1feb6d92c003af5c6a1e34a8c22
7
- data.tar.gz: b497681fef4ebd4fc41ee7c63bb821966f72136f0d11ba34e87f4bd4475fdc9e190ac45e1fe0372cac05f1a70e6625e9ac482bfe837990fbf2265be82ea10465
6
+ metadata.gz: d33df4bfb607626f41f8c0059b821caab6b6f50a900aef9a6aefd5f6e47c562e44d5c32f75b99412e22c7375c74dbf39c37c4e0812896f1ac84363b2b01bfe84
7
+ data.tar.gz: 18a90e814c09e2666da73970998a8eda9bca90fe216ef7bf4c7d2b463cafb77b42a2ba07e478eaaca186f422a43b4a4859c2ea7ba56a647a6ff66621fb1fefd1
data/README.md CHANGED
@@ -126,16 +126,20 @@ The simplest approach--as shown above--is to read the latest settings at any tim
126
126
  http_version = ProcessSettings['frontend', 'http_version']
127
127
  ```
128
128
 
129
- #### Register an `on_change` Callback
130
- Alternatively, if you need to execute some code when there is a change, register a callback with `ProcessSettings.instance#on_change`:
129
+ #### Register a `when_updated` Callback
130
+ Alternatively, if you need to execute initially and whenever the value is updated, register a callback with `ProcessSettings.instance#when_updated`:
131
131
  ```
132
- ProcessSettings.instance.on_change do
132
+ ProcessSettings.instance.when_updated do
133
133
  logger.level = ProcessSettings['frontend', 'log_level']
134
134
  end
135
135
  ```
136
- Note that all callbacks run sequentially on the shared change monitoring thread, so please be considerate!
136
+ By default, the `when_updated` block is called initially when registered. We've found this to be convenient in most cases; it can be disabled by passing `initial_update: false`, in which case the block will be called 0 or more times in the future, when any of the process settings for this process change.
137
+
138
+ `when_updated` is idempotent.
137
139
 
138
- There is no provision for unregistering callbacks. Instead, replace the `instance` of the monitor with a new one.
140
+ In case you need to cancel the callback later, `when_updated` returns a handle (the block itself) which can later be passed into `cancel_when_updated`.
141
+
142
+ Note that all callbacks run sequentially on the shared change monitoring thread, so please be considerate!
139
143
 
140
144
  ## Targeting
141
145
  Each settings YAML file has an optional `target` key at the top level, next to `settings`.
@@ -75,12 +75,34 @@ def add_warning_comment(yaml, root_folder, program_name, settings_folder)
75
75
  yaml.sub("\n", "\n" + warning_comment)
76
76
  end
77
77
 
78
+ MINIMUM_LIBYAML_VERSION = '0.2.5' # So that null (nil) values don't have trailing spaces.
79
+
80
+ def check_libyaml_version
81
+ if Gem::Version.new(Psych::LIBYAML_VERSION) < Gem::Version.new(MINIMUM_LIBYAML_VERSION)
82
+ warn <<~EOS
83
+
84
+ #{PROGRAM_NAME} error: libyaml version #{Psych::LIBYAML_VERSION} must be at least #{MINIMUM_LIBYAML_VERSION}. Try:
85
+
86
+ brew update && upgrade libyaml
87
+
88
+ You may also need:
89
+
90
+ gem install psych -- --enable-bundled-libyaml
91
+ EOS
92
+
93
+ exit(1)
94
+ end
95
+ end
96
+
97
+
78
98
  #
79
99
  # main
80
100
  #
81
101
 
82
102
  options = parse_options(ARGV.dup)
83
103
 
104
+ check_libyaml_version
105
+
84
106
  combined_settings = read_and_combine_settings(Pathname.new(options.root_folder) + SETTINGS_FOLDER)
85
107
 
86
108
  version_number = options.version || default_version_number(options.initial_filename)
@@ -33,6 +33,8 @@ module ProcessSettings
33
33
  !@listener.nil?
34
34
  end
35
35
 
36
+ private
37
+
36
38
  def enable_listen_thread?(environment = nil)
37
39
  !disable_listen_thread?(environment)
38
40
  end
@@ -44,14 +46,12 @@ module ProcessSettings
44
46
  when 'false', '0'
45
47
  false
46
48
  when nil
47
- environment || service_env == 'test'
49
+ (environment || service_env) == 'test'
48
50
  else
49
51
  raise ArgumentError, "DISABLE_LISTEN_CHANGE_MONITORING has unknown value #{ENV['DISABLE_LISTEN_CHANGE_MONITORING'].inspect}"
50
52
  end
51
53
  end
52
54
 
53
- private
54
-
55
55
  # optionally starts listening for changes, then loads current settings
56
56
  # Note: If with_listen_thread is truthy, this method creates a new thread that will be
57
57
  # monitoring for changes.
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ProcessSettings
4
- VERSION = '0.11.0.pre.8'
4
+ VERSION = '0.13.1'
5
5
  end
metadata CHANGED
@@ -1,11 +1,11 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: process_settings
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.0.pre.8
4
+ version: 0.13.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Invoca
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
  date: 2019-09-19 00:00:00.000000000 Z
@@ -58,6 +58,20 @@ dependencies:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
60
  version: '3.0'
61
+ - !ruby/object:Gem::Dependency
62
+ name: psych
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '3.2'
68
+ type: :runtime
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '3.2'
61
75
  description: Targeted process settings that dynamically reload without restarting
62
76
  the process
63
77
  email: development+ps@invoca.com
@@ -97,7 +111,7 @@ licenses:
97
111
  metadata:
98
112
  source_code_uri: https://github.com/Invoca/process_settings
99
113
  allowed_push_host: https://rubygems.org
100
- post_install_message:
114
+ post_install_message:
101
115
  rdoc_options: []
102
116
  require_paths:
103
117
  - lib
@@ -108,12 +122,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
108
122
  version: '0'
109
123
  required_rubygems_version: !ruby/object:Gem::Requirement
110
124
  requirements:
111
- - - ">"
125
+ - - ">="
112
126
  - !ruby/object:Gem::Version
113
- version: 1.3.1
127
+ version: '0'
114
128
  requirements: []
115
129
  rubygems_version: 3.0.3
116
- signing_key:
130
+ signing_key:
117
131
  specification_version: 4
118
132
  summary: Dynamic process settings
119
133
  test_files: []