mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
More code refactoring.
This commit is contained in:
parent
d5bdf31d89
commit
0bb95968db
7 changed files with 53 additions and 35 deletions
|
@ -2,6 +2,11 @@ require 'generators/actions'
|
|||
|
||||
module Rails
|
||||
module Generators
|
||||
DEFAULTS = {
|
||||
:test_framework => 'test_unit',
|
||||
:template_engine => 'erb'
|
||||
}
|
||||
|
||||
class Error < Thor::Error
|
||||
end
|
||||
|
||||
|
@ -113,39 +118,29 @@ module Rails
|
|||
end
|
||||
end
|
||||
|
||||
# Small macro to add test_framework option and invoke it.
|
||||
# Invoke a generator based on the given name. If a class option does not
|
||||
# exist for the current name, it's created.
|
||||
#
|
||||
def self.add_and_invoke_test_framework_option!
|
||||
class_option :test_framework, :type => :string, :aliases => "-t", :default => "test_unit",
|
||||
:desc => "Test framework to be invoked by this generator", :banner => "NAME"
|
||||
|
||||
define_method :invoke_test_framework do
|
||||
return unless options[:test_framework]
|
||||
name = "#{options[:test_framework]}:generators:#{self.class.generator_name}"
|
||||
|
||||
begin
|
||||
invoke name
|
||||
rescue Thor::UndefinedTaskError
|
||||
say "Could not find and invoke '#{name}'."
|
||||
def self.invoke_for(*names)
|
||||
names.each do |name|
|
||||
unless class_options[name]
|
||||
aliases = "-" + name.to_s.gsub(/_framework$/, '').split('_').last[0,1]
|
||||
class_option name, :type => :string, :default => DEFAULTS[name], :banner => "NAME", :aliases => aliases,
|
||||
:desc => "#{name.to_s.humanize} to be used"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# Small macro to add template engine option and invoke it.
|
||||
#
|
||||
def self.add_and_invoke_template_engine_option!
|
||||
class_option :template_engine, :type => :string, :aliases => "-e", :default => "erb",
|
||||
:desc => "Template engine to be invoked by this generator", :banner => "NAME"
|
||||
class_eval <<-METHOD, __FILE__, __LINE__
|
||||
def invoke_#{name}
|
||||
return unless options[#{name.inspect}]
|
||||
task = "\#{options[#{name.inspect}]}:generators:\#{self.class.generator_name}"
|
||||
|
||||
define_method :invoke_template_engine do
|
||||
return unless options[:template_engine]
|
||||
name = "#{options[:template_engine]}:generators:#{self.class.generator_name}"
|
||||
|
||||
begin
|
||||
invoke name
|
||||
rescue Thor::UndefinedTaskError
|
||||
say "Could not find and invoke '#{name}'."
|
||||
end
|
||||
begin
|
||||
invoke task
|
||||
rescue Thor::UndefinedTaskError
|
||||
say "Could not find and invoke '\#{task}'."
|
||||
end
|
||||
end
|
||||
METHOD
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
<%= class_name %>#<%= @action %>
|
||||
|
||||
Find me in <%= @path %>
|
||||
Find me in app/views/<%= @path %>
|
||||
|
|
|
@ -11,8 +11,7 @@ module Rails
|
|||
template "mailer.rb", File.join('app/models', class_path, "#{file_name}.rb")
|
||||
end
|
||||
|
||||
add_and_invoke_template_engine_option!
|
||||
add_and_invoke_test_framework_option!
|
||||
invoke_for :template_engine, :test_framework
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -9,7 +9,7 @@ module Rails
|
|||
template 'observer.rb', File.join('app/models', class_path, "#{file_name}_observer.rb")
|
||||
end
|
||||
|
||||
add_and_invoke_test_framework_option!
|
||||
invoke_for :test_framework
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -27,7 +27,7 @@ module Rails
|
|||
directory 'lib'
|
||||
end
|
||||
|
||||
add_and_invoke_test_framework_option!
|
||||
invoke_for :test_framework
|
||||
|
||||
def create_tasks_files
|
||||
return unless options[:with_tasks]
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
<%= class_name %>#<%= @action %>
|
||||
|
||||
Find me in <%= @path %>
|
||||
Find me in app/views/<%= @path %>
|
||||
|
|
|
@ -4,6 +4,16 @@ require 'generators/rails/app/app_generator'
|
|||
|
||||
class AppGeneratorTest < GeneratorsTestCase
|
||||
|
||||
def setup
|
||||
super
|
||||
Rails::Generators::AppGenerator.instance_variable_set('@desc', nil)
|
||||
end
|
||||
|
||||
def teardown
|
||||
super
|
||||
Rails::Generators::AppGenerator.instance_variable_set('@desc', nil)
|
||||
end
|
||||
|
||||
def test_application_skeleton_is_created
|
||||
run_generator
|
||||
|
||||
|
@ -120,6 +130,20 @@ class AppGeneratorTest < GeneratorsTestCase
|
|||
assert_match /It works!/, silence(:stdout){ generator.invoke(:all) }
|
||||
end
|
||||
|
||||
def test_usage_read_from_file
|
||||
File.expects(:read).returns("USAGE FROM FILE")
|
||||
assert_equal "USAGE FROM FILE", Rails::Generators::AppGenerator.desc
|
||||
end
|
||||
|
||||
def test_default_usage
|
||||
File.expects(:exist?).returns(false)
|
||||
assert_match /Create rails files for app generator/, Rails::Generators::AppGenerator.desc
|
||||
end
|
||||
|
||||
def test_default_namespace
|
||||
assert_match "rails:generators:app", Rails::Generators::AppGenerator.namespace
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def run_generator(args=[])
|
||||
|
|
Loading…
Reference in a new issue