Skip to content

Commit 8983aed

Browse files
committed
Extract repository
1 parent 951989c commit 8983aed

File tree

3 files changed

+42
-25
lines changed

3 files changed

+42
-25
lines changed

examples/duck_typing/lib/project_management.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@
33
require_relative "../../../shared/lib/project_management"
44
require_relative "project_management/handler"
55
require_relative "project_management/issue"
6+
require_relative "project_management/repository"
67
require_relative "project_management/ui"

examples/duck_typing/lib/project_management/handler.rb

Lines changed: 4 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
module ProjectManagement
22
class Handler
33
def initialize(event_store)
4-
@event_store = event_store
4+
@repository = Repository.new(event_store)
55
end
66

77
def call(cmd)
@@ -67,31 +67,10 @@ def resolve(id)
6767

6868
private
6969

70-
def stream_name(id) = "Issue$#{id}"
71-
7270
def load_issue(id)
73-
issue =
74-
@event_store
75-
.read
76-
.stream(stream_name(id))
77-
.reduce(Issue.new) do |issue, event|
78-
case event
79-
when IssueOpened
80-
issue.open
81-
when IssueProgressStarted
82-
issue.start
83-
when IssueProgressStopped
84-
issue.stop
85-
when IssueResolved
86-
issue.resolve
87-
when IssueReopened
88-
issue.reopen
89-
when IssueClosed
90-
issue.close
91-
end
92-
end
93-
94-
@event_store.append(yield(issue), stream_name: stream_name(id))
71+
issue = @repository.load(id, Issue.new)
72+
events = yield(issue)
73+
@repository.store(id, events)
9574
end
9675
end
9776
end
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
module ProjectManagement
2+
class Repository
3+
def initialize(event_store)
4+
@event_store = event_store
5+
end
6+
7+
def load(id, initial_issue)
8+
@event_store
9+
.read
10+
.stream(stream_name(id))
11+
.reduce(initial_issue) do |issue, event|
12+
case event
13+
when IssueOpened
14+
issue.open
15+
when IssueProgressStarted
16+
issue.start
17+
when IssueProgressStopped
18+
issue.stop
19+
when IssueResolved
20+
issue.resolve
21+
when IssueReopened
22+
issue.reopen
23+
when IssueClosed
24+
issue.close
25+
end
26+
end
27+
end
28+
29+
def store(id, events)
30+
@event_store.append(events, stream_name: stream_name(id))
31+
end
32+
33+
private
34+
35+
def stream_name(id) = "Issue$#{id}"
36+
end
37+
end

0 commit comments

Comments
 (0)