mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Add support for templates for rails plugin new
This commit is contained in:
parent
b8a0fabe18
commit
bcd414fd10
4 changed files with 50 additions and 15 deletions
|
@ -54,8 +54,26 @@ module Rails
|
|||
valid_const?
|
||||
|
||||
empty_directory '.'
|
||||
set_default_accessors!
|
||||
FileUtils.cd(destination_root) unless options[:pretend]
|
||||
end
|
||||
|
||||
def apply_rails_template
|
||||
apply rails_template if rails_template
|
||||
rescue Thor::Error, LoadError, Errno::ENOENT => e
|
||||
raise Error, "The template [#{rails_template}] could not be loaded. Error: #{e}"
|
||||
end
|
||||
|
||||
def set_default_accessors!
|
||||
self.rails_template = case options[:template]
|
||||
when /^http:\/\//
|
||||
options[:template]
|
||||
when String
|
||||
File.expand_path(options[:template], Dir.pwd)
|
||||
else
|
||||
options[:template]
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -217,7 +217,6 @@ module Rails
|
|||
end
|
||||
|
||||
def create_root
|
||||
set_default_accessors!
|
||||
super
|
||||
end
|
||||
|
||||
|
@ -299,9 +298,7 @@ module Rails
|
|||
end
|
||||
|
||||
def apply_rails_template
|
||||
apply rails_template if rails_template
|
||||
rescue Thor::Error, LoadError, Errno::ENOENT => e
|
||||
raise Error, "The template [#{rails_template}] could not be loaded. Error: #{e}"
|
||||
super
|
||||
end
|
||||
|
||||
def bundle_if_dev_or_edge
|
||||
|
@ -338,17 +335,6 @@ module Rails
|
|||
builder.send(meth, *args) if builder.respond_to?(meth)
|
||||
end
|
||||
|
||||
def set_default_accessors!
|
||||
self.rails_template = case options[:template]
|
||||
when /^http:\/\//
|
||||
options[:template]
|
||||
when String
|
||||
File.expand_path(options[:template], Dir.pwd)
|
||||
else
|
||||
options[:template]
|
||||
end
|
||||
end
|
||||
|
||||
# Define file as an alias to create_file for backwards compatibility.
|
||||
def file(*args, &block)
|
||||
create_file(*args, &block)
|
||||
|
|
|
@ -82,6 +82,9 @@ module Rails
|
|||
class_option :builder, :type => :string, :aliases => "-b",
|
||||
:desc => "Path to a plugin builder (can be a filesystem path or URL)"
|
||||
|
||||
class_option :template, :type => :string, :aliases => "-m",
|
||||
:desc => "Path to an application template (can be a filesystem path or URL)"
|
||||
|
||||
class_option :skip_gemfile, :type => :boolean, :default => false,
|
||||
:desc => "Don't create a Gemfile"
|
||||
|
||||
|
@ -147,6 +150,14 @@ module Rails
|
|||
build(:test_dummy_clean)
|
||||
end
|
||||
|
||||
def finish_template
|
||||
build(:leftovers)
|
||||
end
|
||||
|
||||
def apply_rails_template
|
||||
super
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def self.banner
|
||||
|
|
|
@ -110,6 +110,26 @@ class PluginNewGeneratorTest < Rails::Generators::TestCase
|
|||
assert_match /STEP 2.*create Gemfile/m, output
|
||||
end
|
||||
|
||||
def test_template_from_dir_pwd
|
||||
FileUtils.cd(Rails.root)
|
||||
assert_match /It works from file!/, run_generator([destination_root, "-m", "lib/template.rb"])
|
||||
end
|
||||
|
||||
def test_template_raises_an_error_with_invalid_path
|
||||
content = capture(:stderr){ run_generator([destination_root, "-m", "non/existant/path"]) }
|
||||
assert_match /The template \[.*\] could not be loaded/, content
|
||||
assert_match /non\/existant\/path/, content
|
||||
end
|
||||
|
||||
def test_template_is_executed_when_supplied
|
||||
path = "http://gist.github.com/103208.txt"
|
||||
template = %{ say "It works!" }
|
||||
template.instance_eval "def read; self; end" # Make the string respond to read
|
||||
|
||||
generator([destination_root], :template => path).expects(:open).with(path, 'Accept' => 'application/x-thor-template').returns(template)
|
||||
assert_match /It works!/, silence(:stdout){ generator.invoke_all }
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def action(*args, &block)
|
||||
|
|
Loading…
Reference in a new issue