aggregate_root 0.25.2 → 0.26.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 +5 -5
- data/aggregate_root.gemspec +1 -1
- data/lib/aggregate_root.rb +25 -1
- data/lib/aggregate_root/default_apply_strategy.rb +11 -3
- data/lib/aggregate_root/version.rb +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 7497e626d209beb417d3ff6a8173b143a3ce355c
|
4
|
+
data.tar.gz: 4434d1b8e927a95199dedec7196c63ef3f23053e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dd32ccc17b0494cd0f156d660daeffae63f1914360d9ebe362a98e2b1947dba5cddadb2635d05741ee8b76cc949e59055ea06b5e301d1c95fbaa1843315e94ff
|
7
|
+
data.tar.gz: a92f43c7f5a7735a1d7e5ea903bc4b4c53b8a4858ebe6a4197570138bd030a5347841a7a04439b9c29841b3dd64da952d54f576a548a80bb6f73368a042276fd
|
data/aggregate_root.gemspec
CHANGED
@@ -22,7 +22,7 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.add_development_dependency 'bundler', '~> 1.15'
|
23
23
|
spec.add_development_dependency 'rake', '~> 10.0'
|
24
24
|
spec.add_development_dependency 'rspec', '~> 3.6'
|
25
|
-
spec.add_development_dependency 'ruby_event_store', '= 0.
|
25
|
+
spec.add_development_dependency 'ruby_event_store', '= 0.26.0'
|
26
26
|
spec.add_development_dependency 'mutant-rspec', '~> 0.8.14'
|
27
27
|
|
28
28
|
spec.add_dependency 'activesupport', '>= 3.0'
|
data/lib/aggregate_root.rb
CHANGED
@@ -4,6 +4,30 @@ require 'aggregate_root/configuration'
|
|
4
4
|
require 'aggregate_root/default_apply_strategy'
|
5
5
|
|
6
6
|
module AggregateRoot
|
7
|
+
module ClassMethods
|
8
|
+
def on(*event_klasses, &block)
|
9
|
+
event_klasses.each do |event_klass|
|
10
|
+
name = event_klass.name || raise(ArgumentError, "Anonymous class is missing name")
|
11
|
+
handler_name = "on_#{name}"
|
12
|
+
define_method(handler_name, &block)
|
13
|
+
@on_methods ||= {}
|
14
|
+
@on_methods[event_klass]=handler_name
|
15
|
+
private(handler_name)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def on_methods
|
20
|
+
ancestors.
|
21
|
+
select{|k| k.instance_variables.include?(:@on_methods)}.
|
22
|
+
map{|k| k.instance_variable_get(:@on_methods) }.
|
23
|
+
inject({}, &:merge)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.included(host_class)
|
28
|
+
host_class.extend(ClassMethods)
|
29
|
+
end
|
30
|
+
|
7
31
|
def apply(*events)
|
8
32
|
events.each do |event|
|
9
33
|
apply_strategy.(self, event)
|
@@ -43,7 +67,7 @@ module AggregateRoot
|
|
43
67
|
end
|
44
68
|
|
45
69
|
def apply_strategy
|
46
|
-
DefaultApplyStrategy.new
|
70
|
+
DefaultApplyStrategy.new(on_methods: self.class.on_methods)
|
47
71
|
end
|
48
72
|
|
49
73
|
def default_event_store
|
@@ -2,8 +2,9 @@ module AggregateRoot
|
|
2
2
|
MissingHandler = Class.new(StandardError)
|
3
3
|
|
4
4
|
class DefaultApplyStrategy
|
5
|
-
def initialize(strict: true)
|
5
|
+
def initialize(strict: true, on_methods: {})
|
6
6
|
@strict = strict
|
7
|
+
@on_methods = on_methods
|
7
8
|
end
|
8
9
|
|
9
10
|
def call(aggregate, event)
|
@@ -11,14 +12,21 @@ module AggregateRoot
|
|
11
12
|
if aggregate.respond_to?(name, true)
|
12
13
|
aggregate.method(name).call(event)
|
13
14
|
else
|
14
|
-
raise MissingHandler.new("Missing handler method #{name} on aggregate #{aggregate.class}") if
|
15
|
+
raise MissingHandler.new("Missing handler method #{name} on aggregate #{aggregate.class}") if strict
|
15
16
|
end
|
16
17
|
end
|
17
18
|
|
18
19
|
private
|
19
20
|
|
21
|
+
def handler_name_by_class(event_class)
|
22
|
+
"apply_#{event_class.name.demodulize.underscore}"
|
23
|
+
end
|
24
|
+
|
20
25
|
def handler_name(event)
|
21
|
-
|
26
|
+
on_methods.fetch(event.class){ handler_name_by_class(event.class) }
|
22
27
|
end
|
28
|
+
|
29
|
+
private
|
30
|
+
attr_reader :strict, :on_methods
|
23
31
|
end
|
24
32
|
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.
|
4
|
+
version: 0.26.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Arkency
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-03-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - '='
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0.
|
61
|
+
version: 0.26.0
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - '='
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 0.
|
68
|
+
version: 0.26.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: mutant-rspec
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -130,7 +130,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
130
130
|
version: '0'
|
131
131
|
requirements: []
|
132
132
|
rubyforge_project:
|
133
|
-
rubygems_version: 2.
|
133
|
+
rubygems_version: 2.6.13
|
134
134
|
signing_key:
|
135
135
|
specification_version: 4
|
136
136
|
summary: Event sourced (with Rails Event Store) aggregate root implementation
|