natsy 0.3.0 → 0.3.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: 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: