Class: SolidQueueTui::Views::JobDetailView

Inherits:
Object
  • Object
show all
Defined in:
lib/solid_queue_tui/views/job_detail_view.rb

Instance Method Summary collapse

Constructor Details

#initialize(tui) ⇒ JobDetailView



6
7
8
9
10
11
# File 'lib/solid_queue_tui/views/job_detail_view.rb', line 6

def initialize(tui)
  @tui = tui
  @job = nil
  @failed_job = nil
  @scroll_offset = 0
end

Instance Method Details

#active?Boolean



26
# File 'lib/solid_queue_tui/views/job_detail_view.rb', line 26

def active? = @active

#bindingsObject



71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/solid_queue_tui/views/job_detail_view.rb', line 71

def bindings
  bindings = [
    { key: "Esc", action: "Close" },
    { key: "j/k", action: "Scroll" }
  ]
  if @failed_job
    bindings += [
      { key: "R", action: "Retry" },
      { key: "D", action: "Discard" }
    ]
  end
  bindings
end


85
86
87
88
89
90
91
92
93
# File 'lib/solid_queue_tui/views/job_detail_view.rb', line 85

def breadcrumb
  if @failed_job
    "failed:#{@failed_job.job_id}"
  elsif @job
    "jobs:#{@job.id}"
  else
    "detail"
  end
end

#handle_input(event) ⇒ Object



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
# File 'lib/solid_queue_tui/views/job_detail_view.rb', line 43

def handle_input(event)
  case event
  in { type: :key, code: "esc" } | { type: :key, code: "q" }
    hide
    nil
  in { type: :key, code: "j" } | { type: :key, code: "up" }
    @scroll_offset = [@scroll_offset - 1, 0].max
    nil
  in { type: :key, code: "k" } | { type: :key, code: "down" }
    @scroll_offset += 1
    nil
  in { type: :key, code: "R" }
    if @failed_job
      Actions::RetryJob.call(@failed_job.id)
      hide
      :refresh
    end
  in { type: :key, code: "D" }
    if @failed_job
      Actions::DiscardJob.call(@failed_job.id)
      hide
      :refresh
    end
  else
    nil
  end
end

#hideObject



20
21
22
23
24
# File 'lib/solid_queue_tui/views/job_detail_view.rb', line 20

def hide
  @active = false
  @job = nil
  @failed_job = nil
end

#render(frame, area) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/solid_queue_tui/views/job_detail_view.rb', line 28

def render(frame, area)
  return unless @active

  # Render an overlay with padding
  inner = shrink_area(area, 4, 2)

  frame.render_widget(@tui.paragraph(text: ""), inner) # clear background

  if @failed_job
    render_failed_detail(frame, inner)
  elsif @job
    render_job_detail(frame, inner)
  end
end

#show(job: nil, failed_job: nil) ⇒ Object



13
14
15
16
17
18
# File 'lib/solid_queue_tui/views/job_detail_view.rb', line 13

def show(job: nil, failed_job: nil)
  @job = job
  @failed_job = failed_job
  @scroll_offset = 0
  @active = true
end