Navigation Menu

Skip to content

Commit

Permalink
Remove deprecated aggregate methods.
Browse files Browse the repository at this point in the history
  • Loading branch information
mostlyobvious committed May 6, 2019
1 parent b8a76db commit 1ea7d2f
Show file tree
Hide file tree
Showing 3 changed files with 2 additions and 125 deletions.
34 changes: 1 addition & 33 deletions aggregate_root/lib/aggregate_root.rb
Expand Up @@ -4,6 +4,7 @@
require 'aggregate_root/default_apply_strategy'
require 'aggregate_root/repository'


module AggregateRoot
module ClassMethods
def on(*event_klasses, &block)
Expand Down Expand Up @@ -49,40 +50,7 @@ def unpublished_events
unpublished.each
end

def load(stream_name, event_store: default_event_store)
warn <<~EOW
Method `load` on aggregate is deprecated. Use AggregateRoot::Repository instead.
Instead of: `order = Order.new.load("OrderStreamHere")`
you need to have code:
```
repository = AggregateRoot::Repository.new
order = repository.load(Order.new, "OrderStreamHere")
```
EOW
@loaded_from_stream_name = stream_name
Repository.new(event_store).load(self, stream_name)
end

def store(stream_name = loaded_from_stream_name, event_store: default_event_store)
warn <<~EOW
Method `store` on aggregate is deprecated. Use AggregateRoot::Repository instead.
Instead of: `order.store("OrderStreamHere")`
you need to have code:
```
repository = AggregateRoot::Repository.new
# load and order and execute some operation on it here
repository.store(order, "OrderStreamHere")
```
EOW
Repository.new(event_store).store(self, stream_name)
end

private
attr_reader :loaded_from_stream_name

def default_event_store
AggregateRoot.configuration.default_event_store
end

def unpublished
@unpublished_events ||= []
Expand Down
2 changes: 1 addition & 1 deletion aggregate_root/lib/aggregate_root/repository.rb
Expand Up @@ -29,4 +29,4 @@ def default_event_store
AggregateRoot.configuration.default_event_store
end
end
end
end
91 changes: 0 additions & 91 deletions aggregate_root/spec/aggregate_root_spec.rb
Expand Up @@ -295,97 +295,6 @@
end
end

it "still loads events using deprecated load method on aggregate" do
event_store.publish(Orders::Events::OrderCreated.new, stream_name: "Order$1")
event_store.publish(Orders::Events::OrderExpired.new, stream_name: "Order$1")

expect {
order = Order.new.load("Order$1", event_store: event_store)
expect(order.status).to eq :expired
}.to output(<<~EOS).to_stderr
Method `load` on aggregate is deprecated. Use AggregateRoot::Repository instead.
Instead of: `order = Order.new.load("OrderStreamHere")`
you need to have code:
```
repository = AggregateRoot::Repository.new
order = repository.load(Order.new, "OrderStreamHere")
```
EOS
end

it "still stores events using deprecated store method on aggregate" do
stream = "any-order-stream"
order_created = Orders::Events::OrderCreated.new

order = Order.new
silence_warnings do
order.load(stream, event_store: event_store)
end
order.apply(order_created)
expect(event_store).to receive(:publish).with([order_created], stream_name: stream, expected_version: -1).and_call_original

expect {
order.store(event_store: event_store)
}.to output(<<~EOS).to_stderr
Method `store` on aggregate is deprecated. Use AggregateRoot::Repository instead.
Instead of: `order.store("OrderStreamHere")`
you need to have code:
```
repository = AggregateRoot::Repository.new
# load and order and execute some operation on it here
repository.store(order, "OrderStreamHere")
```
EOS
end

it "still loads events using deprecated load method on aggregate - with default event store" do
with_default_event_store(event_store) do

event_store.publish(Orders::Events::OrderCreated.new, stream_name: "Order$1")
event_store.publish(Orders::Events::OrderExpired.new, stream_name: "Order$1")

expect {
order = Order.new.load("Order$1")
expect(order.status).to eq :expired
}.to output(<<~EOS).to_stderr
Method `load` on aggregate is deprecated. Use AggregateRoot::Repository instead.
Instead of: `order = Order.new.load("OrderStreamHere")`
you need to have code:
```
repository = AggregateRoot::Repository.new
order = repository.load(Order.new, "OrderStreamHere")
```
EOS
end
end

it "still stores events using deprecated store method on aggregate - with default event store" do
with_default_event_store(event_store) do
stream = "any-order-stream"
order_created = Orders::Events::OrderCreated.new

order = Order.new
silence_warnings do
order.load(stream)
end
order.apply(order_created)
expect(event_store).to receive(:publish).with([order_created], stream_name: "Order$2", expected_version: -1).and_call_original

expect {
order.store("Order$2")
}.to output(<<~EOS).to_stderr
Method `store` on aggregate is deprecated. Use AggregateRoot::Repository instead.
Instead of: `order.store("OrderStreamHere")`
you need to have code:
```
repository = AggregateRoot::Repository.new
# load and order and execute some operation on it here
repository.store(order, "OrderStreamHere")
```
EOS
end
end

it "uses with_aggregate to simplify aggregate usage" do
event_store.publish(Orders::Events::OrderCreated.new, stream_name: "Order$1")
order_expired = Orders::Events::OrderExpired.new
Expand Down

0 comments on commit 1ea7d2f

Please sign in to comment.