ruby_event_store 0.4.0 → 0.5.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
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