config_skeleton 0.1.0 → 0.2.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 94091ff703a09d316f4bc62973a8995b1815bcc8a591c224fcffa147cba2cd9d
4
- data.tar.gz: 47c9cb4ade0f69e2b5822e27800f70b0465cec2a3780aadfe70027e7d2088795
3
+ metadata.gz: 3d55ae63c3cac3ec4c77ae3d20c2a8078fa65e937abdeaf10afae589f7e45d85
4
+ data.tar.gz: 07c2dc5afd603e1e8c61ff0f5b6d7b5cbb0ce9ce510c8c645279c683f5adee4e
5
5
  SHA512:
6
- metadata.gz: d1b5ed7d48c978e999a76441b8b43c0dee017dc12fc1e54dfb0c418f1d92d4d326457d3e06b5706a644966d607f8bc74ceb85d8d34fac58f72f51eff663b8cff
7
- data.tar.gz: '08c0b0faf4151961eb18536408b576c43000b0409f189d613b9f9738c4ba54ebda2cc8a3925ba12699e7d3832aab651b09dad339ff362de9fff1fb37f8b54fe1'
6
+ metadata.gz: 3ed1a58c33de8eca24db5823d221bde84e64a9bcba91d2007ac68095da458c61fd50ef24670b96c2186a577ab91c2fa90c289c680e4310abbdbf9a34f6339754
7
+ data.tar.gz: 8932f5e8ee5545644a7d5d7950f5737b256ad9c4eb10cb1c0dd8f0b8333fd22d62557c0afa011b83ec508eb94b1f94068b7558ee082ce9f45f75448309b64e77
@@ -0,0 +1,48 @@
1
+ # This workflow uses actions that are not certified by GitHub.
2
+ # They are provided by a third-party and are governed by
3
+ # separate terms of service, privacy policy, and support
4
+ # documentation.
5
+ # This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
6
+ # For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
7
+
8
+ name: Ruby
9
+
10
+ on:
11
+ push:
12
+ branches:
13
+ - master
14
+ tags:
15
+ - v*
16
+ pull_request:
17
+ branches:
18
+ - master
19
+ workflow_dispatch:
20
+
21
+ jobs:
22
+ build:
23
+ runs-on: ubuntu-latest
24
+
25
+ steps:
26
+ - uses: actions/checkout@v2
27
+
28
+ - name: Set up Ruby
29
+ uses: ruby/setup-ruby@v1
30
+ with:
31
+ ruby-version: 2.6
32
+ - name: Install dependencies
33
+ run: bundle install
34
+ - name: Run specs
35
+ run: bundle exec rspec
36
+
37
+ publish:
38
+ if: contains(github.ref, 'refs/tags/v')
39
+ needs: build
40
+ runs-on: ubuntu-latest
41
+
42
+ steps:
43
+ - uses: actions/checkout@v2
44
+
45
+ - name: Release Gem
46
+ uses: CvX/publish-rubygems-action@master
47
+ env:
48
+ RUBYGEMS_API_KEY: ${{secrets.RUBYGEMS_API_KEY}}
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --require spec_helper
data/README.md CHANGED
@@ -41,7 +41,7 @@ conduct](CODE_OF_CONDUCT.md).
41
41
  Unless otherwise stated, everything in this repo is covered by the following
42
42
  copyright notice:
43
43
 
44
- Copyright (C) 2018 Civilized Discourse Construction Kit, Inc.
44
+ Copyright (C) 2020 Civilized Discourse Construction Kit, Inc.
45
45
 
46
46
  This program is free software: you can redistribute it and/or modify it
47
47
  under the terms of the GNU General Public License version 3, as
@@ -1,14 +1,7 @@
1
- begin
2
- require 'git-version-bump'
3
- rescue LoadError
4
- nil
5
- end
6
-
7
1
  Gem::Specification.new do |s|
8
2
  s.name = "config_skeleton"
9
3
 
10
- s.version = GVB.version rescue "0.0.0.1.NOGVB"
11
- s.date = GVB.date rescue Time.now.strftime("%Y-%m-%d")
4
+ s.version = "0.2.6"
12
5
 
13
6
  s.platform = Gem::Platform::RUBY
14
7
 
@@ -29,9 +22,11 @@ Gem::Specification.new do |s|
29
22
 
30
23
  s.add_development_dependency 'bundler'
31
24
  s.add_development_dependency 'github-release'
32
- s.add_development_dependency 'git-version-bump'
33
25
  s.add_development_dependency 'rake', "~> 12.0"
34
26
  s.add_development_dependency 'redcarpet'
35
27
  s.add_development_dependency 'rubocop'
36
28
  s.add_development_dependency 'yard'
29
+ s.add_development_dependency 'rspec'
30
+ s.add_development_dependency 'pry'
31
+ s.add_development_dependency 'pry-byebug'
37
32
  end
@@ -142,6 +142,18 @@ class ConfigSkeleton < ServiceSkeleton
142
142
  # If you get this, someone didn't read the documentation.
143
143
  class NotImplementedError < Error; end
144
144
 
145
+ # It is useful for consumers to manually request a config regen. An instance
146
+ # of this class is made via the regen_notifier method.
147
+ class ConfigRegenNotifier
148
+ def initialize(io_write)
149
+ @io_write = io_write
150
+ end
151
+
152
+ def trigger_regen
153
+ @io_write << "."
154
+ end
155
+ end
156
+
145
157
  # Declare a file watch on all instances of the config generator.
146
158
  #
147
159
  # When you're looking to watch a file whose path is well-known and never-changing, you
@@ -188,6 +200,18 @@ class ConfigSkeleton < ServiceSkeleton
188
200
  end
189
201
 
190
202
  initialize_config_skeleton_metrics
203
+ @trigger_regen_r, @trigger_regen_w = IO.pipe
204
+ end
205
+
206
+ # Expose the write pipe which can be written to to trigger a config
207
+ # regeneration with a forced reload; a similar mechanism is used for
208
+ # shutdown but in that case writes are managed internally.
209
+ #
210
+ # Usage: config.regen_notifier.trigger_regen
211
+ #
212
+ # @return [ConfigRegenNotifier]
213
+ def regen_notifier
214
+ @regen_notifier ||= ConfigRegenNotifier.new(@trigger_regen_w)
191
215
  end
192
216
 
193
217
  # Set the config generator running.
@@ -209,7 +233,11 @@ class ConfigSkeleton < ServiceSkeleton
209
233
  @terminate_r, @terminate_w = IO.pipe
210
234
 
211
235
  loop do
212
- if ios = IO.select([notifier.to_io, @terminate_r], [], [], sleep_duration.tap { |d| logger.debug(logloc) { "Sleeping for #{d} seconds" } })
236
+ if ios = IO.select(
237
+ [notifier.to_io, @terminate_r, @trigger_regen_r],
238
+ [], [],
239
+ sleep_duration.tap { |d| logger.debug(logloc) { "Sleeping for #{d} seconds" } }
240
+ )
213
241
  if ios.first.include?(notifier.to_io)
214
242
  logger.debug(logloc) { "inotify triggered" }
215
243
  notifier.process
@@ -217,6 +245,14 @@ class ConfigSkeleton < ServiceSkeleton
217
245
  elsif ios.first.include?(@terminate_r)
218
246
  logger.debug(logloc) { "triggered by termination pipe" }
219
247
  break
248
+ elsif ios.first.include?(@trigger_regen_r)
249
+ # we want to wait until everything in the backlog is read
250
+ # before proceeding so we don't run out of buffer memory
251
+ # for the pipe
252
+ while @trigger_regen_r.read_nonblock(20, nil, exception: false) != :wait_readable; end
253
+
254
+ logger.debug(logloc) { "triggered by regen pipe" }
255
+ regenerate_config(force_reload: true)
220
256
  else
221
257
  logger.error(logloc) { "Mysterious return from select: #{ios.inspect}" }
222
258
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: config_skeleton
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Palmer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-03-01 00:00:00.000000000 Z
11
+ date: 2020-11-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: diffy
@@ -95,7 +95,21 @@ dependencies:
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
- name: git-version-bump
98
+ name: rake
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '12.0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '12.0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: redcarpet
99
113
  requirement: !ruby/object:Gem::Requirement
100
114
  requirements:
101
115
  - - ">="
@@ -109,21 +123,21 @@ dependencies:
109
123
  - !ruby/object:Gem::Version
110
124
  version: '0'
111
125
  - !ruby/object:Gem::Dependency
112
- name: rake
126
+ name: rubocop
113
127
  requirement: !ruby/object:Gem::Requirement
114
128
  requirements:
115
- - - "~>"
129
+ - - ">="
116
130
  - !ruby/object:Gem::Version
117
- version: '12.0'
131
+ version: '0'
118
132
  type: :development
119
133
  prerelease: false
120
134
  version_requirements: !ruby/object:Gem::Requirement
121
135
  requirements:
122
- - - "~>"
136
+ - - ">="
123
137
  - !ruby/object:Gem::Version
124
- version: '12.0'
138
+ version: '0'
125
139
  - !ruby/object:Gem::Dependency
126
- name: redcarpet
140
+ name: yard
127
141
  requirement: !ruby/object:Gem::Requirement
128
142
  requirements:
129
143
  - - ">="
@@ -137,7 +151,7 @@ dependencies:
137
151
  - !ruby/object:Gem::Version
138
152
  version: '0'
139
153
  - !ruby/object:Gem::Dependency
140
- name: rubocop
154
+ name: rspec
141
155
  requirement: !ruby/object:Gem::Requirement
142
156
  requirements:
143
157
  - - ">="
@@ -151,7 +165,21 @@ dependencies:
151
165
  - !ruby/object:Gem::Version
152
166
  version: '0'
153
167
  - !ruby/object:Gem::Dependency
154
- name: yard
168
+ name: pry
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: pry-byebug
155
183
  requirement: !ruby/object:Gem::Requirement
156
184
  requirements:
157
185
  - - ">="
@@ -171,7 +199,9 @@ executables: []
171
199
  extensions: []
172
200
  extra_rdoc_files: []
173
201
  files:
202
+ - ".github/workflows/ruby.yml"
174
203
  - ".gitignore"
204
+ - ".rspec"
175
205
  - ".rubocop.yml"
176
206
  - ".yardopts"
177
207
  - CODE_OF_CONDUCT.md
@@ -198,8 +228,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
198
228
  - !ruby/object:Gem::Version
199
229
  version: '0'
200
230
  requirements: []
201
- rubyforge_project:
202
- rubygems_version: 2.7.7
231
+ rubygems_version: 3.0.3
203
232
  signing_key:
204
233
  specification_version: 4
205
234
  summary: Dynamically generate configs and reload servers