aboutsummaryrefslogtreecommitdiffstats
path: root/railties/lib/generator
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@gmail.com>2009-06-23 16:50:21 +0200
committerJosé Valim <jose.valim@gmail.com>2009-06-23 16:53:48 +0200
commit83f7fe2028df15e058205c93308c0e19abd7157a (patch)
tree44cb0dfdbc71c2af772617690338668712da776b /railties/lib/generator
parent301c48c15cc6bf8d8fac3c22356eacce380f6fce (diff)
downloadrails-83f7fe2028df15e058205c93308c0e19abd7157a.tar.gz
rails-83f7fe2028df15e058205c93308c0e19abd7157a.tar.bz2
rails-83f7fe2028df15e058205c93308c0e19abd7157a.zip
NamedBase.
Diffstat (limited to 'railties/lib/generator')
-rw-r--r--railties/lib/generator/base.rb3
-rw-r--r--railties/lib/generator/generators/metal/metal_generator.rb10
-rw-r--r--railties/lib/generator/named_base.rb55
3 files changed, 57 insertions, 11 deletions
diff --git a/railties/lib/generator/base.rb b/railties/lib/generator/base.rb
index c1452cdb7f..8e778e1d15 100644
--- a/railties/lib/generator/base.rb
+++ b/railties/lib/generator/base.rb
@@ -41,8 +41,7 @@ module Rails
#
def self.generator_name
@generator_name ||= begin
- klass_name = self.name
- klass_name.gsub!(/^Rails::Generators::/, '')
+ klass_name = self.name.gsub(/^Rails::Generators::/, '')
klass_name.gsub!(/Generator$/, '')
klass_name.underscore
end
diff --git a/railties/lib/generator/generators/metal/metal_generator.rb b/railties/lib/generator/generators/metal/metal_generator.rb
index d999bd89f7..ba062b30be 100644
--- a/railties/lib/generator/generators/metal/metal_generator.rb
+++ b/railties/lib/generator/generators/metal/metal_generator.rb
@@ -1,15 +1,7 @@
module Rails::Generators
- class MetalGenerator < Base
- argument :file_name, :type => :string
-
+ class MetalGenerator < NamedBase
def create_file
template "metal.rb", "app/metal/#{file_name}.rb"
end
-
- protected
-
- def class_name
- file_name.classify
- end
end
end
diff --git a/railties/lib/generator/named_base.rb b/railties/lib/generator/named_base.rb
index 1d3de123d5..c35667576a 100644
--- a/railties/lib/generator/named_base.rb
+++ b/railties/lib/generator/named_base.rb
@@ -3,6 +3,61 @@ require 'generator/base'
module Rails
module Generators
class NamedBase < Base
+ argument :name, :type => :string
+
+ attr_reader :class_name, :singular_name, :plural_name, :table_name,
+ :class_path, :file_path, :class_nesting, :class_nesting_depth
+ alias :file_name :singular_name
+
+ def initialize(*args)
+ super
+ assign_names!
+ end
+
+ protected
+
+ def assign_names!
+ base_name, @class_path, @file_path, @class_nesting, @class_nesting_depth = extract_modules(name)
+ @class_name_without_nesting, @singular_name, @plural_name = inflect_names(base_name)
+
+ @table_name = if !defined?(ActiveRecord::Base) || ActiveRecord::Base.pluralize_table_names
+ plural_name
+ else
+ singular_name
+ end
+ @table_name.gsub! '/', '_'
+
+ if @class_nesting.empty?
+ @class_name = @class_name_without_nesting
+ else
+ @table_name = @class_nesting.underscore << "_" << @table_name
+ @class_name = "#{@class_nesting}::#{@class_name_without_nesting}"
+ end
+ end
+
+ # Extract modules from filesystem-style or ruby-style path. Both
+ # good/fun/stuff and Good::Fun::Stuff produce the same results.
+ #
+ def extract_modules(name)
+ modules = name.include?('/') ? name.split('/') : name.split('::')
+ name = modules.pop
+ path = modules.map { |m| m.underscore }
+
+ file_path = (path + [name.underscore]).join('/')
+ nesting = modules.map { |m| m.camelize }.join('::')
+
+ [name, path, file_path, nesting, modules.size]
+ end
+
+ # Receives name and return camelized, underscored and pluralized names.
+ #
+ def inflect_names(name)
+ camel = name.camelize
+ under = camel.underscore
+ plural = under.pluralize
+ [camel, under, plural]
+ end
+
end
end
end