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 +4 -4
- data/CHANGELOG.md +7 -0
- data/lib/ruby_event_store/errors.rb +1 -0
- data/lib/ruby_event_store/event.rb +5 -20
- data/lib/ruby_event_store/facade.rb +25 -17
- data/lib/ruby_event_store/pub_sub/broker.rb +1 -1
- data/lib/ruby_event_store/spec/event_repository_lint.rb +3 -11
- data/lib/ruby_event_store/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 154e81d7d982c34b92400ed0fd52e37e7c1ba5de
|
4
|
+
data.tar.gz: ec1660f106a05c033c5570cecfe45ae45a648114
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
@@ -3,25 +3,20 @@ require 'securerandom'
|
|
3
3
|
module RubyEventStore
|
4
4
|
class Event
|
5
5
|
|
6
|
-
def initialize(**
|
7
|
-
|
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
|
12
|
-
@metadata
|
13
|
-
@data
|
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
|
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(
|
9
|
-
|
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,
|
14
|
-
|
15
|
-
repository.create(
|
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
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
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
|
92
|
-
repository.last_stream_event(stream_name)
|
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
|
@@ -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
|
-
|
18
|
-
|
19
|
-
|
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
|
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
|
+
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-
|
12
|
+
date: 2016-03-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|