koine-event_manager 2.1.1 → 3.0.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/workflows/ci.yml +49 -0
- data/.gitignore +1 -0
- data/.rubocop.yml +11 -27
- data/Gemfile +10 -0
- data/README.md +205 -32
- data/Rakefile +4 -7
- data/koine-event_manager.gemspec +2 -9
- data/lib/koine/event_manager/event_listener.rb +2 -2
- data/lib/koine/event_manager/version.rb +1 -1
- metadata +7 -108
- data/.travis.yml +0 -7
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 83204e64656ac138a1079ca46b9380d9e925ab10a4d0e4b3af45a25d5253d5fe
|
|
4
|
+
data.tar.gz: 7db31b4a992772eefce2cda6a15588e29c199d7ba6bf2999e77598129f02a366
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d29000bd69044fd15aae4935ce9d7dbc937b0e569aee4ade80393cbe32e054898b369fbd2cbe755a21bd2c64671e4e867e33d6887205e3ae09ad3caabaf5ed1a
|
|
7
|
+
data.tar.gz: 8326965bdc59e68b12c858f13c8196a813f33cb0596c800a236f0c0ebde88b627d9ce6c94341c0422aa840f059c162b742678d03ea18ee2c2b71af31ed20a860
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [ master, update ]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [ master ]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
strategy:
|
|
13
|
+
matrix:
|
|
14
|
+
ruby-version: ['3.0', '3.1', '3.2', '3.3', '3.4']
|
|
15
|
+
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v4
|
|
18
|
+
|
|
19
|
+
- name: Set up Ruby ${{ matrix.ruby-version }}
|
|
20
|
+
uses: ruby/setup-ruby@v1
|
|
21
|
+
with:
|
|
22
|
+
ruby-version: ${{ matrix.ruby-version }}
|
|
23
|
+
bundler-cache: true
|
|
24
|
+
|
|
25
|
+
- name: Run tests
|
|
26
|
+
run: bundle exec rspec
|
|
27
|
+
|
|
28
|
+
- name: Upload coverage to Coveralls
|
|
29
|
+
if: matrix.ruby-version == '3.4'
|
|
30
|
+
uses: coverallsapp/github-action@v2
|
|
31
|
+
with:
|
|
32
|
+
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
33
|
+
path-to-lcov: ./coverage/lcov.info
|
|
34
|
+
continue-on-error: true
|
|
35
|
+
|
|
36
|
+
rubocop:
|
|
37
|
+
runs-on: ubuntu-latest
|
|
38
|
+
|
|
39
|
+
steps:
|
|
40
|
+
- uses: actions/checkout@v4
|
|
41
|
+
|
|
42
|
+
- name: Set up Ruby
|
|
43
|
+
uses: ruby/setup-ruby@v1
|
|
44
|
+
with:
|
|
45
|
+
ruby-version: '3.4'
|
|
46
|
+
bundler-cache: true
|
|
47
|
+
|
|
48
|
+
- name: Run RuboCop
|
|
49
|
+
run: bundle exec rubocop
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
|
@@ -1,13 +1,17 @@
|
|
|
1
|
-
require: rubocop-rspec
|
|
2
|
-
|
|
3
1
|
# https://github.com/rubocop-hq/rubocop/blob/36404b40cbdac743b596c8520877c4ca3eee5691/manual/cops.md
|
|
4
2
|
|
|
5
3
|
AllCops:
|
|
6
|
-
TargetRubyVersion:
|
|
4
|
+
TargetRubyVersion: 3.0
|
|
7
5
|
Exclude:
|
|
8
6
|
- config/environment.rb
|
|
9
7
|
- apps/web/application.rb
|
|
10
|
-
|
|
8
|
+
- vendor/**/*
|
|
9
|
+
- node_modules/**/*
|
|
10
|
+
- bin/**/*
|
|
11
|
+
NewCops: enable
|
|
12
|
+
SuggestExtensions: false
|
|
13
|
+
|
|
14
|
+
Layout/ParameterAlignment:
|
|
11
15
|
Enabled: false
|
|
12
16
|
|
|
13
17
|
Layout/ClosingParenthesisIndentation:
|
|
@@ -16,10 +20,10 @@ Layout/ClosingParenthesisIndentation:
|
|
|
16
20
|
Layout/FirstParameterIndentation:
|
|
17
21
|
Enabled: false
|
|
18
22
|
|
|
19
|
-
Layout/
|
|
23
|
+
Layout/FirstHashElementIndentation:
|
|
20
24
|
Enabled: false
|
|
21
25
|
|
|
22
|
-
Layout/
|
|
26
|
+
Layout/FirstArrayElementIndentation:
|
|
23
27
|
Enabled: false
|
|
24
28
|
|
|
25
29
|
Layout/MultilineMethodCallIndentation:
|
|
@@ -39,7 +43,7 @@ Metrics/BlockLength:
|
|
|
39
43
|
Exclude:
|
|
40
44
|
- 'spec/**/*_spec.rb'
|
|
41
45
|
|
|
42
|
-
|
|
46
|
+
Layout/LineLength:
|
|
43
47
|
Max: 100
|
|
44
48
|
|
|
45
49
|
Style/CommentedKeyword:
|
|
@@ -59,23 +63,3 @@ Style/TrailingCommaInArrayLiteral:
|
|
|
59
63
|
|
|
60
64
|
Style/TrailingCommaInHashLiteral:
|
|
61
65
|
EnforcedStyleForMultiline: comma
|
|
62
|
-
|
|
63
|
-
# rubocop-rspec cops
|
|
64
|
-
|
|
65
|
-
Capybara/FeatureMethods:
|
|
66
|
-
Enabled: false
|
|
67
|
-
|
|
68
|
-
FactoryBot/CreateList:
|
|
69
|
-
Enabled: false
|
|
70
|
-
|
|
71
|
-
RSpec/ExampleLength:
|
|
72
|
-
Enabled: false
|
|
73
|
-
|
|
74
|
-
RSpec/MessageSpies:
|
|
75
|
-
Enabled: false
|
|
76
|
-
|
|
77
|
-
RSpec/MultipleExpectations:
|
|
78
|
-
Enabled: false
|
|
79
|
-
|
|
80
|
-
RSpec/NestedGroups:
|
|
81
|
-
Enabled: false
|
data/Gemfile
CHANGED
|
@@ -6,3 +6,13 @@ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
|
|
|
6
6
|
|
|
7
7
|
# Specify your gem's dependencies in koine-event_manager.gemspec
|
|
8
8
|
gemspec
|
|
9
|
+
|
|
10
|
+
group :development, :test do
|
|
11
|
+
gem 'coveralls', require: false
|
|
12
|
+
gem 'rake', '~> 13.0'
|
|
13
|
+
gem 'rspec', '~> 3.13'
|
|
14
|
+
gem 'rubocop', '~> 1.0', require: false
|
|
15
|
+
gem 'rubocop-rake', '~> 0.6', require: false
|
|
16
|
+
gem 'rubocop-rspec', '~> 3.0', require: false
|
|
17
|
+
gem 'simplecov', require: false
|
|
18
|
+
end
|
data/README.md
CHANGED
|
@@ -1,12 +1,25 @@
|
|
|
1
1
|
# Koine::EventManager
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
A simple and lightweight event management library for Ruby that enables event-driven architecture through a publish-subscribe pattern.
|
|
4
4
|
|
|
5
|
-
[](https://github.com/mjacobus/koine-event-manager/actions/workflows/ci.yml)
|
|
6
6
|
[](https://coveralls.io/github/mjacobus/koine-event-manager?branch=master)
|
|
7
7
|
[](https://codeclimate.com/github/mjacobus/koine-event-manager)
|
|
8
8
|
[](https://badge.fury.io/rb/koine-event_manager)
|
|
9
9
|
|
|
10
|
+
## Features
|
|
11
|
+
|
|
12
|
+
- **Simple API** - Easy to understand and use
|
|
13
|
+
- **Block-based listeners** - Quick inline event handlers
|
|
14
|
+
- **Object-based subscribers** - Reusable event handling objects
|
|
15
|
+
- **Event inheritance** - Listen to parent event classes and receive child events
|
|
16
|
+
- **No dependencies** - Pure Ruby implementation
|
|
17
|
+
- **Thread-safe operations** - Safe for concurrent use
|
|
18
|
+
|
|
19
|
+
## Requirements
|
|
20
|
+
|
|
21
|
+
- Ruby >= 3.0
|
|
22
|
+
|
|
10
23
|
## Installation
|
|
11
24
|
|
|
12
25
|
Add this line to your application's Gemfile:
|
|
@@ -17,7 +30,7 @@ gem 'koine-event_manager'
|
|
|
17
30
|
|
|
18
31
|
And then execute:
|
|
19
32
|
|
|
20
|
-
$ bundle
|
|
33
|
+
$ bundle install
|
|
21
34
|
|
|
22
35
|
Or install it yourself as:
|
|
23
36
|
|
|
@@ -25,35 +38,64 @@ Or install it yourself as:
|
|
|
25
38
|
|
|
26
39
|
## Usage
|
|
27
40
|
|
|
28
|
-
|
|
41
|
+
### Basic Example
|
|
29
42
|
|
|
30
43
|
```ruby
|
|
44
|
+
require 'koine/event_manager'
|
|
45
|
+
|
|
46
|
+
# Define your event
|
|
47
|
+
class UserSignedIn
|
|
48
|
+
attr_reader :user
|
|
49
|
+
|
|
50
|
+
def initialize(user)
|
|
51
|
+
@user = user
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Create the event manager
|
|
31
56
|
event_manager = Koine::EventManager::EventManager.new
|
|
32
57
|
|
|
58
|
+
# Register a listener
|
|
33
59
|
event_manager.listen_to(UserSignedIn) do |event|
|
|
60
|
+
puts "Welcome, #{event.user.name}!"
|
|
34
61
|
WelcomeEmail.new(event.user).send
|
|
35
62
|
end
|
|
63
|
+
|
|
64
|
+
# Trigger the event
|
|
65
|
+
user = User.find(123)
|
|
66
|
+
event_manager.trigger(UserSignedIn.new(user))
|
|
36
67
|
```
|
|
37
68
|
|
|
38
|
-
|
|
69
|
+
### Block-based Listeners
|
|
70
|
+
|
|
71
|
+
Use block-based listeners for simple, inline event handlers:
|
|
39
72
|
|
|
40
73
|
```ruby
|
|
41
|
-
|
|
42
|
-
def create
|
|
43
|
-
@user = User.create(user_params)
|
|
74
|
+
event_manager = Koine::EventManager::EventManager.new
|
|
44
75
|
|
|
45
|
-
|
|
76
|
+
event_manager.listen_to(UserSignedIn) do |event|
|
|
77
|
+
WelcomeEmail.new(event.user).send
|
|
78
|
+
end
|
|
46
79
|
|
|
47
|
-
|
|
48
|
-
|
|
80
|
+
event_manager.listen_to(UserRemovedAccount) do |event|
|
|
81
|
+
CleanupJob.perform_later(event.user.id)
|
|
49
82
|
end
|
|
83
|
+
|
|
84
|
+
# Trigger events
|
|
85
|
+
event_manager.trigger(UserSignedIn.new(user))
|
|
50
86
|
```
|
|
51
87
|
|
|
52
|
-
|
|
88
|
+
**When to use:** Quick, one-off event handlers that don't need to be reused.
|
|
89
|
+
|
|
90
|
+
### Event Listener Classes
|
|
91
|
+
|
|
92
|
+
For better organization, create reusable listener classes:
|
|
53
93
|
|
|
54
94
|
```ruby
|
|
55
95
|
class UserListener < Koine::EventManager::EventListener
|
|
56
|
-
def
|
|
96
|
+
def initialize
|
|
97
|
+
super
|
|
98
|
+
|
|
57
99
|
listen_to(UserSignedIn) do |event|
|
|
58
100
|
WelcomeEmail.new(event.user).send
|
|
59
101
|
end
|
|
@@ -63,53 +105,184 @@ class UserListener < Koine::EventManager::EventListener
|
|
|
63
105
|
end
|
|
64
106
|
end
|
|
65
107
|
end
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
And attach to the event manager:
|
|
69
108
|
|
|
70
|
-
|
|
109
|
+
# Attach the listener to the event manager
|
|
71
110
|
event_manager = Koine::EventManager::EventManager.new
|
|
72
111
|
event_manager.attach_listener(UserListener.new)
|
|
73
112
|
|
|
74
|
-
#
|
|
113
|
+
# Trigger events
|
|
114
|
+
event_manager.trigger(UserSignedIn.new(some_user))
|
|
115
|
+
|
|
116
|
+
# Later, you can detach listeners if needed
|
|
75
117
|
event_manager.detach_listener(event_manager.listeners.last)
|
|
76
118
|
```
|
|
77
119
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
```ruby
|
|
81
|
-
event_manager.trigger(UserSignedIn.new(some_user))
|
|
82
|
-
```
|
|
120
|
+
**When to use:** Related event handlers that should be grouped together and potentially attached/detached as a unit.
|
|
83
121
|
|
|
84
122
|
### Subscribers
|
|
85
123
|
|
|
86
|
-
|
|
124
|
+
Subscribers are objects that implement a `publish` method. They provide a more object-oriented approach to event handling:
|
|
87
125
|
|
|
88
126
|
```ruby
|
|
89
|
-
class
|
|
127
|
+
class NotificationSubscriber
|
|
90
128
|
def publish(event)
|
|
91
|
-
|
|
129
|
+
case event
|
|
130
|
+
when UserSignedIn
|
|
131
|
+
send_welcome_notification(event.user)
|
|
132
|
+
when UserRemovedAccount
|
|
133
|
+
send_goodbye_notification(event.user)
|
|
134
|
+
end
|
|
92
135
|
end
|
|
93
|
-
end
|
|
94
136
|
|
|
95
|
-
|
|
137
|
+
private
|
|
96
138
|
|
|
139
|
+
def send_welcome_notification(user)
|
|
140
|
+
# Send notification logic
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
def send_goodbye_notification(user)
|
|
144
|
+
# Send notification logic
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
# Subscribe to specific events
|
|
149
|
+
subscriber = NotificationSubscriber.new
|
|
97
150
|
event_manager.subscribe(subscriber, to: UserSignedIn)
|
|
151
|
+
event_manager.subscribe(subscriber, to: UserRemovedAccount)
|
|
152
|
+
|
|
153
|
+
# Trigger events - subscriber.publish(event) will be called
|
|
154
|
+
event_manager.trigger(UserSignedIn.new(user))
|
|
155
|
+
|
|
156
|
+
# Unsubscribe when no longer needed
|
|
98
157
|
event_manager.unsubscribe(subscriber, from: UserSignedIn)
|
|
99
158
|
```
|
|
100
159
|
|
|
160
|
+
**When to use:** Complex event handling logic that needs to be encapsulated in a class with state and multiple methods.
|
|
161
|
+
|
|
162
|
+
### Event Inheritance
|
|
163
|
+
|
|
164
|
+
The event manager supports event inheritance. If you listen to a parent event class, you'll also receive events from child classes:
|
|
165
|
+
|
|
166
|
+
```ruby
|
|
167
|
+
class UserEvent
|
|
168
|
+
attr_reader :user
|
|
169
|
+
|
|
170
|
+
def initialize(user)
|
|
171
|
+
@user = user
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
class UserSignedIn < UserEvent
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
class UserSignedOut < UserEvent
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
# Listen to the parent class
|
|
182
|
+
event_manager.listen_to(UserEvent) do |event|
|
|
183
|
+
puts "User event occurred for #{event.user.name}"
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
# Both of these will trigger the listener above
|
|
187
|
+
event_manager.trigger(UserSignedIn.new(user))
|
|
188
|
+
event_manager.trigger(UserSignedOut.new(user))
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### Using in Rails
|
|
192
|
+
|
|
193
|
+
Here's a complete example of how to use the event manager in a Rails application:
|
|
194
|
+
|
|
195
|
+
```ruby
|
|
196
|
+
# app/events/user_signed_in.rb
|
|
197
|
+
class UserSignedIn
|
|
198
|
+
attr_reader :user, :ip_address
|
|
199
|
+
|
|
200
|
+
def initialize(user, ip_address: nil)
|
|
201
|
+
@user = user
|
|
202
|
+
@ip_address = ip_address
|
|
203
|
+
end
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
# app/listeners/user_listener.rb
|
|
207
|
+
class UserListener < Koine::EventManager::EventListener
|
|
208
|
+
def initialize
|
|
209
|
+
super
|
|
210
|
+
|
|
211
|
+
listen_to(UserSignedIn) do |event|
|
|
212
|
+
WelcomeMailer.welcome_email(event.user).deliver_later
|
|
213
|
+
TrackingService.track_login(event.user, event.ip_address)
|
|
214
|
+
end
|
|
215
|
+
end
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
# config/initializers/event_manager.rb
|
|
219
|
+
Rails.application.config.event_manager = Koine::EventManager::EventManager.new
|
|
220
|
+
Rails.application.config.event_manager.attach_listener(UserListener.new)
|
|
221
|
+
|
|
222
|
+
# app/controllers/application_controller.rb
|
|
223
|
+
class ApplicationController < ActionController::Base
|
|
224
|
+
def event_manager
|
|
225
|
+
Rails.application.config.event_manager
|
|
226
|
+
end
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
# app/controllers/sessions_controller.rb
|
|
230
|
+
class SessionsController < ApplicationController
|
|
231
|
+
def create
|
|
232
|
+
@user = User.find_by(email: params[:email])
|
|
233
|
+
|
|
234
|
+
if @user&.authenticate(params[:password])
|
|
235
|
+
session[:user_id] = @user.id
|
|
236
|
+
event_manager.trigger(UserSignedIn.new(@user, ip_address: request.remote_ip))
|
|
237
|
+
redirect_to root_path, notice: 'Signed in successfully'
|
|
238
|
+
else
|
|
239
|
+
render :new, alert: 'Invalid credentials'
|
|
240
|
+
end
|
|
241
|
+
end
|
|
242
|
+
end
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
## API Reference
|
|
246
|
+
|
|
247
|
+
### EventManager
|
|
248
|
+
|
|
249
|
+
- `listen_to(event_class, &block)` - Register a block to handle events
|
|
250
|
+
- `trigger(event)` - Dispatch an event to all listeners and subscribers
|
|
251
|
+
- `subscribe(subscriber, to: event_type)` - Add a subscriber for an event type
|
|
252
|
+
- `unsubscribe(subscriber, from: event_type)` - Remove a subscriber
|
|
253
|
+
- `attach_listener(listener)` - Attach an EventListener instance
|
|
254
|
+
- `detach_listener(listener)` - Remove a listener
|
|
255
|
+
- `listeners` - Get array of attached listeners
|
|
256
|
+
|
|
257
|
+
### EventListener
|
|
258
|
+
|
|
259
|
+
- `listen_to(event_type, &block)` - Register a block handler for an event type
|
|
260
|
+
- `subscribe(subscriber, to: event_type)` - Register a subscriber object
|
|
261
|
+
- `unsubscribe(subscriber, from: event_type)` - Unregister a subscriber
|
|
262
|
+
- `trigger(event_object)` - Process the event through all listeners and subscribers
|
|
263
|
+
|
|
101
264
|
## Development
|
|
102
265
|
|
|
103
|
-
After checking out the repo, run `bin/setup` to install dependencies. Then, run `
|
|
266
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `bundle exec rspec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
|
104
267
|
|
|
105
268
|
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
|
106
269
|
|
|
107
|
-
|
|
270
|
+
### Running Tests
|
|
108
271
|
|
|
109
|
-
|
|
272
|
+
```bash
|
|
273
|
+
bundle exec rspec
|
|
274
|
+
```
|
|
110
275
|
|
|
276
|
+
### Running Linter
|
|
277
|
+
|
|
278
|
+
```bash
|
|
279
|
+
bundle exec rubocop
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
## Contributing
|
|
283
|
+
|
|
284
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/mjacobus/koine-event-manager. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
|
111
285
|
|
|
112
286
|
## License
|
|
113
287
|
|
|
114
288
|
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
|
115
|
-
|
data/Rakefile
CHANGED
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require 'bundler/gem_tasks'
|
|
4
|
+
require 'rspec/core/rake_task'
|
|
4
5
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
RSpec::Core::RakeTask.new(:spec)
|
|
9
|
-
task default: :spec
|
|
10
|
-
rescue LoadError
|
|
11
|
-
end
|
|
6
|
+
RSpec::Core::RakeTask.new(:spec)
|
|
7
|
+
|
|
8
|
+
task default: :spec
|
data/koine-event_manager.gemspec
CHANGED
|
@@ -4,7 +4,6 @@ lib = File.expand_path('lib', __dir__)
|
|
|
4
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
5
5
|
require 'koine/event_manager/version'
|
|
6
6
|
|
|
7
|
-
# rubocop:disable Metrics/BlockLength
|
|
8
7
|
Gem::Specification.new do |spec|
|
|
9
8
|
spec.name = 'koine-event_manager'
|
|
10
9
|
spec.version = Koine::EventManager::VERSION
|
|
@@ -15,11 +14,13 @@ Gem::Specification.new do |spec|
|
|
|
15
14
|
spec.description = 'Event Manager for ruby'
|
|
16
15
|
spec.homepage = 'https://github.com/mjacobus/koine-event-manager'
|
|
17
16
|
spec.license = 'MIT'
|
|
17
|
+
spec.required_ruby_version = '>= 3.0'
|
|
18
18
|
|
|
19
19
|
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
|
20
20
|
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
|
21
21
|
if spec.respond_to?(:metadata)
|
|
22
22
|
spec.metadata['allowed_push_host'] = 'https://rubygems.org'
|
|
23
|
+
spec.metadata['rubygems_mfa_required'] = 'true'
|
|
23
24
|
else
|
|
24
25
|
raise 'RubyGems 2.0 or newer is required to protect against public gem pushes.'
|
|
25
26
|
end
|
|
@@ -32,12 +33,4 @@ Gem::Specification.new do |spec|
|
|
|
32
33
|
spec.bindir = 'exe'
|
|
33
34
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
34
35
|
spec.require_paths = ['lib']
|
|
35
|
-
|
|
36
|
-
spec.add_development_dependency 'bundler', '~> 1.16'
|
|
37
|
-
spec.add_development_dependency 'coveralls'
|
|
38
|
-
spec.add_development_dependency 'rake', '~> 10.0'
|
|
39
|
-
spec.add_development_dependency 'rspec', '~> 3.0'
|
|
40
|
-
spec.add_development_dependency 'rubocop', '0.58'
|
|
41
|
-
spec.add_development_dependency 'rubocop-rspec', '~>1.30'
|
|
42
|
-
spec.add_development_dependency 'simplecov'
|
|
43
36
|
end
|
|
@@ -10,6 +10,7 @@ module Koine
|
|
|
10
10
|
|
|
11
11
|
def listen_to(event_type, &block)
|
|
12
12
|
raise ArgumentError, 'block not given' unless block_given?
|
|
13
|
+
|
|
13
14
|
add_listener(event_type, &block)
|
|
14
15
|
end
|
|
15
16
|
|
|
@@ -54,8 +55,7 @@ module Koine
|
|
|
54
55
|
listeners[event_type.to_s] << block
|
|
55
56
|
end
|
|
56
57
|
|
|
57
|
-
attr_reader :listeners
|
|
58
|
-
attr_reader :subscribers
|
|
58
|
+
attr_reader :listeners, :subscribers
|
|
59
59
|
end
|
|
60
60
|
end
|
|
61
61
|
end
|
metadata
CHANGED
|
@@ -1,113 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: koine-event_manager
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 3.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Marcelo Jacobus
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: exe
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
12
|
-
dependencies:
|
|
13
|
-
- !ruby/object:Gem::Dependency
|
|
14
|
-
name: bundler
|
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
|
16
|
-
requirements:
|
|
17
|
-
- - "~>"
|
|
18
|
-
- !ruby/object:Gem::Version
|
|
19
|
-
version: '1.16'
|
|
20
|
-
type: :development
|
|
21
|
-
prerelease: false
|
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
-
requirements:
|
|
24
|
-
- - "~>"
|
|
25
|
-
- !ruby/object:Gem::Version
|
|
26
|
-
version: '1.16'
|
|
27
|
-
- !ruby/object:Gem::Dependency
|
|
28
|
-
name: coveralls
|
|
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'
|
|
41
|
-
- !ruby/object:Gem::Dependency
|
|
42
|
-
name: rake
|
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
|
44
|
-
requirements:
|
|
45
|
-
- - "~>"
|
|
46
|
-
- !ruby/object:Gem::Version
|
|
47
|
-
version: '10.0'
|
|
48
|
-
type: :development
|
|
49
|
-
prerelease: false
|
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
-
requirements:
|
|
52
|
-
- - "~>"
|
|
53
|
-
- !ruby/object:Gem::Version
|
|
54
|
-
version: '10.0'
|
|
55
|
-
- !ruby/object:Gem::Dependency
|
|
56
|
-
name: rspec
|
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
|
58
|
-
requirements:
|
|
59
|
-
- - "~>"
|
|
60
|
-
- !ruby/object:Gem::Version
|
|
61
|
-
version: '3.0'
|
|
62
|
-
type: :development
|
|
63
|
-
prerelease: false
|
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
-
requirements:
|
|
66
|
-
- - "~>"
|
|
67
|
-
- !ruby/object:Gem::Version
|
|
68
|
-
version: '3.0'
|
|
69
|
-
- !ruby/object:Gem::Dependency
|
|
70
|
-
name: rubocop
|
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
|
72
|
-
requirements:
|
|
73
|
-
- - '='
|
|
74
|
-
- !ruby/object:Gem::Version
|
|
75
|
-
version: '0.58'
|
|
76
|
-
type: :development
|
|
77
|
-
prerelease: false
|
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
-
requirements:
|
|
80
|
-
- - '='
|
|
81
|
-
- !ruby/object:Gem::Version
|
|
82
|
-
version: '0.58'
|
|
83
|
-
- !ruby/object:Gem::Dependency
|
|
84
|
-
name: rubocop-rspec
|
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
|
86
|
-
requirements:
|
|
87
|
-
- - "~>"
|
|
88
|
-
- !ruby/object:Gem::Version
|
|
89
|
-
version: '1.30'
|
|
90
|
-
type: :development
|
|
91
|
-
prerelease: false
|
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
-
requirements:
|
|
94
|
-
- - "~>"
|
|
95
|
-
- !ruby/object:Gem::Version
|
|
96
|
-
version: '1.30'
|
|
97
|
-
- !ruby/object:Gem::Dependency
|
|
98
|
-
name: simplecov
|
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
|
100
|
-
requirements:
|
|
101
|
-
- - ">="
|
|
102
|
-
- !ruby/object:Gem::Version
|
|
103
|
-
version: '0'
|
|
104
|
-
type: :development
|
|
105
|
-
prerelease: false
|
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
107
|
-
requirements:
|
|
108
|
-
- - ">="
|
|
109
|
-
- !ruby/object:Gem::Version
|
|
110
|
-
version: '0'
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
+
dependencies: []
|
|
111
12
|
description: Event Manager for ruby
|
|
112
13
|
email:
|
|
113
14
|
- marcelo.jacobus@gmail.com
|
|
@@ -115,11 +16,11 @@ executables: []
|
|
|
115
16
|
extensions: []
|
|
116
17
|
extra_rdoc_files: []
|
|
117
18
|
files:
|
|
19
|
+
- ".github/workflows/ci.yml"
|
|
118
20
|
- ".gitignore"
|
|
119
21
|
- ".rspec"
|
|
120
22
|
- ".rubocop.yml"
|
|
121
23
|
- ".scrutinizer.yml"
|
|
122
|
-
- ".travis.yml"
|
|
123
24
|
- CODE_OF_CONDUCT.md
|
|
124
25
|
- Gemfile
|
|
125
26
|
- LICENSE.txt
|
|
@@ -137,7 +38,7 @@ licenses:
|
|
|
137
38
|
- MIT
|
|
138
39
|
metadata:
|
|
139
40
|
allowed_push_host: https://rubygems.org
|
|
140
|
-
|
|
41
|
+
rubygems_mfa_required: 'true'
|
|
141
42
|
rdoc_options: []
|
|
142
43
|
require_paths:
|
|
143
44
|
- lib
|
|
@@ -145,16 +46,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
145
46
|
requirements:
|
|
146
47
|
- - ">="
|
|
147
48
|
- !ruby/object:Gem::Version
|
|
148
|
-
version: '0'
|
|
49
|
+
version: '3.0'
|
|
149
50
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
150
51
|
requirements:
|
|
151
52
|
- - ">="
|
|
152
53
|
- !ruby/object:Gem::Version
|
|
153
54
|
version: '0'
|
|
154
55
|
requirements: []
|
|
155
|
-
|
|
156
|
-
rubygems_version: 2.7.6
|
|
157
|
-
signing_key:
|
|
56
|
+
rubygems_version: 3.6.7
|
|
158
57
|
specification_version: 4
|
|
159
58
|
summary: Event Manager for ruby
|
|
160
59
|
test_files: []
|