提交 117bb541 编写于 作者: M Mehmet Emin İNAÇ

Refactor railties console and dbconsole commands

fix minor convention problems
上级 986fdc4e
require 'optparse'
require 'irb'
require 'irb/completion'
require 'rails/commands/console_helper'
module Rails
class Console
class << self
def start(*args)
new(*args).start
end
include ConsoleHelper
class << self
def parse_arguments(arguments)
options = {}
......@@ -21,23 +20,8 @@ def parse_arguments(arguments)
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
set_options_env(arguments, options)
end
private
def available_environments
Dir['config/environments/*.rb'].map { |fname| File.basename(fname, '.*') }
end
end
attr_reader :options, :app, :console
......@@ -57,12 +41,9 @@ def sandbox?
end
def environment
options[:environment] ||= ENV['RAILS_ENV'] || ENV['RACK_ENV'] || 'development'
end
def environment?
environment
options[:environment] ||= super
end
alias_method :environment?, :environment
def set_environment!
Rails.env = environment
......
require 'active_support/concern'
module Rails
module ConsoleHelper # :nodoc:
extend ActiveSupport::Concern
module ClassMethods
def start(*args)
new(*args).start
end
private
def set_options_env(arguments, options)
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
def available_environments
Dir['config/environments/*.rb'].map { |fname| File.basename(fname, '.*') }
end
end
def environment
ENV["RAILS_ENV"] || ENV["RACK_ENV"] || "development"
end
end
end
\ No newline at end of file
require 'erb'
require 'yaml'
require 'optparse'
require 'rails/commands/console_helper'
module Rails
class DBConsole
include ConsoleHelper
attr_reader :arguments
def self.start
new.start
class << self
def parse_arguments(arguments)
options = {}
OptionParser.new do |opt|
opt.banner = "Usage: rails dbconsole [environment] [options]"
opt.on("-p", "--include-password", "Automatically provide the password from database.yml") do |v|
options['include_password'] = true
end
opt.on("--mode [MODE]", ['html', 'list', 'line', 'column'],
"Automatically put the sqlite3 database in the specified mode (html, list, line, column).") do |mode|
options['mode'] = mode
end
opt.on("--header") do |h|
options['header'] = h
end
opt.on("-h", "--help", "Show this help message.") do
puts opt
exit
end
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.parse!(arguments)
abort opt.to_s unless (0..1).include?(arguments.size)
end
set_options_env(arguments, options)
end
end
def initialize(arguments = ARGV)
......@@ -15,7 +51,7 @@ def initialize(arguments = ARGV)
end
def start
options = parse_arguments(arguments)
options = self.class.parse_arguments(arguments)
ENV['RAILS_ENV'] = options[:environment] || environment
case config["adapter"]
......@@ -101,90 +137,37 @@ def config
end
def environment
if Rails.respond_to?(:env)
Rails.env
else
ENV["RAILS_ENV"] || ENV["RACK_ENV"] || "development"
end
Rails.respond_to?(:env) ? Rails.env : super
end
protected
def configurations
require APP_PATH
ActiveRecord::Base.configurations = Rails.application.config.database_configuration
ActiveRecord::Base.configurations
end
def configurations
require APP_PATH
ActiveRecord::Base.configurations = Rails.application.config.database_configuration
ActiveRecord::Base.configurations
end
def parse_arguments(arguments)
options = {}
OptionParser.new do |opt|
opt.banner = "Usage: rails dbconsole [environment] [options]"
opt.on("-p", "--include-password", "Automatically provide the password from database.yml") do |v|
options['include_password'] = true
end
def find_cmd_and_exec(commands, *args)
commands = Array(commands)
opt.on("--mode [MODE]", ['html', 'list', 'line', 'column'],
"Automatically put the sqlite3 database in the specified mode (html, list, line, column).") do |mode|
options['mode'] = mode
dirs_on_path = ENV['PATH'].to_s.split(File::PATH_SEPARATOR)
unless (ext = RbConfig::CONFIG['EXEEXT']).empty?
commands = commands.map{|cmd| "#{cmd}#{ext}"}
end
opt.on("--header") do |h|
options['header'] = h
full_path_command = nil
found = commands.detect do |cmd|
dirs_on_path.detect do |path|
full_path_command = File.join(path, cmd)
File.file?(full_path_command) && File.executable?(full_path_command)
end
end
opt.on("-h", "--help", "Show this help message.") do
puts opt
exit
end
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.parse!(arguments)
abort opt.to_s unless (0..1).include?(arguments.size)
end
if arguments.first && arguments.first[0] != '-'
env = arguments.first
if available_environments.include? env
options[:environment] = env
if found
exec full_path_command, *args
else
options[:environment] = %w(production development test).detect {|e| e =~ /^#{env}/} || env
abort("Couldn't find database client: #{commands.join(', ')}. Check your $PATH and try again.")
end
end
options
end
def available_environments
Dir['config/environments/*.rb'].map { |fname| File.basename(fname, '.*') }
end
def find_cmd_and_exec(commands, *args)
commands = Array(commands)
dirs_on_path = ENV['PATH'].to_s.split(File::PATH_SEPARATOR)
unless (ext = RbConfig::CONFIG['EXEEXT']).empty?
commands = commands.map{|cmd| "#{cmd}#{ext}"}
end
full_path_command = nil
found = commands.detect do |cmd|
dirs_on_path.detect do |path|
full_path_command = File.join(path, cmd)
File.file?(full_path_command) && File.executable?(full_path_command)
end
end
if found
exec full_path_command, *args
else
abort("Couldn't find database client: #{commands.join(', ')}. Check your $PATH and try again.")
end
end
end
end
......@@ -99,19 +99,15 @@ def test_env
end
def test_rails_env_is_development_when_argument_is_dev
dbconsole = Rails::DBConsole.new
dbconsole.stub(:available_environments, ['development', 'test']) do
options = dbconsole.send(:parse_arguments, ['dev'])
Rails::DBConsole.stub(:available_environments, ['development', 'test']) do
options = Rails::DBConsole.send(:parse_arguments, ['dev'])
assert_match('development', options[:environment])
end
end
def test_rails_env_is_dev_when_argument_is_dev_and_dev_env_is_present
dbconsole = Rails::DBConsole.new
dbconsole.stub(:available_environments, ['dev']) do
options = dbconsole.send(:parse_arguments, ['dev'])
Rails::DBConsole.stub(:available_environments, ['dev']) do
options = Rails::DBConsole.send(:parse_arguments, ['dev'])
assert_match('dev', options[:environment])
end
end
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册