class Canals::Cli::Session

Public Instance Methods

on_all_canals_in_session(command, &block) click to toggle source
# File lib/canals/cli/session.rb, line 60
def on_all_canals_in_session(command, &block)
  return if session_empty?
  Canals.session.each_obj do |canal|
    say "#{command.to_s.capitalize} canal #{canal.name.inspect}:", :green
    block.call(canal)
  end
  say
  say "#{command} done.", :green
end
restart() click to toggle source
# File lib/canals/cli/session.rb, line 39
def restart
  on_all_canals_in_session(:restart) do |canal|
    trestart(canal)
  end
end
restore() click to toggle source
# File lib/canals/cli/session.rb, line 27
def restore
  on_all_canals_in_session(:restore) do |canal|
    if Canals.isalive? canal
      say "Canal #{canal.name.inspect} is running."
    else
      Canals.session.del(canal.name)
      tstart(canal)
    end
  end
end
session_alive(session) click to toggle source
# File lib/canals/cli/session.rb, line 78
def session_alive(session)
  @alive ||= {}
  pid = session[:pid]
  @alive[pid] ||= Canals.session.alive? pid
end
session_col_title(col) click to toggle source
# File lib/canals/cli/session.rb, line 84
def session_col_title(col)
  case col
  when "pid"
    "PID"
  else
    col.sub("_", " ").titleize
  end
end
session_col_val(session, key) click to toggle source
# File lib/canals/cli/session.rb, line 93
def session_col_val(session, key)
  c = session_color(session)
  val = case key
        when "local_port"
          if session[key.to_sym]
            session[key.to_sym]
          else
            entry = Canals.repository.get(session[:name])
            entry.local_port if entry
          end
        when "up"
          checkmark(session_alive(session))
        else
          session[key.to_sym]
        end
  set_color(val, *c)
end
session_color(session) click to toggle source
# File lib/canals/cli/session.rb, line 70
def session_color(session)
  if session_alive(session)
    :white
  else
    [:dark_gray, :dim]
  end
end
session_empty?() click to toggle source
# File lib/canals/cli/session.rb, line 111
def session_empty?
  if Canals.session.empty?
    say "Canal session is currently empty."
    true
  else
    false
  end
end
show() click to toggle source
# File lib/canals/cli/session.rb, line 14
def show
  return if session_empty?
  require 'terminal-table'
  require 'canals/core_ext/string'
  columns = ["up", "pid", "name", "local_port", "socket"]
  rows = Canals.session.sort{ |a,b| a[:name] <=> b[:name] }
                       .map { |s| columns.map{ |c| session_col_val(s, c) } }
  table = Terminal::Table.new :headings => columns.map{|c| session_col_title(c) }, :rows => rows
  table.align_column(3, :right)
  say table
end
stop() click to toggle source
# File lib/canals/cli/session.rb, line 46
def stop
  on_all_canals_in_session(:stop) do |canal|
    tstop(canal)
  end
end
suspend() click to toggle source
# File lib/canals/cli/session.rb, line 53
def suspend
  on_all_canals_in_session(:suspend) do |canal|
    tstop(canal, remove_from_session: false)
  end
end