123456789_123456789_123456789_123456789_123456789_

Module: IRB::StartupMessage

Relationships & Source Files
Defined in: lib/irb/startup_message.rb

Constant Summary

  • TIPS =
    # File 'lib/irb/startup_message.rb', line 8
    [
      'Type "help" for commands, "help <cmd>" for details',
      '"show_doc method" to view documentation',
      '"ls [object]" to see methods and properties',
      '"ls [object] -g pattern" to filter methods and properties',
      '"edit method" to open the method\'s source in editor',
      '"cd object" to navigate into an object',
      '"show_source method" to view source code',
      '"copy expr" to copy the output to clipboard',
      '"debug" to start integration with the "debug" gem',
      '"history -g pattern" to search history',
    ].freeze

Class Method Summary

Class Method Details

.build_info_lines (private)

[ GitHub ]

  
# File 'lib/irb/startup_message.rb', line 50

def build_info_lines
  version_line = "#{Color.colorize('IRB', [:BOLD])} v#{VERSION} - Ruby #{RUBY_VERSION}"
  tip_line = colorize_tip(TIPS.sample)
  dir_line = Color.colorize(short_pwd, [:CYAN])

  [version_line, tip_line, dir_line]
end

.colorize_tip(tip) (private)

[ GitHub ]

  
# File 'lib/irb/startup_message.rb', line 58

def colorize_tip(tip)
  tip.gsub(/"[^"]*"/) { |match| Color.colorize(match, [:YELLOW]) }
end

.combine_logo_and_info(logo_lines, info_lines) (private)

[ GitHub ]

  
# File 'lib/irb/startup_message.rb', line 62

def combine_logo_and_info(logo_lines, info_lines)
  max_lines = [logo_lines.size, info_lines.size].max
  lines = max_lines.times.map do |i|
    logo_part = logo_lines[i] || ""
    info_part = info_lines[i] || ""
     = Color.colorize(logo_part, [:RED, :BOLD])
    "#{}  #{info_part}"
  end
  lines.join("\n")
end

.display

[ GitHub ]

  
# File 'lib/irb/startup_message.rb', line 22

def display
  logo_lines = 
  info_lines = build_info_lines

  output = if logo_lines
    combine_logo_and_info(logo_lines, info_lines)
  else
    info_lines.join("\n")
  end

  # Add a blank line to not immediately touch warning messages
  puts
  puts output
  puts
end

.load_logo (private)

[ GitHub ]

  
# File 'lib/irb/startup_message.rb', line 40

def 
  encoding = STDOUT.external_encoding || Encoding.default_external
  return nil unless encoding == Encoding::UTF_8

   = IRB.send(:, :unicode_small)
  return nil unless 

  .chomp.lines.map(&:chomp)
end

.short_pwd (private)

[ GitHub ]

  
# File 'lib/irb/startup_message.rb', line 73

def short_pwd
  dir = Dir.pwd
  home = ENV['HOME']
  if home && (dir == home || dir.start_with?("#{home}/"))
    dir = "~#{dir[home.size..]}"
  end
  dir
end