Class: Ace::Review::Atoms::FeedbackStateValidator
- Inherits:
-
Object
- Object
- Ace::Review::Atoms::FeedbackStateValidator
- Defined in:
- lib/ace/review/atoms/feedback_state_validator.rb
Overview
Validates state transitions for feedback items.
Implements the feedback item state machine:
draft -> (verify valid=true) -> pending -> (resolve) -> done [archived]
draft -> (verify valid=false) -> invalid [archived]
draft -> (skip) -> skip [archived]
pending -> (skip) -> skip [archived]
Terminal states (invalid, skip, done) cannot transition further.
Constant Summary collapse
- TRANSITIONS =
Define the state machine transitions Maps from_status => [allowed target statuses]
{ "draft" => %w[pending invalid skip], "pending" => %w[done skip], "invalid" => [], # Terminal state "skip" => [], # Terminal state "done" => [] # Terminal state }.freeze
- TERMINAL_STATES =
Terminal states that require archiving
%w[invalid skip done].freeze
Class Method Summary collapse
-
.allowed_transitions(status) ⇒ Array<String>
Get the list of allowed target statuses from a given status.
-
.should_archive?(status) ⇒ Boolean
Check if a status requires archiving.
-
.terminal?(status) ⇒ Boolean
Check if a status is terminal (requires archiving, no further transitions).
-
.valid_transition?(from_status, to_status) ⇒ Boolean
Check if a state transition is valid.
Class Method Details
.allowed_transitions(status) ⇒ Array<String>
Get the list of allowed target statuses from a given status
69 70 71 |
# File 'lib/ace/review/atoms/feedback_state_validator.rb', line 69 def self.allowed_transitions(status) TRANSITIONS.fetch(status, []).dup end |
.should_archive?(status) ⇒ Boolean
Check if a status requires archiving
92 93 94 |
# File 'lib/ace/review/atoms/feedback_state_validator.rb', line 92 def self.should_archive?(status) terminal?(status) end |
.terminal?(status) ⇒ Boolean
Check if a status is terminal (requires archiving, no further transitions)
84 85 86 |
# File 'lib/ace/review/atoms/feedback_state_validator.rb', line 84 def self.terminal?(status) TERMINAL_STATES.include?(status) end |
.valid_transition?(from_status, to_status) ⇒ Boolean
Check if a state transition is valid
54 55 56 57 58 59 |
# File 'lib/ace/review/atoms/feedback_state_validator.rb', line 54 def self.valid_transition?(from_status, to_status) allowed = TRANSITIONS[from_status] return false if allowed.nil? allowed.include?(to_status) end |