Class: Ace::Assign::Organisms::TaskAssignmentCreator

Inherits:
Object
  • Object
show all
Defined in:
lib/ace/assign/organisms/task_assignment_creator.rb

Constant Summary collapse

DEFAULT_PRESET =
"work-on-task"
SUBTASK_PATTERN =
/^[0-9a-z]{3}\.[a-z]\.[0-9a-z]{3}\.[a-z0-9]$/

Instance Method Summary collapse

Constructor Details

#initialize(task_manager: nil, executor: nil) ⇒ TaskAssignmentCreator

Returns a new instance of TaskAssignmentCreator.



19
20
21
22
# File 'lib/ace/assign/organisms/task_assignment_creator.rb', line 19

def initialize(task_manager: nil, executor: nil)
  @task_manager = task_manager || Ace::Task::Organisms::TaskManager.new
  @executor = executor || AssignmentExecutor.new
end

Instance Method Details

#call(task_refs:, preset_name: DEFAULT_PRESET, primary_task_ref: nil) ⇒ Object

Raises:

  • (Ace::Support::Cli::Error)


24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/ace/assign/organisms/task_assignment_creator.rb', line 24

def call(task_refs:, preset_name: DEFAULT_PRESET, primary_task_ref: nil)
  requested_refs = normalize_requested_refs(task_refs)
  raise Ace::Support::Cli::Error, "--task requires at least one task reference" if requested_refs.empty?

  preset = Atoms::PresetLoader.load(preset_name)
  resolved_refs, skipped_terminal = resolve_requested_refs(requested_refs)

  if resolved_refs.empty?
    raise Ace::Support::Cli::Error,
      "All requested tasks are already terminal (done/skipped/cancelled): #{skipped_terminal.join(', ')}. No assignment created."
  end

  primary_ref = primary_task_ref.to_s.strip
  primary_ref = resolved_refs.first[:ref] if primary_ref.empty?

  guard_multi_task_preset!(preset_name, preset, resolved_refs.length)

  expanded_taskrefs = if preset_supports_taskrefs?(preset)
    expand_task_refs_in_order(resolved_refs)
  else
    [primary_ref]
  end

  params = build_parameters(preset, primary_ref, expanded_taskrefs)
  validate_parameters!(preset, params)

  steps = Atoms::PresetExpander.expand(preset, params)
  job_path = write_job_file(
    session_name: "#{preset_name}-#{primary_ref}",
    description: preset["description"],
    steps: steps
  )

  result = @executor.start(job_path)
  result.merge(
    skipped_terminal: skipped_terminal,
    primary_ref: primary_ref,
    task_refs: expanded_taskrefs,
    job_path: job_path
  )
end