@@ -5,19 +5,21 @@ module Issue
55
66 class << self
77 def decide ( command , state )
8- case command
9- when CreateIssue
10- open ( state )
11- when ResolveIssue
12- resolve ( state )
13- when CloseIssue
14- close ( state )
15- when ReopenIssue
16- reopen ( state )
17- when StartIssueProgress
18- start ( state )
19- when StopIssueProgress
20- stop ( state )
8+ case [ command , state ]
9+ in [ CreateIssue , State ( id :, status : nil ) ]
10+ [ IssueOpened . new ( data : { issue_id : id } ) ]
11+ in [ ResolveIssue , State ( id :, status : :open | :in_progress | :reopened ) ]
12+ [ IssueResolved . new ( data : { issue_id : id } ) ]
13+ in [ CloseIssue , State ( id :, status : :open | :in_progress | :resolved | :reopened ) ]
14+ [ IssueClosed . new ( data : { issue_id : id } ) ]
15+ in [ ReopenIssue , State ( id :, status : :resolved | :closed ) ]
16+ [ IssueReopened . new ( data : { issue_id : id } ) ]
17+ in [ StartIssueProgress , State ( id :, status : :open | :reopened ) ]
18+ [ IssueProgressStarted . new ( data : { issue_id : id } ) ]
19+ in [ StopIssueProgress , State ( id :, status : :in_progress ) ]
20+ [ IssueProgressStopped . new ( data : { issue_id : id } ) ]
21+ else
22+ [ InvalidTransition . new ]
2123 end
2224 end
2325
@@ -41,56 +43,6 @@ def evolve(state, event)
4143 def initial_state ( id )
4244 State . new ( id : id , status : nil )
4345 end
44-
45- private
46-
47- def open ( state )
48- if state . status
49- InvalidTransition . new
50- else
51- IssueOpened . new ( data : { issue_id : state . id } )
52- end
53- end
54-
55- def resolve ( state )
56- if %i[ open in_progress reopened ] . include? state . status
57- IssueResolved . new ( data : { issue_id : state . id } )
58- else
59- InvalidTransition . new
60- end
61- end
62-
63- def close ( state )
64- if %i[ open in_progress resolved reopened ] . include? state . status
65- IssueClosed . new ( data : { issue_id : state . id } )
66- else
67- InvalidTransition . new
68- end
69- end
70-
71- def reopen ( state )
72- if %i[ resolved closed ] . include? state . status
73- IssueReopened . new ( data : { issue_id : state . id } )
74- else
75- InvalidTransition . new
76- end
77- end
78-
79- def stop ( state )
80- if %i[ in_progress ] . include? state . status
81- IssueProgressStopped . new ( data : { issue_id : state . id } )
82- else
83- InvalidTransition . new
84- end
85- end
86-
87- def start ( state )
88- if %i[ open reopened ] . include? state . status
89- IssueProgressStarted . new ( data : { issue_id : state . id } )
90- else
91- InvalidTransition . new
92- end
93- end
9446 end
9547 end
9648end
0 commit comments