Skip to content

Commit

Permalink
refactors AR::Base#reset_table_name
Browse files Browse the repository at this point in the history
  • Loading branch information
fxn committed Jun 14, 2010
1 parent 8d82bef commit 4a8c880
Showing 1 changed file with 20 additions and 19 deletions.
39 changes: 20 additions & 19 deletions activerecord/lib/active_record/base.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
require 'active_support/core_ext/string/behavior'
require 'active_support/core_ext/kernel/singleton_class'
require 'active_support/core_ext/module/delegation'
require 'active_support/core_ext/module/introspection'
require 'active_support/core_ext/object/duplicable'
require 'active_support/core_ext/object/blank'
require 'arel'
Expand Down Expand Up @@ -652,26 +653,9 @@ def quoted_table_name
@quoted_table_name ||= connection.quote_table_name(table_name)
end

# Computes the table name, resets it internally, and returns it.
# Computes the table name, (re)sets it internally, and returns it.
def reset_table_name #:nodoc:
base = base_class

name =
# STI subclasses always use their superclass' table.
unless self == base
base.table_name
else
# Nested classes are prefixed with singular parent table name.
if parent < ActiveRecord::Base && !parent.abstract_class?
contained = parent.table_name
contained = contained.singularize if parent.pluralize_table_names
contained << '_'
end
name = "#{full_table_name_prefix}#{contained}#{undecorated_table_name(base.name)}#{table_name_suffix}"
end

set_table_name(name)
name
self.table_name = compute_table_name
end

def full_table_name_prefix #:nodoc:
Expand Down Expand Up @@ -1003,6 +987,23 @@ def undecorated_table_name(class_name = base_class.name)
table_name
end

# Computes and returns a table name according to default conventions.
def compute_table_name
base = base_class
if self == base
# Nested classes are prefixed with singular parent table name.
if parent < ActiveRecord::Base && !parent.abstract_class?
contained = parent.table_name
contained = contained.singularize if parent.pluralize_table_names
contained << '_'
end
"#{full_table_name_prefix}#{contained}#{undecorated_table_name(name)}#{table_name_suffix}"
else
# STI subclasses always use their superclass' table.
base.table_name
end
end

# Enables dynamic finders like <tt>find_by_user_name(user_name)</tt> and <tt>find_by_user_name_and_password(user_name, password)</tt>
# that are turned into <tt>where(:user_name => user_name).first</tt> and <tt>where(:user_name => user_name, :password => :password).first</tt>
# respectively. Also works for <tt>all</tt> by using <tt>find_all_by_amount(50)</tt> that is turned into <tt>where(:amount => 50).all</tt>.
Expand Down

0 comments on commit 4a8c880

Please sign in to comment.