ruby_event_store 0.2.0 → 0.3.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: 9f95db0e815029c6c7fcd916acab4cafeed7b438
4
- data.tar.gz: 009860a36cfcb176063d12f04b8dab1d5c23c1ab
3
+ metadata.gz: 029ad3dcd5fb3e1b025f0702bcb48cf0ed96e5cb
4
+ data.tar.gz: 958e78c130cc76ebffbfa341016f3f0673796d98
5
5
  SHA512:
6
- metadata.gz: c9f1553586e1c380c8e11c3683bcd47e79c760b80ea962f295f689932164d75c32d75e1325e385aeacec32ef742063cbb1f8b820ff7eb4c8687565a1d7418ab5
7
- data.tar.gz: d25334086e1afbdfe4c91576b083ec65a57b5b59b35915c3c126bb497559dfd965561cd9f327f6f472e68ebafc90c05ab6c35661de628e1bbe76016cbf0f9dad
6
+ metadata.gz: 9039b6d85500d4635fcc2331dcae5989defa2d8f6eda64f6f4f8e0e5b501a04f483f7f74705fe4a7a7ca69ed99164b9c1f16ec3a288216a4886cc15b535a776d
7
+ data.tar.gz: 96e7bc7166c8e0bd9b86277c273a90cd8643f07360b5dbf017087f3e00606fb66706f3a5c1005cf051345c382122ec0604d9248f78ae24b3817b28b1b15ff061
data/CHANGELOG.md ADDED
@@ -0,0 +1,16 @@
1
+ ### HEAD
2
+
3
+ ### 0.3.0 (03.03.2016)
4
+
5
+ * Change: read_all_streams won't group_by results by stream name PR #4
6
+ * Change: new way of define attributes of domain event PR #5
7
+ * Change: reading forward and backward, refactored facade interface #6
8
+ * Change: in memory event repository is now part of the gem, with shared specification PR #7
9
+
10
+ ### 0.2.0 (27.01.2016)
11
+
12
+ * Change: Return the event that the repository returns PR #2
13
+
14
+ ### 0.1.0 (26.05.2015)
15
+
16
+ Initial version
@@ -4,4 +4,6 @@ module RubyEventStore
4
4
  EventNotFound = Class.new(StandardError)
5
5
  SubscriberNotExist = Class.new(StandardError)
6
6
  MethodNotDefined = Class.new(StandardError)
7
- end
7
+ InvalidPageStart = Class.new(ArgumentError)
8
+ InvalidPageSize = Class.new(ArgumentError)
9
+ end
@@ -3,11 +3,15 @@ require 'securerandom'
3
3
  module RubyEventStore
4
4
  class Event
5
5
 
6
- def initialize(event_data={})
7
- @event_type = event_data.fetch(:event_type, event_name)
8
- @event_id = event_data.fetch(:event_id, generate_id).to_s
9
- @metadata = event_data.fetch(:metadata, {})
10
- @data = event_data.fetch(:data, {})
6
+ def initialize(**args)
7
+ attributes(args).each do |key, value|
8
+ singleton_class.__send__(:define_method, key) { value }
9
+ end
10
+
11
+ @event_type = args[:event_type] || event_name
12
+ @event_id = (args[:event_id] || generate_id).to_s
13
+ @metadata = (args[:metadata] || {}).merge!(timestamp)
14
+ @data = attributes(args)
11
15
  end
12
16
  attr_reader :event_type, :event_id, :metadata, :data
13
17
 
@@ -15,15 +19,19 @@ module RubyEventStore
15
19
  {
16
20
  event_type: event_type,
17
21
  event_id: event_id,
18
- metadata: metadata.merge!(publish_time),
22
+ metadata: metadata,
19
23
  data: data
20
24
  }
21
25
  end
22
26
 
23
27
  private
24
28
 
25
- def publish_time
26
- { published_at: Time.now.utc }
29
+ def attributes(args)
30
+ args.reject { |k| [:event_type, :event_id, :metadata].include? k }
31
+ end
32
+
33
+ def timestamp
34
+ { timestamp: Time.now.utc }
27
35
  end
28
36
 
29
37
  def generate_id
@@ -1,29 +1,55 @@
1
1
  module RubyEventStore
2
2
  class Facade
3
-
4
3
  def initialize(repository)
5
4
  @repository = repository
6
5
  end
7
6
  attr_reader :repository
8
7
 
9
8
  def publish_event(event_data, stream_name = GLOBAL_STREAM, expected_version = nil)
10
- append_event_to_stream(event_data, stream_name, expected_version)
9
+ event = append_to_stream(stream_name, event_data, expected_version)
10
+ event_broker.notify_subscribers(event)
11
+ end
12
+
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)
11
16
  end
12
17
 
13
18
  def delete_stream(stream_name)
14
- delete_stream_events(stream_name)
19
+ raise IncorrectStreamData if stream_name.nil? || stream_name.empty?
20
+ repository.delete_stream(stream_name)
21
+ end
22
+
23
+ def read_events_forward(stream_name, start, count)
24
+ raise IncorrectStreamData if stream_name.nil? || stream_name.empty?
25
+ page = Page.new(repository, start, count)
26
+ repository.read_events_forward(stream_name, page.start, page.count)
27
+ end
28
+
29
+ def read_events_backward(stream_name, start, count)
30
+ raise IncorrectStreamData if stream_name.nil? || stream_name.empty?
31
+ page = Page.new(repository, start, count)
32
+ repository.read_events_backward(stream_name, page.start, page.count)
33
+ end
34
+
35
+ def read_stream_events_forward(stream_name)
36
+ raise IncorrectStreamData if stream_name.nil? || stream_name.empty?
37
+ repository.read_stream_events_forward(stream_name)
15
38
  end
16
39
 
17
- def read_events(stream_name, start, count)
18
- read_events_batch(stream_name, start, count)
40
+ def read_stream_events_backward(stream_name)
41
+ raise IncorrectStreamData if stream_name.nil? || stream_name.empty?
42
+ repository.read_stream_events_backward(stream_name)
19
43
  end
20
44
 
21
- def read_all_events(stream_name)
22
- read_all_stream_events(stream_name)
45
+ def read_all_streams_forward(start, count)
46
+ page = Page.new(repository, start, count)
47
+ repository.read_all_streams_forward(page.start, page.count)
23
48
  end
24
49
 
25
- def read_all_streams
26
- read_all_events_from_store
50
+ def read_all_streams_backward(start, count)
51
+ page = Page.new(repository, start, count)
52
+ repository.read_all_streams_backward(page.start, page.count)
27
53
  end
28
54
 
29
55
  def subscribe(subscriber, event_types)
@@ -36,29 +62,34 @@ module RubyEventStore
36
62
 
37
63
  private
38
64
 
39
- def append_event_to_stream(event_data, stream_name, expected_version)
40
- event = Actions::AppendEventToStream.new(repository).call(stream_name, event_data, expected_version)
41
- event_broker.notify_subscribers(event)
42
- end
43
-
44
- def delete_stream_events(stream_name)
45
- Actions::DeleteStreamEvents.new(repository).call(stream_name)
46
- end
47
-
48
- def read_events_batch(stream_name, start, count)
49
- Actions::ReadEventsBatch.new(repository).call(stream_name, start, count)
65
+ class Page
66
+ def initialize(repository, start, count)
67
+ if start.instance_of?(Symbol)
68
+ raise InvalidPageStart unless [:head].include?(start)
69
+ else
70
+ start = start.to_s
71
+ raise InvalidPageStart if start.empty?
72
+ raise EventNotFound unless repository.has_event?(start)
73
+ end
74
+ raise InvalidPageSize unless count > 0
75
+ @start = start
76
+ @count = count
77
+ end
78
+ attr_reader :start, :count
50
79
  end
51
80
 
52
- def read_all_stream_events(stream_name)
53
- Actions::ReadAllEvents.new(repository).call(stream_name)
81
+ def event_broker
82
+ @event_broker ||= PubSub::Broker.new
54
83
  end
55
84
 
56
- def read_all_events_from_store
57
- Actions::ReadAllStreams.new(repository).call
85
+ def version_incorrect?(stream_name, expected_version)
86
+ unless expected_version.nil?
87
+ find_last_event_version(stream_name) != expected_version
88
+ end
58
89
  end
59
90
 
60
- def event_broker
61
- @event_broker ||= PubSub::Broker.new
91
+ def find_last_event_version(stream_name)
92
+ repository.last_stream_event(stream_name).event_id
62
93
  end
63
94
  end
64
- end
95
+ end
@@ -0,0 +1,71 @@
1
+ require 'ostruct'
2
+
3
+ module RubyEventStore
4
+ class InMemoryRepository
5
+ def initialize
6
+ @all = Array.new
7
+ @streams = Hash.new
8
+ end
9
+
10
+ def create(event, stream_name)
11
+ stream = read_stream_events_forward(stream_name)
12
+ all.push(event)
13
+ stream.push(event)
14
+ streams[stream_name] = stream
15
+ event
16
+ end
17
+
18
+ def delete_stream(stream_name)
19
+ removed = read_stream_events_forward(stream_name).map(&:event_id)
20
+ streams.delete(stream_name)
21
+ all.delete_if{|ev| removed.include?(ev.event_id)}
22
+ end
23
+
24
+ def has_event?(event_id)
25
+ all.any?{ |item| item.event_id.eql?(event_id) }
26
+ end
27
+
28
+ def last_stream_event(stream_name)
29
+ read_stream_events_forward(stream_name).last
30
+ end
31
+
32
+ def read_events_forward(stream_name, start_event_id, count)
33
+ source = read_stream_events_forward(stream_name)
34
+ read_batch(source, start_event_id, count)
35
+ end
36
+
37
+ def read_events_backward(stream_name, start_event_id, count)
38
+ source = read_stream_events_backward(stream_name)
39
+ read_batch(source, start_event_id, count)
40
+ end
41
+
42
+ def read_stream_events_forward(stream_name)
43
+ streams[stream_name] || Array.new
44
+ end
45
+
46
+ def read_stream_events_backward(stream_name)
47
+ read_stream_events_forward(stream_name).reverse
48
+ end
49
+
50
+ def read_all_streams_forward(start_event_id, count)
51
+ read_batch(all, start_event_id, count)
52
+ end
53
+
54
+ def read_all_streams_backward(start_event_id, count)
55
+ read_batch(all.reverse, start_event_id, count)
56
+ end
57
+
58
+ private
59
+ attr_accessor :streams, :all
60
+
61
+ def read_batch(source, start_event_id, count)
62
+ return source[0..count-1] if start_event_id.equal?(:head)
63
+ start_index = index_of(source, start_event_id)
64
+ source[start_index+1..start_index+count]
65
+ end
66
+
67
+ def index_of(source, event_id)
68
+ source.index{ |item| item.event_id.eql?(event_id) }
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,105 @@
1
+ RSpec.shared_examples :event_repository do |repository_class|
2
+ TestDomainEvent = Class.new(RubyEventStore::Event)
3
+ subject(:repository) { repository_class.new }
4
+
5
+ it 'just created is empty' do
6
+ expect(repository.read_all_streams_forward(:head, 1)).to be_empty
7
+ end
8
+
9
+ it 'what you get is what you gave' do
10
+ created = repository.create(event = TestDomainEvent.new, 'stream')
11
+ expect(created.object_id).to eq event.object_id
12
+ end
13
+
14
+ it 'created event is stored in given stream' do
15
+ expected_event = {event_type: 'TestDomainEvent', data: {}}
16
+ created = repository.create(TestDomainEvent.new, '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)
20
+ expect(repository.read_stream_events_forward('other_stream')).to be_empty
21
+ end
22
+
23
+ it 'does not have deleted streams' do
24
+ repository.create(TestDomainEvent.new, 'stream')
25
+ repository.create(TestDomainEvent.new, 'other_stream')
26
+
27
+ expect(repository.read_stream_events_forward('stream').count).to eq 1
28
+ expect(repository.read_stream_events_forward('other_stream').count).to eq 1
29
+ expect(repository.read_all_streams_forward(:head, 10).count).to eq 2
30
+
31
+ repository.delete_stream('stream')
32
+ expect(repository.read_stream_events_forward('stream')).to be_empty
33
+ expect(repository.read_stream_events_forward('other_stream').count).to eq 1
34
+ expect(repository.read_all_streams_forward(:head, 10).count).to eq 1
35
+ end
36
+
37
+ it 'has or has not domain event' do
38
+ repository.create(TestDomainEvent.new(event_id: 'just an id'), 'stream')
39
+
40
+ expect(repository.has_event?('just an id')).to be_truthy
41
+ expect(repository.has_event?('any other id')).to be_falsey
42
+ end
43
+
44
+ it 'knows last event in stream' do
45
+ repository.create(TestDomainEvent.new(event_id: 'event 1'), 'stream')
46
+ repository.create(TestDomainEvent.new(event_id: 'event 2'), 'stream')
47
+
48
+ expect(repository.last_stream_event('stream').event_id).to eq('event 2')
49
+ expect(repository.last_stream_event('other_stream')).to be_nil
50
+ end
51
+
52
+ it 'reads batch of events from stream forward & backward' do
53
+ event_ids = (1..10).to_a.map(&:to_s)
54
+ event_ids.each do |id|
55
+ repository.create(TestDomainEvent.new(event_id: id), 'stream')
56
+ end
57
+
58
+ expect(repository.read_events_forward('stream', :head, 3).map(&:event_id)).to eq ['1','2','3']
59
+ expect(repository.read_events_forward('stream', :head, 100).map(&:event_id)).to eq event_ids
60
+ expect(repository.read_events_forward('stream', '5', 4).map(&:event_id)).to eq ['6','7','8','9']
61
+ expect(repository.read_events_forward('stream', '5', 100).map(&:event_id)).to eq ['6','7','8','9','10']
62
+
63
+ expect(repository.read_events_backward('stream', :head, 3).map(&:event_id)).to eq ['10','9','8']
64
+ expect(repository.read_events_backward('stream', :head, 100).map(&:event_id)).to eq event_ids.reverse
65
+ expect(repository.read_events_backward('stream', '5', 4).map(&:event_id)).to eq ['4','3','2','1']
66
+ expect(repository.read_events_backward('stream', '5', 100).map(&:event_id)).to eq ['4','3','2','1']
67
+ end
68
+
69
+
70
+ it 'reads all stream events forward & backward' do
71
+ repository.create(TestDomainEvent.new(event_id: '1'), 'stream')
72
+ repository.create(TestDomainEvent.new(event_id: '2'), 'other_stream')
73
+ repository.create(TestDomainEvent.new(event_id: '3'), 'stream')
74
+ repository.create(TestDomainEvent.new(event_id: '4'), 'other_stream')
75
+ repository.create(TestDomainEvent.new(event_id: '5'), 'other_stream')
76
+
77
+ expect(repository.read_stream_events_forward('stream').map(&:event_id)).to eq ['1','3']
78
+ expect(repository.read_stream_events_backward('stream').map(&:event_id)).to eq ['3','1']
79
+ end
80
+
81
+ it 'reads batch of events from all streams forward & backward' do
82
+ event_ids = (1..10).to_a.map(&:to_s)
83
+ event_ids.each do |id|
84
+ repository.create(TestDomainEvent.new(event_id: id), SecureRandom.uuid)
85
+ end
86
+
87
+ expect(repository.read_all_streams_forward(:head, 3).map(&:event_id)).to eq ['1','2','3']
88
+ expect(repository.read_all_streams_forward(:head, 100).map(&:event_id)).to eq event_ids
89
+ expect(repository.read_all_streams_forward('5', 4).map(&:event_id)).to eq ['6','7','8','9']
90
+ expect(repository.read_all_streams_forward('5', 100).map(&:event_id)).to eq ['6','7','8','9','10']
91
+
92
+ expect(repository.read_all_streams_backward(:head, 3).map(&:event_id)).to eq ['10','9','8']
93
+ expect(repository.read_all_streams_backward(:head, 100).map(&:event_id)).to eq event_ids.reverse
94
+ expect(repository.read_all_streams_backward('5', 4).map(&:event_id)).to eq ['4','3','2','1']
95
+ expect(repository.read_all_streams_backward('5', 100).map(&:event_id)).to eq ['4','3','2','1']
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.key? :event_id then expect(actual.event_id).to eq expected[:event_id] else true end
104
+ end
105
+ end
@@ -1,3 +1,3 @@
1
1
  module RubyEventStore
2
- VERSION = '0.2.0'
2
+ VERSION = '0.3.0'
3
3
  end
@@ -1,9 +1,5 @@
1
- require 'ruby_event_store/actions/append_event_to_stream'
2
- require 'ruby_event_store/actions/read_all_events'
3
- require 'ruby_event_store/actions/read_events_batch'
4
- require 'ruby_event_store/actions/delete_stream_events'
5
- require 'ruby_event_store/actions/read_all_streams'
6
1
  require 'ruby_event_store/pub_sub/broker'
2
+ require 'ruby_event_store/in_memory_repository'
7
3
  require 'ruby_event_store/errors'
8
4
  require 'ruby_event_store/constants'
9
5
  require 'ruby_event_store/facade'
@@ -9,9 +9,9 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ["rybex", "mpraglowski"]
10
10
  spec.email = ["tomek.rybka@gmail.com", "m@praglowski.com"]
11
11
 
12
- spec.summary = %q{Implementation of Event Store in Ruby}
12
+ spec.summary = %q{Event Store in Ruby}
13
13
  spec.description = %q{Implementation of Event Store in Ruby}
14
- spec.homepage = ''
14
+ spec.homepage = 'https://github.com/arkency/ruby_event_store'
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
17
  spec.bindir = "exe"
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_development_dependency "bundler", "~> 1.8"
22
22
  spec.add_development_dependency "rake", "~> 10.0"
23
- spec.add_development_dependency 'rspec'
24
- spec.add_development_dependency 'pry'
23
+ spec.add_development_dependency 'rspec', "~> 3.2"
24
+ spec.add_development_dependency 'pry', "~> 0"
25
25
  spec.add_development_dependency 'mutant-rspec', '~> 0.7.9'
26
26
  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.2.0
4
+ version: 0.3.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-03-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -43,28 +43,28 @@ dependencies:
43
43
  name: rspec
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
- - - ">="
46
+ - - "~>"
47
47
  - !ruby/object:Gem::Version
48
- version: '0'
48
+ version: '3.2'
49
49
  type: :development
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
- - - ">="
53
+ - - "~>"
54
54
  - !ruby/object:Gem::Version
55
- version: '0'
55
+ version: '3.2'
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: pry
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
- - - ">="
60
+ - - "~>"
61
61
  - !ruby/object:Gem::Version
62
62
  version: '0'
63
63
  type: :development
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
- - - ">="
67
+ - - "~>"
68
68
  - !ruby/object:Gem::Version
69
69
  version: '0'
70
70
  - !ruby/object:Gem::Dependency
@@ -91,23 +91,21 @@ extra_rdoc_files: []
91
91
  files:
92
92
  - ".gitignore"
93
93
  - ".travis.yml"
94
+ - CHANGELOG.md
94
95
  - Gemfile
95
96
  - README.md
96
97
  - Rakefile
97
98
  - lib/ruby_event_store.rb
98
- - lib/ruby_event_store/actions/append_event_to_stream.rb
99
- - lib/ruby_event_store/actions/delete_stream_events.rb
100
- - lib/ruby_event_store/actions/read_all_events.rb
101
- - lib/ruby_event_store/actions/read_all_streams.rb
102
- - lib/ruby_event_store/actions/read_events_batch.rb
103
99
  - lib/ruby_event_store/constants.rb
104
100
  - lib/ruby_event_store/errors.rb
105
101
  - lib/ruby_event_store/event.rb
106
102
  - lib/ruby_event_store/facade.rb
103
+ - lib/ruby_event_store/in_memory_repository.rb
107
104
  - lib/ruby_event_store/pub_sub/broker.rb
105
+ - lib/ruby_event_store/spec/event_repository_lint.rb
108
106
  - lib/ruby_event_store/version.rb
109
107
  - ruby_event_store.gemspec
110
- homepage: ''
108
+ homepage: https://github.com/arkency/ruby_event_store
111
109
  licenses: []
112
110
  metadata: {}
113
111
  post_install_message:
@@ -126,8 +124,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
126
124
  version: '0'
127
125
  requirements: []
128
126
  rubyforge_project:
129
- rubygems_version: 2.2.5
127
+ rubygems_version: 2.2.3
130
128
  signing_key:
131
129
  specification_version: 4
132
- summary: Implementation of Event Store in Ruby
130
+ summary: Event Store in Ruby
133
131
  test_files: []
@@ -1,32 +0,0 @@
1
- module RubyEventStore
2
- module Actions
3
- class AppendEventToStream
4
-
5
- def initialize(repository)
6
- @repository = repository
7
- end
8
-
9
- def call(stream_name, event, expected_version)
10
- raise WrongExpectedEventVersion if version_incorrect?(stream_name, expected_version)
11
- save_event(event, stream_name)
12
- end
13
-
14
- private
15
- attr_reader :repository
16
-
17
- def version_incorrect?(stream_name, expected_version)
18
- unless expected_version.nil?
19
- find_last_event_version(stream_name) != expected_version
20
- end
21
- end
22
-
23
- def find_last_event_version(stream_name)
24
- repository.last_stream_event(stream_name).event_id
25
- end
26
-
27
- def save_event(event, stream_name)
28
- repository.create(event.to_h.merge!(stream: stream_name))
29
- end
30
- end
31
- end
32
- end
@@ -1,23 +0,0 @@
1
- module RubyEventStore
2
- module Actions
3
- class DeleteStreamEvents
4
-
5
- def initialize(repository)
6
- @repository = repository
7
- end
8
-
9
- def call(stream_name)
10
- raise IncorrectStreamData if stream_name.nil? || stream_name.empty?
11
- delete_stream(stream_name)
12
- end
13
-
14
- private
15
- attr_reader :repository
16
-
17
- def delete_stream(stream_name)
18
- repository.delete({stream: stream_name})
19
- end
20
- end
21
- end
22
- end
23
-
@@ -1,22 +0,0 @@
1
- module RubyEventStore
2
- module Actions
3
- class ReadAllEvents
4
-
5
- def initialize(repository)
6
- @repository = repository
7
- end
8
-
9
- def call(stream_name)
10
- raise IncorrectStreamData if stream_name.nil? || stream_name.empty?
11
- get_all_events(stream_name)
12
- end
13
-
14
- private
15
- attr_reader :repository
16
-
17
- def get_all_events(stream_name)
18
- repository.load_all_events_forward(stream_name)
19
- end
20
- end
21
- end
22
- end
@@ -1,21 +0,0 @@
1
- module RubyEventStore
2
- module Actions
3
- class ReadAllStreams
4
-
5
- def initialize(repository)
6
- @repository = repository
7
- end
8
-
9
- def call
10
- get_all_events.group_by { |event| event.stream }
11
- end
12
-
13
- private
14
- attr_reader :repository
15
-
16
- def get_all_events
17
- repository.get_all_events
18
- end
19
- end
20
- end
21
- end
@@ -1,29 +0,0 @@
1
- module RubyEventStore
2
- module Actions
3
- class ReadEventsBatch
4
-
5
- def initialize(repository)
6
- @repository = repository
7
- end
8
-
9
- def call(stream_name, start, count)
10
- raise IncorrectStreamData if stream_name.nil? || stream_name.empty?
11
- event = find_event(start)
12
- get_events_batch(stream_name, event.id, count)
13
- end
14
-
15
- private
16
- attr_reader :repository
17
-
18
- def get_events_batch(stream_name, start, count)
19
- repository.load_events_batch(stream_name, start, count)
20
- end
21
-
22
- def find_event(start)
23
- event = repository.find({event_id: start})
24
- raise EventNotFound if event.nil?
25
- event
26
- end
27
- end
28
- end
29
- end