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 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