natsy 0.3.1 → 0.4.0

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: f5f7c3cffa8ab383960e32e70a795804170393d4d98ffcd6e54b437a4d07a48d
4
- data.tar.gz: 6759b66239fc91b067b765013d77be9e25b182c240b1a9d02d5f145c8ed2254b
3
+ metadata.gz: c6bc9668d49b9d899ccff640de76b89dfdd2063e44d08d8189a1fcce934e2d70
4
+ data.tar.gz: 3a7b7f59a818778db5a8fd48c5b34d26842a900e8b340a3be1d8541569c671bf
5
5
  SHA512:
6
- metadata.gz: 564f92f38f7cc36eea88fcad6a32ca464a51f55fe6af72cac63b86dfc54610fa9f55a7281440acb235041c3145bf18390e0206988e499e6983a4f7dab1f85014
7
- data.tar.gz: 4f3cb62d940a2622f1787310ea59062124373b862430356f925804632cfc1380b06cda2263fef2fc50ea53a682fd5a52b60a0d012b3833205760d6247ecc16ca
6
+ metadata.gz: 2c4f742f409308fae258a8c0de19c4072757855073b1ccab1114b5e818bd29c53bdd269aa330942457c2c737ee798f2b1b6606c678055babc815d576fbb9dd78
7
+ data.tar.gz: 9b879994fe87e9a4430accf0a837a03989cdd50b18388e13877541203f91d47f394af8fd64f43e49a4fd34196dee4ca0e1af2bd9035b2e4061419a419115a123
data/README.md CHANGED
@@ -58,6 +58,57 @@ docker run -p 4222:4222 -p 8222:8222 -p 6222:6222 -ti nats:latest
58
58
 
59
59
  > **NOTE:** For other methods of running a NATS server, see [the NATS documentation](https://docs.nats.io/nats-server/installation).
60
60
 
61
+ ### Configuration
62
+
63
+ Use `Natsy::Config::set` to set configuration options. These options can either be set via a `Hash`/keyword arguments passed to the `::set` method, or set by invoking the method with a block and assigning your options to the yielded `Natsy::Config::Options` instance.
64
+
65
+ This README will use the following two syntaxes interchangably; remember that they do **exactly the same thing:**
66
+
67
+ ```ruby
68
+ Natsy::Config.set(
69
+ urls: ["nats://foo.bar:4567", "nats://foo.bar:5678"],
70
+ default_queue: "foobar",
71
+ logger: Rails.logger,
72
+ )
73
+ ```
74
+
75
+ ```ruby
76
+ Natsy::Config.set do |options|
77
+ options.urls = ["nats://foo.bar:4567", "nats://foo.bar:5678"]
78
+ options.default_queue = "foobar"
79
+ options.logger = Rails.logger
80
+ end
81
+ ```
82
+
83
+ The following options are available:
84
+
85
+ - `url`: A single URL string (including protocol, domain, and port) which points to the relevant NATS server (see [here](#setting-nats-server-url-section) for more info)
86
+ - `urls`: An array of URL strings in case you need to listen to multiple NATS servers (see [here](#setting-nats-server-url-section) for more info)
87
+ - `logger`: A logger where `natsy` can write helpful information (see [here](#logging-section) for more info)
88
+ - `default_queue`: The default queue that your application should fall back to if none is given in a more specific context (see [here](#default-queue-section) for more info)
89
+
90
+ <a id="setting-nats-server-url-section"></a>
91
+
92
+ ### Setting the NATS server URL(s)
93
+
94
+ Set the URL/URLs at which your NATS server mediates messages.
95
+
96
+ ```ruby
97
+ Natsy::Config.set do |options|
98
+ options.url = "nats://foo.bar:4567"
99
+ end
100
+ ```
101
+
102
+ ```ruby
103
+ Natsy::Config.set do |options|
104
+ options.urls = ["nats://foo.bar:4567", "nats://foo.bar:5678"]
105
+ end
106
+ ```
107
+
108
+ > **NOTE:** If no `url`/`urls` option is specified, `natsy` will fall back on the default NATS server URL, which is `nats://localhost:4222`.
109
+
110
+ <a id="logging-section"></a>
111
+
61
112
  ### Logging
62
113
 
63
114
  #### Attaching a logger
@@ -68,23 +119,24 @@ Attach a logger to have `natsy` write out logs for messages received, responses
68
119
  require 'natsy'
69
120
  require 'logger'
70
121
 
71
- nats_logger = Logger.new(STDOUT)
72
- nats_logger.level = Logger::INFO
73
-
74
- Natsy::Client.logger = nats_logger
122
+ Natsy::Config.set do |options|
123
+ nats_logger = Logger.new(STDOUT)
124
+ nats_logger.level = Logger::INFO
125
+ options.logger = nats_logger
126
+ end
75
127
  ```
76
128
 
77
129
  In a Rails application, you might do this instead:
78
130
 
79
131
  ```ruby
80
- Natsy::Client.logger = Rails.logger
132
+ Natsy::Config.set(logger: Rails.logger)
81
133
  ```
82
134
 
83
135
  #### Log levels
84
136
 
85
137
  The following will be logged at the specified log levels
86
138
 
87
- - `DEBUG`: Lifecycle events (starting NATS listeners, stopping NATS, reply registration, setting the default queue, etc.), as well as everything under `INFO`, `WARN`, and `ERROR`
139
+ - `DEBUG`: Lifecycle events (starting NATS listeners, stopping NATS, reply registration, etc.), as well as everything under `INFO`, `WARN`, and `ERROR`
88
140
  - `INFO`: Message activity over NATS (received a message, replied with a message, etc.), as well as everything under `WARN` and `ERROR`
89
141
  - `WARN`: Error handled gracefully (listening restarted due to some exception, etc.), as well as everything under `ERROR`
90
142
  - `ERROR`: Some exception was raised in-thread (error in handler, error in subscription, etc.)
@@ -96,13 +148,13 @@ The following will be logged at the specified log levels
96
148
  Set a default queue for subscriptions.
97
149
 
98
150
  ```ruby
99
- Natsy::Client.default_queue = "foobar"
151
+ Natsy::Config.set(default_queue: "foobar")
100
152
  ```
101
153
 
102
- Leave the `::default_queue` blank (or assign `nil`) to use no default queue.
154
+ Leave the `default_queue` blank (or assign `nil`) to use no default queue.
103
155
 
104
156
  ```ruby
105
- Natsy::Client.default_queue = nil
157
+ Natsy::Config.set(default_queue: nil)
106
158
  ```
107
159
 
108
160
  <a id="reply-to-section"></a>
@@ -155,15 +207,29 @@ The following should be enough to start a `natsy` setup in your Ruby application
155
207
  require 'natsy'
156
208
  require 'logger'
157
209
 
158
- nats_logger = Logger.new(STDOUT)
159
- nats_logger.level = Logger::DEBUG
210
+ Natsy::Config.set do |options|
211
+ nats_logger = Logger.new(STDOUT)
212
+ nats_logger.level = Logger::DEBUG
160
213
 
161
- Natsy::Client.logger = nats_logger
162
- Natsy::Client.default_queue = "foobar"
214
+ options.logger = nats_logger
215
+ options.urls = ["nats://foo.bar:4567", "nats://foo.bar:5678"]
216
+ options.default_queue = "foobar"
217
+ end
163
218
 
164
- Natsy::Client.reply_to("some.subject") { |data| "Got it! #{data.inspect}" }
165
- Natsy::Client.reply_to("some.*.pattern") { |data, subject| "Got #{data} on #{subject}" }
166
- Natsy::Client.reply_to("subject.in.queue", queue: "barbaz") { { msg: "My turn!", turn: 5 } }
219
+ Natsy::Client.reply_to("some.subject") do |data|
220
+ "Got it! #{data.inspect}"
221
+ end
222
+
223
+ Natsy::Client.reply_to("some.*.pattern") do |data, subject|
224
+ "Got #{data} on #{subject}"
225
+ end
226
+
227
+ Natsy::Client.reply_to("subject.in.queue", queue: "barbaz") do
228
+ {
229
+ msg: "My turn!",
230
+ turn: 5,
231
+ }
232
+ end
167
233
 
168
234
  Natsy::Client.start!
169
235
  ```
@@ -174,7 +240,7 @@ Natsy::Client.start!
174
240
 
175
241
  Create controller classes which inherit from `Natsy::Controller` in order to give your message listeners some structure.
176
242
 
177
- Use the `::default_queue` macro to set a default queue string. If omitted, the controller will fall back on the global default queue assigned with `Natsy::Client::default_queue=` (as described [here](#default-queue-section)). If no default queue is set in either the controller or globally, then the default queue will be blank. Set the default queue to `nil` in a controller to override the global default queue and explicitly make the default queue blank for that controller.
243
+ Use the `::default_queue` macro to set a default queue string. If omitted, the controller will fall back on the global default queue assigned to `Natsy::Config::default_queue` (as described [here](#default-queue-section)). If no default queue is set in either the controller or globally, then the default queue will be blank. Set the default queue to `nil` in a controller to override the global default queue and explicitly make the default queue blank for that controller.
178
244
 
179
245
  Use the `::subject` macro to create a block for listening to that subject segment. Nested calls to `::subject` will append each subsequent subject/pattern string to the last (joined by a periods). There is no limit to the level of nesting.
180
246
 
@@ -231,8 +297,7 @@ end
231
297
  > For example: in a Rails project (assuming you have your NATS controllers in a directory called `app/nats/`), you may want to put something like the following in an initializer (such as `config/initializers/nats.rb`):
232
298
  >
233
299
  > ```ruby
234
- > Natsy::Client.logger = Rails.logger
235
- > Natsy::Client.default_queue = "foobar"
300
+ > Natsy::Config.set(logger: Rails.logger, default_queue: "foobar")
236
301
  >
237
302
  > # ...
238
303
  >
data/lib/natsy.rb CHANGED
@@ -3,6 +3,7 @@
3
3
  require "nats/client"
4
4
  require_relative "natsy/version"
5
5
  require_relative "natsy/utils"
6
+ require_relative "natsy/config"
6
7
  require_relative "natsy/client"
7
8
  require_relative "natsy/controller"
8
9
 
@@ -14,4 +15,7 @@ module Natsy
14
15
 
15
16
  # New subscription has been added at runtime
16
17
  class NewSubscriptionsError < Natsy::Error; end
18
+
19
+ # Invalid options have been provided to +Natsy::Config+
20
+ class InvalidConfigError < Natsy::Error; end
17
21
  end
data/lib/natsy/client.rb CHANGED
@@ -10,50 +10,6 @@ module Natsy
10
10
  # most functionality if desired.
11
11
  class Client
12
12
  class << self
13
- # Optional logger for lifecycle events, messages received, etc.
14
- attr_reader :logger
15
-
16
- # Optional default queue for message subscription and replies.
17
- attr_reader :default_queue
18
-
19
- # Attach a logger to have +natsy+ write out logs for messages
20
- # received, responses sent, errors raised, lifecycle events, etc.
21
- #
22
- # @example
23
- # require 'natsy'
24
- # require 'logger'
25
- #
26
- # nats_logger = Logger.new(STDOUT)
27
- # nats_logger.level = Logger::INFO
28
- #
29
- # Natsy::Client.logger = nats_logger
30
- #
31
- # In a Rails application, you might do this instead:
32
- #
33
- # @example
34
- # Natsy::Client.logger = Rails.logger
35
- #
36
- def logger=(some_logger)
37
- @logger = some_logger
38
- log("Set the logger to #{@logger.inspect}")
39
- end
40
-
41
- # Set a default queue for subscriptions.
42
- #
43
- # @example
44
- # Natsy::Client.default_queue = "foobar"
45
- #
46
- # Leave the +::default_queue+ blank (or assign +nil+) to use no default
47
- # queue.
48
- #
49
- # @example
50
- # Natsy::Client.default_queue = nil
51
- #
52
- def default_queue=(some_queue)
53
- @default_queue = Utils.presence(some_queue.to_s)
54
- log("Setting the default queue to #{@default_queue || '(none)'}", level: :debug)
55
- end
56
-
57
13
  # Returns +true+ if +::start!+ has already been called (meaning the client
58
14
  # is listening to NATS messages). Returns +false+ if it has not yet been
59
15
  # called, or if it has been stopped.
@@ -72,8 +28,9 @@ module Natsy
72
28
  # method. Pass a subject string as the first argument (either a static
73
29
  # subject string or a pattern to match more than one subject). Specify a
74
30
  # queue (or don't) with the +queue:+ option. If you don't provide the
75
- # +queue:+ option, it will be set to the value of +default_queue+, or to
76
- # +nil+ (no queue) if a default queue hasn't been set.
31
+ # +queue:+ option, it will be set to the value of
32
+ # +Natsy::Config::default_queue+, or to +nil+ (no queue) if a default
33
+ # queue hasn't been set.
77
34
  #
78
35
  # The result of the given block will be published in reply to the message.
79
36
  # The block is passed two arguments when a message matching the subject is
@@ -101,7 +58,7 @@ module Natsy
101
58
  # end
102
59
  #
103
60
  def reply_to(subject, queue: nil, &block)
104
- queue = Utils.presence(queue) || default_queue
61
+ queue = Utils.presence(queue) || Config.default_queue
105
62
  queue_desc = " in queue '#{queue}'" if queue
106
63
  log("Registering a reply handler for subject '#{subject}'#{queue_desc}", level: :debug)
107
64
  register_reply!(subject: subject.to_s, handler: block, queue: queue.to_s)
@@ -180,17 +137,7 @@ module Natsy
180
137
  end
181
138
 
182
139
  def log(text, level: :info, indent: 0)
183
- return unless logger
184
-
185
- timestamp = Time.now.to_s
186
- text_lines = text.split("\n")
187
- indentation = indent.is_a?(String) ? indent : (" " * indent)
188
-
189
- text_lines.each do |line|
190
- logger.send(level, "[#{timestamp}] Natsy | #{indentation}#{line}")
191
- end
192
-
193
- nil
140
+ Utils.log(Config.logger, text, level: level, indent: indent)
194
141
  end
195
142
 
196
143
  def kill!
@@ -241,7 +188,7 @@ module Natsy
241
188
  reply = {
242
189
  subject: subject,
243
190
  handler: handler,
244
- queue: Utils.presence(queue) || default_queue,
191
+ queue: Utils.presence(queue) || Config.default_queue,
245
192
  }
246
193
 
247
194
  replies << reply
@@ -250,7 +197,7 @@ module Natsy
250
197
  end
251
198
 
252
199
  def listen
253
- NATS.start do
200
+ NATS.start(servers: Natsy::Config.urls) do
254
201
  replies.each do |replier|
255
202
  queue_desc = " in queue '#{replier[:queue]}'" if replier[:queue]
256
203
  log("Subscribing to subject '#{replier[:subject]}'#{queue_desc}", level: :debug)
@@ -0,0 +1,261 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "ostruct"
4
+ require_relative "./utils"
5
+
6
+ module Natsy
7
+ # Represents the configuration options for +Natsy+. Configuration options are
8
+ # set using the `Natsy::Config::set` method, either as arguments or by using
9
+ # the appropriate setters on the object passed to the block.
10
+ class Config
11
+ # A +Natsy::Config::Options+ object is passed as a single argument to the
12
+ # block (if provided) for the +Natsy::Config::set+ method. This class should
13
+ # probably *NOT* be instantiated directly; instead, set the relevant options
14
+ # using +Natsy::Config.set(some_option: "...", some_other_option: "...")+.
15
+ # If you find yourself instantiating this class directly, there's probably a
16
+ # better way to do what you're trying to do.
17
+ class Options
18
+ # Specify a NATS server URL (or multiple URLs)
19
+ #
20
+ # **NOTE:** The following two examples do exactly the same thing.
21
+ #
22
+ # @example
23
+ # Natsy::Config.set(url: "nats://foo.bar:4567"))
24
+ #
25
+ # @example
26
+ # Natsy::Config.set do |options|
27
+ # options.url = "nats://foo.bar:4567"
28
+ # end
29
+ #
30
+ # **NOTE:** The following two examples do exactly the same thing.
31
+ #
32
+ # @example
33
+ # Natsy::Config.set(urls: ["nats://foo.bar:4567", "nats://foo.bar:5678"])
34
+ #
35
+ # @example
36
+ # Natsy::Config.set do |options|
37
+ # options.urls = ["nats://foo.bar:4567", "nats://foo.bar:5678"]
38
+ # end
39
+ #
40
+ # If left blank/omitted, +natsy+ will fall back on the default URL, which
41
+ # is +nats://localhost:4222+.
42
+ #
43
+ attr_accessor :url, :urls
44
+
45
+ # Attach a logger to have +natsy+ write out logs for messages
46
+ # received, responses sent, errors raised, lifecycle events, etc.
47
+ #
48
+ # **NOTE:** The following two examples do exactly the same thing.
49
+ #
50
+ # @example
51
+ # require 'natsy'
52
+ # require 'logger'
53
+ #
54
+ # nats_logger = Logger.new(STDOUT)
55
+ # nats_logger.level = Logger::INFO
56
+ #
57
+ # Natsy::Config.set(logger: nats_logger)
58
+ #
59
+ # @example
60
+ # require 'natsy'
61
+ # require 'logger'
62
+ #
63
+ # Natsy::Config.set do |options|
64
+ # nats_logger = Logger.new(STDOUT)
65
+ # nats_logger.level = Logger::INFO
66
+ #
67
+ # options.logger = nats_logger
68
+ # end
69
+ #
70
+ #
71
+ # In a Rails application, you might do this instead:
72
+ #
73
+ # @example
74
+ # Natsy::Config.set(logger: Rails.logger)
75
+ #
76
+ def logger=(new_logger)
77
+ @logger = new_logger
78
+ Utils.log(@logger, "Set the logger to #{@logger.inspect}", level: :debug)
79
+ end
80
+
81
+ # Optional logger for lifecycle events, messages received, etc.
82
+ #
83
+ # @see Natsy::Config::Options#logger=
84
+ #
85
+ attr_reader :logger
86
+
87
+ # Set a default queue for subscriptions.
88
+ #
89
+ # **NOTE:** The following two examples do exactly the same thing.
90
+ #
91
+ # @example
92
+ # Natsy::Config.set(default_queue: "foobar")
93
+ #
94
+ # @example
95
+ # Natsy::Config.set do |options|
96
+ # options.default_queue = "foobar"
97
+ # end
98
+ #
99
+ # Leave the +::default_queue+ blank (or assign +nil+) to use no default
100
+ # queue.
101
+ #
102
+ # **NOTE:** The following two examples do exactly the same thing.
103
+ #
104
+ # @example
105
+ # Natsy::Config.set(default_queue: nil)
106
+ #
107
+ # @example
108
+ # Natsy::Config.set do |options|
109
+ # options.default_queue = nil
110
+ # end
111
+ #
112
+ def default_queue=(new_queue)
113
+ @default_queue = Utils.presence(new_queue.to_s)
114
+ Utils.log(logger, "Setting the default queue to #{@default_queue || '(none)'}", level: :debug)
115
+ end
116
+
117
+ # Optional default queue for message subscription and replies.
118
+ #
119
+ # @see Natsy::Config::Options#default_queue=
120
+ #
121
+ attr_reader :default_queue
122
+
123
+ # Returns ONLY the config options THAT HAVE BEEN SET as a +Hash+. Will not
124
+ # have keys for properties that are unassigned, but will have keys for
125
+ # properties assigned +nil+.
126
+ def to_h
127
+ hash = {}
128
+ hash[:url] = url if defined?(@url)
129
+ hash[:urls] = urls if defined?(@urls)
130
+ hash[:logger] = logger if defined?(@logger)
131
+ hash[:default_queue] = default_queue if defined?(@default_queue)
132
+ hash
133
+ end
134
+ end
135
+
136
+ # Valid option keys that can be given to +Natsy::Config::set+, either in a
137
+ # +Hash+ passed to the method, keyword arguments passed to the method, or by
138
+ # using setters on the +Natsy::Config::Options+ object passed to the block.
139
+ VALID_OPTIONS = %i[
140
+ url
141
+ urls
142
+ logger
143
+ default_queue
144
+ ].freeze
145
+
146
+ # The default NATS server URL (used if none is configured)
147
+ DEFAULT_URL = "nats://localhost:4222"
148
+
149
+ class << self
150
+ # Specify configuration options, either by providing them as keyword
151
+ # arguments or by using a block. Should you choose to set options using
152
+ # a block, it will be passed a single argument (an instance of
153
+ # +Natsy::Config::Options+). You can set any options on the instance that
154
+ # you see fit.
155
+ #
156
+ # **NOTE:** The following two examples do exactly the same thing.
157
+ #
158
+ # @example
159
+ # Natsy::Config.set(
160
+ # urls: ["nats://foo.bar:4567", "nats://foo.bar:5678"],
161
+ # default_queue: "foobar",
162
+ # logger: Rails.logger,
163
+ # )
164
+ #
165
+ # @example
166
+ # Natsy::Config.set do |options|
167
+ # options.urls = ["nats://foo.bar:4567", "nats://foo.bar:5678"]
168
+ # options.default_queue = "foobar"
169
+ # options.logger = Rails.logger
170
+ # end
171
+ #
172
+ def set(keyword_options = {})
173
+ new_hash_options = (keyword_options || {}).transform_keys(&:to_sym)
174
+
175
+ invalid_config = lambda do |detail, keys|
176
+ raise InvalidConfigError, "Invalid options provided #{detail}: #{keys.join(', ')}"
177
+ end
178
+
179
+ invalid_keys = invalid_option_keys(new_hash_options)
180
+ invalid_config.call("as arguments", invalid_keys) if invalid_keys.any?
181
+
182
+ # Want to take advantage of the setters on +Natsy::Config::Options+...
183
+ new_hash_options_object = new_hash_options.each_with_object(Options.new) do |(key, value), options|
184
+ options.send(:"#{key}=", value)
185
+ end
186
+
187
+ given_options.merge!(new_hash_options_object.to_h)
188
+
189
+ new_block_options_object = Options.new
190
+ yield(new_block_options_object) if block_given?
191
+
192
+ invalid_keys = invalid_option_keys(new_block_options_object)
193
+ invalid_config.call("in block", invalid_keys) if invalid_keys.any?
194
+
195
+ given_options.merge!(new_block_options_object.to_h)
196
+ end
197
+
198
+ # The NATS server URLs that +natsy+ should listen on.
199
+ #
200
+ # See also: {Natsy::Config::Options#urls=}
201
+ #
202
+ def urls
203
+ given_url_list = [given_options[:url]].flatten
204
+ given_urls_list = [given_options[:urls]].flatten
205
+ all_given_urls = [*given_url_list, *given_urls_list].compact.uniq
206
+ Utils.presence(all_given_urls) || [DEFAULT_URL]
207
+ end
208
+
209
+ # The logger that +natsy+ should use to write out logs for messages
210
+ # received, responses sent, errors raised, lifecycle events, etc.
211
+ #
212
+ # See also: {Natsy::Config::Options#logger=}
213
+ #
214
+ def logger
215
+ Utils.presence(given_options[:logger])
216
+ end
217
+
218
+ # The default queue that +natsy+ should use for subscriptions.
219
+ #
220
+ # See also: {Natsy::Config::Options#default_queue=}
221
+ #
222
+ def default_queue
223
+ Utils.presence(given_options[:default_queue])
224
+ end
225
+
226
+ # Returns all config options as a +Hash+.
227
+ def to_h
228
+ {
229
+ urls: urls,
230
+ logger: logger,
231
+ default_queue: default_queue,
232
+ }
233
+ end
234
+
235
+ # Alias for {Natsy::Config::to_h}.
236
+ def as_json(*_args)
237
+ to_h
238
+ end
239
+
240
+ # Serialize the configuration into a JSON object string.
241
+ def to_json(*_args)
242
+ to_h.to_json
243
+ end
244
+
245
+ # Reset the configuration to default values.
246
+ def reset!
247
+ @given_options = nil
248
+ end
249
+
250
+ private
251
+
252
+ def given_options
253
+ @given_options ||= {}
254
+ end
255
+
256
+ def invalid_option_keys(options)
257
+ options.to_h.keys - VALID_OPTIONS
258
+ end
259
+ end
260
+ end
261
+ end
@@ -25,18 +25,18 @@ module Natsy
25
25
  # end
26
26
  #
27
27
  # If omitted, the controller will fall back on the global default queue
28
- # assigned with +Natsy::Client::default_queue=+. If no default
29
- # queue is set in either the controller or globally, then the default
30
- # queue will be blank. Set the default queue to +nil+ in a controller to
31
- # override the global default queue and explicitly make the default queue
32
- # blank for that controller.
28
+ # assigned with +Natsy::Config::set+. If no default queue is set in either
29
+ # the controller or globally, then the default queue will be blank. Set
30
+ # the default queue to +nil+ in a controller to override the global
31
+ # default queue and explicitly make the default queue blank for that
32
+ # controller.
33
33
  #
34
34
  def default_queue(some_queue = NO_QUEUE_GIVEN)
35
35
  # +NO_QUEUE_GIVEN+ is a special symbol (rather than +nil+) so that the
36
36
  # default queue can be "unset" to +nil+ (given a non-+nil+ global
37
- # default set with +Natsy::Client::default_queue=+).
37
+ # default set with +Natsy::Client::set+).
38
38
  if some_queue == NO_QUEUE_GIVEN
39
- @default_queue || Client.default_queue
39
+ @default_queue || Config.default_queue
40
40
  else
41
41
  @default_queue = Utils.presence(some_queue.to_s)
42
42
  end
data/lib/natsy/utils.rb CHANGED
@@ -15,6 +15,20 @@ module Natsy
15
15
  def presence(value)
16
16
  present?(value) ? value : nil
17
17
  end
18
+
19
+ def log(logger, text, level: :info, indent: 0)
20
+ return unless logger
21
+
22
+ timestamp = Time.now.to_s
23
+ text_lines = text.split("\n")
24
+ indentation = indent.is_a?(String) ? indent : (" " * indent)
25
+
26
+ text_lines.each do |line|
27
+ logger.send(level, "[#{timestamp}] Natsy | #{indentation}#{line}")
28
+ end
29
+
30
+ nil
31
+ end
18
32
  end
19
33
  end
20
34
  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.1"
4
+ VERSION = "0.4.0"
5
5
  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.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Keegan Leitz
@@ -170,6 +170,7 @@ files:
170
170
  - bin/setup
171
171
  - lib/natsy.rb
172
172
  - lib/natsy/client.rb
173
+ - lib/natsy/config.rb
173
174
  - lib/natsy/controller.rb
174
175
  - lib/natsy/utils.rb
175
176
  - lib/natsy/version.rb
@@ -178,7 +179,7 @@ homepage: https://github.com/openbay/natsy
178
179
  licenses:
179
180
  - MIT
180
181
  metadata:
181
- documentation_uri: https://www.rubydoc.info/gems/natsy/0.3.1
182
+ documentation_uri: https://www.rubydoc.info/gems/natsy/0.4.0
182
183
  post_install_message:
183
184
  rdoc_options: []
184
185
  require_paths: