diff options
author | José Valim <jose.valim@gmail.com> | 2009-06-23 16:50:21 +0200 |
---|---|---|
committer | José Valim <jose.valim@gmail.com> | 2009-06-23 16:53:48 +0200 |
commit | 83f7fe2028df15e058205c93308c0e19abd7157a (patch) | |
tree | 44cb0dfdbc71c2af772617690338668712da776b /railties/lib | |
parent | 301c48c15cc6bf8d8fac3c22356eacce380f6fce (diff) | |
download | rails-83f7fe2028df15e058205c93308c0e19abd7157a.tar.gz rails-83f7fe2028df15e058205c93308c0e19abd7157a.tar.bz2 rails-83f7fe2028df15e058205c93308c0e19abd7157a.zip |
NamedBase.
Diffstat (limited to 'railties/lib')
-rw-r--r-- | railties/lib/generator/base.rb | 3 | ||||
-rw-r--r-- | railties/lib/generator/generators/metal/metal_generator.rb | 10 | ||||
-rw-r--r-- | railties/lib/generator/named_base.rb | 55 |
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 |