123456789_123456789_123456789_123456789_123456789_

Class: Rails::Console::IRBConsole

Relationships & Source Files
Inherits: Object
Defined in: railties/lib/rails/commands/console/irb_console.rb

Constant Summary

  • LOGO =
    # File 'railties/lib/rails/commands/console/irb_console.rb', line 82
    %w[⠀⢀⠀⢡⣶⣿⠟⡛⠢ ⠠⠀⣰⣿⣿⠁⠄⠀⠀ ⠶⢠⣿⣿⣿⠰⠆⠀⠀ ⠶⢸⣿⣿⣿⡄⠰⠆⠀].freeze
  • TIPS =
    # File 'railties/lib/rails/commands/console/irb_console.rb', line 72
    [
      '"app" opens an ActionDispatch::Integration::Session for the app',
      '"helper" gives access to ApplicationController\'s helper methods',
      '"controller" gives you a new ApplicationController instance',
      '"reload!" reloads the application',
      '"--sandbox" rolls back database changes when the console exits',
      '"_" holds the value of the last evaluated expression',
      '"source_location" shows where a method was defined, e.g. method(:reload!).source_location',
    ].freeze

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

.new(app, options = {}) ⇒ IRBConsole

[ GitHub ]

  
# File 'railties/lib/rails/commands/console/irb_console.rb', line 84

def initialize(app, options = {})
  @app = app
  @options = options

  require "irb"
  require "irb/completion"
end

Instance Attribute Details

#show_tips?Boolean (readonly)

[ GitHub ]

  
# File 'railties/lib/rails/commands/console/irb_console.rb', line 162

def show_tips?
  ENV["RAILS_TIPS"] != "false"
end

Instance Method Details

#colorize_tip(tip)

[ GitHub ]

  
# File 'railties/lib/rails/commands/console/irb_console.rb', line 166

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

#colorized_env

[ GitHub ]

  
# File 'railties/lib/rails/commands/console/irb_console.rb', line 193

def colorized_env
  IRB::Color.colorize(Rails.env, [env_color])
end

#colorized_short_env

[ GitHub ]

  
# File 'railties/lib/rails/commands/console/irb_console.rb', line 176

def colorized_short_env
  IRB::Color.colorize(short_env, [env_color])
end

#env_color

[ GitHub ]

  
# File 'railties/lib/rails/commands/console/irb_console.rb', line 197

def env_color
  case Rails.env
  when "development", "test"
    :BLUE
  when "production"
    :RED
  else
    :MAGENTA
  end
end

#name

[ GitHub ]

  
# File 'railties/lib/rails/commands/console/irb_console.rb', line 92

def name
  "IRB"
end

#short_env

[ GitHub ]

  
# File 'railties/lib/rails/commands/console/irb_console.rb', line 180

def short_env
  case Rails.env
  when "development"
    "dev"
  when "test"
    "test"
  when "production"
    "prod"
  else
    Rails.env
  end
end

#short_rails_root

[ GitHub ]

  
# File 'railties/lib/rails/commands/console/irb_console.rb', line 170

def short_rails_root
  root = Rails.root.to_s
  home = ENV["HOME"]
  home && (root == home || root.start_with?("#{home}/")) ? "~#{root[home.size..]}" : root
end

#show_startup_banner

[ GitHub ]

  
# File 'railties/lib/rails/commands/console/irb_console.rb', line 134

def show_startup_banner
  return $stderr.puts(Rails::Console.startup_lines(@app.sandbox)) unless IRB.conf[:SHOW_BANNER]

  logo_lines = 
  tip_line = show_tips? ? "TIP: #{colorize_tip(TIPS.sample)}" : ""
  info_lines = [
    "#{IRB::Color.colorize('Rails', [:BOLD])} v#{Rails.version} - Ruby #{RUBY_VERSION}  (#{colorized_env})",
    tip_line,
    IRB::Color.colorize(short_rails_root, [:CYAN]),
    Rails::Console::HELP_HINT,
  ]

  output = if logo_lines
    logo_lines.zip(info_lines).map { |, info| "#{IRB::Color.colorize(.to_s, [:RED, :BOLD])}  #{info}" }.join("\n")
  else
    info_lines.join("\n")
  end

  $stderr.puts
  $stderr.puts output
  $stderr.puts IRB::Color.colorize("\nSandbox mode: changes rolled back on exit", [:YELLOW]) if @app.sandbox
  $stderr.puts
end

#start

[ GitHub ]

  
# File 'railties/lib/rails/commands/console/irb_console.rb', line 96

def start
  IRB.setup(nil)
  # CLI --no-banner wins over IRB defaults / .irbrc.
  IRB.conf[:SHOW_BANNER] = false if @options[:banner] == false

  if !Rails.env.local? && !ENV.key?("IRB_USE_AUTOCOMPLETE")
    IRB.conf[:USE_AUTOCOMPLETE] = false
  end

  env = colorized_short_env
  prompt_prefix = "%N(#{env})"
  # Respect user's configured irb name.
  IRB.conf[:IRB_NAME] = @app.name if IRB.conf[:IRB_NAME] == "irb"

  IRB.conf[:PROMPT][:RAILS_PROMPT] = {
    PROMPT_I: "#{prompt_prefix}:%03n> ",
    PROMPT_S: "#{prompt_prefix}:%03n%l ",
    PROMPT_C: "#{prompt_prefix}:%03n* ",
    RETURN: "=> %s\n"
  }

  if current_filter = IRB.conf[:BACKTRACE_FILTER]
    IRB.conf[:BACKTRACE_FILTER] = -> (backtrace) do
      backtrace = current_filter.call(backtrace)
      Rails.backtrace_cleaner.filter(backtrace)
    end
  else
    IRB.conf[:BACKTRACE_FILTER] = -> (backtrace) do
      Rails.backtrace_cleaner.filter(backtrace)
    end
  end

  # Respect user's choice of prompt mode.
  IRB.conf[:PROMPT_MODE] = :RAILS_PROMPT if IRB.conf[:PROMPT_MODE] == :DEFAULT
  show_startup_banner
  IRB::Irb.new.run(IRB.conf)
end

#unicode_logo

[ GitHub ]

  
# File 'railties/lib/rails/commands/console/irb_console.rb', line 158

def 
  ($stderr.external_encoding || Encoding.default_external) == Encoding::UTF_8 ? LOGO : nil
end