Class: Ace::Assign::Models::AssignmentInfo

Inherits:
Object
  • Object
show all
Defined in:
lib/ace/assign/models/assignment_info.rb

Overview

Enriched assignment model combining Assignment + QueueState.

Pure data carrier with computed state (ATOM pattern). Wraps an assignment with its queue state to provide computed state, progress, and active step information.

Examples:

info = AssignmentInfo.new(assignment: assignment, queue_state: state)
info.state          # => :running
info.progress       # => "2/5"
info.step_focus    # => "implement"

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(assignment:, queue_state:) ⇒ AssignmentInfo

Returns a new instance of AssignmentInfo.

Parameters:

  • assignment (Assignment)

    Assignment metadata

  • queue_state (QueueState)

    Queue state for this assignment



22
23
24
25
# File 'lib/ace/assign/models/assignment_info.rb', line 22

def initialize(assignment:, queue_state:)
  @assignment = assignment
  @queue_state = queue_state
end

Instance Attribute Details

#assignmentObject (readonly)

Returns the value of attribute assignment.



18
19
20
# File 'lib/ace/assign/models/assignment_info.rb', line 18

def assignment
  @assignment
end

#queue_stateObject (readonly)

Returns the value of attribute queue_state.



18
19
20
# File 'lib/ace/assign/models/assignment_info.rb', line 18

def queue_state
  @queue_state
end

Instance Method Details

#active_stepsArray<Step>

Active steps in queue order.

Returns:

  • (Array<Step>)

    Active steps



45
46
47
# File 'lib/ace/assign/models/assignment_info.rb', line 45

def active_steps
  queue_state.active_steps
end

#completed?Boolean

Check if assignment is completed

Returns:

  • (Boolean)


81
82
83
# File 'lib/ace/assign/models/assignment_info.rb', line 81

def completed?
  state == :completed
end

#created_atObject



90
# File 'lib/ace/assign/models/assignment_info.rb', line 90

def created_at = assignment.created_at

#current_stepString

Deterministic active step name kept for internal callers.

Returns:

  • (String)

    Focused active step name or “-”



61
62
63
# File 'lib/ace/assign/models/assignment_info.rb', line 61

def current_step
  queue_state.current&.name || "-"
end

#idObject

Delegate common accessors to assignment



86
# File 'lib/ace/assign/models/assignment_info.rb', line 86

def id = assignment.id

#nameObject



87
# File 'lib/ace/assign/models/assignment_info.rb', line 87

def name = assignment.name

#next_stepStep?

Next pending workable step when nothing is active.

Returns:

  • (Step, nil)

    Next pending step or nil



52
53
54
55
56
# File 'lib/ace/assign/models/assignment_info.rb', line 52

def next_step
  return nil unless active_steps.empty?

  queue_state.next_workable
end

#parentObject



91
# File 'lib/ace/assign/models/assignment_info.rb', line 91

def parent = assignment.parent

#progressString

Progress string (done/total)

Returns:

  • (String)

    Progress display (e.g., “2/5”)



37
38
39
40
# File 'lib/ace/assign/models/assignment_info.rb', line 37

def progress
  s = queue_state.summary
  "#{s[:done]}/#{s[:total]}"
end

#stateSymbol

Computed assignment state

Returns:

  • (Symbol)

    :empty, :failed, :completed, :running, or :paused



30
31
32
# File 'lib/ace/assign/models/assignment_info.rb', line 30

def state
  queue_state.assignment_state
end

#step_focusString

Human-friendly active/next summary for compact tables.

Returns:

  • (String)

    Active step names or next-step hint



68
69
70
71
72
73
74
75
76
# File 'lib/ace/assign/models/assignment_info.rb', line 68

def step_focus
  if active_steps.any?
    active_steps.map(&:name).join(", ")
  elsif next_step
    "next: #{next_step.name}"
  else
    "-"
  end
end

#task_refObject



88
# File 'lib/ace/assign/models/assignment_info.rb', line 88

def task_ref = assignment.name

#updated_atObject



89
# File 'lib/ace/assign/models/assignment_info.rb', line 89

def updated_at = assignment.updated_at