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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
# File 'lib/ace/hitl/cli/commands/update.rb', line 29
def call(ref:, **options)
set_args = Array(options[:set])
add_args = Array(options[:add])
remove_args = Array(options[:remove])
move_to = options[:"move-to"]
answer = options[:answer]
resume = options[:resume] == true
scope = validate_scope(options[:scope])
if set_args.empty? && add_args.empty? && remove_args.empty? && move_to.nil? && answer.nil? && !resume
raise Ace::Support::Cli::Error.new("No update operations specified")
end
set_hash = parse_kv_pairs(set_args)
add_hash = parse_kv_pairs(add_args)
remove_hash = parse_kv_pairs(remove_args)
manager = Ace::Hitl::Organisms::HitlManager.new
event = begin
manager.update(
ref,
set: set_hash,
add: add_hash,
remove: remove_hash,
move_to: move_to,
answer: answer,
scope: scope
)
rescue Ace::Hitl::Organisms::HitlManager::AmbiguousReferenceError => e
candidates = e.matches.map(&:file_path).join(", ")
raise Ace::Support::Cli::Error.new(
"HITL event '#{ref}' is ambiguous across scope '#{scope || "all"}'. Candidates: #{candidates}"
)
end
raise Ace::Support::Cli::Error.new("HITL event '#{ref}' not found") unless event
if move_to
folder_info = event.special_folder || "root"
puts "HITL event updated: #{event.id} #{event.title} -> #{folder_info}"
else
puts "HITL event updated: #{event.id} #{event.title}"
end
return unless resume
dispatch = manager.dispatch_resume(event.id, scope: scope)
case dispatch[:status]
when :waiter_active
puts "Resume dispatch skipped: active waiter lease detected."
when :dispatched
puts "Resume dispatched: mode=#{dispatch[:mode]} details=#{dispatch[:details]}"
puts "HITL event archived after successful dispatch."
when :no_answer
raise Ace::Support::Cli::Error.new("Cannot resume '#{event.id}' without an answer")
when :failed
raise Ace::Support::Cli::Error.new(dispatch[:error] || "Resume dispatch failed")
else
raise Ace::Support::Cli::Error.new("Resume dispatch failed: unexpected status #{dispatch[:status]}")
end
end
|