From 07a340e8a8c54770a80f7ad2432e265c01b926d9 Mon Sep 17 00:00:00 2001 From: Harri Kauhanen Date: Tue, 9 Sep 2008 09:59:07 +0300 Subject: [PATCH] Naming convention for namespaced models updated and made configurable --- activerecord/lib/active_record/base.rb | 29 ++++++++++++++++++++++++++--- 1 files changed, 26 insertions(+), 3 deletions(-) diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb index 907495a..8383d28 100755 --- a/activerecord/lib/active_record/base.rb +++ b/activerecord/lib/active_record/base.rb @@ -441,6 +441,17 @@ module ActiveRecord #:nodoc: cattr_accessor :pluralize_table_names, :instance_writer => false @@pluralize_table_names = true + # Indicates whether table names should be the prefixed with module name(s) of the class. + # If true, the default table name for module Company; class Product < ActiveRecord::Base; end; end; + # will be +company__products+. If false, it would just be +products+. + # See table_name for the full rules on table/class naming. This is false, by default. + cattr_accessor :namespace_modules_in_table_names, :instance_writer => false + @@namespace_modules_in_table_names = false + + # Determine whether to store the full constant name including namespace when using STI + superclass_delegating_accessor :store_full_sti_class + self.store_full_sti_class = false + # Determines whether to use ANSI codes to colorize the logging statements committed by the connection adapter. These colors # make it much easier to overview things during debugging (when used through a reader like +tail+ and on a black background), but # may complicate matters if you use software like syslog. This is true, by default. @@ -1038,6 +1049,7 @@ module ActiveRecord #:nodoc: def reset_table_name #:nodoc: base = base_class + class_name = base.name name = # STI subclasses always use their superclass' table. @@ -1049,8 +1061,10 @@ module ActiveRecord #:nodoc: contained = parent.table_name contained = contained.singularize if parent.pluralize_table_names contained << '_' + class_name = class_name.sub("#{parent.name}::", '') end - name = "#{table_name_prefix}#{contained}#{undecorated_table_name(base.name)}#{table_name_suffix}" + + name = "#{table_name_prefix}#{contained}#{undecorated_table_name(class_name)}#{table_name_suffix}" end set_table_name(name) @@ -1155,9 +1169,12 @@ module ActiveRecord #:nodoc: alias :sequence_name= :set_sequence_name # Turns the +table_name+ back into a class name following the reverse rules of +table_name+. + # NOTE! This method is broken for nested inner classes def class_name(table_name = table_name) # :nodoc: # remove any prefix and/or suffix from the table name - class_name = table_name[table_name_prefix.length..-(table_name_suffix.length + 1)].camelize + class_name = table_name[table_name_prefix.length..-(table_name_suffix.length + 1)] + class_name = class_name.gsub('__', '/') if namespace_modules_in_table_names + class_name = class_name.camelize class_name = class_name.singularize if pluralize_table_names class_name end @@ -1667,7 +1684,13 @@ module ActiveRecord #:nodoc: # Guesses the table name, but does not decorate it with prefix and suffix information. def undecorated_table_name(class_name = base_class.name) - table_name = class_name.to_s.demodulize.underscore + # table_name = class_name.to_s.demodulize.underscore + if namespace_modules_in_table_names + table_name = class_name.to_s.underscore.gsub('/', '__') + else + table_name = class_name.to_s.demodulize.underscore + end + table_name = table_name.pluralize if pluralize_table_names table_name end -- 1.5.5.1