aggregate_root 0.25.2 → 0.26.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
- SHA256:
3
- metadata.gz: 995266c48c7929fb0c38287438f70ed97d983d8516b2eb0eb24b0980cf2c917c
4
- data.tar.gz: 910904d383144508a5e5adc7e4690a838799188159a83adc10a88265b9eaafc0
2
+ SHA1:
3
+ metadata.gz: 7497e626d209beb417d3ff6a8173b143a3ce355c
4
+ data.tar.gz: 4434d1b8e927a95199dedec7196c63ef3f23053e
5
5
  SHA512:
6
- metadata.gz: '0186b31585ae5391100d96f688abbef53b0c20adf0602ebf540071a838d48570c2c13ab5e3e7fcbe2a76f0612a05e548b02de1559810827a21bf789fa1a8eef7'
7
- data.tar.gz: 18c0dc7ede84c8873b1da832a52c185d1d7095bfc791f69337b1beec0e88846539c97c34c435bb0064567a7fd3fafd54ab8493f6d3c0d1010b915bf8cbb4cb2a
6
+ metadata.gz: dd32ccc17b0494cd0f156d660daeffae63f1914360d9ebe362a98e2b1947dba5cddadb2635d05741ee8b76cc949e59055ea06b5e301d1c95fbaa1843315e94ff
7
+ data.tar.gz: a92f43c7f5a7735a1d7e5ea903bc4b4c53b8a4858ebe6a4197570138bd030a5347841a7a04439b9c29841b3dd64da952d54f576a548a80bb6f73368a042276fd
@@ -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.2'
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'
@@ -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 @strict
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
- "apply_#{event.class.name.demodulize.underscore}"
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
@@ -1,3 +1,3 @@
1
1
  module AggregateRoot
2
- VERSION = "0.25.2"
2
+ VERSION = "0.26.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.25.2
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-02-10 00:00:00.000000000 Z
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.25.2
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.25.2
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.7.3
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