ruby_event_store 0.4.0 → 0.5.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: 469ba42eaa17c3da62c4982cb2faf4fa2f247da7
4
- data.tar.gz: 3bd2294568ef5228c4dfe3887e84b26efd5b1c89
3
+ metadata.gz: 154e81d7d982c34b92400ed0fd52e37e7c1ba5de
4
+ data.tar.gz: ec1660f106a05c033c5570cecfe45ae45a648114
5
5
  SHA512:
6
- metadata.gz: 073ae3f2ed7e25f2acad23b5deb7991866b4f76e01e41f8d015a1760780f15882ea596431d2e664dde644b416b7c6a0faf78875fefd12d482882d33091e06892
7
- data.tar.gz: a87826352248c9f50e38dfffd3f4f4a1474243d74fdb924ad66d49b41d20e359b2d9171b3d22085da7cb2e3ec01e059b8bb8091995102cce812feb3344f856ac
6
+ metadata.gz: 97ce3e03d40b9c95fcaf322324a1efe146f2d02647671937af37030271957ab0448657e19c08223649fa03c3b9961ef10c966ddbeaf7aa1c0095e3bf6d7b363e
7
+ data.tar.gz: e15c18b34e6e661565754e84004ec22e29519f759b188ca3093c466d47f4e7d2af897df0d6935fbfd77be86f32bf5b108e25b50c09ebe6d55f27950df9e21116
data/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  ### HEAD
2
2
 
3
+ ### 0.5.0 (21.03.2016)
4
+
5
+ * Change: Event class refactoring to make default values more explicit PR #11
6
+ * Change: No nils, use symbols instead - :any & :none replaced meaningless nil value
7
+ * Change: Let event broker to be given as a dependency
8
+ * Change: Remove Event#event_type - use class instead PR #10
9
+
3
10
  ### 0.4.0 (17.03.2016)
4
11
 
5
12
  * Change: Use class names to subscribe events PR #8
@@ -1,5 +1,6 @@
1
1
  module RubyEventStore
2
2
  WrongExpectedEventVersion = Class.new(StandardError)
3
+ InvalidExpectedVersion = Class.new(StandardError)
3
4
  IncorrectStreamData = Class.new(StandardError)
4
5
  EventNotFound = Class.new(StandardError)
5
6
  SubscriberNotExist = Class.new(StandardError)
@@ -3,25 +3,20 @@ require 'securerandom'
3
3
  module RubyEventStore
4
4
  class Event
5
5
 
6
- def initialize(**args)
7
- attributes(args).each do |key, value|
6
+ def initialize(event_id: SecureRandom.uuid, metadata: {}, **data)
7
+ data.each do |key, value|
8
8
  singleton_class.__send__(:define_method, key) { value }
9
9
  end
10
10
 
11
- @event_id = (args[:event_id] || generate_id).to_s
12
- @metadata = args[:metadata] || {}
13
- @data = attributes(args)
11
+ @event_id = event_id.to_s
12
+ @metadata = metadata
13
+ @data = data
14
14
  @metadata[:timestamp] ||= Time.now.utc
15
15
  end
16
16
  attr_reader :event_id, :metadata, :data
17
17
 
18
- def event_type
19
- self.class
20
- end
21
-
22
18
  def to_h
23
19
  {
24
- event_type: event_type.name,
25
20
  event_id: event_id,
26
21
  metadata: metadata,
27
22
  data: data
@@ -37,15 +32,5 @@ module RubyEventStore
37
32
  end
38
33
 
39
34
  alias_method :eql?, :==
40
-
41
- private
42
-
43
- def attributes(args)
44
- args.reject { |k| [:event_id, :metadata].include? k }
45
- end
46
-
47
- def generate_id
48
- SecureRandom.uuid
49
- end
50
35
  end
51
36
  end
@@ -1,23 +1,27 @@
1
1
  module RubyEventStore
2
2
  class Facade
3
- def initialize(repository)
4
- @repository = repository
3
+ def initialize(repository, event_broker = PubSub::Broker.new)
4
+ @repository = repository
5
+ @event_broker = event_broker
5
6
  end
6
- attr_reader :repository
7
+ attr_reader :repository, :event_broker
7
8
 
8
- def publish_event(event_data, stream_name = GLOBAL_STREAM, expected_version = nil)
9
- event = append_to_stream(stream_name, event_data, expected_version)
9
+ def publish_event(event, stream_name = GLOBAL_STREAM, expected_version = :any)
10
+ append_to_stream(stream_name, event, expected_version)
10
11
  event_broker.notify_subscribers(event)
12
+ :ok
11
13
  end
12
14
 
13
- def append_to_stream(stream_name, event_data, expected_version = nil)
14
- raise WrongExpectedEventVersion if version_incorrect?(stream_name, expected_version)
15
- repository.create(event_data, stream_name)
15
+ def append_to_stream(stream_name, event, expected_version = :any)
16
+ validate_expected_version(stream_name, expected_version)
17
+ repository.create(event, stream_name)
18
+ :ok
16
19
  end
17
20
 
18
21
  def delete_stream(stream_name)
19
22
  raise IncorrectStreamData if stream_name.nil? || stream_name.empty?
20
23
  repository.delete_stream(stream_name)
24
+ :ok
21
25
  end
22
26
 
23
27
  def read_events_forward(stream_name, start, count)
@@ -78,18 +82,22 @@ module RubyEventStore
78
82
  attr_reader :start, :count
79
83
  end
80
84
 
81
- def event_broker
82
- @event_broker ||= PubSub::Broker.new
83
- end
84
-
85
- def version_incorrect?(stream_name, expected_version)
86
- unless expected_version.nil?
87
- find_last_event_version(stream_name) != expected_version
85
+ def validate_expected_version(stream_name, expected_version)
86
+ raise InvalidExpectedVersion if expected_version.nil?
87
+ case expected_version
88
+ when :any
89
+ return
90
+ when :none
91
+ return if last_stream_event_id(stream_name).nil?
92
+ else
93
+ return if last_stream_event_id(stream_name).equal?(expected_version)
88
94
  end
95
+ raise WrongExpectedEventVersion
89
96
  end
90
97
 
91
- def find_last_event_version(stream_name)
92
- repository.last_stream_event(stream_name).event_id
98
+ def last_stream_event_id(stream_name)
99
+ last = repository.last_stream_event(stream_name)
100
+ last.event_id if last
93
101
  end
94
102
  end
95
103
  end
@@ -18,7 +18,7 @@ module RubyEventStore
18
18
  end
19
19
 
20
20
  def notify_subscribers(event)
21
- all_subscribers_for(event.event_type).each do |subscriber|
21
+ all_subscribers_for(event.class).each do |subscriber|
22
22
  subscriber.handle_event(event)
23
23
  end
24
24
  end
@@ -14,9 +14,9 @@ RSpec.shared_examples :event_repository do |repository_class|
14
14
  it 'created event is stored in given stream' do
15
15
  expected_event = TestDomainEvent.new(data: {})
16
16
  created = repository.create(expected_event, 'stream')
17
- expect_to_be_like_event(created, expected_event)
18
- expect_to_be_like_event(repository.read_all_streams_forward(:head, 1).first, expected_event)
19
- expect_to_be_like_event(repository.read_stream_events_forward('stream').first, expected_event)
17
+ expect(created).to eq(expected_event)
18
+ expect(repository.read_all_streams_forward(:head, 1).first).to eq(expected_event)
19
+ expect(repository.read_stream_events_forward('stream').first).to eq(expected_event)
20
20
  expect(repository.read_stream_events_forward('other_stream')).to be_empty
21
21
  end
22
22
 
@@ -94,12 +94,4 @@ RSpec.shared_examples :event_repository do |repository_class|
94
94
  expect(repository.read_all_streams_backward('5', 4).map(&:event_id)).to eq ['4','3','2','1']
95
95
  expect(repository.read_all_streams_backward('5', 100).map(&:event_id)).to eq ['4','3','2','1']
96
96
  end
97
-
98
- private
99
-
100
- def expect_to_be_like_event(actual, expected)
101
- expect(actual.event_type).to eq expected.event_type
102
- expect(actual.data).to eq expected.data
103
- if expected.event_id then expect(actual.event_id).to eq expected.event_id else true end
104
- end
105
97
  end
@@ -1,3 +1,3 @@
1
1
  module RubyEventStore
2
- VERSION = '0.4.0'
2
+ VERSION = '0.5.0'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_event_store
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.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-03-17 00:00:00.000000000 Z
12
+ date: 2016-03-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler