1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Modified rake tasks to use new app generator structure and updated Thor version.

This commit is contained in:
José Valim 2009-07-16 11:17:19 +02:00
parent b03034a686
commit d6a590a710
40 changed files with 92 additions and 87 deletions

View file

@ -16,13 +16,14 @@ module Rails
#
# apply "recipes/jquery.rb"
#
def apply(path)
path = find_in_source_paths(path) unless path =~ /^http\:\/\//
def apply(path, options={})
verbose = options.fetch(:verbose, true)
path = find_in_source_paths(path) unless path =~ /^http\:\/\//
log :apply, path
shell.padding += 1
log :apply, path, verbose
shell.padding += 1 if verbose
instance_eval(open(path).read)
shell.padding -= 1
shell.padding -= 1 if verbose
end
# Install a plugin. You must provide either a Subversion url or Git url.

View file

@ -66,7 +66,6 @@ module Rails::Generators
empty_directory "config"
inside "config" do
copy_file "boot.rb"
copy_file "routes.rb"
template "environment.rb"
@ -76,6 +75,10 @@ module Rails::Generators
end
end
def create_boot_file
copy_file "config/boot.rb"
end
def create_activerecord_files
return if options[:skip_activerecord]
template "config/databases/#{options[:database]}.yml", "config/database.yml"

View file

@ -3,7 +3,7 @@ module Rails
class MetalGenerator < NamedBase
check_class_collision
def create_file
def create_metal_file
template "metal.rb", "app/metal/#{file_name}.rb"
end
end

View file

@ -21,13 +21,13 @@ module Rails
end
hook_for :generator do |instance, generator|
instance.inside_with_padding instance.send(:plugin_dir) do
instance.inside instance.send(:plugin_dir), :verbose => true do
instance.invoke generator, [ instance.name ], :namespace => false
end
end
hook_for :test_framework do |instance, test_framework|
instance.inside_with_padding instance.send(:plugin_dir) do
instance.inside instance.send(:plugin_dir), :verbose => true do
instance.invoke test_framework
end
end

View file

@ -78,51 +78,48 @@ namespace :rails do
end
desc "Update both configs, scripts and public/javascripts from Rails"
task :update => [ "update:scripts", "update:javascripts", "update:configs", "update:application_controller" ]
task :update => [ "update:configs", "update:javascripts", "update:scripts", "update:application_controller" ]
desc "Applies the template supplied by LOCATION=/path/to/template"
task :template do
require 'rails_generator/generators/applications/app/template_runner'
template = ENV["LOCATION"]
template = File.expand_path(template) if template !~ %r{\A[A-Za-z][A-Za-z0-9+\-\.]*://}
Rails::TemplateRunner.new(template)
require 'generators'
generator = Rails::Generators::Base.new [], {}, :destination_root => RAILS_ROOT
generator.apply template, :verbose => false
end
namespace :update do
desc "Add new scripts to the application script/ directory"
task :scripts do
local_base = "script"
edge_base = "#{File.dirname(__FILE__)}/../../bin"
def invoke_from_app_generator(method)
require 'generators'
require 'generators/rails/app/app_generator'
local = Dir["#{local_base}/**/*"].reject { |path| File.directory?(path) }
edge = Dir["#{edge_base}/**/*"].reject { |path| File.directory?(path) }
edge.each do |script|
base_name = script[(edge_base.length+1)..-1]
next if base_name == "rails"
next if local.detect { |path| base_name == path[(local_base.length+1)..-1] }
if !File.directory?("#{local_base}/#{File.dirname(base_name)}")
mkdir_p "#{local_base}/#{File.dirname(base_name)}"
end
install script, "#{local_base}/#{base_name}", :mode => 0755
end
end
desc "Update your javascripts from your current rails install"
task :javascripts do
require 'railties_path'
project_dir = RAILS_ROOT + '/public/javascripts/'
scripts = Dir[RAILTIES_PATH + '/html/javascripts/*.js']
scripts.reject!{|s| File.basename(s) == 'application.js'} if File.exist?(project_dir + 'application.js')
FileUtils.cp(scripts, project_dir)
generator = Rails::Generators::AppGenerator.new ["rails"], { :with_dispatchers => true },
:destination_root => RAILS_ROOT
generator.invoke(method)
end
desc "Update config/boot.rb from your current rails install"
task :configs do
require 'railties_path'
FileUtils.cp(RAILTIES_PATH + '/environments/boot.rb', RAILS_ROOT + '/config/boot.rb')
invoke_from_app_generator :create_boot_file
end
desc "Update Prototype javascripts from your current rails install"
task :javascripts do
invoke_from_app_generator :create_prototype_files
end
desc "Generate dispatcher files in RAILS_ROOT/public"
task :generate_dispatchers do
invoke_from_app_generator :create_dispatch_files
end
desc "Add new scripts to the application script/ directory"
task :scripts do
invoke_from_app_generator :create_script_files
end
desc "Rename application.rb to application_controller.rb"
task :application_controller do
old_style = RAILS_ROOT + '/app/controllers/application.rb'
@ -132,14 +129,5 @@ namespace :rails do
puts "#{old_style} has been renamed to #{new_style}, update your SCM as necessary"
end
end
desc "Generate dispatcher files in RAILS_ROOT/public"
task :generate_dispatchers do
require 'railties_path'
FileUtils.cp(RAILTIES_PATH + '/dispatches/config.ru', RAILS_ROOT + '/config.ru')
FileUtils.cp(RAILTIES_PATH + '/dispatches/dispatch.fcgi', RAILS_ROOT + '/public/dispatch.fcgi')
FileUtils.cp(RAILTIES_PATH + '/dispatches/dispatch.rb', RAILS_ROOT + '/public/dispatch.rb')
FileUtils.cp(RAILTIES_PATH + '/dispatches/dispatch.rb', RAILS_ROOT + '/public/dispatch.cgi')
end
end
end

View file

@ -136,21 +136,20 @@ class Thor
#
# ==== Parameters
# dir<String>:: the directory to move to.
# config<Hash>:: give :verbose => true to log and use padding.
#
def inside(dir='', &block)
def inside(dir='', config={}, &block)
verbose = config.fetch(:verbose, false)
say_status :inside, dir, verbose
shell.padding += 1 if verbose
@destination_stack.push File.expand_path(dir, destination_root)
FileUtils.mkdir_p(destination_root) unless File.exist?(destination_root)
FileUtils.cd(destination_root) { block.arity == 1 ? yield(destination_root) : yield }
@destination_stack.pop
end
# Same as inside, but log status and use padding.
#
def inside_with_padding(dir='', config={}, &block)
say_status :inside, dir, config.fetch(:verbose, true)
shell.padding += 1
inside(dir, &block)
shell.padding -= 1
@destination_stack.pop
shell.padding -= 1 if verbose
end
# Goes to the root and execute the given block.
@ -173,8 +172,7 @@ class Thor
#
def run(command, config={})
return unless behavior == :invoke
description = "#{command.inspect} from #{relative_to_original_destination_root(destination_root, false)}"
say_status :run, description, config.fetch(:verbose, true)
say_status :run, command, config.fetch(:verbose, true)
`#{command}` unless options[:pretend]
end
@ -196,8 +194,8 @@ class Thor
# ==== Parameters
# task<String>:: the task to be invoked
# args<Array>:: arguments to the task
# options<Hash>:: give :verbose => false to not log the status. Other options
# are given as parameter to Thor.
# config<Hash>:: give :verbose => false to not log the status. Other options
# are given as parameter to Thor.
#
# ==== Examples
#

View file

@ -87,7 +87,7 @@ class Thor::Group
if klass
say_status :invoke, #{name.inspect}, #{verbose.inspect}
block = self.class.invocation_blocks[#{name.inspect}]
invoke_with_padding klass, task, &block
_invoke_for_class_method klass, task, &block
else
say_status :error, %(#{name.inspect} [not found]), :red
end
@ -150,7 +150,7 @@ class Thor::Group
if klass
say_status :invoke, value, #{verbose.inspect}
block = self.class.invocation_blocks[#{name.inspect}]
invoke_with_padding klass, task, &block
_invoke_for_class_method klass, task, &block
else
say_status :error, %(\#{value} [not found]), :red
end
@ -237,4 +237,26 @@ class Thor::Group
end
include Thor::Base
protected
# Shortcut to invoke with padding and block handling. Use internally by
# invoke and invoke_from_option class methods.
#
def _invoke_for_class_method(klass, task=nil, *args, &block)
shell.padding += 1
result = if block_given?
if block.arity == 2
block.call(self, klass)
else
block.call(self, klass, task)
end
else
invoke klass, task, *args
end
shell.padding -= 1
result
end
end

View file

@ -130,26 +130,6 @@ class Thor
end
end
# Shortcut for invoke with padding and status handling. Used internally by
# class options invoke and invoke_from_option.
#
def invoke_with_padding(klass, task=nil, *args, &block)
shell.padding += 1
result = if block_given?
if block.arity == 2
block.call(self, klass)
else
block.call(self, klass, task)
end
else
invoke klass, task, *args
end
shell.padding -= 1
result
end
protected
# Configuration values that are shared between invocations.

View file

@ -1,9 +1,9 @@
begin
# Prefer gems to the bundled libs.
require 'rubygems'
gem 'thor', '>= 0.11.1'
gem 'thor', '>= 0.11.2'
rescue Gem::LoadError
$:.unshift "#{File.dirname(__FILE__)}/thor-0.11.1/lib"
$:.unshift "#{File.dirname(__FILE__)}/thor-0.11.2/lib"
end
require 'thor'

View file

@ -31,6 +31,19 @@ class ActionsTest < GeneratorsTestCase
assert_match /cool padding/, content
end
def test_apply_does_not_log_status_if_required
template = <<-TEMPLATE
say_status :cool, :padding
TEMPLATE
template.instance_eval "def read; self; end"
generator.expects(:open).with("http://gist.github.com/103208.txt").returns(template)
content = action(:apply, "http://gist.github.com/103208.txt", :verbose => false)
assert_match /cool padding/, content
assert_no_match /apply http/, content
end
def test_create_file_should_write_data_to_file_path
action :create_file, 'lib/test_file.rb', 'heres test data'
assert_file 'lib/test_file.rb', 'heres test data'