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
|
# File 'lib/ace/tmux/cli/commands/send.rb', line 43
def call(**options)
control = Organisms::ControlSurface.new
cmd = normalized_cmd(options)
messages = normalized_messages(options)
keys = normalized_keys(options)
wait_condition = normalized_wait_condition(options.fetch(:wait, false))
validate_payloads!(cmd: cmd, messages: messages, keys: keys)
validate_wait_condition!(wait_condition: wait_condition, pattern: options[:pattern]) if wait_condition
capture_spec = parse_capture_spec(
options.fetch(:capture, false),
default_wait: wait_condition ? 0.0 : DEFAULT_CAPTURE_WAIT
)
wait_lines = capture_spec ? capture_spec[:lines] : DEFAULT_CAPTURE_LINES
baseline_output = wait_baseline_for(control, options, wait_condition, lines: wait_lines)
control.send_sequence(**target_options(options), command: cmd, messages: messages, keys: keys)
if wait_condition
control.wait_for_condition(
**target_options(options),
condition: wait_condition,
pattern: options[:pattern],
timeout: Float(options.fetch(:timeout, Organisms::ControlSurface::DEFAULT_TIMEOUT.to_s)),
interval: Float(options.fetch(:interval, Organisms::ControlSurface::DEFAULT_INTERVAL.to_s)),
lines: wait_lines,
baseline_output: baseline_output,
require_change: wait_condition == "agent"
)
end
if capture_spec
sleep(capture_spec[:wait]) if capture_spec[:wait].positive?
output = control.capture_recent_output(**target_options(options), lines: capture_spec[:lines])
puts output
elsif !options[:quiet]
puts success_message(cmd: cmd, messages: messages, keys: keys, wait_condition: wait_condition)
end
rescue Ace::Tmux::Error => e
raise Ace::Support::Cli::Error, e.message
rescue ArgumentError
raise Ace::Support::Cli::Error, "--timeout and --interval must be numeric"
end
|