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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a037edf2d9a4b510d45ac57b9a891ccaf5c8b14a82ad359b5ef24974f119342f
4
- data.tar.gz: 7351f54131880e05d0ddf5955a8bc48af0635abf53de8fcd13a06f8ef9587e72
3
+ metadata.gz: f5f7c3cffa8ab383960e32e70a795804170393d4d98ffcd6e54b437a4d07a48d
4
+ data.tar.gz: 6759b66239fc91b067b765013d77be9e25b182c240b1a9d02d5f145c8ed2254b
5
5
  SHA512:
6
- metadata.gz: 071a63d868fbd6441c0b33f459c643d0d23f471c63317274dc5ae45ddf896fd69cee84701da5c1cd8ccb86ff1b8cc90e8c9cc9f98ced72508b48879a93e8b572
7
- data.tar.gz: 13345e7ab11e6f770310d27d8dbd2cffa64b0e27dd04b63096bce5827562361b261b81f7e762c328f7a01d6d971399cb8f0c39d61efd370d69fc7aee9a3cd031
6
+ metadata.gz: 564f92f38f7cc36eea88fcad6a32ca464a51f55fe6af72cac63b86dfc54610fa9f55a7281440acb235041c3145bf18390e0206988e499e6983a4f7dab1f85014
7
+ data.tar.gz: 4f3cb62d940a2622f1787310ea59062124373b862430356f925804632cfc1380b06cda2263fef2fc50ea53a682fd5a52b60a0d012b3833205760d6247ecc16ca
@@ -18,6 +18,14 @@ jobs:
18
18
 
19
19
  runs-on: ubuntu-latest
20
20
 
21
+ services:
22
+ nats:
23
+ image: nats:latest
24
+ ports:
25
+ - 4222:4222
26
+ - 8222:8222
27
+ - 6222:6222
28
+
21
29
  strategy:
22
30
  matrix:
23
31
  ruby-version:
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
- self.current_thread = Thread.new do
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 => e
155
+ rescue NewSubscriptionsError => _e
156
156
  log("New subscriptions! Restarting...", level: :info)
157
157
  restart!
158
- raise e # TODO: there has to be a better way
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
- raise e
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
- attr_accessor :current_thread
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
- current_thread.kill if current_thread && current_thread.alive?
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, inbox, subject|
258
+ NATS.subscribe(replier[:subject], queue: replier[:queue]) do |message, reply_subject, subject|
246
259
  parsed_message = JSON.parse(message)
247
- id, data, pattern = parsed_message.values_at("id", "data", "pattern")
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: #{inbox || '(none)'}
273
+ inbox: #{reply_subject || '(none)'}
274
+ queue: #{replier[:queue] || '(none)'}
256
275
  LOG_MESSAGE
257
276
  log(message_desc, indent: 2)
258
277
 
259
- response_data = replier[:handler].call(data)
278
+ raw_response = replier[:handler].call(data)
260
279
 
261
- log("Responding with '#{response_data}'")
280
+ log("Responding with '#{raw_response}'")
262
281
 
263
- NATS.publish(inbox, response_data.to_json, queue: replier[:queue])
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Natsy
4
- VERSION = "0.3.0"
4
+ VERSION = "0.3.1"
5
5
  end
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.0
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.0
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: