Skip to content

Commit abbbb91

Browse files
committed
Extract repository
1 parent 896411b commit abbbb91

File tree

3 files changed

+28
-9
lines changed

3 files changed

+28
-9
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
require_relative "../../../shared/lib/project_management"
22
require_relative "project_management/handler"
33
require_relative "project_management/issue"
4+
require_relative "project_management/repository"
45
require_relative "project_management/issue_state"

examples/functional/lib/project_management/handler.rb

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
module ProjectManagement
22
class Handler
3-
def initialize(event_store) = @event_store = event_store
3+
def initialize(event_store)
4+
@repository = Repository.new(event_store)
5+
end
46

57
def call(cmd)
68
case cmd
@@ -28,20 +30,14 @@ def stop(id) = with_state(id) { |state| Issue.stop(state) }
2830

2931
private
3032

31-
def stream_name(id) = "Issue$#{id}"
32-
3333
def with_state(id)
34-
state =
35-
@event_store
36-
.read
37-
.stream(stream_name(id))
38-
.reduce(IssueState.initial(id)) { |state, event| state.apply(event) }
34+
state = @repository.load(id, IssueState.initial(id))
3935

4036
case yield(state)
4137
in StandardError
4238
raise Error
4339
in Event => event
44-
@event_store.append(event, stream_name: stream_name(id))
40+
@repository.store(id, event)
4541
end
4642
end
4743
end
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
module ProjectManagement
2+
class Repository
3+
def initialize(event_store)
4+
@event_store = event_store
5+
end
6+
7+
def load(id, initial_state)
8+
@event_store
9+
.read
10+
.stream(stream_name(id))
11+
.reduce(initial_state) { |state, event| state.apply(event) }
12+
end
13+
14+
def store(id, events)
15+
@event_store.append(events, stream_name: stream_name(id))
16+
end
17+
18+
private
19+
20+
def stream_name(id) = "Issue$#{id}"
21+
end
22+
end

0 commit comments

Comments
 (0)