event_sourcery 1.0.3 → 1.0.4
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/CHANGELOG.md +12 -3
- data/event_sourcery.gemspec +2 -2
- data/lib/event_sourcery/aggregate_root.rb +1 -0
- data/lib/event_sourcery/config.rb +1 -0
- data/lib/event_sourcery/errors.rb +2 -0
- data/lib/event_sourcery/event_processing/error_handlers/error_handler.rb +1 -0
- data/lib/event_sourcery/event_processing/error_handlers/exponential_backoff_retry.rb +1 -0
- data/lib/event_sourcery/event_processing/error_handlers/no_retry.rb +1 -0
- data/lib/event_sourcery/event_processing/esp_process.rb +2 -1
- data/lib/event_sourcery/event_processing/event_stream_processor.rb +4 -0
- data/lib/event_sourcery/event_processing/event_stream_processor_registry.rb +1 -0
- data/lib/event_sourcery/event_store/each_by_range.rb +1 -0
- data/lib/event_sourcery/event_store/event_builder.rb +1 -0
- data/lib/event_sourcery/event_store/event_sink.rb +1 -0
- data/lib/event_sourcery/event_store/event_source.rb +1 -0
- data/lib/event_sourcery/event_store/event_type_serializers/underscored.rb +2 -1
- data/lib/event_sourcery/memory/config.rb +2 -0
- data/lib/event_sourcery/memory/projector.rb +2 -0
- data/lib/event_sourcery/version.rb +1 -1
- data/lib/event_sourcery.rb +1 -0
- metadata +4 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 234ed8cdde83e87e565f51aa4dd25eb985e5ebf0f3f86997545a1b8cda3b45a1
|
|
4
|
+
data.tar.gz: 59e13d2ab9cba68104ad24567f54a5b7393939282e8112313094993fff2276ca
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d89cc4d55dd4609a6fd8b02f1fb062f25ee41132ab8ec3cff44fd11d319d8878f9a2bfdfc801100dbd2b257ab0fe58dde9eb8d9548b77012109ca7d2efa8554f
|
|
7
|
+
data.tar.gz: bb2ab3cfa3300db9f5a770cc4ffdb59ef878077d612bfe1b6dbde1359c9a8940bb9ac6d2af799ba93fd77c44b5d6a9cb85f3a3eaef491d38a33e4f76ccedb952
|
data/CHANGELOG.md
CHANGED
|
@@ -7,16 +7,25 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
-
[Unreleased]: https://github.com/envato/event_sourcery/compare/v1.0.
|
|
10
|
+
[Unreleased]: https://github.com/envato/event_sourcery/compare/v1.0.4...HEAD
|
|
11
|
+
|
|
12
|
+
## [1.0.4] - 2026-01-17
|
|
13
|
+
|
|
14
|
+
### Changed
|
|
15
|
+
|
|
16
|
+
- Resolve issues as identified by RuboCop ([#248]).
|
|
17
|
+
|
|
18
|
+
[1.0.4]: https://github.com/envato/event_sourcery/compare/v1.0.3...v1.0.4
|
|
19
|
+
[#248]: https://github.com/envato/event_sourcery/pull/248
|
|
11
20
|
|
|
12
21
|
## [1.0.3] - 2025-12-29
|
|
13
22
|
|
|
14
23
|
### Changed
|
|
15
24
|
|
|
16
|
-
- Resolve issues as identified by RuboCop ([#
|
|
25
|
+
- Resolve issues as identified by RuboCop ([#246]).
|
|
17
26
|
|
|
18
27
|
[1.0.3]: https://github.com/envato/event_sourcery/compare/v1.0.2...v1.0.3
|
|
19
|
-
[#
|
|
28
|
+
[#246]: https://github.com/envato/event_sourcery/pull/246
|
|
20
29
|
|
|
21
30
|
## [1.0.2] - 2025-12-28
|
|
22
31
|
|
data/event_sourcery.gemspec
CHANGED
|
@@ -12,13 +12,13 @@ Gem::Specification.new do |spec|
|
|
|
12
12
|
|
|
13
13
|
spec.summary = 'Event Sourcing Library'
|
|
14
14
|
spec.description = ''
|
|
15
|
-
spec.homepage =
|
|
15
|
+
spec.homepage = "https://github.com/envato/#{spec.name}"
|
|
16
16
|
spec.license = 'MIT'
|
|
17
17
|
spec.metadata = {
|
|
18
18
|
'allowed_push_host' => 'https://rubygems.org',
|
|
19
19
|
'bug_tracker_uri' => "#{spec.homepage}/issues",
|
|
20
20
|
'changelog_uri' => "#{spec.homepage}/blob/HEAD/CHANGELOG.md",
|
|
21
|
-
'documentation_uri' => "https://www.rubydoc.info/gems
|
|
21
|
+
'documentation_uri' => "https://www.rubydoc.info/gems/#{spec.name}/#{spec.version}",
|
|
22
22
|
'source_code_uri' => "#{spec.homepage}/tree/v#{spec.version}"
|
|
23
23
|
}
|
|
24
24
|
|
|
@@ -7,10 +7,12 @@ module EventSourcery
|
|
|
7
7
|
AtomicWriteToMultipleAggregatesNotSupported = Class.new(Error)
|
|
8
8
|
MultipleCatchAllHandlersDefined = Class.new(Error)
|
|
9
9
|
|
|
10
|
+
# Error raised when event processing fails with contextual information.
|
|
10
11
|
class EventProcessingError < Error
|
|
11
12
|
attr_reader :event, :processor
|
|
12
13
|
|
|
13
14
|
def initialize(event:, processor:)
|
|
15
|
+
super()
|
|
14
16
|
@event = event
|
|
15
17
|
@processor = processor
|
|
16
18
|
end
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
module EventSourcery
|
|
4
4
|
module EventProcessing
|
|
5
|
+
# Manages the lifecycle of an event stream processor in a dedicated process.
|
|
5
6
|
class ESPProcess
|
|
6
7
|
DEFAULT_AFTER_FORK = ->(event_processor) {}
|
|
7
8
|
|
|
@@ -25,7 +26,7 @@ module EventSourcery
|
|
|
25
26
|
subscribe_to_event_stream
|
|
26
27
|
EventSourcery.logger.info("Stopping #{processor_name}")
|
|
27
28
|
end
|
|
28
|
-
rescue Exception => e
|
|
29
|
+
rescue Exception => e # rubocop:disable Lint/RescueException
|
|
29
30
|
EventSourcery.logger.fatal("An unhandled exception occurred in #{processor_name}")
|
|
30
31
|
EventSourcery.logger.fatal(e)
|
|
31
32
|
EventSourcery.config.on_event_processor_critical_error.call(e, processor_name)
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
module EventSourcery
|
|
4
4
|
module EventProcessing
|
|
5
|
+
# Module for processing streams of events with customisable handlers.
|
|
5
6
|
module EventStreamProcessor
|
|
6
7
|
def self.included(base)
|
|
7
8
|
base.extend(ClassMethods)
|
|
@@ -14,12 +15,14 @@ module EventSourcery
|
|
|
14
15
|
end
|
|
15
16
|
end
|
|
16
17
|
|
|
18
|
+
# Instance methods for event stream processors.
|
|
17
19
|
module InstanceMethods
|
|
18
20
|
def initialize(tracker:)
|
|
19
21
|
@tracker = tracker
|
|
20
22
|
end
|
|
21
23
|
end
|
|
22
24
|
|
|
25
|
+
# Handles the processing of individual events with error handling.
|
|
23
26
|
module ProcessHandler
|
|
24
27
|
# Handler that processes the given event.
|
|
25
28
|
#
|
|
@@ -38,6 +41,7 @@ module EventSourcery
|
|
|
38
41
|
end
|
|
39
42
|
end
|
|
40
43
|
|
|
44
|
+
# Class methods for configuring event stream processors.
|
|
41
45
|
module ClassMethods
|
|
42
46
|
# @attr_reader processes_event_types [Array] Process Event Types
|
|
43
47
|
# @attr_reader event_handlers [Hash] Hash of handler blocks keyed by event
|
|
@@ -9,6 +9,7 @@ module EventSourcery
|
|
|
9
9
|
# Replace inflector with ActiveSupport like this:
|
|
10
10
|
# EventSourcery::EventStore::EventTypeSerializers::Underscored.inflector = ActiveSupport::Inflector
|
|
11
11
|
class Underscored
|
|
12
|
+
# Provides string inflection methods for converting between formats.
|
|
12
13
|
class Inflector
|
|
13
14
|
# Inflection methods are taken from active support 3.2
|
|
14
15
|
# https://github.com/rails/rails/blob/3-2-stable/activesupport/lib/active_support/inflector/methods.rb
|
|
@@ -22,7 +23,7 @@ module EventSourcery
|
|
|
22
23
|
word
|
|
23
24
|
end
|
|
24
25
|
|
|
25
|
-
def camelize(term, uppercase_first_letter = true)
|
|
26
|
+
def camelize(term, uppercase_first_letter = true) # rubocop:disable Style/OptionalBooleanParameter
|
|
26
27
|
string = term.to_s
|
|
27
28
|
string =
|
|
28
29
|
if uppercase_first_letter
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module EventSourcery
|
|
4
|
+
# In-memory implementation for testing and development.
|
|
4
5
|
module Memory
|
|
6
|
+
# Configuration for in-memory event sourcing components.
|
|
5
7
|
class Config
|
|
6
8
|
attr_accessor :event_tracker
|
|
7
9
|
attr_writer :event_store, :event_source, :event_sink
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
module EventSourcery
|
|
4
4
|
module Memory
|
|
5
|
+
# Provides projection functionality for in-memory event processing.
|
|
5
6
|
module Projector
|
|
6
7
|
def self.included(base)
|
|
7
8
|
base.include(EventSourcery::EventProcessing::EventStreamProcessor)
|
|
@@ -15,6 +16,7 @@ module EventSourcery
|
|
|
15
16
|
end
|
|
16
17
|
end
|
|
17
18
|
|
|
19
|
+
# Instance methods for in-memory projectors.
|
|
18
20
|
module InstanceMethods
|
|
19
21
|
def initialize(tracker: EventSourcery::Memory.config.event_tracker)
|
|
20
22
|
@tracker = tracker
|
data/lib/event_sourcery.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: event_sourcery
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.0.
|
|
4
|
+
version: 1.0.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Envato
|
|
@@ -157,8 +157,8 @@ metadata:
|
|
|
157
157
|
allowed_push_host: https://rubygems.org
|
|
158
158
|
bug_tracker_uri: https://github.com/envato/event_sourcery/issues
|
|
159
159
|
changelog_uri: https://github.com/envato/event_sourcery/blob/HEAD/CHANGELOG.md
|
|
160
|
-
documentation_uri: https://www.rubydoc.info/gems/event_sourcery/1.0.
|
|
161
|
-
source_code_uri: https://github.com/envato/event_sourcery/tree/v1.0.
|
|
160
|
+
documentation_uri: https://www.rubydoc.info/gems/event_sourcery/1.0.4
|
|
161
|
+
source_code_uri: https://github.com/envato/event_sourcery/tree/v1.0.4
|
|
162
162
|
rdoc_options: []
|
|
163
163
|
require_paths:
|
|
164
164
|
- lib
|
|
@@ -173,7 +173,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
173
173
|
- !ruby/object:Gem::Version
|
|
174
174
|
version: '0'
|
|
175
175
|
requirements: []
|
|
176
|
-
rubygems_version: 4.0.
|
|
176
|
+
rubygems_version: 4.0.4
|
|
177
177
|
specification_version: 4
|
|
178
178
|
summary: Event Sourcing Library
|
|
179
179
|
test_files: []
|