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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9deeac89b6a000553037f4d1b46892a6d2a4382e2bd90631b15a8aebf72ef937
4
- data.tar.gz: 14f9708ec211705b8cb7c5f34e58b376e69023dc2cabdb3ed99257076499c65f
3
+ metadata.gz: edbe47ae577217615eeb4e52e32e153b9ace099df742a18f83011531a2d25a2a
4
+ data.tar.gz: d014449186c5277a9a3affc9a97a4af06d5fd38fdb14589960561ddd3c6f4ba6
5
5
  SHA512:
6
- metadata.gz: 2cb63290e009f73af1079d45f2d2498d1c93b645e64cff7351ca1167da542772e684e61eaa016f46c4ea33577633bcb73e136da2cfc3a814e29e61a5427d6cca
7
- data.tar.gz: f7bfb72698544a326cca4ae042bd48ddc4e6325839f58ea5516e100f0aef8324dbaced3571b0e44f15c4cd933c2ed15688be92a2adf0808cc0141d8dd8a5e2f4
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
- - master
21
+ - main
22
22
  jobs:
23
23
  test:
24
24
  docker:
25
- - image: darthjee/circleci_ruby_270:1.1.0
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: Coverage Test Report
41
- command: cc-test-reporter after-build --exit-code $?
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/circleci_ruby_270:1.1.0
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/circleci_ruby_270:1.1.0
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
- require: rubocop-rspec
1
+ plugins: rubocop-rspec
2
2
  inherit_from: .rubocop_todo.yml
3
3
 
4
4
  AllCops:
5
- TargetRubyVersion: 2.5
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
@@ -1,6 +1,6 @@
1
- FROM darthjee/scripts:0.3.1 as scripts
1
+ FROM darthjee/scripts:0.6.0 as scripts
2
2
 
3
- FROM darthjee/ruby_270:1.1.0 as base
3
+ FROM darthjee/ruby_331:1.1.0 as base
4
4
 
5
5
  COPY --chown=app:app ./ /home/app/app/
6
6
 
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
- [![Code Climate](https://codeclimate.com/github/darthjee/jace/badges/gpa.svg)](https://codeclimate.com/github/darthjee/jace)
4
- [![Test Coverage](https://codeclimate.com/github/darthjee/jace/badges/coverage.svg)](https://codeclimate.com/github/darthjee/jace/coverage)
5
- [![Issue Count](https://codeclimate.com/github/darthjee/jace/badges/issue_count.svg)](https://codeclimate.com/github/darthjee/jace)
3
+ [![CircleCI](https://dl.circleci.com/status-badge/img/gh/darthjee/jace/tree/main.svg?style=svg)](https://dl.circleci.com/status-badge/redirect/gh/darthjee/jace/tree/main)
6
4
  [![Gem Version](https://badge.fury.io/rb/jace.svg)](https://badge.fury.io/rb/jace)
7
- [![Codacy Badge](https://api.codacy.com/project/badge/Grade/49845fb44afa4f658460e52cccce84b8)](https://www.codacy.com/manual/darthjee/jace?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=darthjee/jace&amp;utm_campaign=Badge_Grade)
5
+ [![Codacy Badge](https://app.codacy.com/project/badge/Grade/49845fb44afa4f658460e52cccce84b8)](https://app.codacy.com/gh/darthjee/jace/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade)
6
+ [![Codacy Badge](https://app.codacy.com/project/badge/Coverage/49845fb44afa4f658460e52cccce84b8)](https://app.codacy.com/gh/darthjee/jace/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_coverage)
8
7
  [![Inline docs](http://inch-ci.org/github/darthjee/jace.svg?branch=master)](http://inch-ci.org/github/darthjee/jace)
9
8
 
10
- ![jace](https://raw.githubusercontent.com/darthjee/jace/master/jace.jpg)
9
+ ![jace](https://raw.githubusercontent.com/darthjee/jace/master/jace.png)
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.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 = described_class.new
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 = '>= 2.5.0'
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
@@ -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, &block)
25
+ def dispatch(context, &)
26
26
  Executer.call(
27
27
  before: before,
28
28
  after: after,
29
29
  context: context,
30
- &block
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: [], context:, &block)
24
- new(before, after, context, &block).call
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, &block)
74
- dispatcher_for(event).dispatch(context, &block)
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Jace
4
- VERSION = '0.1.1'
4
+ VERSION = '0.1.2'
5
5
  end
@@ -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].sort.each { |file| require file }
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.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: 2022-08-21 00:00:00.000000000 Z
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.jpg
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: 2.5.0
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.3.20
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