rails_event_store 0.1.4 → 0.2.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
2
  SHA1:
3
- metadata.gz: 46e6eb0b69f0cbd500cf7dec66c0f9a13fb1951c
4
- data.tar.gz: c073b7960a7cce76edfda8ab85e6b9b0465438ea
3
+ metadata.gz: d7cd8418290dab99d162367189c7c6fb7bd6b581
4
+ data.tar.gz: 33ef529d3cb2c33744de40c986b58d00dab9afe3
5
5
  SHA512:
6
- metadata.gz: 7d008de3983e51a6c20a38d6a90053570808ab86b0ea1e112b7bbdd2733db46fecbff69ae446ea07216e830e0cfa6f45bb350a72104a28b67128ae38b970042d
7
- data.tar.gz: 4753b07f23e57befb6171c9679fa04e6896b1f5d5bdfe185bf58d44ed5c26443a651bb4e15b7b1a2d882260ca8aa194ded54a3ba7b89cce77cc138023df0f0ac
6
+ metadata.gz: d4f1f8817d52951672bc55d8779b2a8fce49790ea925440335c7f5f7537827bb2d0cf1679110c9bb44bb9c7648da396d691e099e77f01068c6860c5f469eb050
7
+ data.tar.gz: e88b5409772430c1c02818d1bdb9661a73d8061c4f57e7a88318044c1854e1eaaec6606c382fbfeb196b1985f147815f627db2dfd1be1fd80742a5e8f0a6bdd6
@@ -1,5 +1,12 @@
1
1
  ### HEAD
2
2
 
3
+ ### 0.2.0 (29.01.2016)
4
+
5
+ * Removed EventEntity class
6
+ * All read & returned events are not instances of RailsEventStore::Event class
7
+ * RailsEventStore::Event class allows for easier events creation and access to data attributes
8
+ * AggregateRoot module & repository extracted to new gem (aggregate_root)
9
+
3
10
  ### 0.1.2 (26.05.2015)
4
11
 
5
12
  * Moved most core features to the separate gem `ruby_event_store`. We left only rails related implementation here.
data/README.md CHANGED
@@ -134,6 +134,12 @@ invoice = InvoiceReadModel.new
134
134
  client.subscribe_to_all_events(invoice)
135
135
  ```
136
136
 
137
+ #### Building an event sourced application with RailsEventStore gem
138
+
139
+ ArrgegateRoot module & AggregateReporitory have been extracted from RailsEventStore to separate gem.
140
+ See [aggregate_root](https://github.com/arkency/aggregate_root) gem readme to find help how to start.
141
+ Also [this example](https://github.com/mpraglowski/cqrs-es-sample-with-res) might be useful.
142
+
137
143
  #### Resources
138
144
 
139
145
  There're already few blogposts about Rails EventStore. Check them out:
@@ -1,13 +1,12 @@
1
- require 'rails_event_store/event_entity'
1
+ require 'ruby_event_store'
2
+
2
3
  require 'rails_event_store/models/event'
3
4
  require 'rails_event_store/generators/migrate_generator'
4
5
  require 'rails_event_store/generators/templates/migration_template'
5
6
  require 'rails_event_store/version'
6
7
  require 'rails_event_store/event'
7
8
  require 'rails_event_store/repositories/event_repository'
8
- require 'rails_event_store/repositories/aggregate_repository'
9
9
  require 'rails_event_store/event_handlers/slack_event_handler'
10
- require 'rails_event_store/aggregate_root'
11
10
  require 'rails_event_store/errors'
12
11
  require 'rails_event_store/client'
13
12
  require 'rails_event_store/constants'
@@ -1,3 +1,19 @@
1
- require 'ruby_event_store'
1
+ module RailsEventStore
2
+ class Event < RubyEventStore::Event
3
+ def initialize(**args)
4
+ attributes = args.except(:event_type, :event_id, :metadata)
5
+ singleton_class = (class << self; self; end)
6
+ attributes.each do |key, value|
7
+ singleton_class.send(:define_method, key) { value }
8
+ end
2
9
 
3
- RailsEventStore::Event = RubyEventStore::Event
10
+ event_data = {
11
+ event_type: args[:event_type] || self.class.name,
12
+ data: attributes,
13
+ }
14
+ event_data[:event_id] = args[:event_id] if args.key?(:event_id)
15
+ event_data[:metadata] = args[:metadata] if args.key?(:metadata)
16
+ super(event_data)
17
+ end
18
+ end
19
+ end
@@ -8,11 +8,11 @@ module RailsEventStore
8
8
  attr_reader :adapter
9
9
 
10
10
  def find(condition)
11
- build_event_entity adapter.where(condition).first
11
+ build_event_entity(adapter.where(condition).first)
12
12
  end
13
13
 
14
14
  def create(data)
15
- build_event_entity adapter.create(data)
15
+ build_event_entity(adapter.create(data))
16
16
  rescue ActiveRecord::RecordNotUnique
17
17
  raise EventCannotBeSaved
18
18
  end
@@ -23,33 +23,29 @@ module RailsEventStore
23
23
  end
24
24
 
25
25
  def get_all_events
26
- adapter.order('id ASC').order('stream').all.map &method(:build_event_entity)
26
+ adapter.order('id ASC').order('stream').all.map(&method(:build_event_entity))
27
27
  end
28
28
 
29
29
  def last_stream_event(stream_name)
30
- build_event_entity adapter.where(stream: stream_name).last
30
+ build_event_entity(adapter.where(stream: stream_name).last)
31
31
  end
32
32
 
33
33
  def load_all_events_forward(stream_name)
34
- adapter.where(stream: stream_name).order('id ASC').map &method(:build_event_entity)
34
+ adapter.where(stream: stream_name).order('id ASC').map(&method(:build_event_entity))
35
35
  end
36
36
 
37
37
  def load_events_batch(stream_name, start_point, count)
38
- adapter.where('id >= ? AND stream = ?', start_point, stream_name).limit(count).map &method(:build_event_entity)
38
+ adapter.where('id >= ? AND stream = ?', start_point, stream_name).limit(count).map(&method(:build_event_entity))
39
39
  end
40
40
 
41
41
  private
42
42
 
43
43
  def build_event_entity(record)
44
- ::RailsEventStore::EventEntity.new(
45
- id: record.id,
46
- stream: record.stream,
44
+ return nil unless record
45
+ ::RailsEventStore::Event.new(record.data.merge(
47
46
  event_type: record.event_type,
48
47
  event_id: record.event_id,
49
- metadata: record.metadata,
50
- data: record.data,
51
- created_at: record.created_at
52
- )
48
+ metadata: record.metadata))
53
49
  end
54
50
 
55
51
  end
@@ -1,3 +1,3 @@
1
1
  module RailsEventStore
2
- VERSION = '0.1.4'
2
+ VERSION = '0.2.0'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_event_store
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - rybex
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2016-01-27 00:00:00.000000000 Z
12
+ date: 2016-01-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -153,17 +153,14 @@ files:
153
153
  - README.md
154
154
  - Rakefile
155
155
  - lib/rails_event_store.rb
156
- - lib/rails_event_store/aggregate_root.rb
157
156
  - lib/rails_event_store/client.rb
158
157
  - lib/rails_event_store/constants.rb
159
158
  - lib/rails_event_store/errors.rb
160
159
  - lib/rails_event_store/event.rb
161
- - lib/rails_event_store/event_entity.rb
162
160
  - lib/rails_event_store/event_handlers/slack_event_handler.rb
163
161
  - lib/rails_event_store/generators/migrate_generator.rb
164
162
  - lib/rails_event_store/generators/templates/migration_template.rb
165
163
  - lib/rails_event_store/models/event.rb
166
- - lib/rails_event_store/repositories/aggregate_repository.rb
167
164
  - lib/rails_event_store/repositories/event_repository.rb
168
165
  - lib/rails_event_store/version.rb
169
166
  - rails_event_store.gemspec
@@ -1,28 +0,0 @@
1
- require 'active_support/inflector'
2
-
3
- module RailsEventStore
4
- module AggregateRoot
5
- def apply(event)
6
- apply_event(event)
7
- unpublished_events << event
8
- end
9
-
10
- def apply_old_event(event)
11
- apply_event(event)
12
- end
13
-
14
- def unpublished_events
15
- @unpublished_events ||= []
16
- end
17
-
18
- private
19
-
20
- def apply_event(event)
21
- send("apply_#{event.event_type.underscore.gsub('/', '_')}", event)
22
- end
23
-
24
- def generate_uuid
25
- SecureRandom.uuid
26
- end
27
- end
28
- end
@@ -1,10 +0,0 @@
1
- require 'active_model'
2
-
3
- module RailsEventStore
4
- class EventEntity
5
- include ::ActiveModel::Model
6
-
7
- attr_accessor :id, :stream, :event_type, :event_id,
8
- :metadata, :data, :created_at
9
- end
10
- end
@@ -1,28 +0,0 @@
1
- module RailsEventStore
2
- module Repositories
3
- class AggregateRepository
4
- def initialize(event_store = default_event_store)
5
- @event_store = event_store
6
- end
7
-
8
- def store(aggregate)
9
- aggregate.unpublished_events.each do |event|
10
- event_store.publish_event(event, aggregate.id)
11
- end
12
- end
13
-
14
- def load(aggregate)
15
- events = event_store.read_all_events(aggregate.id)
16
- events.each do |event|
17
- aggregate.apply_old_event(event)
18
- end
19
- end
20
-
21
- attr_accessor :event_store
22
-
23
- def default_event_store
24
- Client.new
25
- end
26
- end
27
- end
28
- end