Checkout of Instiki Trunk 1/21/2007.
This commit is contained in:
commit
69b62b6f33
1138 changed files with 139586 additions and 0 deletions
44
vendor/rails/railties/lib/rails_generator/spec.rb
vendored
Normal file
44
vendor/rails/railties/lib/rails_generator/spec.rb
vendored
Normal file
|
@ -0,0 +1,44 @@
|
|||
module Rails
|
||||
module Generator
|
||||
# A spec knows where a generator was found and how to instantiate it.
|
||||
# Metadata include the generator's name, its base path, and the source
|
||||
# which yielded it (PathSource, GemSource, etc.)
|
||||
class Spec
|
||||
attr_reader :name, :path, :source
|
||||
|
||||
def initialize(name, path, source)
|
||||
@name, @path, @source = name, path, source
|
||||
end
|
||||
|
||||
# Look up the generator class. Require its class file, find the class
|
||||
# in ObjectSpace, tag it with this spec, and return.
|
||||
def klass
|
||||
unless @klass
|
||||
require class_file
|
||||
@klass = lookup_class
|
||||
@klass.spec = self
|
||||
end
|
||||
@klass
|
||||
end
|
||||
|
||||
def class_file
|
||||
"#{path}/#{name}_generator.rb"
|
||||
end
|
||||
|
||||
def class_name
|
||||
"#{name.camelize}Generator"
|
||||
end
|
||||
|
||||
private
|
||||
# Search for the first Class descending from Rails::Generator::Base
|
||||
# whose name matches the requested class name.
|
||||
def lookup_class
|
||||
ObjectSpace.each_object(Class) do |obj|
|
||||
return obj if obj.ancestors.include?(Rails::Generator::Base) and
|
||||
obj.name.split('::').last == class_name
|
||||
end
|
||||
raise NameError, "Missing #{class_name} class in #{class_file}"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue