Class: Ocak::IssueStateMachine

Inherits:
Object
  • Object
show all
Defined in:
lib/ocak/issue_state_machine.rb

Overview

Encapsulates all valid label transitions for pipeline issue processing. Replaces scattered issues.transition calls with named, intention-revealing methods.

Instance Method Summary collapse

Constructor Details

#initialize(config:, issues:) ⇒ IssueStateMachine

Returns a new instance of IssueStateMachine.



7
8
9
10
# File 'lib/ocak/issue_state_machine.rb', line 7

def initialize(config:, issues:)
  @config = config
  @issues = issues
end

Instance Method Details

#mark_completed(issue_number) ⇒ Object



16
17
18
# File 'lib/ocak/issue_state_machine.rb', line 16

def mark_completed(issue_number)
  @issues&.transition(issue_number, from: @config.label_in_progress, to: @config.label_completed)
end

#mark_failed(issue_number) ⇒ Object



20
21
22
# File 'lib/ocak/issue_state_machine.rb', line 20

def mark_failed(issue_number)
  @issues&.transition(issue_number, from: @config.label_in_progress, to: @config.label_failed)
end

#mark_for_review(issue_number) ⇒ Object



28
29
30
# File 'lib/ocak/issue_state_machine.rb', line 28

def mark_for_review(issue_number)
  @issues&.transition(issue_number, from: @config.label_in_progress, to: @config.label_awaiting_review)
end

#mark_in_progress(issue_number) ⇒ Object



12
13
14
# File 'lib/ocak/issue_state_machine.rb', line 12

def mark_in_progress(issue_number)
  @issues&.transition(issue_number, from: @config.label_ready, to: @config.label_in_progress)
end

#mark_interrupted(issue_number) ⇒ Object



24
25
26
# File 'lib/ocak/issue_state_machine.rb', line 24

def mark_interrupted(issue_number)
  @issues&.transition(issue_number, from: @config.label_in_progress, to: @config.label_ready)
end

#mark_resuming(issue_number) ⇒ Object



32
33
34
# File 'lib/ocak/issue_state_machine.rb', line 32

def mark_resuming(issue_number)
  @issues&.transition(issue_number, from: @config.label_failed, to: @config.label_in_progress)
end