aggregate_root 0.36.0 → 0.37.0

Sign up to get free protection for your applications and to get access to all the features.
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