aggregate_root 0.42.0 → 1.1.1

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: 05c5403dadb28959f3f791f291fb74726020159dcdcc1e8a82da529f211f5f52
4
- data.tar.gz: 34b79c0e399c831f26dd1f0c78d3c7cdc0f2b2b10c295f1b7adb2b3b895066b8
3
+ metadata.gz: 575d73220efb808a61b60b44146f2eea8a960909bd6ef0910a5d1ffe532ddd65
4
+ data.tar.gz: 4a49b55c2564c1c265f39abe678387f9f0186053d69ff9d33e92c239b55ac283
5
5
  SHA512:
6
- metadata.gz: 827638cf8ccb3470096665621703ee1260a877ff995cf16d03a30d6154c4c961cd989f7d55700fc3a0d323c8cdf4e7be596015382751d5b9edcf108a0711556f
7
- data.tar.gz: 0fe73ef842c1a487383ce58d31a95c7f40f4d7a3e54b8b161e832777c9f27b13cf6c67fb97bf434859ababdb6141c75b004c311e20e760937eefaf8147719aba
6
+ metadata.gz: a343be272171b21cf995e74f9a69897f60bf1cccdcc5d8fab27b7bcc2d00af490574c3919016f9fbf20a1183eac1cca7c21ceaf604a6c8b7bae21550287866b6
7
+ data.tar.gz: 3eca1fc0b2bedf6357fa533e3336c76f47eada248806fdb47b3af518b9394f59c22d754b18eb848cb9c20cf9690b331741c8035605d545e09e5efca8828c9e2f
data/Gemfile CHANGED
@@ -8,5 +8,5 @@ eval_gemfile File.expand_path('../support/bundler/Gemfile.shared', __dir__)
8
8
 
9
9
  gem 'ruby_event_store', path: '../ruby_event_store'
10
10
  gem 'protobuf_nested_struct'
11
- gem 'google-protobuf', '~> 3.7.0'
11
+ gem 'google-protobuf', '~> 3.12.2', '>= 3.12.2'
12
12
  gem 'activesupport', '~> 5.0'
data/README.md CHANGED
@@ -2,123 +2,4 @@
2
2
 
3
3
  Event sourced (with Rails Event Store) aggregate root implementation.
4
4
 
5
- ## Installation
6
-
7
- * Add following line to your application's Gemfile:
8
-
9
- ```ruby
10
- gem 'aggregate_root'
11
- ```
12
-
13
- ## Before use
14
-
15
- Choose your weapon now! Ekhm I mean choose your event store client.
16
- To do so add configuration in environment setup. Example using [RailsEventStore](https://github.com/RailsEventStore/rails_event_store/):
17
-
18
- ```ruby
19
- AggregateRoot.configure do |config|
20
- config.default_event_store = RailsEventStore::Client.new
21
- end
22
- ```
23
-
24
- Remember that this is only a default event store used by `AggregateRoot` module when no event store is given in `load` / `store` methods parameters.
25
-
26
- To use [RailsEventStore](https://github.com/RailsEventStore/rails_event_store/) add to Gemfile:
27
-
28
- ```ruby
29
- gem 'rails_event_store'
30
- ```
31
-
32
- Then setup [RailsEventStore](https://github.com/RailsEventStore/rails_event_store/) as described in
33
- the [docs](https://railseventstore.org/docs/install/)
34
-
35
- ## Usage
36
-
37
- To create a new aggregate domain object include `AggregateRoot::Base` module.
38
- It is important to assign `id` at initializer - it will be used as a event store stream name.
39
-
40
- ```ruby
41
- class Order
42
- include AggregateRoot
43
-
44
- # ... more later
45
- end
46
- ```
47
-
48
- #### Define aggregate logic
49
-
50
- ```ruby
51
- OrderSubmitted = Class.new(RailsEventStore::Event)
52
- OrderExpired = Class.new(RailsEventStore::Event)
53
- ```
54
-
55
- ```ruby
56
- class Order
57
- include AggregateRoot
58
- HasBeenAlreadySubmitted = Class.new(StandardError)
59
- HasExpired = Class.new(StandardError)
60
-
61
- def initialize
62
- self.state = :new
63
- # any other code here
64
- end
65
-
66
- def submit
67
- raise HasBeenAlreadySubmitted if state == :submitted
68
- raise HasExpired if state == :expired
69
- apply OrderSubmitted.new(data: {delivery_date: Time.now + 24.hours})
70
- end
71
-
72
- def expire
73
- apply OrderExpired.new
74
- end
75
-
76
- private
77
- attr_accessor :state
78
-
79
- def apply_order_submitted(event)
80
- self.state = :submitted
81
- end
82
-
83
- def apply_order_expired(event)
84
- self.state = :expired
85
- end
86
- end
87
- ```
88
-
89
- #### Loading an aggregate root object from event store
90
-
91
- ```ruby
92
- stream_name = "Order$123"
93
- order = Order.new.load(stream_name)
94
- ```
95
-
96
- Load gets all domain event stored for the aggregate in event store and apply them
97
- in order to given aggregate to rebuild aggregate's state.
98
-
99
- #### Storing an aggregate root's changes in event store
100
-
101
- ```ruby
102
- stream_name = "Order$123"
103
- order = Order.new.load(stream_name)
104
- order.submit
105
- order.store
106
- ```
107
-
108
- Store gets all unpublished aggregate's domain events (created by executing a domain logic method like `submit`)
109
- and publish them in order of creation to event store. If `stream_name` is not specified events will be stored
110
- in the same stream from which order has been loaded.
111
-
112
- #### Resources
113
-
114
- There're already few blog posts about building an event sourced applications with [rails_event_store](https://github.com/RailsEventStore/rails_event_store) and aggregate_root gems:
115
-
116
- * [Why use Event Sourcing](https://blog.arkency.com/2015/03/why-use-event-sourcing/)
117
- * [The Event Store for Rails developers](https://blog.arkency.com/2015/04/the-event-store-for-rails-developers/)
118
- * [Fast introduction to Event Sourcing for Ruby programmers](https://blog.arkency.com/2015/03/fast-introduction-to-event-sourcing-for-ruby-programmers/)
119
- * [Building an Event Sourced application using rails_event_store](https://blog.arkency.com/2015/05/building-an-event-sourced-application-using-rails-event-store/)
120
- * [Using domain events as success/failure messages](https://blog.arkency.com/2015/05/using-domain-events-as-success-slash-failure-messages/)
121
- * [Subscribing for events in rails_event_store](https://blog.arkency.com/2015/06/subscribing-for-events-in-rails-event-store/)
122
- * [Testing an Event Sourced application](https://blog.arkency.com/2015/07/testing-event-sourced-application/)
123
- * [Testing Event Sourced application - the read side](https://blog.arkency.com/2015/09/testing-event-sourced-application-the-read-side/)
124
- * [One event to rule them all](https://blog.arkency.com/2016/01/one-event-to-rule-them-all/)
5
+ For configuration & usage documentation see [Event Sourcing with AggregateRoot](https://railseventstore.org/docs/app/).
@@ -26,5 +26,5 @@ Gem::Specification.new do |spec|
26
26
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
27
27
  spec.require_paths = ['lib']
28
28
 
29
- spec.add_dependency 'ruby_event_store', '= 0.42.0'
29
+ spec.add_dependency 'ruby_event_store', '= 1.1.1'
30
30
  end
@@ -65,7 +65,7 @@ module AggregateRoot
65
65
  Module.new do
66
66
  def self.included(host_class)
67
67
  host_class.extend OnDSL
68
- host_class.include AggregateRoot.with_strategy(-> { DefaultApplyStrategy.new })
68
+ host_class.include AggregateRoot.with_strategy(->{ DefaultApplyStrategy.new })
69
69
  end
70
70
  end
71
71
  end
@@ -20,10 +20,14 @@ module AggregateRoot
20
20
  private
21
21
 
22
22
  def handler_name(aggregate, event)
23
- aggregate.class.on_methods.fetch(event.type) { handler_name_by_type(event.type) }
23
+ on_dsl_handler_name(aggregate, event.event_type) || apply_handler_name(event.event_type)
24
24
  end
25
25
 
26
- def handler_name_by_type(event_type)
26
+ def on_dsl_handler_name(aggregate, event_type)
27
+ aggregate.class.on_methods[event_type] if aggregate.class.respond_to?(:on_methods)
28
+ end
29
+
30
+ def apply_handler_name(event_type)
27
31
  "apply_#{Transform.to_snake_case(event_type(event_type))}"
28
32
  end
29
33
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module AggregateRoot
4
- VERSION = "0.42.0"
4
+ VERSION = "1.1.1"
5
5
  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.42.0
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arkency
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-09-30 00:00:00.000000000 Z
11
+ date: 2020-08-20 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.42.0
19
+ version: 1.1.1
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.42.0
26
+ version: 1.1.1
27
27
  description: Event sourced (with Rails Event Store) aggregate root implementation
28
28
  email:
29
29
  - dev@arkency.com
@@ -66,7 +66,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
66
66
  - !ruby/object:Gem::Version
67
67
  version: '0'
68
68
  requirements: []
69
- rubygems_version: 3.0.6
69
+ rubygems_version: 3.0.3
70
70
  signing_key:
71
71
  specification_version: 4
72
72
  summary: Event sourced (with Rails Event Store) aggregate root implementation