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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 415c43691713e1a778ed869039f81ab0af0b3d65b86a1c96805414e46bde2111
4
- data.tar.gz: 623adde0b5dd6f1b850567c8485bf8204cbc5c38691ead0f9b3f5f947faa6fc0
3
+ metadata.gz: 234ed8cdde83e87e565f51aa4dd25eb985e5ebf0f3f86997545a1b8cda3b45a1
4
+ data.tar.gz: 59e13d2ab9cba68104ad24567f54a5b7393939282e8112313094993fff2276ca
5
5
  SHA512:
6
- metadata.gz: 6fdc34b508b5f3031eaabda5cce803d112e577e585f73716f0a29d3f7d6f5b3fb35f9fee4bd27e732ff5a05f7c0235313f3c08f6edc091a71ff0e253bb5f5f48
7
- data.tar.gz: d3bd692067e4231ddbf4cbdc8a8de01dc4ce60963adc25166b052a3552e982563b76b4225606d1c18d7333e6c28dc97a9378faf9ae71a02da2f638c4012b7552
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.3...HEAD
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 ([#245]).
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
- [#245]: https://github.com/envato/event_sourcery/pull/245
28
+ [#246]: https://github.com/envato/event_sourcery/pull/246
20
29
 
21
30
  ## [1.0.2] - 2025-12-28
22
31
 
@@ -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 = 'https://github.com/envato/event_sourcery'
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/event_sourcery/#{spec.version}",
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
 
@@ -64,6 +64,7 @@ module EventSourcery
64
64
  end
65
65
  end
66
66
 
67
+ # Class methods for aggregate root event handling configuration.
67
68
  module ClassMethods
68
69
  # Collection of event handlers for the events that this aggregate cares about
69
70
  #
@@ -3,6 +3,7 @@
3
3
  require 'logger'
4
4
 
5
5
  module EventSourcery
6
+ # Configuration settings for EventSourcery.
6
7
  class Config
7
8
  # The default Proc to be run when an aggregate loads an event type that
8
9
  # it doesn't know how to handle.
@@ -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
@@ -3,6 +3,7 @@
3
3
  module EventSourcery
4
4
  module EventProcessing
5
5
  module ErrorHandlers
6
+ # Base module for error handling strategies in event processing.
6
7
  module ErrorHandler
7
8
  # The default with_error_handling method. Will always raise NotImplementedError
8
9
  #
@@ -3,6 +3,7 @@
3
3
  module EventSourcery
4
4
  module EventProcessing
5
5
  module ErrorHandlers
6
+ # Error handler that retries with exponentially increasing delays.
6
7
  class ExponentialBackoffRetry
7
8
  include EventSourcery::EventProcessing::ErrorHandlers::ErrorHandler
8
9
 
@@ -3,6 +3,7 @@
3
3
  module EventSourcery
4
4
  module EventProcessing
5
5
  module ErrorHandlers
6
+ # Error handler that exits the process on error without retrying.
6
7
  class NoRetry
7
8
  include EventSourcery::EventProcessing::ErrorHandlers::ErrorHandler
8
9
  def initialize(processor_name:)
@@ -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
@@ -2,6 +2,7 @@
2
2
 
3
3
  module EventSourcery
4
4
  module EventProcessing
5
+ # Registry for managing event stream processor classes.
5
6
  class EventStreamProcessorRegistry
6
7
  def initialize
7
8
  @processors = []
@@ -2,6 +2,7 @@
2
2
 
3
3
  module EventSourcery
4
4
  module EventStore
5
+ # Provides iteration over events within a specified range.
5
6
  module EachByRange
6
7
  def each_by_range(from_event_id, to_event_id, event_types: nil)
7
8
  caught_up = false
@@ -2,6 +2,7 @@
2
2
 
3
3
  module EventSourcery
4
4
  module EventStore
5
+ # Builds event objects from serialised event data.
5
6
  class EventBuilder
6
7
  def initialize(event_type_serializer:)
7
8
  @event_type_serializer = event_type_serializer
@@ -4,6 +4,7 @@ require 'forwardable'
4
4
 
5
5
  module EventSourcery
6
6
  module EventStore
7
+ # Delegates event storage operations to the underlying event store.
7
8
  class EventSink
8
9
  def initialize(event_store)
9
10
  @event_store = event_store
@@ -2,6 +2,7 @@
2
2
 
3
3
  module EventSourcery
4
4
  module EventStore
5
+ # Delegates event retrieval operations to the underlying event store.
5
6
  class EventSource
6
7
  def initialize(event_store)
7
8
  @event_store = event_store
@@ -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
@@ -2,5 +2,5 @@
2
2
 
3
3
  module EventSourcery
4
4
  # The version of the EventSourcery gem
5
- VERSION = '1.0.3'
5
+ VERSION = '1.0.4'
6
6
  end
@@ -34,6 +34,7 @@ require 'event_sourcery/memory/event_store'
34
34
  require 'event_sourcery/memory/config'
35
35
  require 'event_sourcery/memory/projector'
36
36
 
37
+ # Event sourcing framework for Ruby applications.
37
38
  module EventSourcery
38
39
  # Configure EventSourcery
39
40
  #
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.3
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.3
161
- source_code_uri: https://github.com/envato/event_sourcery/tree/v1.0.3
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.3
176
+ rubygems_version: 4.0.4
177
177
  specification_version: 4
178
178
  summary: Event Sourcing Library
179
179
  test_files: []