eventhub-processor2 1.19.0 → 1.21.0
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/dependabot.yml +2 -2
- data/.github/workflows/cd.yml +2 -2
- data/.github/workflows/ci.yml +3 -3
- data/.tool-versions +1 -1
- data/CHANGELOG.md +12 -0
- data/README.md +18 -10
- data/eventhub-processor2.gemspec +2 -0
- data/example/example.rb +21 -0
- data/lib/eventhub/{actor_listener.rb → actor_listener_amqp.rb} +4 -4
- data/lib/eventhub/actor_listener_http.rb +49 -0
- data/lib/eventhub/actor_publisher.rb +1 -1
- data/lib/eventhub/base.rb +2 -1
- data/lib/eventhub/configuration.rb +12 -1
- data/lib/eventhub/logger.rb +7 -4
- data/lib/eventhub/message.rb +1 -1
- data/lib/eventhub/processor2.rb +5 -4
- data/lib/eventhub/version.rb +1 -1
- metadata +34 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ff9077a8af2791cd681fb21b96a3d60d06ba79e6721e721b814dcc1f3d344eb8
|
4
|
+
data.tar.gz: d05e33dfff330eb2523b2050c8d5fa2d299d6f14b320bce4eaa100b53a6a03e2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 67729c0fa807676e90fb029ac97b08c2144f77b5fa22820736975b67a871dd63dd7a7fbeba2895f239312cb2a39527c25b8c8c501fcca97ba4de71a33d9a756d
|
7
|
+
data.tar.gz: '09cf7cfb606c0b36c5b2e5552ee33fce244d719a4f3b979159a0fceab157e6bc3b3c77dc4c5e89d202835bdc81476c9ebb71d07b904c79e1586941431a879a22'
|
data/.github/dependabot.yml
CHANGED
@@ -5,7 +5,7 @@ updates:
|
|
5
5
|
schedule:
|
6
6
|
interval: "weekly"
|
7
7
|
day: "saturday"
|
8
|
-
time: "04:
|
8
|
+
time: "04:05"
|
9
9
|
timezone: "Europe/Zurich"
|
10
10
|
|
11
11
|
- package-ecosystem: "github-actions"
|
@@ -13,5 +13,5 @@ updates:
|
|
13
13
|
schedule:
|
14
14
|
interval: "weekly"
|
15
15
|
day: "saturday"
|
16
|
-
time: "04:
|
16
|
+
time: "04:05"
|
17
17
|
timezone: "Europe/Zurich"
|
data/.github/workflows/cd.yml
CHANGED
@@ -10,12 +10,12 @@ jobs:
|
|
10
10
|
|
11
11
|
steps:
|
12
12
|
- name: Checkout current code
|
13
|
-
uses: actions/checkout@
|
13
|
+
uses: actions/checkout@v4
|
14
14
|
|
15
15
|
- name: Set up Ruby
|
16
16
|
uses: ruby/setup-ruby@v1
|
17
17
|
with:
|
18
|
-
ruby-version: '3.
|
18
|
+
ruby-version: '3.3'
|
19
19
|
bundler-cache: true
|
20
20
|
cache-version: 1
|
21
21
|
|
data/.github/workflows/ci.yml
CHANGED
@@ -10,7 +10,7 @@ on:
|
|
10
10
|
- "*"
|
11
11
|
|
12
12
|
schedule:
|
13
|
-
- cron: 0 2 * *
|
13
|
+
- cron: 0 2 * * 3,6
|
14
14
|
|
15
15
|
# Allows you to run this workflow manually from the Actions tab
|
16
16
|
workflow_dispatch:
|
@@ -23,11 +23,11 @@ jobs:
|
|
23
23
|
strategy:
|
24
24
|
fail-fast: false
|
25
25
|
matrix:
|
26
|
-
ruby: [ '3.2', '3.1', '3.0', '2.7', '2.6']
|
26
|
+
ruby: [ '3.3', '3.2', '3.1', '3.0', '2.7', '2.6']
|
27
27
|
|
28
28
|
name: Ruby ${{ matrix.ruby }}
|
29
29
|
steps:
|
30
|
-
- uses: actions/checkout@
|
30
|
+
- uses: actions/checkout@v4
|
31
31
|
|
32
32
|
- name: Set up Ruby
|
33
33
|
uses: ruby/setup-ruby@v1
|
data/.tool-versions
CHANGED
@@ -1 +1 @@
|
|
1
|
-
ruby 3.
|
1
|
+
ruby 3.3.1
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,17 @@
|
|
1
1
|
# Changelog of EventHub::Processor2
|
2
2
|
|
3
|
+
## 1.21.0 / 2024-05-28
|
4
|
+
|
5
|
+
* Update dependencies
|
6
|
+
* Support Ruby 3.3.1
|
7
|
+
* Has http endpoint for health checks
|
8
|
+
|
9
|
+
## 1.20.0 / 2023-12-28
|
10
|
+
|
11
|
+
* Update dependencies
|
12
|
+
* Support Ruby 3.3.0
|
13
|
+
* Have a console log only option
|
14
|
+
|
3
15
|
## 1.19.0 / 2023-04-23
|
4
16
|
|
5
17
|
* Update dependencies
|
data/README.md
CHANGED
@@ -11,7 +11,8 @@ Processor2 has currently the following sub-components implemented
|
|
11
11
|
* Heartbeater - send hearbeats to EventHub dispatcher every x minutes
|
12
12
|
* Publisher - responsible for message publishing
|
13
13
|
* Watchdog - Checks regularly broker connection and defined listener queue(s)
|
14
|
-
* Listener - Listens to defined queues, parses recevied message into a EventHub::Message instance and calls handle_message method as defined in derived class.
|
14
|
+
* Listener AMQP - Listens to defined AMQP queues, parses recevied message into a EventHub::Message instance and calls handle_message method as defined in derived class.
|
15
|
+
* Listener HTTP - Provides an http endpoint for health checks (Exp. /svc/{class_name}/heartbeat)
|
15
16
|
|
16
17
|
Processor2 is using Bunny http://rubybunny.info a feature complete RabbitMQ Client to interact with message broker. Processor2 can deal with long running message processing.
|
17
18
|
|
@@ -19,6 +20,7 @@ Processor2 is using Bunny http://rubybunny.info a feature complete RabbitMQ Clie
|
|
19
20
|
|
20
21
|
Currently supported and tested ruby versions are:
|
21
22
|
|
23
|
+
- 3.3
|
22
24
|
- 3.2
|
23
25
|
- 3.1
|
24
26
|
- 3.0
|
@@ -30,7 +32,7 @@ Currently supported and tested ruby versions are:
|
|
30
32
|
Add this line to your application's Gemfile:
|
31
33
|
|
32
34
|
```ruby
|
33
|
-
gem
|
35
|
+
gem "eventhub-processor2"
|
34
36
|
```
|
35
37
|
|
36
38
|
And then execute:
|
@@ -51,7 +53,7 @@ module EventHub
|
|
51
53
|
class Example < Processor2
|
52
54
|
|
53
55
|
def version
|
54
|
-
|
56
|
+
"1.0.0" # define your version
|
55
57
|
end
|
56
58
|
|
57
59
|
def handle_message(message, args = {})
|
@@ -72,8 +74,8 @@ module EventHub
|
|
72
74
|
|
73
75
|
# it is possible to publish a message during message processing but it's a
|
74
76
|
# good style to return one or multiple messages at end of handle_message
|
75
|
-
publish(message:
|
76
|
-
publish(message:
|
77
|
+
publish(message: "your message as a string") # default exchange_name is 'event_hub.inbound'
|
78
|
+
publish(message: "your message as string", exchange_name: "your_specfic_exchange")
|
77
79
|
|
78
80
|
# at the end return one of
|
79
81
|
message_to_return = message.copy # return message if sucessfull processing
|
@@ -101,7 +103,7 @@ Usage: example [options]
|
|
101
103
|
-e, --environment ENVIRONMENT Define environment (default development)
|
102
104
|
-d, --detached Run processor detached as a daemon
|
103
105
|
-c, --config CONFIG Define configuration file
|
104
|
-
|
106
|
+
--console-log-only Logs to console only (E.g. containers)
|
105
107
|
|
106
108
|
bundle exec ruby example.rb
|
107
109
|
I, [2018-02-09T15:22:35.649646 #37966] INFO -- : example (1.1.0): has been started
|
@@ -131,7 +133,12 @@ If --config option is not provided processor tries to load config/{class_name}.j
|
|
131
133
|
"tls_key": null,
|
132
134
|
"tls_ca_certificates": [],
|
133
135
|
"verify_peer": false,
|
134
|
-
"show_bunny_logs": false
|
136
|
+
"show_bunny_logs": false,
|
137
|
+
"heartbeat": {
|
138
|
+
"bind_address": "localhost",
|
139
|
+
"port": 8080,
|
140
|
+
"path": "/svc/{class_name}/heartbeat"
|
141
|
+
}
|
135
142
|
},
|
136
143
|
"processor": {
|
137
144
|
"listener_queues": [
|
@@ -144,6 +151,7 @@ If --config option is not provided processor tries to load config/{class_name}.j
|
|
144
151
|
}
|
145
152
|
}
|
146
153
|
```
|
154
|
+
Default configuration will dynamically resolve {class_name}. Exp. if your class is called MyClass and is derived from Processor2, value of {class_name} would be "my_class". You can overwrite config settings as needed.
|
147
155
|
|
148
156
|
More details about TLS configuration for underlying Bunny gem can be found here: http://rubybunny.info/articles/tls.html.
|
149
157
|
|
@@ -176,9 +184,9 @@ Processor2 symbolizes keys and sub-keys from configuration files automatically.
|
|
176
184
|
|
177
185
|
# If you need strings instead of symbols you can do
|
178
186
|
database = stringify_keys(EventHub::Configuration.database)
|
179
|
-
database[
|
180
|
-
database[
|
181
|
-
database[
|
187
|
+
database["user"] # => "guest"
|
188
|
+
database["password"] # => "secret"
|
189
|
+
database["name"]["subname"] # => "value"
|
182
190
|
```
|
183
191
|
|
184
192
|
Version 1.17 and newer allows you to load and merge more configuration files programmatically. It is expected that load! is called once (implicit during class initialization) and then load_more! zero, one, or multiple times. All additional files loaded with load_more! are hash deep merged into one configuration structure. Exceptions while loading of files will be catched and shown as warnings.
|
data/eventhub-processor2.gemspec
CHANGED
@@ -23,9 +23,11 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.require_paths = ["lib"]
|
24
24
|
|
25
25
|
spec.add_dependency "celluloid", "~> 0.18"
|
26
|
+
spec.add_dependency "webrick", "~> 1.8"
|
26
27
|
spec.add_dependency "bunny", "~> 2.20"
|
27
28
|
spec.add_dependency "eventhub-components", "~> 0.2"
|
28
29
|
spec.add_dependency "uuidtools", "~> 2.1"
|
30
|
+
spec.add_dependency "base64", "~> 0.2.0"
|
29
31
|
|
30
32
|
spec.add_development_dependency "bundler", "~> 2.3"
|
31
33
|
spec.add_development_dependency "rake", "~> 13.0"
|
data/example/example.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require_relative "../lib/eventhub/base"
|
2
|
+
|
3
|
+
module EventHub
|
4
|
+
class Example < Processor2
|
5
|
+
def version
|
6
|
+
"1.0.0" # define your version
|
7
|
+
end
|
8
|
+
|
9
|
+
def handle_message(message, args = {})
|
10
|
+
# deal with your parsed EventHub message
|
11
|
+
# message.class => EventHub::Message
|
12
|
+
puts message.process_name # or whatever you need to do
|
13
|
+
|
14
|
+
# or if there is no message to return to event_hub.inbound queue
|
15
|
+
nil # [] works as well
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
# start your processor instance
|
21
|
+
EventHub::Example.new.start
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# EventHub module
|
2
2
|
module EventHub
|
3
3
|
# Listner Class
|
4
|
-
class
|
4
|
+
class ActorListenerAmqp
|
5
5
|
include Celluloid
|
6
6
|
include Helper
|
7
7
|
finalizer :cleanup
|
@@ -15,14 +15,14 @@ module EventHub
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def start
|
18
|
-
EventHub.logger.info("Listener is starting...")
|
18
|
+
EventHub.logger.info("Listener amqp is starting...")
|
19
19
|
EventHub::Configuration.processor[:listener_queues].each_with_index do |queue_name, index|
|
20
20
|
async.listen(queue_name: queue_name, index: index)
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
24
|
def restart
|
25
|
-
raise "Listener is restarting..."
|
25
|
+
raise "Listener amqp is restarting..."
|
26
26
|
end
|
27
27
|
|
28
28
|
def listen(args = {})
|
@@ -109,7 +109,7 @@ module EventHub
|
|
109
109
|
end
|
110
110
|
|
111
111
|
def cleanup
|
112
|
-
EventHub.logger.info("Listener is cleaning up...")
|
112
|
+
EventHub.logger.info("Listener amqp is cleaning up...")
|
113
113
|
# close all open connections
|
114
114
|
return unless @connections
|
115
115
|
@connections.values.each do |connection|
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require "webrick"
|
2
|
+
|
3
|
+
# EventHub module
|
4
|
+
module EventHub
|
5
|
+
# Listner Class
|
6
|
+
class ActorListenerHttp
|
7
|
+
include Celluloid
|
8
|
+
finalizer :cleanup
|
9
|
+
|
10
|
+
def initialize(args = {})
|
11
|
+
@host = args[:bind_address] || EventHub::Configuration.server.dig(:heartbeat, :bind_address)
|
12
|
+
@port = args[:port] || EventHub::Configuration.server.dig(:heartbeat, :port)
|
13
|
+
@path = args[:path] || EventHub::Configuration.server.dig(:heartbeat, :path)
|
14
|
+
start
|
15
|
+
end
|
16
|
+
|
17
|
+
def start
|
18
|
+
EventHub.logger.info("Listener http is starting [#{@host}, #{@port}], #{@path}...")
|
19
|
+
@async_server = Thread.new do
|
20
|
+
@server = WEBrick::HTTPServer.new(
|
21
|
+
BindAddress: @host,
|
22
|
+
Port: @port,
|
23
|
+
Logger: WEBrick::Log.new("/dev/null"),
|
24
|
+
AccessLog: []
|
25
|
+
)
|
26
|
+
@server.mount_proc @path do |req, res|
|
27
|
+
handle_request(req, res)
|
28
|
+
end
|
29
|
+
@server.start
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def handle_request(req, res)
|
34
|
+
case req.request_method
|
35
|
+
when "GET"
|
36
|
+
res.status = 200
|
37
|
+
res.body = "OK"
|
38
|
+
else
|
39
|
+
res.status = 405
|
40
|
+
res.body = "Method Not Allowed"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def cleanup
|
45
|
+
EventHub.logger.info("Listener http is cleaning up...")
|
46
|
+
@async_server&.kill
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/lib/eventhub/base.rb
CHANGED
@@ -22,7 +22,8 @@ require_relative "consumer"
|
|
22
22
|
require_relative "actor_heartbeat"
|
23
23
|
require_relative "actor_watchdog"
|
24
24
|
require_relative "actor_publisher"
|
25
|
-
require_relative "
|
25
|
+
require_relative "actor_listener_amqp"
|
26
|
+
require_relative "actor_listener_http"
|
26
27
|
require_relative "processor2"
|
27
28
|
|
28
29
|
Celluloid.logger = nil
|
@@ -10,6 +10,7 @@ module EventHub
|
|
10
10
|
attr_reader :environment # environment the processor is running
|
11
11
|
attr_reader :detached # run processor run as a daemon
|
12
12
|
attr_reader :config_file # name of configuration file
|
13
|
+
attr_reader :console_log_only # only log to console
|
13
14
|
attr_reader :config_data # data from configuration file
|
14
15
|
|
15
16
|
@name = "undefined"
|
@@ -29,6 +30,7 @@ module EventHub
|
|
29
30
|
@detached = false
|
30
31
|
@config_file = File.join(Dir.getwd, "config", "#{@name}.json")
|
31
32
|
@config_data = {}
|
33
|
+
@console_log_only = false
|
32
34
|
end
|
33
35
|
|
34
36
|
# parse options from argument list
|
@@ -45,6 +47,10 @@ module EventHub
|
|
45
47
|
@detached = true
|
46
48
|
end
|
47
49
|
|
50
|
+
opts.on(nil, "--console-log-only", "Only log to console (containers)") do
|
51
|
+
@console_log_only = true
|
52
|
+
end
|
53
|
+
|
48
54
|
note = "Define configuration file"
|
49
55
|
opts.on("-c", "--config CONFIG", note) do |config|
|
50
56
|
@config_file = config
|
@@ -130,7 +136,12 @@ module EventHub
|
|
130
136
|
tls_key: nil,
|
131
137
|
tls_ca_certificates: [],
|
132
138
|
verify_peer: false,
|
133
|
-
show_bunny_logs: false
|
139
|
+
show_bunny_logs: false,
|
140
|
+
heartbeat: {
|
141
|
+
bind_address: "localhost",
|
142
|
+
port: 8080,
|
143
|
+
path: "/svc/#{@name}/heartbeat"
|
144
|
+
}
|
134
145
|
},
|
135
146
|
processor: {
|
136
147
|
heartbeat_cycle_in_s: 300,
|
data/lib/eventhub/logger.rb
CHANGED
@@ -4,10 +4,13 @@ module EventHub
|
|
4
4
|
unless defined?(@logger)
|
5
5
|
@logger = ::EventHub::Components::MultiLogger.new
|
6
6
|
@logger.add_device(Logger.new($stdout))
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
7
|
+
|
8
|
+
unless Configuration.console_log_only
|
9
|
+
@logger.add_device(
|
10
|
+
EventHub::Components::Logger.logstash(Configuration.name,
|
11
|
+
Configuration.environment)
|
12
|
+
)
|
13
|
+
end
|
11
14
|
end
|
12
15
|
@logger
|
13
16
|
end
|
data/lib/eventhub/message.rb
CHANGED
data/lib/eventhub/processor2.rb
CHANGED
@@ -60,7 +60,7 @@ module EventHub
|
|
60
60
|
# pass message as string like: '{ "header": ... , "body": { .. }}'
|
61
61
|
# and optionally exchange_name: 'your exchange name'
|
62
62
|
def publish(args = {})
|
63
|
-
Celluloid::Actor[:
|
63
|
+
Celluloid::Actor[:actor_listener_amqp].publish(args)
|
64
64
|
rescue => error
|
65
65
|
EventHub.logger.error("Unexpected exeption while publish: #{error}")
|
66
66
|
raise
|
@@ -87,7 +87,8 @@ module EventHub
|
|
87
87
|
def start_supervisor
|
88
88
|
@config = Celluloid::Supervision::Configuration.define([
|
89
89
|
{type: ActorHeartbeat, as: :actor_heartbeat, args: [self]},
|
90
|
-
{type:
|
90
|
+
{type: ActorListenerAmqp, as: :actor_listener_amqp, args: [self]},
|
91
|
+
{type: ActorListenerHttp, as: :actor_listener_http, args: []}
|
91
92
|
])
|
92
93
|
|
93
94
|
sleeper = @sleeper
|
@@ -116,8 +117,8 @@ module EventHub
|
|
116
117
|
EventHub.logger.info("Configuration file reloaded")
|
117
118
|
|
118
119
|
# restart listener when actor is known
|
119
|
-
if Celluloid::Actor[:
|
120
|
-
Celluloid::Actor[:
|
120
|
+
if Celluloid::Actor[:actor_listener_amqp]
|
121
|
+
Celluloid::Actor[:actor_listener_amqp].async.restart
|
121
122
|
else
|
122
123
|
EventHub.logger.info("Was unable to get a valid listener actor to restart... check!!!")
|
123
124
|
end
|
data/lib/eventhub/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eventhub-processor2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.21.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Steiner, Thomas
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-05-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: celluloid
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0.18'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: webrick
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.8'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.8'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: bunny
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,6 +80,20 @@ dependencies:
|
|
66
80
|
- - "~>"
|
67
81
|
- !ruby/object:Gem::Version
|
68
82
|
version: '2.1'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: base64
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 0.2.0
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 0.2.0
|
69
97
|
- !ruby/object:Gem::Dependency
|
70
98
|
name: bundler
|
71
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -167,11 +195,13 @@ files:
|
|
167
195
|
- example/config/receiver.json
|
168
196
|
- example/config/router.json
|
169
197
|
- example/crasher.rb
|
198
|
+
- example/example.rb
|
170
199
|
- example/publisher.rb
|
171
200
|
- example/receiver.rb
|
172
201
|
- example/router.rb
|
173
202
|
- lib/eventhub/actor_heartbeat.rb
|
174
|
-
- lib/eventhub/
|
203
|
+
- lib/eventhub/actor_listener_amqp.rb
|
204
|
+
- lib/eventhub/actor_listener_http.rb
|
175
205
|
- lib/eventhub/actor_publisher.rb
|
176
206
|
- lib/eventhub/actor_watchdog.rb
|
177
207
|
- lib/eventhub/base.rb
|
@@ -206,7 +236,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
206
236
|
- !ruby/object:Gem::Version
|
207
237
|
version: '0'
|
208
238
|
requirements: []
|
209
|
-
rubygems_version: 3.
|
239
|
+
rubygems_version: 3.5.9
|
210
240
|
signing_key:
|
211
241
|
specification_version: 4
|
212
242
|
summary: Next generation gem to build ruby based eventhub processor
|