Class: Scryglass::SessionManager
- Inherits:
-
Object
- Object
- Scryglass::SessionManager
- Defined in:
- lib/scryglass/session_manager.rb
Constant Summary collapse
- SESSION_CLOSED_MESSAGE =
'(Exited scry! Resume session with just `scry`)'
- NAMED_VARIABLES_MESSAGE =
"\nCustom instance variables:"
Instance Attribute Summary collapse
-
#binding_trackers_by_receiver ⇒ Object
Returns the value of attribute binding_trackers_by_receiver.
-
#current_binding_receiver ⇒ Object
Returns the value of attribute current_binding_receiver.
-
#scry_sessions ⇒ Object
Returns the value of attribute scry_sessions.
-
#unused_tab_icons ⇒ Object
Returns the value of attribute unused_tab_icons.
Instance Method Summary collapse
- #<<(session) ⇒ Object
- #current_binding_tracker ⇒ Object
- #current_console_binding ⇒ Object
- #current_session ⇒ Object
- #current_user_named_variables ⇒ Object
-
#initialize ⇒ SessionManager
constructor
A new instance of SessionManager.
- #run_scry_ui ⇒ Object
- #session_tabs_bar ⇒ Object
-
#track_binding!(console_binding) ⇒ Object
For consistency, we reference the same binding tracker (and thus console_binding) every time for a given receiver.
Constructor Details
#initialize ⇒ SessionManager
Returns a new instance of SessionManager.
18 19 20 21 22 23 24 25 26 27 |
# 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 |
Instance Attribute Details
#binding_trackers_by_receiver ⇒ Object
Returns the value of attribute binding_trackers_by_receiver.
10 11 12 |
# File 'lib/scryglass/session_manager.rb', line 10 def binding_trackers_by_receiver @binding_trackers_by_receiver end |
#current_binding_receiver ⇒ Object
Returns the value of attribute current_binding_receiver.
11 12 13 |
# File 'lib/scryglass/session_manager.rb', line 11 def current_binding_receiver @current_binding_receiver end |
#scry_sessions ⇒ Object
Returns the value of attribute scry_sessions.
9 10 11 |
# File 'lib/scryglass/session_manager.rb', line 9 def scry_sessions @scry_sessions end |
#unused_tab_icons ⇒ Object
Returns the value of attribute unused_tab_icons.
12 13 14 |
# File 'lib/scryglass/session_manager.rb', line 12 def unused_tab_icons @unused_tab_icons end |
Instance Method Details
#<<(session) ⇒ Object
37 38 39 40 41 42 43 |
# 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 ⇒ Object
96 97 98 |
# File 'lib/scryglass/session_manager.rb', line 96 def current_binding_tracker binding_trackers_by_receiver[current_binding_receiver] end |
#current_console_binding ⇒ Object
63 64 65 |
# File 'lib/scryglass/session_manager.rb', line 63 def current_console_binding current_binding_tracker.console_binding end |
#current_session ⇒ Object
59 60 61 |
# File 'lib/scryglass/session_manager.rb', line 59 def current_session scry_sessions.find(&:session_is_current) end |
#current_user_named_variables ⇒ Object
100 101 102 |
# File 'lib/scryglass/session_manager.rb', line 100 def current_user_named_variables current_binding_tracker.user_named_variables end |
#run_scry_ui ⇒ Object
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# 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 ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/scryglass/session_manager.rb', line 45 def _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) ⇒ Object
For consistency, we reference the same binding tracker (and thus
console_binding) every time for a given receiver.
31 32 33 34 35 |
# 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 |