boom_nats 0.1.0 → 0.1.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: 4cfa0a64dc828e73223219cc03f643f20b278358f17214cf93acc4305a53b3e0
4
- data.tar.gz: 83c1f75ecda6bb93a629cdd7d1ea47ee78ea173618c62846f8d290335bc95f2a
3
+ metadata.gz: a7f350fa4276eaa4271920061a3fe7d501ccfdb836bf792c2dceb9be98ad7059
4
+ data.tar.gz: 8b4b331934c8fc4fccb05e84b543c13cd8c456a31591b6e723e2d0662ce408d0
5
5
  SHA512:
6
- metadata.gz: 3c3b9d9a8b70867d1a0530c2addd6fb715023127a21e9c96b1c87187dd6e9213585e813bf61972f2dba2d78df7f8271b159b610d559272783bbc8f285e185aed
7
- data.tar.gz: 0c01d74a16b7489d4090cd423666d7409f423da1b874d441472f63ef9859f9682bb5dbf9392032371340a43691e25b184d277beb153dc2e8e8c3541289ef03b0
6
+ metadata.gz: 02275442dc9e042dc0f02c1d1ddff6247b614ab3212876399d8be444a8464ded94d69c1d6c96661878f114107587f48bd69468a52bb8b8549c6d5e4ca03314b8
7
+ data.tar.gz: b5a13adfbc86d2b8d42deccab1967b4ee92ce00a958eb77fc97309d6e7c21b74a92ea99d1f86140dc8a62d7810260202689125e9b1844bed3ef208ba399bc758
@@ -0,0 +1,23 @@
1
+ name: Publish to Rubygem
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - v*
7
+
8
+ jobs:
9
+ publish:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - uses: actions/checkout@v2
13
+ - name: Set up Ruby
14
+ uses: ruby/setup-ruby@v1
15
+ with:
16
+ ruby-version: 3.0.2
17
+ bundler-cache: true
18
+ - name: build gem
19
+ run: gem build
20
+ - name: publish to Rubygems
21
+ env:
22
+ GEM_HOST_API_KEY: "${{ secrets.RUBYGEMS_API_KEY }}"
23
+ run: gem push boom_nats-*.gem
data/.gitignore CHANGED
@@ -14,3 +14,4 @@
14
14
 
15
15
  # Coverage reports
16
16
  coverage
17
+ *.gem
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- boom_nats (0.1.0)
4
+ boom_nats (0.1.1)
5
5
  activesupport (>= 2.1)
6
6
  concurrent-ruby-edge (~> 0.6, < 1.0)
7
7
  nats (>= 0.11.0, < 1.0)
@@ -4,7 +4,7 @@ require "concurrent-edge"
4
4
  module BoomNats
5
5
  class Application
6
6
  attr_accessor :router, :nats_options
7
- attr_reader :route_topics, :nats
7
+ attr_reader :route_topics
8
8
 
9
9
  def initialize
10
10
  @route_topics = []
@@ -14,8 +14,7 @@ module BoomNats
14
14
 
15
15
  def servers(value)
16
16
  stop
17
-
18
- @nats = nats_connect(value)
17
+ @server = value
19
18
  end
20
19
 
21
20
  def draw_routes(&block)
@@ -29,30 +28,38 @@ module BoomNats
29
28
  instance_eval(&block) if block_given?
30
29
  end
31
30
 
31
+ def nats
32
+ NATS
33
+ end
34
+
32
35
  def start
33
- @route_topics.each do |rt|
34
- @subscriptions << @nats.subscribe(rt.topic, rt.options) do |msg, reply, _sub|
35
- rt.executor.new(msg, reply, @nats, rt.serializer, rt.parser)
36
- end
37
- end
36
+ Thread.new do
37
+ nats_connect do |nats|
38
+ @route_topics.each do |rt|
39
+ @subscriptions << nats.subscribe(rt.topic, rt.options) do |msg, reply, _sub|
40
+ rt.executor.new(msg, reply, nats, rt.serializer, rt.parser)
41
+ end
42
+ end
38
43
 
39
- BoomNats.logger.debug "BoomNats::started"
44
+ BoomNats.logger.debug "BoomNats::started"
40
45
 
41
- return if defined?(Rails::Railtie)
46
+ return if defined?(Rails::Railtie)
42
47
 
43
- prepare_trap
48
+ prepare_trap
49
+ end
50
+ end
44
51
 
45
52
  wait
46
53
  end
47
54
 
48
55
  def stop
49
- @subscriptions.each { |s| @nats.unsubscribe(s) }
56
+ @subscriptions.each { |s| nats.unsubscribe(s) }
50
57
  @subscriptions = []
51
58
 
52
59
  # disconnect from old server if already configured
53
- if @nats&.connected?
54
- @nats.drain do
55
- @nats.stop
60
+ if nats&.connected?
61
+ nats.drain do
62
+ nats.stop
56
63
  end
57
64
  end
58
65
  end
@@ -68,21 +75,33 @@ module BoomNats
68
75
  end
69
76
  end
70
77
 
71
- protected
72
-
73
- def nats_connect(servers)
74
- ch = Concurrent::Channel.new
78
+ def execute(&block)
79
+ timeout = Concurrent::Cancellation.timeout 5
80
+ done = Concurrent::Channel.new(capacity: 1)
75
81
  Concurrent::Channel.go do
76
- # Connect to NATS service
77
- NATS.start({
78
- servers: servers,
79
- **(nats_options.is_a?(Hash) ? nats_options : {})
80
- }) do |nc|
81
- ch.put nc
82
+ loop do
83
+ @mutex.synchronize do
84
+ done << true if nats.connected?
85
+ end
86
+
87
+ done << false if timeout.origin.resolved?
82
88
  end
83
89
  end
84
90
 
85
- ch.take
91
+ if ~done
92
+ block.call(nats)
93
+ else
94
+ raise "Nats do not connected", BoomNats::Error
95
+ end
96
+ end
97
+
98
+ protected
99
+
100
+ def nats_connect(&block)
101
+ NATS.start({
102
+ servers: @server,
103
+ **(nats_options.is_a?(Hash) ? nats_options : {})
104
+ }, &block)
86
105
  end
87
106
 
88
107
  def prepare_trap
@@ -0,0 +1,22 @@
1
+ module BoomNats
2
+ module Requester
3
+ def request(topic, params = nil, options = {})
4
+ result = nil
5
+ BoomNats.application.execute do |nats|
6
+ timeout = Concurrent::Cancellation.timeout 5
7
+ done = Concurrent::Channel.new(capacity: 1)
8
+ Concurrent::Channel.go do
9
+ nats.request(topic, params.to_json, options) do |msg|
10
+ done << JSON.parse(msg)
11
+ end
12
+ timeout.origin.wait
13
+ done << BoomNats::Error.new("request do not received")
14
+ end
15
+ result = ~done # block until signaled
16
+ end
17
+ raise result if result.is_a?(BoomNats::Error)
18
+
19
+ result
20
+ end
21
+ end
22
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module BoomNats
4
- VERSION = "0.1.0"
4
+ VERSION = "0.1.1"
5
5
  end
data/lib/boom_nats.rb CHANGED
@@ -12,6 +12,7 @@ module BoomNats
12
12
 
13
13
  extend BoomNats::Serializer
14
14
  extend BoomNats::Setup
15
+ extend BoomNats::Requester
15
16
 
16
17
  mattr_accessor :logger
17
18
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: boom_nats
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Welington Sampaio
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-10-04 00:00:00.000000000 Z
11
+ date: 2021-10-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -114,6 +114,7 @@ extra_rdoc_files: []
114
114
  files:
115
115
  - ".editorconfig"
116
116
  - ".github/workflows/main.yml"
117
+ - ".github/workflows/publish-ruby-gem.yml"
117
118
  - ".gitignore"
118
119
  - ".rspec"
119
120
  - ".rubocop.yml"
@@ -131,6 +132,7 @@ files:
131
132
  - lib/boom_nats.rb
132
133
  - lib/boom_nats/application.rb
133
134
  - lib/boom_nats/railtie.rb
135
+ - lib/boom_nats/requester.rb
134
136
  - lib/boom_nats/route_topic.rb
135
137
  - lib/boom_nats/router.rb
136
138
  - lib/boom_nats/serializer.rb
@@ -148,7 +150,7 @@ metadata:
148
150
  homepage_uri: https://opensource.alboompro.com/#alboom-nats-rb
149
151
  source_code_uri: https://github.com/alboompro/alboom-nats-rb
150
152
  changelog_uri: https://github.com/alboompro/alboom-nats-rb/master/Changelog
151
- post_install_message:
153
+ post_install_message:
152
154
  rdoc_options: []
153
155
  require_paths:
154
156
  - lib
@@ -163,8 +165,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
163
165
  - !ruby/object:Gem::Version
164
166
  version: '0'
165
167
  requirements: []
166
- rubygems_version: 3.2.3
167
- signing_key:
168
+ rubygems_version: 3.2.22
169
+ signing_key:
168
170
  specification_version: 4
169
171
  summary: Native NATS integration server to standalone or Rails based app
170
172
  test_files: []