Class: Rails::Console

Inherits:
Object show all
Defined in:
railties/lib/rails/commands/console.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(app, options = {}) ⇒ Console

Returns a new instance of Console.


53
54
55
56
57
58
59
60
61
# File 'railties/lib/rails/commands/console.rb', line 53

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

  app.sandbox = sandbox?
  app.load_console

  @console = app.config.console || IRB
end

Instance Attribute Details

#appObject (readonly)

Returns the value of attribute app


51
52
53
# File 'railties/lib/rails/commands/console.rb', line 51

def app
  @app
end

#consoleObject (readonly)

Returns the value of attribute console


51
52
53
# File 'railties/lib/rails/commands/console.rb', line 51

def console
  @console
end

#optionsObject (readonly)

Returns the value of attribute options


51
52
53
# File 'railties/lib/rails/commands/console.rb', line 51

def options
  @options
end

Class Method Details

.parse_arguments(arguments) ⇒ Object


12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'railties/lib/rails/commands/console.rb', line 12

def parse_arguments(arguments)
  options = {}

  OptionParser.new do |opt|
    opt.banner = "Usage: rails console [environment] [options]"
    opt.on('-s', '--sandbox', 'Rollback database modifications on exit.') { |v| options[:sandbox] = v }
    opt.on("-e", "--environment=name", String,
            "Specifies the environment to run this console under (test/development/production).",
            "Default: development") { |v| options[:environment] = v.strip }
    opt.on("--debugger", 'Enables the debugger.') do |v|
      if RUBY_VERSION < '2.0.0'
        options[:debugger] = v
      else
        puts "=> Notice: debugger option is ignored since Ruby 2.0 and " \
             "it will be removed in future versions."
      end
    end
    opt.parse!(arguments)
  end

  if arguments.first && arguments.first[0] != '-'
    env = arguments.first
    if available_environments.include? env
      options[:environment] = env
    else
      options[:environment] = %w(production development test).detect {|e| e =~ /^#{env}/} || env
    end
  end

  options
end

.start(*args) ⇒ Object


8
9
10
# File 'railties/lib/rails/commands/console.rb', line 8

def start(*args)
  new(*args).start
end

Instance Method Details

#debugger?Boolean

Returns:

  • (Boolean)

80
81
82
# File 'railties/lib/rails/commands/console.rb', line 80

def debugger?
  options[:debugger]
end

#environmentObject


67
68
69
# File 'railties/lib/rails/commands/console.rb', line 67

def environment
  options[:environment] ||= ENV['RAILS_ENV'] || ENV['RACK_ENV'] || 'development'
end

#environment?Boolean

Returns:

  • (Boolean)

71
72
73
# File 'railties/lib/rails/commands/console.rb', line 71

def environment?
  environment
end

#require_debuggerObject


84
85
86
87
88
89
90
# File 'railties/lib/rails/commands/console.rb', line 84

def require_debugger
  require 'debugger'
  puts "=> Debugger enabled"
rescue LoadError
  puts "You're missing the 'debugger' gem. Add it to your Gemfile, bundle it and try again."
  exit(1)
end

#sandbox?Boolean

Returns:

  • (Boolean)

63
64
65
# File 'railties/lib/rails/commands/console.rb', line 63

def sandbox?
  options[:sandbox]
end

#set_environment!Object


75
76
77
# File 'railties/lib/rails/commands/console.rb', line 75

def set_environment!
  Rails.env = environment
end

#startObject


93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'railties/lib/rails/commands/console.rb', line 93

def start
  if RUBY_VERSION < '2.0.0'
    require_debugger if debugger?
  end

  set_environment! if environment?

  if sandbox?
    puts "Loading #{Rails.env} environment in sandbox (Rails #{Rails.version})"
    puts "Any modifications you make will be rolled back on exit"
  else
    puts "Loading #{Rails.env} environment (Rails #{Rails.version})"
  end

  if defined?(console::ExtendCommandBundle)
    console::ExtendCommandBundle.send :include, Rails::ConsoleMethods
  end
  console.start
end