All Versions
42
Latest Version
Avg Release Cycle
56 days
Latest Release
7 days ago

Changelog History
Page 1

  • v1.1.0

    May 24, 2020

    ✨ Enhancements

    • Dynamic Commanded applications (#324).
    • 🌲 Log and ignore unexpected messages received by event handlers and process manager instances (#333)
    • 🖨 Process manager identity/0 function (#334).
    • 👍 Extend Commanded.AggregateCase ExUnit case template to support Commanded.Aggregate.Multi.
    • 👍 Allow Commanded.Aggregate.Multi to return events as :ok tagged tuples.
    • 👷 Run the formatter in CI (#341).
    • ➕ Add stacktraces to EventHandler error logging (#340)
    • refute_receive_event/4 only tests newly created events (#347).
    • 👍 Allow Commanded Application name to be set dynamically in middleware (#352).
    • ✂ Remove router module compile-time checking (#363).
    • ⬇️ Reduce memory consumption during aggregate state rebuild (#368).
    • ⬆️ Upgrade to phoenix_pubsub to 2.0 (#365).
    • Ignore :not_found error when reseting InMemory event store (#354).
    • Add router/1 to locals_without_parens in Mix format config (#351).
    • Include stacktrace in event handler and process manager error callback functions (#342).
    • Call event handler's error/3 callback function when handle/2 function returns an invalid value (#372).

    🐛 Bug fixes

    • 🛠 Fixes the typespec for command dispatch (#325).
    • 🖨 Process manager stops if interested?/1 returns an empty list (#335).
  • v1.0.1

    February 27, 2020

    ✨ Enhancements

    • Global registry using Erlang's :global module (#344).
    • Command dispatch return (#331).

    🐛 Bug fixes

    • 🛠 Fix distributed subscription registration bug (#345).
    • Retry event handler and process manager subscriptions on error (#348).
  • v1.0.0

    November 21, 2019

    💥 Breaking changes

    • 👌 Support multiple Commanded apps (#298).

    ✨ Enhancements

    • Define adapter behaviour modules for event store, pubsub, and registry (#311).
    • ➕ Add AggregateCase ExUnit case template to support aggregate unit testing (#315).
    • Application config lookup (#318).

    🐛 Bug fixes

    • 🛠 Fix process manager exception on start (#307).
    • 🛠 Fix commanded aggregate race (#308).
    • 🛠 Fix Dialyzer warnings and include in Travis CI (#317).

    ⬆️ Upgrading

    ⬆️ Follow the upgrade guide to define and use your own Commanded application.


  • v1.0.0-rc.1

    October 24, 2019

    🐛 Bug fixes

    • 🛠 Fix process manager exception on start (#307).
  • v1.0.0-rc.0

    October 17, 2019

    💥 Breaking changes

    • 👌 Support multiple Commanded apps (#298).

    ⬆️ Upgrading

    ⬆️ [Follow the upgrade guide](guides/upgrades/0.19-1.0.md) to define and use your own Commanded application.

  • v0.19.1

    July 31, 2019

    ✨ Enhancements

    • Reset event handler mix task mix commanded.reset MyApp.Handler (#293).

    🐛 Bug fixes

    • 🛠 Fix regression in Commanded.Middleware.Logger.delta/1 (#295).
  • v0.19.0

    July 03, 2019

    ✨ Enhancements

    • 📇 Update typespec for data and metadata fields in Commanded.EventStore.EventData struct (#246).
    • Add include_execution_result and aggregate_version to typespec for router command dispatch (#262).
    • ➕ Add .formatter.exs to Hex package (#247).
    • Event upcasting (#263).
    • 👌 Support :ok tagged tuple events from aggregate (#268).
    • Modify Commanded.Registration.start_child/3 to pass a child_spec (#273).
    • Add supervisor_child_spec/2 to Commanded.Registration behaviour (#277) used by Commanded Horde Registry.
    • Ensure Commanded can be compiled when optional Jason dependency is not present (#286).
    • 🛠 Fix Aggregate initialization races (#287).
    • 👌 Support {:system, varname} format in Phoenix PubSub config (#291).

    💥 Breaking changes

    • 👉 Use DateTime instead of NaiveDateTime for all datetimes (#254).

      This affects the created_at field defined in the Commanded.EventStore.RecordedEvent. You will need to migrate from NaiveDateTime to DateTime if you use this field in your code (such as in an event handler's metadata).


  • v0.18.1

    June 13, 2019

    ✨ Enhancements

    • ⏱ Process manager idle process timeout (#290).
    • Register event handler and process manager subscriptions on process start (#272).
  • v0.18.0

    January 23, 2019

    ✨ Enhancements

    • 📇 Rename uuid dependency to elixir_uuid (#178).
    • 👍 Allow aggregate identity to be of any type that implements the String.Chars protocol (#166).
    • 👻 Process manager and event handler error & exception handling (#192).
    • ⏱ Process manager event handling timeout (#193).
    • 👍 Allow event handlers to subscribe to individual streams (#203).
    • ➕ Add new values for expected_version for event store append events behaviour (#127).
    • Export Commanded.Commands.Router macros in .formatter.exs file (#204).
    • 📄 Generate specs and docs for Router dispatch functions only once (#206).
    • Allow two-arity predicate function in wait_for_event receiving both event data and recorded event struct (#213).
    • 👍 Allow :infinity timeout on command dispatch (#227)
    • Strict process manager routing (#243).
    • 👍 Allow Commanded.Aggregate.Multi to be nested (#244).
    • ➕ Add child_spec/0 function to Commanded.EventStore behaviour.
    • ➕ Add delete_subscription/2 to Commanded.EventStore behaviour (#245).
    • Add refute_receive_event/2 to Commanded.Assertions.EventAssertions test helpers.

    🐛 Bug fixes

    • Fix typo in include_execution_result global router option (#216).
    • 🖐 Handle the {:ok, _} tuple dispatch result in process manager command dispatch (#236).
    • 👍 Allow string keys for Commanded.Middleware.Pipeline.assign_metadata/3, atoms are being deprecated (#228)
    • 🛠 Fix Commanded.PubSub.subscribe/1 typespec (#222).

    💥 Breaking changes

    • 📦 Migrate to Jason for JSON serialization (#234).

    You will need to add Jason as a dependency in mix.exs:

      defp deps do
        [{:jason, "~> 1.1"}]
      end
    

    Jason has no support for encoding arbitrary structs - explicit implementation of the Jason.Encoder protocol is always required. You must update all your domain event modules, aggregate state (when using state snapshotting), and process manager state to include @derive Jason.Encoder as shown below:

      defmodule AnEvent do
        @derive Jason.Encoder
        defstruct [:field]
      end
    
    • Extend aggregate lifespan behaviour to include after_error/1 and after_command/1 callbacks (#210).

    Previously you only had to define an after_event/1 callback function to implement the Commanded.Aggregates.AggregateLifespan behaviour:

      defmodule BankAccountLifespan do
        @behaviour Commanded.Aggregates.AggregateLifespan
    
        def after_event(%BankAccountClosed{}), do: :stop
        def after_event(_event), do: :infinity
      end
    

    Now you must also define after_command/1 and after_error/1 callback functions:

      defmodule BankAccountLifespan do
        @behaviour Commanded.Aggregates.AggregateLifespan
    
        def after_event(%BankAccountClosed{}), do: :stop
        def after_event(_event), do: :infinity
    
        def after_command(%CloseAccount{}), do: :stop
        def after_command(_command), do: :infinity
    
        def after_error(:invalid_initial_balance), do: :stop
        def after_error(_error), do: :stop
      end
    

    ⬆️ Upgrading

    ⬆️ Please ensure you upgrade the following event store dependencies.

    Using the Elixir EventStore:

    • 📦 eventstore to v0.16.0
    • commanded_eventstore_adapter to v0.5.0

    Using Greg Young's Event Store:

    • commanded_extreme_adapter to v0.6.0

    Commanded Ecto projections:

    • commanded_ecto_projections to v0.8.0

    ⏱ Commanded scheduler:

    • commanded_scheduler to v0.2.0

  • v0.17.5

    June 13, 2019

    ✨ Enhancements

    • ⏱ Process manager idle process timeout (#290).