Releases: RailsEventStore/rails_event_store
v2.17.1
v2.17.0
RubyEventStore
-
Remove: Ruby 3.1 testing and official support dropped — EOL
This is in line with our Maintenance Policy.
-
Add: Allow to pass message broker to client as a dependency [#1850]
RubyEventStore::Client.new( message_broker: RubyEventStore::Broker.new(...) end
-
Add: Allow to specify topic in
RubyEventStore::Client#publishinstead of relying only on the event type [#1860]Event type is still the default topic if none is provided.
-
Add: Allow to compose multiple brokers [#1905, 14e8436]
In this composition, the first broker responding to given topic will publish the message.
Multiple brokers can also be composed to respond to the same topic — for example if you want to retain local, in-process subscriptions while also communicating with external systems.
-
Deprecate: Passing
subscriptions:anddispatcher:toRubyEventStore::Clienthas been deprecated [#1850]Use
message_broker:argument. The existing code will continue working until next major release — internally an instance of message broker will be configured, but deprecation warning will be shown.RubyEventStore::Client.new( message_broker: RubyEventStore::Broker.new( subscriptions: ( ), dispatcher: ( ) ) end
-
Deprecate: Broker without topic support is now deprecated [#1860]
Existing, custom broker components will continue to work — deprecation message will be show. This API will break on next major release.
-
Experiment: Introduce batch mappers [#1893]
You can either provide a dedicated batch mapper or an existing mapper will be composed into default
RubyEventStore::Mappers::BatchMapperimplementation. This is an experimental feature.
RailsEventStore
-
Fix: Double instrumentation in
RailsEventStore::JSONClientis no more [#1851] -
Fix:
ActiveJobclasses withAsyncHandlerHelpersrespond toperform_now(event)[#1904, #1786, #1334]With addition of
prepend RailsEventStore::AsyncHandlerinto an ActiveJob event handler, one could implement aperformmethod that took an event as an argument instead of a raw, serialized job payload.However, until now, there was a disparity for jobs-as-event-handlers executed inline with
perform_now. This change restores this balance. -
Remove: Ruby 3.1 testing and official support dropped — EOL
This is in line with our Maintenance Policy.
-
Remove: Rails 7.0 testing and official support dropped — EOL
This is in line with our Maintenance Policy.
-
Add: Allow to pass message broker to client as a dependency [#1850]
RailsEventStore::Client.new( message_broker: RubyEventStore::Broker.new(...) end
-
Add: Allow to specify topic in
RailsEventStore::Client#publishinstead of relying only on the event type [#1860]Event type is still the default topic if none is provided.
-
Add: Allow to compose multiple brokers [#1905, 14e8436]
In this composition, the first broker responding to given topic will publish the message.
Multiple brokers can also be composed to respond to the same topic — for example if you want to retain local, in-process subscriptions while also communicating with external systems.
-
Deprecate: Passing
subscriptions:anddispatcher:toRubyEventStore::Clienthas been deprecated [#1850]Use
message_broker:argument. The existing code will continue working until next major release — internally an instance of message broker will be configured, but deprecation warning will be shown.RailsEventStore::Client.new( message_broker: RubyEventStore::Broker.new( subscriptions: ( ), dispatcher: ( ) ) end
-
Deprecate: Broker without topic support is now deprecated [#1860]
Existing, custom broker components will continue to work — deprecation message will be show. This API will break on next major release.
-
Experiment: Introduce batch mappers [#1893]
You can either provide a dedicated batch mapper or an existing mapper will be composed into default
RubyEventStore::Mappers::BatchMapperimplementation. This is an experimental feature.
RubyEventStore::ActiveRecord
-
Remove: Ruby 3.1 testing and official support dropped — EOL
This is in line with our Maintenance Policy.
-
Remove: ActiveRecord 7.0 testing and official support dropped — EOL
This is in line with our Maintenance Policy.
-
Fix: Delay loading
ActiveRecord::Basefor Rails [#1906] -
Change: Prevent
ActiveRecordfrom serializing eventdataandmetadataafter they have been already serialized by theRubyEventStore::ActiveRecord::EventRepository[#1876, 5c8a99b]This change affects only schemas with JSON/B colums. It simplifies confguration, documentation and harmonizes the behaviour with other column types and event repository implementations (InMemory, ROM, Sequel).
In RubyEventStore, every event repository is responsible for serializing the payload for the storage. From now on this expectation is consistent for JSON/B data type as well, without requiring hacks with NULL serializer.
When following JSON configuration guidance — this change is backwards compatible:
-
if you have a
JSONClient, the defaults have been changed and there's nothing more to do -
if you have a schema with JSON/B columns and pass
serializer: NULLto an instance of aRubyEventStore::ActiveRecord::EventRepositoryexplicitly, a deprecation warning is emitted and a fallback is applied — you should be usingserializer: JSONfrom now on
Configuring
RubyEventStorecorrectly for JSON was tricky in the past. Chances are some of you may have ended up with doubledataandmetadataserialization unintentionally — first by the repository, second by the ORM 😔. On the surface it all looks good, but no one wants nor needs doing something twice unnecessarily. In such case this change will break that behaviour — for the good.How to detect if you're in this situation? Look at your raw
datainevent_store_eventstable.::ActiveRecord::Base.connection .execute("SELECT data FROM event_store_events ORDER BY id DESC LIMIT 100") .map { |x| x["data"] } .any? { |x| x.match?(/^\"/) } => false # this is good
SELECT data FROM event_store_events WHERE pg_typeof(data) IN ('json', 'jsonb') AND starts_with(data::text, '"') ORDER BY id DESC LIMIT 100; data ------ (0 rows) # this is good
What to do next when you're affected? Call
rescue_from_double_json_serialization!on your RES client instance to patch readers on this instance.Rails.configuration.event_store.rescue_from_double_json_serialization!
For the small price of 2% performance hit this will patch the read and perform additional deserialization when needed for the past, persisted events. New events will be already persisted and read without additional serialization. This will give you time — at some point you'll need to fix remaining database records before jumping on the next major (3.x) RubyEventStore release where this patch will no longer be available.
-
AggregateRoot
-
Remove: Ruby 3.1 testing and official support dropped — EOL
This is in line with our Maintenance Policy.
-
Add: Allow to add event type resolver to be used in the apply strategy [#969]
This open the door to use to event types that are not directly derived from event class name in AggregateRoot event handlers.
-
Deprecate: Including
AggregateRoot.with_default_apply_strategyorAggregateRoot.with_strategy(...)modules is now deprecated [#969]Use this instead:
include AggregateRoot
include AggregateRoot.with(strategy: ...) ```...
v2.16.0
RubyEventStore
-
Fix: deprecation warning about
ostructnot being a part of Ruby 3.5 -
Change:
OpenStructis handled byRubyEventStore::Mappers::Transformation::PreserveTypesonly if the library is present in the project bundle -
Add: Testing against and official support for Rails 8.0
-
Add: Testing against and official support for Ruby 3.4
-
Remove: Testing against Rails 6.0 and 6.1 and official support for this EOL releases
RailsEventStore
-
Add: Testing against and official support for Rails 8.0
-
Add: Testing against and official support for Ruby 3.4
-
Remove: Testing against Rails 6.0 and 6.1 and official support for this EOL releases
RubyEventStore::ActiveRecord
-
Add: Testing against and official support for Rails 8.0
-
Add: Testing against and official support for Ruby 3.4
-
Remove: Testing against Rails 6.0 and 6.1 and official support for this EOL releases
AggregateRoot
-
Add: Testing against and official support for Rails 8.0
-
Add: Testing against and official support for Ruby 3.4
-
Remove: Testing against Rails 6.0 and 6.1 and official support for this EOL releases
RubyEventStore::RSpec
-
Add: Testing against and official support for Rails 8.0
-
Add: Testing against and official support for Ruby 3.4
-
Remove: Testing against Rails 6.0 and 6.1 and official support for this EOL releases
RubyEventStore::Browser
-
Add: Testing against and official support for Rails 8.0
-
Add: Testing against and official support for Ruby 3.4
-
Remove: Testing against Rails 6.0 and 6.1 and official support for this EOL releases
v2.15.0
RubyEventStore
- no changes
RailsEventStore
RubyEventStore::ActiveRecord
- Fix: Compatibility with
strong_migrations[#1755]
AggregateRoot
- Remove: Drop obsolete
base64gem dependency [#1738]
RubyEventStore::RSpec
- no changes
RubyEventStore::Browser
-
Add: Possibility to copy event id, payload or metadata to clipboard
-
Add: Search modal launched by Meta + K key shortcut
-
Add: Tooltips for current timezone — hovering over the created at or valid at fields displays selected timezone
-
Add: Favicon [#667]
-
Fix: Map IANA linked time zones to the canonical ones [7a13952, #1753]
-
Change: UI improvements
v2.14.0
RubyEventStore
- no changes
RailsEventStore
- no changes
RubyEventStore::ActiveRecord
- no changes
AggregateRoot
- no changes
RubyEventStore::RSpec
- no changes
RubyEventStore::Browser
v2.13.0
RubyEventStore
-
Change:
RubyEventStore::BatchEnumeratoroptimization [#1708, #1711]Skip fetching the next batch if the previous one was smaller than the specified batch size.
RailsEventStore
- no changes
RubyEventStore::ActiveRecord
-
Change:
RubyEventStore::ActiveRecord::BatchEnumeratoroptimization [#1708, #1711]Skip fetching the next batch if the previous one was smaller than the specified batch size)
-
Change: N+1 optimization [#1708, #1710]
Avoiding N+1 without additional query when join clause is used in the base read query.
AggregateRoot
- no changes
RubyEventStore::RSpec
- no changes
RubyEventStore::Browser
- no changes
v2.12.1
v2.12.0
RubyEventStore
-
Change: Calling
Specification#fromandSpecification#towon't trigger SQL query to check if given event id exists [067e9b7] -
Fix: Raise
RubyEventStore::EventNotFoundinstead ofNoMethodErrorif theevent_idpassed toSpecification#fromorSpecification#todoes not exist while usingInMemoryRepository[#1673]
RailsEventStore
- Add: Support
ActiveJob::ConfiguredJobas a valid handler forActiveJobScheduler[331c16b]
RubyEventStore::ActiveRecord
-
Add: Support for ActiveRecord PostGIS adapter in migration generators [#1650, #1668]
-
Add: Support for ActiveRecord Trilogy adapter in migration generators [#1671]
-
Add: Foreign keys for data consistency. This prevents manually removing events at database level if they are already linked in any stream [#1646]
For existing Rails app installations use:
bin/rails g rails_event_store_active_record:migration_for_foreign_key_on_event_id bin/rails db:migrate
For non–Rails applications:
bundle exec rake db:migrations:add_foreign_key_on_event_id bundle exec rake db:migrate
New installations are no–op.
-
Fix: Raise
RubyEventStore::EventNotFoundinstead ofActiveRecord::RecordNotFoundif theevent_idpassed toSpecification#fromorSpecification#todoes not exist [#1673]
AggregateRoot
- no changes
RubyEventStore::RSpec
RubyEventStore::Browser
- no changes
v2.11.1
RubyEventStore
- no changes
RailsEventStore
- no changes
RubyEventStore::ActiveRecord
- no changes
AggregateRoot
- no changes
RubyEventStore::RSpec
- no changes
RubyEventStore::Browser
v2.11.0
RubyEventStore
- Fix: Restoring original type with
PreserveTypeswon't break when stored data shape is different than original one. This change also allows usingOpenStructfor data and metadata [3c5d928]
RailsEventStore
- Add: Out of the box
OpenStructsupport inJSONClient[2bed49c]
RubyEventStore::ActiveRecord
- no changes
AggregateRoot
- no changes
RubyEventStore::RSpec
- no changes
RubyEventStore::Browser
- no changes


