natsy 0.3.0 → 0.3.1
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/.github/workflows/main.yml +8 -0
- data/.rubocop.yml +13 -0
- data/README.md +3 -1
- data/lib/natsy/client.rb +32 -12
- data/lib/natsy/version.rb +1 -1
- data/natsy.gemspec +1 -1
- metadata +16 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f5f7c3cffa8ab383960e32e70a795804170393d4d98ffcd6e54b437a4d07a48d
|
4
|
+
data.tar.gz: 6759b66239fc91b067b765013d77be9e25b182c240b1a9d02d5f145c8ed2254b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 564f92f38f7cc36eea88fcad6a32ca464a51f55fe6af72cac63b86dfc54610fa9f55a7281440acb235041c3145bf18390e0206988e499e6983a4f7dab1f85014
|
7
|
+
data.tar.gz: 4f3cb62d940a2622f1787310ea59062124373b862430356f925804632cfc1380b06cda2263fef2fc50ea53a682fd5a52b60a0d012b3833205760d6247ecc16ca
|
data/.github/workflows/main.yml
CHANGED
data/.rubocop.yml
CHANGED
@@ -33,6 +33,13 @@ Metrics/AbcSize:
|
|
33
33
|
- '*.gemspec'
|
34
34
|
|
35
35
|
Metrics/BlockLength:
|
36
|
+
Max: 50
|
37
|
+
Exclude:
|
38
|
+
- 'spec/**/*_spec.rb'
|
39
|
+
- '*.gemspec'
|
40
|
+
|
41
|
+
Metrics/CyclomaticComplexity:
|
42
|
+
Max: 15
|
36
43
|
Exclude:
|
37
44
|
- 'spec/**/*_spec.rb'
|
38
45
|
- '*.gemspec'
|
@@ -67,6 +74,12 @@ Metrics/ModuleLength:
|
|
67
74
|
- 'spec/**/*_spec.rb'
|
68
75
|
- '*.gemspec'
|
69
76
|
|
77
|
+
Metrics/PerceivedComplexity:
|
78
|
+
Max: 15
|
79
|
+
Exclude:
|
80
|
+
- 'spec/**/*_spec.rb'
|
81
|
+
- '*.gemspec'
|
82
|
+
|
70
83
|
# Rspec
|
71
84
|
|
72
85
|
RSpec/ExampleLength:
|
data/README.md
CHANGED
@@ -44,6 +44,8 @@ This gem also requires a NATS server to be installed and running before use. See
|
|
44
44
|
|
45
45
|
## Usage
|
46
46
|
|
47
|
+
<a id="starting-the-nats-server-section">
|
48
|
+
|
47
49
|
### Starting the NATS server
|
48
50
|
|
49
51
|
You'll need to start a NATS server before running your Ruby application. If you installed it via Docker, you might start it like so:
|
@@ -267,7 +269,7 @@ bin/console
|
|
267
269
|
|
268
270
|
### Run the tests
|
269
271
|
|
270
|
-
To run the RSpec test suites, run:
|
272
|
+
To run the RSpec test suites, first [start the NATS server](#starting-the-nats-server-section). Then, run the tests:
|
271
273
|
|
272
274
|
```bash
|
273
275
|
bundle exec rake spec
|
data/lib/natsy/client.rb
CHANGED
@@ -145,29 +145,39 @@ module Natsy
|
|
145
145
|
|
146
146
|
started!
|
147
147
|
|
148
|
-
|
148
|
+
thread = Thread.new do
|
149
149
|
Thread.handle_interrupt(StandardError => :never) do
|
150
150
|
Thread.handle_interrupt(StandardError => :immediate) { listen }
|
151
151
|
rescue NATS::ConnectError => e
|
152
152
|
log("Could not connect to NATS server:", level: :error)
|
153
153
|
log(e.full_message, level: :error, indent: 2)
|
154
154
|
Thread.current.exit
|
155
|
-
rescue NewSubscriptionsError =>
|
155
|
+
rescue NewSubscriptionsError => _e
|
156
156
|
log("New subscriptions! Restarting...", level: :info)
|
157
157
|
restart!
|
158
|
-
|
158
|
+
Thread.current.exit
|
159
|
+
# raise e # TODO: there has to be a better way
|
159
160
|
rescue StandardError => e
|
160
161
|
log("Encountered an error:", level: :error)
|
161
162
|
log(e.full_message, level: :error, indent: 2)
|
162
163
|
restart!
|
163
|
-
|
164
|
+
Thread.current.exit
|
165
|
+
# raise e
|
164
166
|
end
|
165
167
|
end
|
168
|
+
|
169
|
+
threads << thread
|
166
170
|
end
|
167
171
|
|
168
172
|
private
|
169
173
|
|
170
|
-
|
174
|
+
def threads
|
175
|
+
@threads ||= []
|
176
|
+
end
|
177
|
+
|
178
|
+
def current_thread
|
179
|
+
threads.last
|
180
|
+
end
|
171
181
|
|
172
182
|
def log(text, level: :info, indent: 0)
|
173
183
|
return unless logger
|
@@ -179,10 +189,12 @@ module Natsy
|
|
179
189
|
text_lines.each do |line|
|
180
190
|
logger.send(level, "[#{timestamp}] Natsy | #{indentation}#{line}")
|
181
191
|
end
|
192
|
+
|
193
|
+
nil
|
182
194
|
end
|
183
195
|
|
184
196
|
def kill!
|
185
|
-
|
197
|
+
threads.each { |thread| thread.kill if thread.alive? }
|
186
198
|
end
|
187
199
|
|
188
200
|
def stop!
|
@@ -200,6 +212,7 @@ module Natsy
|
|
200
212
|
def restart!
|
201
213
|
log("Restarting NATS", level: :warn)
|
202
214
|
stop!
|
215
|
+
kill!
|
203
216
|
start!
|
204
217
|
end
|
205
218
|
|
@@ -242,9 +255,14 @@ module Natsy
|
|
242
255
|
queue_desc = " in queue '#{replier[:queue]}'" if replier[:queue]
|
243
256
|
log("Subscribing to subject '#{replier[:subject]}'#{queue_desc}", level: :debug)
|
244
257
|
|
245
|
-
NATS.subscribe(replier[:subject], queue: replier[:queue]) do |message,
|
258
|
+
NATS.subscribe(replier[:subject], queue: replier[:queue]) do |message, reply_subject, subject|
|
246
259
|
parsed_message = JSON.parse(message)
|
247
|
-
|
260
|
+
|
261
|
+
id, data, pattern = if parsed_message.is_a?(Hash)
|
262
|
+
parsed_message.values_at("id", "data", "pattern")
|
263
|
+
else
|
264
|
+
[nil, parsed_message, nil]
|
265
|
+
end
|
248
266
|
|
249
267
|
log("Received a message!")
|
250
268
|
message_desc = <<~LOG_MESSAGE
|
@@ -252,15 +270,17 @@ module Natsy
|
|
252
270
|
pattern: #{pattern || '(none)'}
|
253
271
|
subject: #{subject || '(none)'}
|
254
272
|
data: #{data.to_json}
|
255
|
-
inbox: #{
|
273
|
+
inbox: #{reply_subject || '(none)'}
|
274
|
+
queue: #{replier[:queue] || '(none)'}
|
256
275
|
LOG_MESSAGE
|
257
276
|
log(message_desc, indent: 2)
|
258
277
|
|
259
|
-
|
278
|
+
raw_response = replier[:handler].call(data)
|
260
279
|
|
261
|
-
log("Responding with '#{
|
280
|
+
log("Responding with '#{raw_response}'")
|
262
281
|
|
263
|
-
|
282
|
+
response = raw_response.is_a?(String) ? raw_response : raw_response.to_json
|
283
|
+
NATS.publish(reply_subject, response) if Utils.present?(reply_subject)
|
264
284
|
end
|
265
285
|
end
|
266
286
|
end
|
data/lib/natsy/version.rb
CHANGED
data/natsy.gemspec
CHANGED
@@ -28,6 +28,7 @@ Gem::Specification.new do |spec|
|
|
28
28
|
spec.require_paths = ["lib"]
|
29
29
|
|
30
30
|
spec.add_development_dependency "bundler", "~> 2.2"
|
31
|
+
spec.add_development_dependency "pry"
|
31
32
|
spec.add_development_dependency "rake", "~> 13.0"
|
32
33
|
spec.add_development_dependency "rspec", "~> 3.0"
|
33
34
|
spec.add_development_dependency "rubocop", "~> 1.10"
|
@@ -35,7 +36,6 @@ Gem::Specification.new do |spec|
|
|
35
36
|
spec.add_development_dependency "rubocop-rake", "~> 0.5"
|
36
37
|
spec.add_development_dependency "rubocop-rspec", "~> 2.2"
|
37
38
|
spec.add_development_dependency "solargraph"
|
38
|
-
spec.add_development_dependency "pry"
|
39
39
|
|
40
40
|
spec.add_runtime_dependency "nats", "~> 0.11"
|
41
41
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: natsy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Keegan Leitz
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '2.2'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: pry
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: rake
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -122,20 +136,6 @@ dependencies:
|
|
122
136
|
- - ">="
|
123
137
|
- !ruby/object:Gem::Version
|
124
138
|
version: '0'
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: pry
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - ">="
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: '0'
|
132
|
-
type: :development
|
133
|
-
prerelease: false
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
135
|
-
requirements:
|
136
|
-
- - ">="
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version: '0'
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: nats
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -178,7 +178,7 @@ homepage: https://github.com/openbay/natsy
|
|
178
178
|
licenses:
|
179
179
|
- MIT
|
180
180
|
metadata:
|
181
|
-
documentation_uri: https://www.rubydoc.info/gems/natsy/0.3.
|
181
|
+
documentation_uri: https://www.rubydoc.info/gems/natsy/0.3.1
|
182
182
|
post_install_message:
|
183
183
|
rdoc_options: []
|
184
184
|
require_paths:
|