class Riffer::Rig::Terminal::Picker
Constants
- CLOSED
- DELETED
- DELETE_HEADER
- EMPTY
- EOT
- HEADER
- NO_MATCH
Public Class Methods
(prompter: Riffer::Rig::Terminal::_Prompter, renderer: Riffer::Rig::Terminal::Renderer, host: Riffer::Rig::Hosts::_Host, sessions: Riffer::Rig::Terminal::_Sessions, ?now: ^() → Time) → void
Source
# File lib/riffer/rig/terminal/picker.rb, line 30 def initialize(prompter:, renderer:, host:, sessions:, now: -> { Time.now }) @prompter = prompter @renderer = renderer @host = host @sessions = sessions @now = now end
@rbs prompter: Riffer::Rig::Terminal::_Prompter @rbs renderer: Riffer::Rig::Terminal::Renderer @rbs host: Riffer::Rig::Hosts::_Host @rbs sessions: Riffer::Rig::Terminal::_Sessions @rbs now: ^() -> Time @rbs return: void
Public Instance Methods
(all: bool) → Riffer::Rig::Terminal::Session?
Source
# File lib/riffer/rig/terminal/picker.rb, line 40 def open(all:) rows = @sessions.list(@host, all: all) if rows.empty? @renderer.notice(@sessions.off || EMPTY) return nil end filter = '' loop do shown = rows.filter { |row| matches?(row, filter) } case (line = read(HEADER, shown, all)) when nil, EOT outcome = delete_mode(rows, shown, all) case outcome when :cancel then return closed else rows = outcome if rows.empty? @renderer.notice(EMPTY) return nil end filter = '' unless any_match?(rows, filter) end when :interrupt return closed when '' return shown.first if shown.one? return closed else choice = number(line, shown) return choice if choice if any_match?(rows, line) filter = line else @renderer.notice(format(NO_MATCH, line)) end end end rescue Interrupt closed end
@rbs all: bool @rbs return: Riffer::Rig::Terminal::Session?