event_sourcery 1.0.2 → 1.0.3

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.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +10 -1
  3. data/event_sourcery.gemspec +2 -0
  4. data/lib/event_sourcery/aggregate_root.rb +2 -0
  5. data/lib/event_sourcery/config.rb +3 -1
  6. data/lib/event_sourcery/errors.rb +3 -1
  7. data/lib/event_sourcery/event.rb +4 -2
  8. data/lib/event_sourcery/event_body_serializer.rb +2 -0
  9. data/lib/event_sourcery/event_processing/error_handlers/constant_retry.rb +2 -0
  10. data/lib/event_sourcery/event_processing/error_handlers/error_handler.rb +2 -0
  11. data/lib/event_sourcery/event_processing/error_handlers/exponential_backoff_retry.rb +2 -0
  12. data/lib/event_sourcery/event_processing/error_handlers/no_retry.rb +2 -0
  13. data/lib/event_sourcery/event_processing/esp_process.rb +2 -0
  14. data/lib/event_sourcery/event_processing/esp_runner.rb +2 -0
  15. data/lib/event_sourcery/event_processing/event_stream_processor.rb +3 -2
  16. data/lib/event_sourcery/event_processing/event_stream_processor_registry.rb +2 -0
  17. data/lib/event_sourcery/event_store/each_by_range.rb +5 -2
  18. data/lib/event_sourcery/event_store/event_builder.rb +2 -0
  19. data/lib/event_sourcery/event_store/event_sink.rb +2 -0
  20. data/lib/event_sourcery/event_store/event_source.rb +2 -0
  21. data/lib/event_sourcery/event_store/event_type_serializers/class_name.rb +2 -0
  22. data/lib/event_sourcery/event_store/event_type_serializers/legacy.rb +2 -0
  23. data/lib/event_sourcery/event_store/event_type_serializers/underscored.rb +4 -3
  24. data/lib/event_sourcery/event_store/poll_waiter.rb +2 -0
  25. data/lib/event_sourcery/event_store/signal_handling_subscription_master.rb +2 -0
  26. data/lib/event_sourcery/event_store/subscription.rb +2 -0
  27. data/lib/event_sourcery/memory/config.rb +2 -0
  28. data/lib/event_sourcery/memory/event_store.rb +2 -0
  29. data/lib/event_sourcery/memory/projector.rb +2 -0
  30. data/lib/event_sourcery/memory/tracker.rb +2 -0
  31. data/lib/event_sourcery/repository.rb +2 -0
  32. data/lib/event_sourcery/rspec/event_store_shared_examples.rb +9 -7
  33. data/lib/event_sourcery/version.rb +3 -1
  34. data/lib/event_sourcery.rb +2 -0
  35. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 819d971e975a4fb5a0db2f5b6e7f7605af8d65448125b292ec62854fa0024162
4
- data.tar.gz: 363d610db1c8c11d04bf815acae6447d7367a006f76cf03388f4cde2e6d76d32
3
+ metadata.gz: 415c43691713e1a778ed869039f81ab0af0b3d65b86a1c96805414e46bde2111
4
+ data.tar.gz: 623adde0b5dd6f1b850567c8485bf8204cbc5c38691ead0f9b3f5f947faa6fc0
5
5
  SHA512:
6
- metadata.gz: e6c1d51e23d2d11efb4002e0350c5458fcefb3d8cc40a7e4a660d8b8064b7b887d68311615d4913f80af3a104560669f8769f4bfbca4a826e10f5b8fe1303d5d
7
- data.tar.gz: c9c68fd9366316f52f4774f69aac877e0a69d92280e5f4c297eb6e31e07d5572e075624e0835bb6dedc5a89cfb08e9ac257964f30d2ab20d8627ba679815e306
6
+ metadata.gz: 6fdc34b508b5f3031eaabda5cce803d112e577e585f73716f0a29d3f7d6f5b3fb35f9fee4bd27e732ff5a05f7c0235313f3c08f6edc091a71ff0e253bb5f5f48
7
+ data.tar.gz: d3bd692067e4231ddbf4cbdc8a8de01dc4ce60963adc25166b052a3552e982563b76b4225606d1c18d7333e6c28dc97a9378faf9ae71a02da2f638c4012b7552
data/CHANGELOG.md CHANGED
@@ -7,7 +7,16 @@ 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.2...HEAD
10
+ [Unreleased]: https://github.com/envato/event_sourcery/compare/v1.0.3...HEAD
11
+
12
+ ## [1.0.3] - 2025-12-29
13
+
14
+ ### Changed
15
+
16
+ - Resolve issues as identified by RuboCop ([#245]).
17
+
18
+ [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
11
20
 
12
21
  ## [1.0.2] - 2025-12-28
13
22
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  lib = File.expand_path('lib', __dir__)
2
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
5
  require 'event_sourcery/version'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module EventSourcery
2
4
  #
3
5
  # EventSourcery::AggregateRoot provides a foundation for writing your own aggregate root classes.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'logger'
2
4
 
3
5
  module EventSourcery
@@ -60,7 +62,7 @@ module EventSourcery
60
62
  # Logger instance used by EventSourcery.
61
63
  # By default EventSourcery will log to STDOUT with a log level of Logger::INFO
62
64
  def logger
63
- @logger ||= ::Logger.new(STDOUT).tap do |logger|
65
+ @logger ||= ::Logger.new($stdout).tap do |logger|
64
66
  logger.level = Logger::INFO
65
67
  end
66
68
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module EventSourcery
2
4
  Error = Class.new(StandardError)
3
5
  UnableToLockProcessorError = Class.new(Error)
@@ -18,7 +20,7 @@ module EventSourcery
18
20
  parts << "#<#{processor.class} @@processor_name=#{processor.processor_name.inspect}>"
19
21
  parts << "#<#{event.class} @id=#{event.id.inspect}, @uuid=#{event.uuid.inspect}, @type=#{event.type.inspect}>"
20
22
  parts << "#<#{cause.class}: #{cause.message}>"
21
- parts.join("\n") + "\n"
23
+ "#{parts.join("\n")}\n"
22
24
  end
23
25
  end
24
26
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module EventSourcery
2
4
  # Represents an Event
3
5
  class Event
@@ -101,8 +103,8 @@ module EventSourcery
101
103
  correlation_id: nil,
102
104
  causation_id: nil)
103
105
  @id = id
104
- @uuid = uuid && uuid.downcase
105
- @aggregate_id = aggregate_id && aggregate_id.to_str
106
+ @uuid = uuid&.downcase
107
+ @aggregate_id = aggregate_id&.to_str
106
108
  @type = self.class.type || type.to_s
107
109
  @body = body ? EventSourcery::EventBodySerializer.serialize(body) : {}
108
110
  @version = version ? Integer(version) : nil
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module EventSourcery
2
4
  # EventBodySerializer is used for serializing event bodies when persisting events.
3
5
  class EventBodySerializer
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module EventSourcery
2
4
  module EventProcessing
3
5
  module ErrorHandlers
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module EventSourcery
2
4
  module EventProcessing
3
5
  module ErrorHandlers
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module EventSourcery
2
4
  module EventProcessing
3
5
  module ErrorHandlers
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module EventSourcery
2
4
  module EventProcessing
3
5
  module ErrorHandlers
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module EventSourcery
2
4
  module EventProcessing
3
5
  class ESPProcess
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module EventSourcery
2
4
  module EventProcessing
3
5
  # NOTE: databases should be disconnected before running this
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module EventSourcery
2
4
  module EventProcessing
3
5
  module EventStreamProcessor
@@ -48,8 +50,7 @@ module EventSourcery
48
50
  #
49
51
  # @return [True, False]
50
52
  def processes?(event_type)
51
- processes_event_types &&
52
- processes_event_types.include?(event_type.to_s)
53
+ processes_event_types&.include?(event_type.to_s)
53
54
  end
54
55
 
55
56
  # Set the name of the processor.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module EventSourcery
2
4
  module EventProcessing
3
5
  class EventStreamProcessorRegistry
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module EventSourcery
2
4
  module EventStore
3
5
  module EachByRange
@@ -5,7 +7,7 @@ module EventSourcery
5
7
  caught_up = false
6
8
  no_events_left = false
7
9
  event_id = from_event_id
8
- begin
10
+ loop do
9
11
  events = get_next_from(event_id, event_types: event_types)
10
12
  no_events_left = true if events.empty?
11
13
  events.each do |event|
@@ -16,7 +18,8 @@ module EventSourcery
16
18
  end
17
19
  end
18
20
  event_id = events.last.id + 1 unless no_events_left
19
- end while !caught_up && !no_events_left
21
+ break if caught_up || no_events_left
22
+ end
20
23
  end
21
24
  end
22
25
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module EventSourcery
2
4
  module EventStore
3
5
  class EventBuilder
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'forwardable'
2
4
 
3
5
  module EventSourcery
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module EventSourcery
2
4
  module EventStore
3
5
  class EventSource
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module EventSourcery
2
4
  module EventStore
3
5
  module EventTypeSerializers
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module EventSourcery
2
4
  module EventStore
3
5
  module EventTypeSerializers
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module EventSourcery
2
4
  module EventStore
3
5
  module EventTypeSerializers
@@ -39,9 +41,8 @@ module EventSourcery
39
41
  result = lower_case_and_underscored_word.to_s.dup
40
42
  result.gsub!(/_id$/, '')
41
43
  result.gsub!(/_/, ' ')
42
- result.gsub(/([a-z\d]*)/i) do |match|
43
- "#{match.downcase}"
44
- end.gsub(/^\w/) { ::Regexp.last_match(0).upcase }
44
+ result.gsub!(/([a-z\d]*)/i, &:downcase)
45
+ result.gsub(/^\w/) { ::Regexp.last_match(0).upcase }
45
46
  end
46
47
  end
47
48
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module EventSourcery
2
4
  module EventStore
3
5
  # This class provides a basic poll waiter implementation that calls the
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module EventSourcery
2
4
  module EventStore
3
5
  # Manages shutdown signals and facilitate graceful shutdowns of subscriptions.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module EventSourcery
2
4
  module EventStore
3
5
  # This allows Event Stream Processors (ESPs) to subscribe to an event store, and be notified when new events are
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module EventSourcery
2
4
  module Memory
3
5
  class Config
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module EventSourcery
2
4
  module Memory
3
5
  # In-memory event store.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module EventSourcery
2
4
  module Memory
3
5
  module Projector
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module EventSourcery
2
4
  module Memory
3
5
  # Being able to know where you're at when reading an event stream
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module EventSourcery
2
4
  # This class provides a set of methods to help load and save aggregate instances.
3
5
  #
@@ -1,11 +1,13 @@
1
- RSpec.shared_examples 'an event store' do
2
- TestEvent2 = Class.new(EventSourcery::Event)
3
- UserSignedUp = Class.new(EventSourcery::Event)
4
- ItemRejected = Class.new(EventSourcery::Event)
5
- Type1 = Class.new(EventSourcery::Event)
6
- Type2 = Class.new(EventSourcery::Event)
7
- BillingDetailsProvided = Class.new(EventSourcery::Event)
1
+ # frozen_string_literal: true
2
+
3
+ TestEvent2 = Class.new(EventSourcery::Event)
4
+ UserSignedUp = Class.new(EventSourcery::Event)
5
+ ItemRejected = Class.new(EventSourcery::Event)
6
+ Type1 = Class.new(EventSourcery::Event)
7
+ Type2 = Class.new(EventSourcery::Event)
8
+ BillingDetailsProvided = Class.new(EventSourcery::Event)
8
9
 
10
+ RSpec.shared_examples 'an event store' do
9
11
  let(:aggregate_id) { SecureRandom.uuid }
10
12
 
11
13
  describe '#sink' do
@@ -1,4 +1,6 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module EventSourcery
2
4
  # The version of the EventSourcery gem
3
- VERSION = '1.0.2'.freeze
5
+ VERSION = '1.0.3'
4
6
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'json'
2
4
  require 'securerandom'
3
5
  require 'time'
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.2
4
+ version: 1.0.3
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.2
161
- source_code_uri: https://github.com/envato/event_sourcery/tree/v1.0.2
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
162
162
  rdoc_options: []
163
163
  require_paths:
164
164
  - lib