aggregate_root 0.36.0 → 0.37.0

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: 6283f565f49164977c767f1861436c0b967454b88343a66eca43a51cbed62bee
4
- data.tar.gz: '07208fd928b28951bfe984e8bca3cc43755277c5be8c147ab998522adb6ab067'
3
+ metadata.gz: c9b0e4f4f401bdccd5f7fa286c0d2560d6e3fab598a0ef0f0b4f003ddd65bf7e
4
+ data.tar.gz: ab27a56da04977950165c9ebf4d224b2298970c113b383d4d91d5144145dbc3c
5
5
  SHA512:
6
- metadata.gz: da972cb63c395d4d7690c5b7ce214c8201ad70c3a5e4991da9b18e4003d16204ec72ea2285067d6e2ef5d2abde90018084e931ca4447284d125f89103e9a6158
7
- data.tar.gz: dc20159def2f3fe6dd977f2601bea5151b763f9368c9a10dc50e918eff92995b65818c03d83ec2d476b1e2670c527fb4a6f7386ef84eb3a2ac4937ed11e5b886
6
+ metadata.gz: 805091b0dd92bc9f02dace8031bff7aa90a2d91eae797aaf062467247daceb0552b0bcbe872b06ea4e50aaded13e391becc3e1145f04de6d8eb35dcbb4ee2270
7
+ data.tar.gz: 1a1d771ef1db8121faa3ae2ac3ce4f1fe4ab44e5779da3807a7a6da23ccf2932a0e24122b9c91ed5ee6bf7f26a9ae56292433b9f14a3f24e33830d5c3a01d92f
@@ -25,5 +25,5 @@ Gem::Specification.new do |spec|
25
25
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
26
26
  spec.require_paths = ['lib']
27
27
 
28
- spec.add_dependency 'ruby_event_store', '= 0.36.0'
28
+ spec.add_dependency 'ruby_event_store', '= 0.37.0'
29
29
  end
@@ -2,6 +2,7 @@ require 'aggregate_root/version'
2
2
  require 'aggregate_root/configuration'
3
3
  require 'aggregate_root/transform'
4
4
  require 'aggregate_root/default_apply_strategy'
5
+ require 'aggregate_root/repository'
5
6
 
6
7
  module AggregateRoot
7
8
  module ClassMethods
@@ -35,47 +36,59 @@ module AggregateRoot
35
36
  end
36
37
  end
37
38
 
38
- def load(stream_name, event_store: default_event_store)
39
- @loaded_from_stream_name = stream_name
40
- events_enumerator(event_store, stream_name).with_index do |event, index|
41
- apply(event)
42
- @version = index
43
- end
44
- @unpublished_events = nil
45
- self
39
+ def version
40
+ @version ||= -1
46
41
  end
47
42
 
48
- def store(stream_name = loaded_from_stream_name, event_store: default_event_store)
49
- event_store.publish(unpublished, stream_name: stream_name, expected_version: version)
50
- @version += unpublished_events.size
43
+ def version=(value)
51
44
  @unpublished_events = nil
45
+ @version = value
52
46
  end
53
47
 
54
48
  def unpublished_events
55
49
  unpublished.each
56
50
  end
57
51
 
58
- private
59
-
60
- def unpublished
61
- @unpublished_events ||= []
52
+ def load(stream_name, event_store: default_event_store)
53
+ warn <<~EOW
54
+ Method `load` on aggregate is deprecated. Use AggregateRoot::Repository instead.
55
+ Instead of: `order = Order.new.load("OrderStreamHere")`
56
+ you need to have code:
57
+ ```
58
+ repository = AggregateRoot::Repository.new
59
+ order = repository.load(Order.new, "OrderStreamHere")
60
+ ```
61
+ EOW
62
+ @loaded_from_stream_name = stream_name
63
+ Repository.new(event_store).load(self, stream_name)
62
64
  end
63
65
 
64
- def version
65
- @version ||= -1
66
+ def store(stream_name = loaded_from_stream_name, event_store: default_event_store)
67
+ warn <<~EOW
68
+ Method `store` on aggregate is deprecated. Use AggregateRoot::Repository instead.
69
+ Instead of: `order.store("OrderStreamHere")`
70
+ you need to have code:
71
+ ```
72
+ repository = AggregateRoot::Repository.new
73
+ # load and order and execute some operation on it here
74
+ repository.store(order, "OrderStreamHere")
75
+ ```
76
+ EOW
77
+ Repository.new(event_store).store(self, stream_name)
66
78
  end
67
79
 
68
- def apply_strategy
69
- DefaultApplyStrategy.new(on_methods: self.class.on_methods)
70
- end
80
+ private
81
+ attr_reader :loaded_from_stream_name
71
82
 
72
83
  def default_event_store
73
84
  AggregateRoot.configuration.default_event_store
74
85
  end
75
86
 
76
- def events_enumerator(event_store, stream_name)
77
- event_store.read.in_batches.stream(stream_name).each
87
+ def unpublished
88
+ @unpublished_events ||= []
78
89
  end
79
90
 
80
- attr_reader :loaded_from_stream_name
91
+ def apply_strategy
92
+ DefaultApplyStrategy.new(on_methods: self.class.on_methods)
93
+ end
81
94
  end
@@ -0,0 +1,32 @@
1
+ module AggregateRoot
2
+ class Repository
3
+ def initialize(event_store = default_event_store)
4
+ @event_store = event_store
5
+ end
6
+
7
+ def load(aggregate, stream_name)
8
+ event_store.read.stream(stream_name).reduce {|_, ev| aggregate.apply(ev) }
9
+ aggregate.version = aggregate.unpublished_events.count - 1
10
+ aggregate
11
+ end
12
+
13
+ def store(aggregate, stream_name)
14
+ event_store.publish(aggregate.unpublished_events.to_a,
15
+ stream_name: stream_name,
16
+ expected_version: aggregate.version)
17
+ aggregate.version = aggregate.version + aggregate.unpublished_events.count
18
+ end
19
+
20
+ def with_aggregate(aggregate, stream_name, &block)
21
+ block.call(load(aggregate, stream_name))
22
+ store(aggregate, stream_name)
23
+ end
24
+
25
+ private
26
+ attr_reader :event_store
27
+
28
+ def default_event_store
29
+ AggregateRoot.configuration.default_event_store
30
+ end
31
+ end
32
+ end
@@ -1,3 +1,3 @@
1
1
  module AggregateRoot
2
- VERSION = "0.36.0"
2
+ VERSION = "0.37.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aggregate_root
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.36.0
4
+ version: 0.37.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arkency
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-01-22 00:00:00.000000000 Z
11
+ date: 2019-03-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ruby_event_store
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 0.36.0
19
+ version: 0.37.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 0.36.0
26
+ version: 0.37.0
27
27
  description: Event sourced (with Rails Event Store) aggregate root implementation
28
28
  email:
29
29
  - dev@arkency.com
@@ -39,6 +39,7 @@ files:
39
39
  - lib/aggregate_root.rb
40
40
  - lib/aggregate_root/configuration.rb
41
41
  - lib/aggregate_root/default_apply_strategy.rb
42
+ - lib/aggregate_root/repository.rb
42
43
  - lib/aggregate_root/transform.rb
43
44
  - lib/aggregate_root/version.rb
44
45
  homepage: https://railseventstore.org
@@ -64,7 +65,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
64
65
  - !ruby/object:Gem::Version
65
66
  version: '0'
66
67
  requirements: []
67
- rubygems_version: 3.0.2
68
+ rubyforge_project:
69
+ rubygems_version: 2.7.6
68
70
  signing_key:
69
71
  specification_version: 4
70
72
  summary: Event sourced (with Rails Event Store) aggregate root implementation