Module: Canopus::Workspace::TaskAware
- Defined in:
- lib/canopus/workspace/task_aware.rb
Instance Attribute Summary collapse
-
#task_runner ⇒ Object
readonly
Returns the value of attribute task_runner.
Instance Method Summary collapse
- #accept_task_palette ⇒ Object
- #activate_task_output(index) ⇒ Object
- #close_task_output(index = @task_runner.active_index) ⇒ Object
- #close_tasks ⇒ Object
- #drain_task_outputs ⇒ Object
- #initialize_tasks ⇒ Object
- #resize_task_output(columns, rows) ⇒ Object
- #run_task(task) ⇒ Object
- #show_task_output(output = task_output) ⇒ Object
- #show_tasks ⇒ Object
- #stop_task(output = task_output) ⇒ Object
- #task_output ⇒ Object
- #task_output_title(output) ⇒ Object
- #task_output_visible ⇒ Object
- #task_outputs ⇒ Object
- #task_terminal ⇒ Object
- #toggle_task_output ⇒ Object
Instance Attribute Details
#task_runner ⇒ Object (readonly)
Returns the value of attribute task_runner.
6 7 8 |
# File 'lib/canopus/workspace/task_aware.rb', line 6 def task_runner @task_runner end |
Instance Method Details
#accept_task_palette ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/canopus/workspace/task_aware.rb', line 41 def accept_task_palette state = @palette index = state[:indices] ? state[:indices][state[:index]] : state[:index] source = index && state[:items][index] configuration = state[:task_configuration] self.palette = nil return unless source && configuration resolved = configuration.resolve(source, **task_context) matcher = resolved["problem_matcher"] && configuration.problem_matcher(resolved["problem_matcher"]) raise Error, "unknown problem matcher: #{resolved['problem_matcher']}" if resolved["problem_matcher"] && !matcher start_task(resolved, matcher) end |
#activate_task_output(index) ⇒ Object
70 71 72 73 74 |
# File 'lib/canopus/workspace/task_aware.rb', line 70 def activate_task_output(index) output = @task_runner.activate(index) @window&.request_frame output end |
#close_task_output(index = @task_runner.active_index) ⇒ Object
76 77 78 79 80 81 82 |
# File 'lib/canopus/workspace/task_aware.rb', line 76 def close_task_output(index = @task_runner.active_index) output = @task_runner.remove(index) forget_task_output(output) if output @panels.hide("output") if task_outputs.empty? @window&.request_frame output end |
#close_tasks ⇒ Object
120 121 122 123 124 125 126 |
# File 'lib/canopus/workspace/task_aware.rb', line 120 def close_tasks @task_runner.close ensure @task_matchers.clear @task_finished.clear publish_task_diagnostics end |
#drain_task_outputs ⇒ Object
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/canopus/workspace/task_aware.rb', line 92 def drain_task_outputs changed = @task_runner.drain(max_bytes: @settings["terminal"]["max_bytes_per_frame"]) do |output, data, seconds| capture_test_output(output, data) matcher = @task_matchers[output.id] matcher&.feed(data.to_s, max_seconds: seconds) !matcher || !matcher.pending? end @task_runner.completed.each do |output| unless @task_finished[output.id] @task_finished[output.id] = true @task_matchers[output.id]&.finish complete_test_output(output) end next unless output.presentation.fetch("reveal") == "silent" status = output.terminal.status if output.terminal.respond_to?(:status) show_task_output(output) if status && !status.success? end @window&.request_frame if changed || @task_runner.pending? changed end |
#initialize_tasks ⇒ Object
8 9 10 11 12 13 |
# File 'lib/canopus/workspace/task_aware.rb', line 8 def initialize_tasks = @settings["terminal"] @task_runner = Task::Runner.new(scrollback: ["scrollback_lines"], queue_limit_bytes: ["queue_limit_bytes"], report: ->(error) { post { notify("Cannot close task: #{error.}") } }) @task_matchers, @task_finished, @task_diagnostic_snapshot = {}, {}, {}.freeze end |
#resize_task_output(columns, rows) ⇒ Object
113 |
# File 'lib/canopus/workspace/task_aware.rb', line 113 def resize_task_output(columns, rows) = @task_runner.resize(columns, rows) |
#run_task(task) ⇒ Object
32 33 34 35 36 37 38 39 |
# File 'lib/canopus/workspace/task_aware.rb', line 32 def run_task(task) configuration = Task::Configuration.new(root: @root) source = task.is_a?(String) ? task : configuration.tasks.find { |candidate| candidate == task } resolved = configuration.resolve(source, **task_context) matcher = resolved["problem_matcher"] && configuration.problem_matcher(resolved["problem_matcher"]) raise Error, "unknown problem matcher: #{resolved['problem_matcher']}" if resolved["problem_matcher"] && !matcher start_task(resolved, matcher) end |
#show_task_output(output = task_output) ⇒ Object
55 56 57 58 59 60 61 62 63 64 |
# File 'lib/canopus/workspace/task_aware.rb', line 55 def show_task_output(output = task_output) if output && (index = task_outputs.index { |entry| entry.equal?(output) }) @task_runner.activate(index) end @panels.hide("terminal") if @panels.visible?("terminal") @panels.hide("debug_console") if @panels.visible?("debug_console") @panels.show("output") @window&.request_frame output end |
#show_tasks ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/canopus/workspace/task_aware.rb', line 20 def show_tasks configuration = Task::Configuration.new(root: @root) if configuration.tasks.empty? self. = "No tasks configured in .canopus/tasks.jsonc" return false end self.palette = {kind: :tasks, query: +"", index: 0, matches: configuration.tasks.map { |task| task.fetch("label") }, items: configuration.tasks, task_configuration: configuration} update_palette end |
#stop_task(output = task_output) ⇒ Object
84 85 86 87 88 89 90 |
# File 'lib/canopus/workspace/task_aware.rb', line 84 def stop_task(output = task_output) stopped = @task_runner.stop(output) cancel_test_output(output) if stopped self. = "No running task selected" unless stopped @window&.request_frame stopped end |
#task_output ⇒ Object
16 |
# File 'lib/canopus/workspace/task_aware.rb', line 16 def task_output = @task_runner.active |
#task_output_title(output) ⇒ Object
115 116 117 118 |
# File 'lib/canopus/workspace/task_aware.rb', line 115 def task_output_title(output) suffix = @task_runner.running?(output) ? " ●" : "" "#{output.label}#{suffix}" end |
#task_output_visible ⇒ Object
18 |
# File 'lib/canopus/workspace/task_aware.rb', line 18 def task_output_visible = @panels.visible?("output") && @docks[:bottom][:visible] |
#task_outputs ⇒ Object
15 |
# File 'lib/canopus/workspace/task_aware.rb', line 15 def task_outputs = @task_runner.entries |
#task_terminal ⇒ Object
17 |
# File 'lib/canopus/workspace/task_aware.rb', line 17 def task_terminal = @task_runner.terminal |
#toggle_task_output ⇒ Object
66 67 68 |
# File 'lib/canopus/workspace/task_aware.rb', line 66 def toggle_task_output task_output_visible ? @panels.hide("output") : show_task_output end |