jace 0.1.1 → 0.1.2
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/.circleci/config.yml +6 -9
- data/.github/copilot-instructions.md +99 -0
- data/.github/jace-usage.md +241 -0
- data/.rubocop.yml +6 -2
- data/.rubocop_todo.yml +13 -0
- data/Dockerfile +2 -2
- data/Gemfile +19 -0
- data/Makefile +21 -0
- data/README.md +10 -7
- data/jace.gemspec +1 -19
- data/jace.png +0 -0
- data/lib/jace/dispatcher.rb +2 -2
- data/lib/jace/executer.rb +2 -2
- data/lib/jace/registry.rb +2 -2
- data/lib/jace/version.rb +1 -1
- data/spec/integration/yard/jace/registry_spec.rb +2 -0
- data/spec/lib/jace/registry_spec.rb +19 -19
- data/spec/spec_helper.rb +7 -1
- metadata +9 -230
- data/jace.jpg +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: edbe47ae577217615eeb4e52e32e153b9ace099df742a18f83011531a2d25a2a
|
|
4
|
+
data.tar.gz: d014449186c5277a9a3affc9a97a4af06d5fd38fdb14589960561ddd3c6f4ba6
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 317fc86a9bbbec76b9a503b977cf5c11d9de4e31f24c20b23a4498d6d667723e956f471d356f549ee8c28b0674c8a69f077cc0bd271cd18dd985b6dd1244d564
|
|
7
|
+
data.tar.gz: 4191ed6b5339fd9feb83cec5a2f6478cd16a083c47c4817226cf856e65722a502964f5db2f6a272a58e96c3a043affaa80380ceb324c4c4e6e0afba0764c2473
|
data/.circleci/config.yml
CHANGED
|
@@ -18,18 +18,15 @@ workflows:
|
|
|
18
18
|
only: /\d+\.\d+\.\d+/
|
|
19
19
|
branches:
|
|
20
20
|
only:
|
|
21
|
-
-
|
|
21
|
+
- main
|
|
22
22
|
jobs:
|
|
23
23
|
test:
|
|
24
24
|
docker:
|
|
25
|
-
- image: darthjee/
|
|
25
|
+
- image: darthjee/circleci_ruby_331:1.1.0
|
|
26
26
|
environment:
|
|
27
27
|
PROJECT: jace
|
|
28
28
|
steps:
|
|
29
29
|
- checkout
|
|
30
|
-
- run:
|
|
31
|
-
name: Prepare Coverage Test Report
|
|
32
|
-
command: cc-test-reporter before-build
|
|
33
30
|
- run:
|
|
34
31
|
name: Bundle Install
|
|
35
32
|
command: bundle install
|
|
@@ -37,11 +34,11 @@ jobs:
|
|
|
37
34
|
name: RSpec
|
|
38
35
|
command: bundle exec rspec
|
|
39
36
|
- run:
|
|
40
|
-
name:
|
|
41
|
-
command:
|
|
37
|
+
name: Upload coverage to Codacy
|
|
38
|
+
command: bash <(curl -Ls https://coverage.codacy.com/get.sh) report -r coverage/lcov/project.lcov
|
|
42
39
|
checks:
|
|
43
40
|
docker:
|
|
44
|
-
- image: darthjee/
|
|
41
|
+
- image: darthjee/circleci_ruby_331:1.1.0
|
|
45
42
|
environment:
|
|
46
43
|
PROJECT: jace
|
|
47
44
|
steps:
|
|
@@ -66,7 +63,7 @@ jobs:
|
|
|
66
63
|
command: check_specs
|
|
67
64
|
build-and-release:
|
|
68
65
|
docker:
|
|
69
|
-
- image: darthjee/
|
|
66
|
+
- image: darthjee/circleci_ruby_331:1.1.0
|
|
70
67
|
environment:
|
|
71
68
|
PROJECT: jace
|
|
72
69
|
steps:
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# GitHub Copilot Instructions for Jace
|
|
2
|
+
|
|
3
|
+
## Project Overview
|
|
4
|
+
|
|
5
|
+
**Jace** is a Ruby gem designed for event-driven development **within a single application**.
|
|
6
|
+
It is not about distributed architecture or message queues — it is about building internal
|
|
7
|
+
event-oriented logic inside a Ruby gem or application.
|
|
8
|
+
|
|
9
|
+
With Jace, you register handlers for named events and trigger those events later. When an
|
|
10
|
+
event is triggered, Jace executes the registered `before` handlers, then the main block,
|
|
11
|
+
then the `after` handlers — all within a given context object.
|
|
12
|
+
|
|
13
|
+
### Core classes
|
|
14
|
+
|
|
15
|
+
- **`Jace::Registry`** — stores event-to-handler mappings and exposes `register` and
|
|
16
|
+
`trigger` methods.
|
|
17
|
+
- **`Jace::Dispatcher`** — holds `before` and `after` handler lists for a single event
|
|
18
|
+
and delegates execution to `Jace::Executer`.
|
|
19
|
+
- **`Jace::Executer`** — runs the before handlers, the main block, and the after handlers
|
|
20
|
+
inside a given context.
|
|
21
|
+
- **`Jace::Handler`** — wraps a `Symbol` (method name) or `Proc` into a callable unit
|
|
22
|
+
that evaluates within a context via `instance_eval`.
|
|
23
|
+
|
|
24
|
+
### Typical usage
|
|
25
|
+
|
|
26
|
+
```ruby
|
|
27
|
+
registry = Jace::Registry.new
|
|
28
|
+
context = SomeContext.new
|
|
29
|
+
|
|
30
|
+
registry.register(:payment_processed, :before) { notify_fraud_service }
|
|
31
|
+
registry.register(:payment_processed) { send_receipt }
|
|
32
|
+
|
|
33
|
+
registry.trigger(:payment_processed, context) do
|
|
34
|
+
process_payment
|
|
35
|
+
end
|
|
36
|
+
# Runs: notify_fraud_service → process_payment → send_receipt
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Language
|
|
42
|
+
|
|
43
|
+
All code, comments, documentation, commit messages, PR titles, PR descriptions, and review
|
|
44
|
+
comments **must be written in English**.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Testing
|
|
49
|
+
|
|
50
|
+
- Every new class or module **must have a corresponding RSpec spec file**.
|
|
51
|
+
- Specs mirror the source tree: `lib/jace/foo.rb` → `spec/lib/jace/foo_spec.rb`.
|
|
52
|
+
- Files that are intentionally excluded from spec coverage (e.g. `version.rb`) are listed
|
|
53
|
+
in `config/check_specs.yml`. Add any new file that genuinely does not need a spec to that
|
|
54
|
+
list; otherwise write the spec.
|
|
55
|
+
- Write **unit specs** for individual classes and **integration specs** under
|
|
56
|
+
`spec/integration/` for end-to-end scenarios (README examples, YARD examples).
|
|
57
|
+
- Each `it` block should have **one expectation** whenever possible.
|
|
58
|
+
- Use `let`, `subject`, and `described_class` to keep examples readable and DRY.
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Documentation
|
|
63
|
+
|
|
64
|
+
- All public classes, modules, and methods **must be documented with [YARD](https://yardoc.org/)**.
|
|
65
|
+
- Use the following YARD tags where applicable:
|
|
66
|
+
- `@param name [Type] description`
|
|
67
|
+
- `@return [Type] description`
|
|
68
|
+
- `@example` with working Ruby code
|
|
69
|
+
- `@api public` / `@api private`
|
|
70
|
+
- `@author`
|
|
71
|
+
- Private methods and internal helpers should carry at least a brief description so
|
|
72
|
+
developers can understand intent without reading implementation details.
|
|
73
|
+
- Keep examples in YARD docs consistent with the specs under `spec/integration/yard/`.
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Code Style and Design
|
|
78
|
+
|
|
79
|
+
### Single Responsibility (Sandi Metz / 99 Bottles)
|
|
80
|
+
|
|
81
|
+
- Classes and methods should do **one thing**.
|
|
82
|
+
- Prefer many small, well-named methods over a few large ones.
|
|
83
|
+
- If a method needs a comment to explain *what* it does (not *why*), it should probably be
|
|
84
|
+
extracted into its own method.
|
|
85
|
+
- Aim for methods that fit on a screen without scrolling.
|
|
86
|
+
|
|
87
|
+
### Law of Demeter
|
|
88
|
+
|
|
89
|
+
- Objects should only talk to their **immediate collaborators**.
|
|
90
|
+
- Avoid chaining method calls across object boundaries (e.g. `a.b.c.d`).
|
|
91
|
+
- If you need data from a distant object, add a delegation method or restructure the
|
|
92
|
+
dependency.
|
|
93
|
+
|
|
94
|
+
### General conventions
|
|
95
|
+
|
|
96
|
+
- Use `frozen_string_literal: true` at the top of every Ruby file.
|
|
97
|
+
- Prefer `attr_reader` over direct ivar access in the body of methods.
|
|
98
|
+
- New public methods added to `Jace` classes must be covered by specs and YARD docs before
|
|
99
|
+
the PR is considered complete.
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
# Using the Jace Gem
|
|
2
|
+
|
|
3
|
+
## What is Jace?
|
|
4
|
+
|
|
5
|
+
**Jace** is a Ruby gem for event-driven development **within a single application**.
|
|
6
|
+
It is not about distributed architecture or message queues — it is about building
|
|
7
|
+
internal event-oriented logic inside a Ruby gem or application.
|
|
8
|
+
|
|
9
|
+
With Jace, you register handlers for named events and trigger those events from
|
|
10
|
+
anywhere in your codebase. When an event is triggered, Jace executes the registered
|
|
11
|
+
`before` handlers (inside the context via `instance_eval`), then the main block,
|
|
12
|
+
then the `after` handlers (also inside the context via `instance_eval`).
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Installation
|
|
17
|
+
|
|
18
|
+
Add `jace` to your `Gemfile`:
|
|
19
|
+
|
|
20
|
+
```ruby
|
|
21
|
+
gem 'jace'
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Then run:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
bundle install
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Or install it directly:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
gem install jace
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Core Concepts
|
|
39
|
+
|
|
40
|
+
### `Jace::Registry`
|
|
41
|
+
|
|
42
|
+
The central object. It stores event-to-handler mappings and exposes two public
|
|
43
|
+
methods: `register` and `trigger`.
|
|
44
|
+
|
|
45
|
+
```ruby
|
|
46
|
+
registry = Jace::Registry.new
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### `register(event, instant = :after, &block)`
|
|
50
|
+
|
|
51
|
+
Adds a handler block for a named event. The `instant` parameter controls whether
|
|
52
|
+
the block runs before or after the main event block.
|
|
53
|
+
|
|
54
|
+
| `instant` | When the handler runs |
|
|
55
|
+
|-----------|----------------------|
|
|
56
|
+
| `:after` (default) | After the main block |
|
|
57
|
+
| `:before` | Before the main block |
|
|
58
|
+
|
|
59
|
+
```ruby
|
|
60
|
+
registry.register(:payment_processed) { send_receipt }
|
|
61
|
+
registry.register(:payment_processed, :before) { validate_payment }
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### `trigger(event, context, &block)`
|
|
65
|
+
|
|
66
|
+
Fires the named event. Jace runs the `before` handlers, then the given block,
|
|
67
|
+
then the `after` handlers. The `before` and `after` handlers are `instance_eval`'d
|
|
68
|
+
inside `context`, so bare method calls in handlers resolve against the context.
|
|
69
|
+
The main block is called normally (not `instance_eval`'d), so it uses the
|
|
70
|
+
surrounding scope's receiver.
|
|
71
|
+
|
|
72
|
+
```ruby
|
|
73
|
+
registry.trigger(:payment_processed, payment_object) do
|
|
74
|
+
charge_credit_card
|
|
75
|
+
end
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Basic Usage
|
|
81
|
+
|
|
82
|
+
```ruby
|
|
83
|
+
class Order
|
|
84
|
+
attr_reader :log
|
|
85
|
+
|
|
86
|
+
def initialize
|
|
87
|
+
@log = []
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def validate
|
|
91
|
+
log << 'validated'
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def persist
|
|
95
|
+
log << 'persisted'
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def notify
|
|
99
|
+
log << 'notified'
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
registry = Jace::Registry.new
|
|
104
|
+
order = Order.new
|
|
105
|
+
|
|
106
|
+
registry.register(:save, :before) { validate }
|
|
107
|
+
registry.register(:save) { notify }
|
|
108
|
+
|
|
109
|
+
registry.trigger(:save, order) do
|
|
110
|
+
order.persist # main block uses the surrounding scope, so explicit receiver is needed
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
order.log
|
|
114
|
+
# => ['validated', 'persisted', 'notified']
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## Handler Types
|
|
120
|
+
|
|
121
|
+
Handlers are registered as **blocks** (procs) and are `instance_eval`'d inside
|
|
122
|
+
the context object when the event fires, so bare method calls resolve against
|
|
123
|
+
the context.
|
|
124
|
+
|
|
125
|
+
```ruby
|
|
126
|
+
registry.register(:shipment_sent) { send_confirmation_email }
|
|
127
|
+
registry.register(:shipment_sent, :before) { freeze_order }
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## Multiple Handlers per Event
|
|
133
|
+
|
|
134
|
+
You can register as many `before` and `after` handlers as you like for the same
|
|
135
|
+
event. They execute in registration order.
|
|
136
|
+
|
|
137
|
+
```ruby
|
|
138
|
+
registry.register(:user_created, :before) { sanitize_input }
|
|
139
|
+
registry.register(:user_created, :before) { check_duplicates }
|
|
140
|
+
registry.register(:user_created) { send_welcome_email }
|
|
141
|
+
registry.register(:user_created) { notify_admin }
|
|
142
|
+
|
|
143
|
+
registry.trigger(:user_created, user_context) do
|
|
144
|
+
persist_user
|
|
145
|
+
end
|
|
146
|
+
# Order: sanitize_input → check_duplicates → persist_user
|
|
147
|
+
# → send_welcome_email → notify_admin
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## Triggering Events Without a Main Block
|
|
153
|
+
|
|
154
|
+
The main block is optional. If omitted, only the registered handlers run:
|
|
155
|
+
|
|
156
|
+
```ruby
|
|
157
|
+
registry.trigger(:cache_invalidated, cache_context)
|
|
158
|
+
# Runs all :before handlers, then all :after handlers; no main block
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## Triggering an Unregistered Event
|
|
164
|
+
|
|
165
|
+
Triggering an event that has no registered handlers is safe. The main block is
|
|
166
|
+
still executed, and no error is raised:
|
|
167
|
+
|
|
168
|
+
```ruby
|
|
169
|
+
registry.trigger(:unknown_event, some_context) do
|
|
170
|
+
do_work
|
|
171
|
+
end
|
|
172
|
+
# do_work runs normally; no handlers fire
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## Typical Integration Pattern
|
|
178
|
+
|
|
179
|
+
The most common pattern is to hold a `Jace::Registry` instance inside a service
|
|
180
|
+
or module and expose `register` to callers so they can hook into lifecycle events:
|
|
181
|
+
|
|
182
|
+
```ruby
|
|
183
|
+
module PaymentService
|
|
184
|
+
REGISTRY = Jace::Registry.new
|
|
185
|
+
|
|
186
|
+
def self.on(event, instant = :after, &block)
|
|
187
|
+
REGISTRY.register(event, instant, &block)
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
def self.process(payment)
|
|
191
|
+
REGISTRY.trigger(:payment_processed, payment) do
|
|
192
|
+
payment.charge!
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
# In an initializer or plugin:
|
|
198
|
+
PaymentService.on(:payment_processed) { send_receipt }
|
|
199
|
+
PaymentService.on(:payment_processed, :before) { log_attempt }
|
|
200
|
+
|
|
201
|
+
# Elsewhere in the application:
|
|
202
|
+
PaymentService.process(payment)
|
|
203
|
+
# Runs: log_attempt → payment.charge! → send_receipt
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## Execution Model (summary)
|
|
209
|
+
|
|
210
|
+
```
|
|
211
|
+
registry.trigger(:event, context) { main_block }
|
|
212
|
+
|
|
213
|
+
Execution order:
|
|
214
|
+
1. All :before handlers (in registration order, instance_eval'd in context)
|
|
215
|
+
2. main_block (called as-is, context is NOT the receiver)
|
|
216
|
+
3. All :after handlers (in registration order, instance_eval'd in context)
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
> **Note:** The `before` and `after` handlers are `instance_eval`'d inside the
|
|
220
|
+
> context object, so bare method calls inside them (`send_receipt`, `validate`,
|
|
221
|
+
> etc.) resolve against the context. The main block, however, is a regular
|
|
222
|
+
> `call` (not `instance_eval`), so its receiver is the surrounding scope.
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## API Reference
|
|
227
|
+
|
|
228
|
+
| Method | Signature | Description |
|
|
229
|
+
|--------|-----------|-------------|
|
|
230
|
+
| `Registry#register` | `(event, instant = :after, &block)` | Adds a handler to the named event |
|
|
231
|
+
| `Registry#trigger` | `(event, context, &block)` | Fires the event, running handlers around the block |
|
|
232
|
+
| `Registry#events` | `()` | Returns all registered event names as `Array<Symbol>` |
|
|
233
|
+
| `Registry#registry` | `()` | Returns the raw `Hash` of event → `Dispatcher` mappings |
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
## YARD Documentation
|
|
238
|
+
|
|
239
|
+
Full API docs: [https://www.rubydoc.info/gems/jace](https://www.rubydoc.info/gems/jace)
|
|
240
|
+
|
|
241
|
+
Source: [https://github.com/darthjee/jace](https://github.com/darthjee/jace)
|
data/.rubocop.yml
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
plugins: rubocop-rspec
|
|
2
2
|
inherit_from: .rubocop_todo.yml
|
|
3
3
|
|
|
4
4
|
AllCops:
|
|
5
|
-
TargetRubyVersion:
|
|
5
|
+
TargetRubyVersion: 3.3
|
|
6
|
+
NewCops: enable
|
|
6
7
|
|
|
7
8
|
Metrics/BlockLength:
|
|
8
9
|
Exclude:
|
|
@@ -53,3 +54,6 @@ Style/HashTransformKeys:
|
|
|
53
54
|
|
|
54
55
|
Style/HashTransformValues:
|
|
55
56
|
Enabled: true
|
|
57
|
+
|
|
58
|
+
Gemspec/RequireMFA:
|
|
59
|
+
Enabled: false
|
data/.rubocop_todo.yml
CHANGED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# This configuration was generated by
|
|
2
|
+
# `rubocop --auto-gen-config`
|
|
3
|
+
# on 2026-03-09 23:01:59 UTC using RuboCop version 1.85.1.
|
|
4
|
+
# The point is for the user to remove these configuration records
|
|
5
|
+
# one by one as the offenses are removed from the code base.
|
|
6
|
+
# Note that changes in the inspected code, or installation of new
|
|
7
|
+
# versions of RuboCop, may require this file to be generated again.
|
|
8
|
+
|
|
9
|
+
# Offense count: 1
|
|
10
|
+
# This cop supports unsafe autocorrection (--autocorrect-all).
|
|
11
|
+
RSpec/Output:
|
|
12
|
+
Exclude:
|
|
13
|
+
- 'spec/support/models/some_context.rb'
|
data/Dockerfile
CHANGED
data/Gemfile
CHANGED
|
@@ -3,3 +3,22 @@
|
|
|
3
3
|
source 'https://rubygems.org'
|
|
4
4
|
|
|
5
5
|
gemspec
|
|
6
|
+
|
|
7
|
+
gem 'bundler', '>= 2.5.13'
|
|
8
|
+
gem 'pry', '0.14.2'
|
|
9
|
+
gem 'pry-nav', '1.0.0'
|
|
10
|
+
gem 'rake', '13.2.1'
|
|
11
|
+
gem 'reek', '6.5.0'
|
|
12
|
+
gem 'rspec', '3.13.2'
|
|
13
|
+
gem 'rspec-core', '3.13.6'
|
|
14
|
+
gem 'rspec-expectations', '3.13.5'
|
|
15
|
+
gem 'rspec-mocks', '3.13.8'
|
|
16
|
+
gem 'rspec-support', '3.13.7'
|
|
17
|
+
gem 'rubocop', '1.85.1'
|
|
18
|
+
gem 'rubocop-rspec', '3.9.0'
|
|
19
|
+
gem 'rubycritic', '5.0.0'
|
|
20
|
+
gem 'simplecov', '0.22.0'
|
|
21
|
+
gem 'simplecov-html', '0.13.2'
|
|
22
|
+
gem 'simplecov-lcov', '0.9.0'
|
|
23
|
+
gem 'yard', '0.9.38'
|
|
24
|
+
gem 'yardstick', '0.9.9'
|
data/Makefile
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
.PHONY: build dev tests
|
|
2
|
+
|
|
3
|
+
PROJECT?=jace
|
|
4
|
+
IMAGE?=$(PROJECT)
|
|
5
|
+
BASE_IMAGE?=$(DOCKER_ID_USER)/$(PROJECT)-base
|
|
6
|
+
DOCKER_FILE_BASE=Dockerfile.$(PROJECT)-base
|
|
7
|
+
|
|
8
|
+
all:
|
|
9
|
+
@echo "Usage:"
|
|
10
|
+
@echo " make build\n Build docker image for $(PROJECT)"
|
|
11
|
+
@echo " make dev\n Run development environment for $(PROJECT)"
|
|
12
|
+
@echo " make tests\n Run tests for $(PROJECT)"
|
|
13
|
+
|
|
14
|
+
build:
|
|
15
|
+
docker build -f Dockerfile.$(PROJECT) . -t $(IMAGE) -t $(PUSH_IMAGE):latest
|
|
16
|
+
|
|
17
|
+
tests:
|
|
18
|
+
docker-compose run $(PROJECT)_tests /bin/bash
|
|
19
|
+
|
|
20
|
+
dev:
|
|
21
|
+
docker-compose run $(PROJECT) /bin/bash
|
data/README.md
CHANGED
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
Jace
|
|
2
2
|
====
|
|
3
|
-
[](https://codeclimate.com/github/darthjee/jace/coverage)
|
|
5
|
-
[](https://codeclimate.com/github/darthjee/jace)
|
|
3
|
+
[](https://dl.circleci.com/status-badge/redirect/gh/darthjee/jace/tree/main)
|
|
6
4
|
[](https://badge.fury.io/rb/jace)
|
|
7
|
-
[](https://app.codacy.com/gh/darthjee/jace/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade)
|
|
6
|
+
[](https://app.codacy.com/gh/darthjee/jace/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_coverage)
|
|
8
7
|
[](http://inch-ci.org/github/darthjee/jace)
|
|
9
8
|
|
|
10
|
-

|
|
11
10
|
|
|
12
11
|
Yard Documentation
|
|
13
12
|
-------------------
|
|
14
|
-
[https://www.rubydoc.info/gems/jace/0.1.1](https://www.rubydoc.info/gems/jace/0.1.
|
|
13
|
+
[https://www.rubydoc.info/gems/jace/0.1.1](https://www.rubydoc.info/gems/jace/0.1.2)
|
|
15
14
|
|
|
16
15
|
Jace is designed to have a semi event driven development
|
|
17
16
|
|
|
@@ -19,6 +18,10 @@ Using `Jace::Registry`, event handlers can be registered to events, and when an
|
|
|
19
18
|
is triggered, the block that triggers it is given to Jace, which will triger, around it,
|
|
20
19
|
the +before+ and +after+ handlers
|
|
21
20
|
|
|
21
|
+
**Current Release**: [0.1.2](https://github.com/darthjee/jace/tree/0.1.2)
|
|
22
|
+
|
|
23
|
+
**Next release**: [0.2.0](https://github.com/darthjee/jace/compare/0.1.2...main)
|
|
24
|
+
|
|
22
25
|
Installation
|
|
23
26
|
---------------
|
|
24
27
|
|
|
@@ -50,7 +53,7 @@ Initialize a registry, register event handlers nad trigger events
|
|
|
50
53
|
end
|
|
51
54
|
end
|
|
52
55
|
|
|
53
|
-
registry =
|
|
56
|
+
registry = Jace::Registry.new
|
|
54
57
|
context = SomeContext.new
|
|
55
58
|
|
|
56
59
|
registry.register(:the_event) { do_something(:after) }
|
data/jace.gemspec
CHANGED
|
@@ -12,27 +12,9 @@ Gem::Specification.new do |gem|
|
|
|
12
12
|
gem.homepage = 'https://github.com/darthjee/jace'
|
|
13
13
|
gem.description = 'Gem focused on events for meta-programing'
|
|
14
14
|
gem.summary = gem.description
|
|
15
|
-
gem.required_ruby_version = '>=
|
|
15
|
+
gem.required_ruby_version = '>= 3.3.1'
|
|
16
16
|
|
|
17
17
|
gem.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
|
|
18
18
|
gem.executables = gem.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
|
19
|
-
gem.test_files = gem.files.grep(%r{^(test|gem|features)/})
|
|
20
19
|
gem.require_paths = ['lib']
|
|
21
|
-
|
|
22
|
-
gem.add_development_dependency 'bundler', '2.3.20'
|
|
23
|
-
gem.add_development_dependency 'pry', '0.14.1'
|
|
24
|
-
gem.add_development_dependency 'pry-nav', '1.0.0'
|
|
25
|
-
gem.add_development_dependency 'rake', '13.0.1'
|
|
26
|
-
gem.add_development_dependency 'reek', '6.0.3'
|
|
27
|
-
gem.add_development_dependency 'rspec', '3.11.0'
|
|
28
|
-
gem.add_development_dependency 'rspec-core', '3.11.0'
|
|
29
|
-
gem.add_development_dependency 'rspec-expectations', '3.11.0'
|
|
30
|
-
gem.add_development_dependency 'rspec-mocks', '3.11.1'
|
|
31
|
-
gem.add_development_dependency 'rspec-support', '3.11.0'
|
|
32
|
-
gem.add_development_dependency 'rubocop', '0.80.1'
|
|
33
|
-
gem.add_development_dependency 'rubocop-rspec', '1.38.1'
|
|
34
|
-
gem.add_development_dependency 'rubycritic', '4.7.0'
|
|
35
|
-
gem.add_development_dependency 'simplecov', '0.21.2'
|
|
36
|
-
gem.add_development_dependency 'yard', '0.9.27'
|
|
37
|
-
gem.add_development_dependency 'yardstick', '0.9.9'
|
|
38
20
|
end
|
data/jace.png
ADDED
|
Binary file
|
data/lib/jace/dispatcher.rb
CHANGED
|
@@ -22,12 +22,12 @@ module Jace
|
|
|
22
22
|
# @block [Proc] bloc to be performed between befores and afters
|
|
23
23
|
#
|
|
24
24
|
# @return [Object] result of block call
|
|
25
|
-
def dispatch(context, &
|
|
25
|
+
def dispatch(context, &)
|
|
26
26
|
Executer.call(
|
|
27
27
|
before: before,
|
|
28
28
|
after: after,
|
|
29
29
|
context: context,
|
|
30
|
-
&
|
|
30
|
+
&
|
|
31
31
|
)
|
|
32
32
|
end
|
|
33
33
|
|
data/lib/jace/executer.rb
CHANGED
|
@@ -20,8 +20,8 @@ module Jace
|
|
|
20
20
|
# @block [Proc] bloc to be performed between befores and afters
|
|
21
21
|
#
|
|
22
22
|
# @return [Object] result of block call
|
|
23
|
-
def self.call(before: [], after: [],
|
|
24
|
-
new(before, after, context, &
|
|
23
|
+
def self.call(context:, before: [], after: [], &)
|
|
24
|
+
new(before, after, context, &).call
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
# calls the execution
|
data/lib/jace/registry.rb
CHANGED
|
@@ -70,8 +70,8 @@ module Jace
|
|
|
70
70
|
# # puts 'doing something before',
|
|
71
71
|
# # puts 'doing something middle',
|
|
72
72
|
# # puts 'doing something after'
|
|
73
|
-
def trigger(event, context, &
|
|
74
|
-
dispatcher_for(event).dispatch(context, &
|
|
73
|
+
def trigger(event, context, &)
|
|
74
|
+
dispatcher_for(event).dispatch(context, &)
|
|
75
75
|
end
|
|
76
76
|
|
|
77
77
|
private
|
data/lib/jace/version.rb
CHANGED
|
@@ -6,6 +6,7 @@ describe Jace::Registry do
|
|
|
6
6
|
describe 'yard' do
|
|
7
7
|
subject(:registry) { described_class.new }
|
|
8
8
|
|
|
9
|
+
# rubocop:disable RSpec/NoExpectationExample
|
|
9
10
|
describe '#register' do
|
|
10
11
|
it 'register a new handler for an event' do
|
|
11
12
|
registry.register(:the_event) do
|
|
@@ -19,6 +20,7 @@ describe Jace::Registry do
|
|
|
19
20
|
end
|
|
20
21
|
end
|
|
21
22
|
end
|
|
23
|
+
# rubocop:enable RSpec/NoExpectationExample
|
|
22
24
|
|
|
23
25
|
describe '#trigger' do
|
|
24
26
|
let(:context) { SomeContext.new }
|
|
@@ -13,13 +13,13 @@ describe Jace::Registry do
|
|
|
13
13
|
|
|
14
14
|
context 'when event is a symbol' do
|
|
15
15
|
it 'adds even to events registry' do
|
|
16
|
-
expect { registry.register(event_name) {} }
|
|
16
|
+
expect { registry.register(event_name) { nil } }
|
|
17
17
|
.to change(registry, :registry)
|
|
18
18
|
.to(expected_registry)
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
it 'adds event to event list' do
|
|
22
|
-
expect { registry.register(event_name) {} }
|
|
22
|
+
expect { registry.register(event_name) { nil } }
|
|
23
23
|
.to change(registry, :events)
|
|
24
24
|
.by([:event_name])
|
|
25
25
|
end
|
|
@@ -32,28 +32,28 @@ describe Jace::Registry do
|
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
it 'adds even to events registry' do
|
|
35
|
-
expect { registry.register(event_name) {} }
|
|
35
|
+
expect { registry.register(event_name) { nil } }
|
|
36
36
|
.to change(registry, :registry)
|
|
37
37
|
.to(expected_registry)
|
|
38
38
|
end
|
|
39
39
|
|
|
40
40
|
it 'adds event to event list' do
|
|
41
|
-
expect { registry.register(event_name) {} }
|
|
41
|
+
expect { registry.register(event_name) { nil } }
|
|
42
42
|
.to change(registry, :events)
|
|
43
43
|
.by([:event_name])
|
|
44
44
|
end
|
|
45
45
|
end
|
|
46
46
|
|
|
47
47
|
context 'when the event was already registerd' do
|
|
48
|
-
before { registry.register(event_name) {} }
|
|
48
|
+
before { registry.register(event_name) { nil } }
|
|
49
49
|
|
|
50
50
|
it 'does not repace dispatcher' do
|
|
51
|
-
expect { registry.register(event_name) {} }
|
|
51
|
+
expect { registry.register(event_name) { nil } }
|
|
52
52
|
.not_to change(registry, :registry)
|
|
53
53
|
end
|
|
54
54
|
|
|
55
55
|
it 'adds event to event list' do
|
|
56
|
-
expect { registry.register(event_name) {} }
|
|
56
|
+
expect { registry.register(event_name) { nil } }
|
|
57
57
|
.not_to(change(registry, :events))
|
|
58
58
|
end
|
|
59
59
|
end
|
|
@@ -66,16 +66,16 @@ describe Jace::Registry do
|
|
|
66
66
|
}
|
|
67
67
|
end
|
|
68
68
|
|
|
69
|
-
before { registry.register(:other_event_name) {} }
|
|
69
|
+
before { registry.register(:other_event_name) { nil } }
|
|
70
70
|
|
|
71
71
|
it 'adds even a callback to the event registry' do
|
|
72
|
-
expect { registry.register(event_name) {} }
|
|
72
|
+
expect { registry.register(event_name) { nil } }
|
|
73
73
|
.to change(registry, :registry)
|
|
74
74
|
.to(expected_registry)
|
|
75
75
|
end
|
|
76
76
|
|
|
77
77
|
it 'adds event to event list' do
|
|
78
|
-
expect { registry.register(event_name) {} }
|
|
78
|
+
expect { registry.register(event_name) { nil } }
|
|
79
79
|
.to change(registry, :events)
|
|
80
80
|
.by([:event_name])
|
|
81
81
|
end
|
|
@@ -89,13 +89,13 @@ describe Jace::Registry do
|
|
|
89
89
|
end
|
|
90
90
|
|
|
91
91
|
it 'adds even a callback to the event registry' do
|
|
92
|
-
expect { registry.register(event_name, :before) {} }
|
|
92
|
+
expect { registry.register(event_name, :before) { nil } }
|
|
93
93
|
.to change(registry, :registry)
|
|
94
94
|
.to(expected_registry)
|
|
95
95
|
end
|
|
96
96
|
|
|
97
97
|
it 'adds event to event list' do
|
|
98
|
-
expect { registry.register(event_name) {} }
|
|
98
|
+
expect { registry.register(event_name) { nil } }
|
|
99
99
|
.to change(registry, :events)
|
|
100
100
|
.by([:event_name])
|
|
101
101
|
end
|
|
@@ -108,15 +108,15 @@ describe Jace::Registry do
|
|
|
108
108
|
}
|
|
109
109
|
end
|
|
110
110
|
|
|
111
|
-
before { registry.register(event_name, :after) {} }
|
|
111
|
+
before { registry.register(event_name, :after) { nil } }
|
|
112
112
|
|
|
113
113
|
it 'does not repace dispatcher' do
|
|
114
|
-
expect { registry.register(event_name, :before) {} }
|
|
114
|
+
expect { registry.register(event_name, :before) { nil } }
|
|
115
115
|
.not_to change(registry, :registry)
|
|
116
116
|
end
|
|
117
117
|
|
|
118
118
|
it 'does not add event to event list' do
|
|
119
|
-
expect { registry.register(event_name) {} }
|
|
119
|
+
expect { registry.register(event_name) { nil } }
|
|
120
120
|
.not_to(change(registry, :events))
|
|
121
121
|
end
|
|
122
122
|
end
|
|
@@ -134,7 +134,7 @@ describe Jace::Registry do
|
|
|
134
134
|
end
|
|
135
135
|
|
|
136
136
|
it 'execute the event handler' do
|
|
137
|
-
registry.trigger(event_name, context) {}
|
|
137
|
+
registry.trigger(event_name, context) { nil }
|
|
138
138
|
expect(context).to have_received(:method_call)
|
|
139
139
|
end
|
|
140
140
|
|
|
@@ -155,12 +155,12 @@ describe Jace::Registry do
|
|
|
155
155
|
end
|
|
156
156
|
|
|
157
157
|
it 'execute the event handler' do
|
|
158
|
-
registry.trigger(event_name, context) {}
|
|
158
|
+
registry.trigger(event_name, context) { nil }
|
|
159
159
|
expect(context).to have_received(:method_call)
|
|
160
160
|
end
|
|
161
161
|
|
|
162
162
|
it 'execute the other event handler' do
|
|
163
|
-
registry.trigger(event_name, context) {}
|
|
163
|
+
registry.trigger(event_name, context) { nil }
|
|
164
164
|
expect(context).to have_received(:another_method_call)
|
|
165
165
|
end
|
|
166
166
|
|
|
@@ -178,7 +178,7 @@ describe Jace::Registry do
|
|
|
178
178
|
end
|
|
179
179
|
|
|
180
180
|
it 'does not execute the event handler' do
|
|
181
|
-
registry.trigger(event_name, context) {}
|
|
181
|
+
registry.trigger(event_name, context) { nil }
|
|
182
182
|
expect(context).not_to have_received(:method_call)
|
|
183
183
|
end
|
|
184
184
|
|
data/spec/spec_helper.rb
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
require 'simplecov'
|
|
4
4
|
|
|
5
|
+
if ENV['CI']
|
|
6
|
+
require 'simplecov-lcov'
|
|
7
|
+
SimpleCov::Formatter::LcovFormatter.config.report_with_single_file = true
|
|
8
|
+
SimpleCov.formatter = SimpleCov::Formatter::LcovFormatter
|
|
9
|
+
end
|
|
10
|
+
|
|
5
11
|
SimpleCov.profiles.define 'gem' do
|
|
6
12
|
add_filter '/spec/'
|
|
7
13
|
end
|
|
@@ -13,7 +19,7 @@ require 'pry-nav'
|
|
|
13
19
|
|
|
14
20
|
support_files = File.expand_path('spec/support/**/*.rb')
|
|
15
21
|
|
|
16
|
-
Dir[support_files].
|
|
22
|
+
Dir[support_files].each { |file| require file }
|
|
17
23
|
|
|
18
24
|
RSpec.configure do |config|
|
|
19
25
|
config.run_all_when_everything_filtered = true
|
metadata
CHANGED
|
@@ -1,239 +1,15 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: jace
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- DarthJee
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
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: 2.3.20
|
|
20
|
-
type: :development
|
|
21
|
-
prerelease: false
|
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
-
requirements:
|
|
24
|
-
- - '='
|
|
25
|
-
- !ruby/object:Gem::Version
|
|
26
|
-
version: 2.3.20
|
|
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.14.1
|
|
34
|
-
type: :development
|
|
35
|
-
prerelease: false
|
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
-
requirements:
|
|
38
|
-
- - '='
|
|
39
|
-
- !ruby/object:Gem::Version
|
|
40
|
-
version: 0.14.1
|
|
41
|
-
- !ruby/object:Gem::Dependency
|
|
42
|
-
name: pry-nav
|
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
|
44
|
-
requirements:
|
|
45
|
-
- - '='
|
|
46
|
-
- !ruby/object:Gem::Version
|
|
47
|
-
version: 1.0.0
|
|
48
|
-
type: :development
|
|
49
|
-
prerelease: false
|
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
-
requirements:
|
|
52
|
-
- - '='
|
|
53
|
-
- !ruby/object:Gem::Version
|
|
54
|
-
version: 1.0.0
|
|
55
|
-
- !ruby/object:Gem::Dependency
|
|
56
|
-
name: rake
|
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
|
58
|
-
requirements:
|
|
59
|
-
- - '='
|
|
60
|
-
- !ruby/object:Gem::Version
|
|
61
|
-
version: 13.0.1
|
|
62
|
-
type: :development
|
|
63
|
-
prerelease: false
|
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
-
requirements:
|
|
66
|
-
- - '='
|
|
67
|
-
- !ruby/object:Gem::Version
|
|
68
|
-
version: 13.0.1
|
|
69
|
-
- !ruby/object:Gem::Dependency
|
|
70
|
-
name: reek
|
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
|
72
|
-
requirements:
|
|
73
|
-
- - '='
|
|
74
|
-
- !ruby/object:Gem::Version
|
|
75
|
-
version: 6.0.3
|
|
76
|
-
type: :development
|
|
77
|
-
prerelease: false
|
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
-
requirements:
|
|
80
|
-
- - '='
|
|
81
|
-
- !ruby/object:Gem::Version
|
|
82
|
-
version: 6.0.3
|
|
83
|
-
- !ruby/object:Gem::Dependency
|
|
84
|
-
name: rspec
|
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
|
86
|
-
requirements:
|
|
87
|
-
- - '='
|
|
88
|
-
- !ruby/object:Gem::Version
|
|
89
|
-
version: 3.11.0
|
|
90
|
-
type: :development
|
|
91
|
-
prerelease: false
|
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
-
requirements:
|
|
94
|
-
- - '='
|
|
95
|
-
- !ruby/object:Gem::Version
|
|
96
|
-
version: 3.11.0
|
|
97
|
-
- !ruby/object:Gem::Dependency
|
|
98
|
-
name: rspec-core
|
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
|
100
|
-
requirements:
|
|
101
|
-
- - '='
|
|
102
|
-
- !ruby/object:Gem::Version
|
|
103
|
-
version: 3.11.0
|
|
104
|
-
type: :development
|
|
105
|
-
prerelease: false
|
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
107
|
-
requirements:
|
|
108
|
-
- - '='
|
|
109
|
-
- !ruby/object:Gem::Version
|
|
110
|
-
version: 3.11.0
|
|
111
|
-
- !ruby/object:Gem::Dependency
|
|
112
|
-
name: rspec-expectations
|
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
|
114
|
-
requirements:
|
|
115
|
-
- - '='
|
|
116
|
-
- !ruby/object:Gem::Version
|
|
117
|
-
version: 3.11.0
|
|
118
|
-
type: :development
|
|
119
|
-
prerelease: false
|
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
-
requirements:
|
|
122
|
-
- - '='
|
|
123
|
-
- !ruby/object:Gem::Version
|
|
124
|
-
version: 3.11.0
|
|
125
|
-
- !ruby/object:Gem::Dependency
|
|
126
|
-
name: rspec-mocks
|
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
|
128
|
-
requirements:
|
|
129
|
-
- - '='
|
|
130
|
-
- !ruby/object:Gem::Version
|
|
131
|
-
version: 3.11.1
|
|
132
|
-
type: :development
|
|
133
|
-
prerelease: false
|
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
135
|
-
requirements:
|
|
136
|
-
- - '='
|
|
137
|
-
- !ruby/object:Gem::Version
|
|
138
|
-
version: 3.11.1
|
|
139
|
-
- !ruby/object:Gem::Dependency
|
|
140
|
-
name: rspec-support
|
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
|
142
|
-
requirements:
|
|
143
|
-
- - '='
|
|
144
|
-
- !ruby/object:Gem::Version
|
|
145
|
-
version: 3.11.0
|
|
146
|
-
type: :development
|
|
147
|
-
prerelease: false
|
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
149
|
-
requirements:
|
|
150
|
-
- - '='
|
|
151
|
-
- !ruby/object:Gem::Version
|
|
152
|
-
version: 3.11.0
|
|
153
|
-
- !ruby/object:Gem::Dependency
|
|
154
|
-
name: rubocop
|
|
155
|
-
requirement: !ruby/object:Gem::Requirement
|
|
156
|
-
requirements:
|
|
157
|
-
- - '='
|
|
158
|
-
- !ruby/object:Gem::Version
|
|
159
|
-
version: 0.80.1
|
|
160
|
-
type: :development
|
|
161
|
-
prerelease: false
|
|
162
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
163
|
-
requirements:
|
|
164
|
-
- - '='
|
|
165
|
-
- !ruby/object:Gem::Version
|
|
166
|
-
version: 0.80.1
|
|
167
|
-
- !ruby/object:Gem::Dependency
|
|
168
|
-
name: rubocop-rspec
|
|
169
|
-
requirement: !ruby/object:Gem::Requirement
|
|
170
|
-
requirements:
|
|
171
|
-
- - '='
|
|
172
|
-
- !ruby/object:Gem::Version
|
|
173
|
-
version: 1.38.1
|
|
174
|
-
type: :development
|
|
175
|
-
prerelease: false
|
|
176
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
177
|
-
requirements:
|
|
178
|
-
- - '='
|
|
179
|
-
- !ruby/object:Gem::Version
|
|
180
|
-
version: 1.38.1
|
|
181
|
-
- !ruby/object:Gem::Dependency
|
|
182
|
-
name: rubycritic
|
|
183
|
-
requirement: !ruby/object:Gem::Requirement
|
|
184
|
-
requirements:
|
|
185
|
-
- - '='
|
|
186
|
-
- !ruby/object:Gem::Version
|
|
187
|
-
version: 4.7.0
|
|
188
|
-
type: :development
|
|
189
|
-
prerelease: false
|
|
190
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
191
|
-
requirements:
|
|
192
|
-
- - '='
|
|
193
|
-
- !ruby/object:Gem::Version
|
|
194
|
-
version: 4.7.0
|
|
195
|
-
- !ruby/object:Gem::Dependency
|
|
196
|
-
name: simplecov
|
|
197
|
-
requirement: !ruby/object:Gem::Requirement
|
|
198
|
-
requirements:
|
|
199
|
-
- - '='
|
|
200
|
-
- !ruby/object:Gem::Version
|
|
201
|
-
version: 0.21.2
|
|
202
|
-
type: :development
|
|
203
|
-
prerelease: false
|
|
204
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
205
|
-
requirements:
|
|
206
|
-
- - '='
|
|
207
|
-
- !ruby/object:Gem::Version
|
|
208
|
-
version: 0.21.2
|
|
209
|
-
- !ruby/object:Gem::Dependency
|
|
210
|
-
name: yard
|
|
211
|
-
requirement: !ruby/object:Gem::Requirement
|
|
212
|
-
requirements:
|
|
213
|
-
- - '='
|
|
214
|
-
- !ruby/object:Gem::Version
|
|
215
|
-
version: 0.9.27
|
|
216
|
-
type: :development
|
|
217
|
-
prerelease: false
|
|
218
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
219
|
-
requirements:
|
|
220
|
-
- - '='
|
|
221
|
-
- !ruby/object:Gem::Version
|
|
222
|
-
version: 0.9.27
|
|
223
|
-
- !ruby/object:Gem::Dependency
|
|
224
|
-
name: yardstick
|
|
225
|
-
requirement: !ruby/object:Gem::Requirement
|
|
226
|
-
requirements:
|
|
227
|
-
- - '='
|
|
228
|
-
- !ruby/object:Gem::Version
|
|
229
|
-
version: 0.9.9
|
|
230
|
-
type: :development
|
|
231
|
-
prerelease: false
|
|
232
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
233
|
-
requirements:
|
|
234
|
-
- - '='
|
|
235
|
-
- !ruby/object:Gem::Version
|
|
236
|
-
version: 0.9.9
|
|
11
|
+
date: 2026-03-09 00:00:00.000000000 Z
|
|
12
|
+
dependencies: []
|
|
237
13
|
description: Gem focused on events for meta-programing
|
|
238
14
|
email:
|
|
239
15
|
- darthjee@gmail.com
|
|
@@ -242,6 +18,8 @@ extensions: []
|
|
|
242
18
|
extra_rdoc_files: []
|
|
243
19
|
files:
|
|
244
20
|
- ".circleci/config.yml"
|
|
21
|
+
- ".github/copilot-instructions.md"
|
|
22
|
+
- ".github/jace-usage.md"
|
|
245
23
|
- ".gitignore"
|
|
246
24
|
- ".rspec"
|
|
247
25
|
- ".rubocop.yml"
|
|
@@ -249,6 +27,7 @@ files:
|
|
|
249
27
|
- Dockerfile
|
|
250
28
|
- Gemfile
|
|
251
29
|
- LICENSE
|
|
30
|
+
- Makefile
|
|
252
31
|
- README.md
|
|
253
32
|
- Rakefile
|
|
254
33
|
- config/check_specs.yml
|
|
@@ -257,7 +36,7 @@ files:
|
|
|
257
36
|
- config/yardstick.yml
|
|
258
37
|
- docker-compose.yml
|
|
259
38
|
- jace.gemspec
|
|
260
|
-
- jace.
|
|
39
|
+
- jace.png
|
|
261
40
|
- lib/jace.rb
|
|
262
41
|
- lib/jace/dispatcher.rb
|
|
263
42
|
- lib/jace/executer.rb
|
|
@@ -289,14 +68,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
289
68
|
requirements:
|
|
290
69
|
- - ">="
|
|
291
70
|
- !ruby/object:Gem::Version
|
|
292
|
-
version:
|
|
71
|
+
version: 3.3.1
|
|
293
72
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
294
73
|
requirements:
|
|
295
74
|
- - ">="
|
|
296
75
|
- !ruby/object:Gem::Version
|
|
297
76
|
version: '0'
|
|
298
77
|
requirements: []
|
|
299
|
-
rubygems_version: 3.
|
|
78
|
+
rubygems_version: 3.5.9
|
|
300
79
|
signing_key:
|
|
301
80
|
specification_version: 4
|
|
302
81
|
summary: Gem focused on events for meta-programing
|
data/jace.jpg
DELETED
|
Binary file
|