ruby_event_store 0.2.0 → 0.3.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: 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