Skip to Content Skip to Search
Methods
C
E
N
S
U

Constants

LOGO = %w[⠀⢀⠀⢡⣶⣿⠟⡛⠢ ⠠⠀⣰⣿⣿⠁⠄⠀⠀ ⠶⢠⣿⣿⣿⠰⠆⠀⠀ ⠶⢸⣿⣿⣿⡄⠰⠆⠀].freeze
 
TIPS = [ '"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 Public methods

new(app, options = {})

# 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 Public methods

colorize_tip(tip)

# 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()

# 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()

# 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()

# 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()

# File railties/lib/rails/commands/console/irb_console.rb, line 92
def name
  "IRB"
end

short_env()

# 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()

# 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()

# 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 = unicode_logo
  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 { |logo, info| "#{IRB::Color.colorize(logo.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

show_tips?()

# File railties/lib/rails/commands/console/irb_console.rb, line 162
def show_tips?
  ENV["RAILS_TIPS"] != "false"
end

start()

# 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
# File railties/lib/rails/commands/console/irb_console.rb, line 158
def unicode_logo
  ($stderr.external_encoding || Encoding.default_external) == Encoding::UTF_8 ? LOGO : nil
end