From 4494a752c3c568c65fa899c54486153a1a5fa187 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Tue, 23 Jun 2009 19:10:42 +0200 Subject: Change current sstructure. --- railties/lib/generators/named_base.rb | 74 +++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 railties/lib/generators/named_base.rb (limited to 'railties/lib/generators/named_base.rb') diff --git a/railties/lib/generators/named_base.rb b/railties/lib/generators/named_base.rb new file mode 100644 index 0000000000..223b34ce57 --- /dev/null +++ b/railties/lib/generators/named_base.rb @@ -0,0 +1,74 @@ +require 'generators/base' +require 'generators/generated_attribute' + +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! + parse_attributes! if respond_to?(:attributes) + 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 + + # Convert attributes hash into an array with GeneratedAttribute objects. + # + def parse_attributes! + attributes.map! do |name, type| + Rails::Generator::GeneratedAttribute.new(name, type) + 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 -- cgit v1.2.3