class Scryglass::SessionManager
Constants
- NAMED_VARIABLES_MESSAGE
- SESSION_CLOSED_MESSAGE
Attributes
binding_trackers_by_receiver[RW]
current_binding_receiver[RW]
scry_sessions[RW]
unused_tab_icons[RW]
Public Class Methods
new()
click to toggle source
# File lib/scryglass/session_manager.rb, line 18 def initialize self.scry_sessions = [] self.binding_trackers_by_receiver = {} self.current_binding_receiver = nil alphabet = ('A'..'Z').to_a digits = ('2'..'9').to_a self.unused_tab_icons = alphabet + digits.product(alphabet).map { |pair| pair.reverse.join } end
Public Instance Methods
<<(session)
click to toggle source
# File lib/scryglass/session_manager.rb, line 37 def <<(session) set_current_session!(session) session.session_manager = self session.tab_icon = unused_tab_icons.shift # TODO: name that session? self.scry_sessions << session end
current_binding_tracker()
click to toggle source
# File lib/scryglass/session_manager.rb, line 96 def current_binding_tracker binding_trackers_by_receiver[current_binding_receiver] end
current_console_binding()
click to toggle source
# File lib/scryglass/session_manager.rb, line 63 def current_console_binding current_binding_tracker.console_binding end
current_session()
click to toggle source
# File lib/scryglass/session_manager.rb, line 59 def current_session scry_sessions.find(&:session_is_current) end
current_user_named_variables()
click to toggle source
# File lib/scryglass/session_manager.rb, line 100 def current_user_named_variables current_binding_tracker.user_named_variables end
run_scry_ui()
click to toggle source
# File lib/scryglass/session_manager.rb, line 67 def run_scry_ui while current_session session_return = current_session.run_scry_ui case current_session.signal_to_manager when :return visually_close_ui return session_return when :quit visually_close_ui return when :quit_from_help visually_close_ui(floor_the_cursor: true) return when :delete visually_close_ui if scry_sessions.count == 1 delete_current_session! when :change_session_left # and if there's only one session? change_session_left! when :change_session_right # and if there's only one session? change_session_right! when :start_new_session_from_target start_new_session_from_target!(session_return) when :restart_session_from_target restart_session_from_target!(session_return) end end end
session_tabs_bar()
click to toggle source
# File lib/scryglass/session_manager.rb, line 45 def session_tabs_bar _screen_height, screen_width = $stdout.winsize tab_indicators = scry_sessions.map do |session| session.tab_string.clip_at(screen_width / 3, ignore_ansi_codes: true) end compressed_tab_indicators = tab_indicators.compress_to(screen_width, ignore_ansi_codes: true) packed_tabs = compressed_tab_indicators.join pad_length = screen_width - packed_tabs.ansiless_length packed_tabs + ('#' * pad_length) + "\n" + ('#' * screen_width) end
track_binding!(console_binding)
click to toggle source
For consistency, we reference the same binding tracker (and thus
console_binding) every time for a given receiver.
# File lib/scryglass/session_manager.rb, line 31 def track_binding!(console_binding) self.current_binding_receiver = console_binding.receiver self.binding_trackers_by_receiver[current_binding_receiver] ||= Scryglass::BindingTracker.new(console_binding: console_binding) end
Private Instance Methods
change_session_left!()
click to toggle source
# File lib/scryglass/session_manager.rb, line 144 def change_session_left! next_session = session_left_of(current_session) set_current_session!(next_session) end
change_session_right!()
click to toggle source
# File lib/scryglass/session_manager.rb, line 149 def change_session_right! next_session = session_right_of(current_session) set_current_session!(next_session) end
delete_current_session!()
click to toggle source
# File lib/scryglass/session_manager.rb, line 121 def delete_current_session! old_session = current_session if scry_sessions.index(old_session) > 0 change_session_left! else change_session_right! end scry_sessions.delete(old_session) end
restart_session_from_target!(session_return)
click to toggle source
# File lib/scryglass/session_manager.rb, line 160 def restart_session_from_target!(session_return) old_session = current_session new_session = Scryglass::Session.new(session_return) self << new_session set_current_session!(new_session) scry_sessions.delete(old_session) end
session_left_of(session)
click to toggle source
# File lib/scryglass/session_manager.rb, line 139 def session_left_of(session) index_of_session = scry_sessions.index(session) scry_sessions[index_of_session - 1] end
session_right_of(session)
click to toggle source
# File lib/scryglass/session_manager.rb, line 132 def session_right_of(session) return scry_sessions.first if session == scry_sessions.last index_of_session = scry_sessions.index(session) scry_sessions[index_of_session + 1] end
set_current_session!(session)
click to toggle source
# File lib/scryglass/session_manager.rb, line 170 def set_current_session!(session) scry_sessions.each { |session| session.session_is_current = false } session.session_is_current = true end
start_new_session_from_target!(session_return)
click to toggle source
# File lib/scryglass/session_manager.rb, line 154 def start_new_session_from_target!(session_return) new_session = Scryglass::Session.new(session_return) self << new_session set_current_session!(new_session) end
user_named_variables_outro()
click to toggle source
# File lib/scryglass/session_manager.rb, line 116 def user_named_variables_outro puts NAMED_VARIABLES_MESSAGE puts current_user_named_variables.map { |s| " #{s}\n" } end
visually_close_ui(floor_the_cursor: false)
click to toggle source
# File lib/scryglass/session_manager.rb, line 106 def visually_close_ui(floor_the_cursor: false) _screen_height, screen_width = $stdout.winsize current_session.set_console_cursor_below_content( floor_the_cursor: floor_the_cursor ) puts 'ยท' * screen_width, "\n" puts SESSION_CLOSED_MESSAGE puts user_named_variables_outro if current_user_named_variables.any? end