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

Load generators from user home and show a error message if they can't be loaded.

This commit is contained in:
José Valim 2009-07-04 19:03:52 +02:00
parent b277cf28e8
commit eeb6a0786a
3 changed files with 37 additions and 11 deletions

View file

@ -1,27 +1,39 @@
activesupport_path = "#{File.dirname(__FILE__)}/../../activesupport/lib" activesupport_path = "#{File.dirname(__FILE__)}/../../activesupport/lib"
$:.unshift(activesupport_path) if File.directory?(activesupport_path) $:.unshift(activesupport_path) if File.directory?(activesupport_path)
begin
require 'active_support/all' require 'active_support/all'
rescue LoadError
require 'rubygems'
gem 'activesupport'
require 'active_support/all'
end
$:.unshift(File.dirname(__FILE__))
require 'rails/version' unless defined?(Rails::VERSION)
# TODO Use vendored Thor # TODO Use vendored Thor
require 'rubygems' require 'rubygems'
gem 'josevalim-thor' gem 'josevalim-thor'
require 'thor' require 'thor'
$:.unshift(File.dirname(__FILE__))
require 'rails/version' unless defined?(Rails::VERSION)
require 'generators/base' require 'generators/base'
require 'generators/named_base' require 'generators/named_base'
module Rails module Rails
module Generators module Generators
# Generators load paths. First search on generators in the RAILS_ROOT, then # Generators load paths used on lookup. The lookup happens as:
# look for them in rails generators.
# #
# TODO Right now, only plugin and frozen gems generators are loaded. Gems # 1) builtin generators
# loaded by rubygems are not available since Rails dependencies system is # 2) frozen gems generators
# being reworked. # 3) rubygems gems generators (not available yet)
# 4) plugin generators
# 5) lib generators
# 6) ~/rails/generators
#
# TODO Add Rubygems generators (depends on dependencies system rework)
# TODO Remove hardcoded paths for all, except (1).
# #
def self.load_path def self.load_path
@@load_path ||= begin @@load_path ||= begin
@ -32,6 +44,7 @@ module Rails
paths += Dir[File.join(RAILS_ROOT, "vendor", "plugins", "*", "lib", "generators")] paths += Dir[File.join(RAILS_ROOT, "vendor", "plugins", "*", "lib", "generators")]
paths << File.join(RAILS_ROOT, "lib", "generators") paths << File.join(RAILS_ROOT, "lib", "generators")
end end
paths << File.join(Thor::Util.user_home, ".rails", "generators")
paths paths
end end
end end
@ -174,7 +187,11 @@ module Rails
self.load_path.each do |path| self.load_path.each do |path|
Dir[File.join(path, generators_path, name)].each do |file| Dir[File.join(path, generators_path, name)].each do |file|
begin
require file require file
rescue Exception => e
warn "[WARNING] Could not load generator at #{file.inspect}. Error: #{e.message}"
end
end end
end end
end end

View file

@ -0,0 +1,3 @@
# Old generator version
class WrongGenerator < Rails::Generator::NamedBase
end

View file

@ -81,7 +81,13 @@ class GeneratorsTest < GeneratorsTestCase
def test_rails_generators_with_others_information def test_rails_generators_with_others_information
output = capture(:stdout){ Rails::Generators.help }.split("\n").last output = capture(:stdout){ Rails::Generators.help }.split("\n").last
assert_equal "Others: active_record:fixjour, fixjour, mspec, rails:javascripts.", output assert_equal "Others: active_record:fixjour, fixjour, mspec, rails:javascripts, wrong.", output
end
def test_warning_is_raised_if_generator_cant_be_loaded
output = capture(:stderr){ Rails::Generators.find_by_namespace(:wrong) }
assert_match /\[WARNING\] Could not load generator at/, output
assert_match /Error: uninitialized constant Rails::Generator/, output
end end
def test_no_color_sets_proper_shell def test_no_color_sets_proper_shell