From 16fafd658805407e2bda4f4bb06a70157c21f78a Mon Sep 17 00:00:00 2001 From: eileencodes Date: Tue, 9 Dec 2014 14:29:50 -0500 Subject: Move `alias_candiate` into `AbstractReflection` This moves `alias_candidate` out of the `ReflectionProxy` and into the `AbstractReflection` so it is shared by all reflections. Change `alias_name` to a method and and remove assignment in `#get_chain`. --- .../lib/active_record/associations/association_scope.rb | 16 +++++++--------- activerecord/lib/active_record/reflection.rb | 10 +++++++++- 2 files changed, 16 insertions(+), 10 deletions(-) (limited to 'activerecord/lib') diff --git a/activerecord/lib/active_record/associations/association_scope.rb b/activerecord/lib/active_record/associations/association_scope.rb index 198a047e18..9d94822fc5 100644 --- a/activerecord/lib/active_record/associations/association_scope.rb +++ b/activerecord/lib/active_record/associations/association_scope.rb @@ -114,10 +114,12 @@ module ActiveRecord end class ReflectionProxy < SimpleDelegator - attr_accessor :next, :alias_name + attr_accessor :next + attr_reader :alias_name - def alias_candidate(name) - "#{plural_name}_#{name}" + def initialize(reflection, alias_name) + super(reflection) + @alias_name = alias_name end end @@ -125,14 +127,10 @@ module ActiveRecord name = refl.name runtime_reflection = ActiveRecord::Reflection::RuntimeReflection.new(refl, association) alias_name = tracker.aliased_table_for(runtime_reflection.table_name, runtime_reflection.alias_candidate(name)) - runtime_reflection.alias_name = alias_name prev = runtime_reflection refl.chain.drop(1).each { |reflection| - proxy = ReflectionProxy.new(reflection) - - alias_name = tracker.aliased_table_for(proxy.table_name, proxy.alias_candidate(name)) - proxy.alias_name = alias_name - + alias_name = tracker.aliased_table_for(reflection.table_name, reflection.alias_candidate(name)) + proxy = ReflectionProxy.new(reflection, alias_name) prev.next = proxy prev = proxy } diff --git a/activerecord/lib/active_record/reflection.rb b/activerecord/lib/active_record/reflection.rb index 79c6504a18..111911b575 100644 --- a/activerecord/lib/active_record/reflection.rb +++ b/activerecord/lib/active_record/reflection.rb @@ -165,6 +165,10 @@ module ActiveRecord def constraints scope_chain.flatten end + + def alias_candidate(name) + "#{plural_name}_#{name}" + end end # Base class for AggregateReflection and AssociationReflection. Objects of @@ -936,7 +940,7 @@ module ActiveRecord end class RuntimeReflection < PolymorphicReflection - attr_accessor :next, :alias_name + attr_accessor :next def initialize(reflection, association) @reflection = reflection @@ -962,6 +966,10 @@ module ActiveRecord def alias_candidate(name) "#{plural_name}_#{name}_join" end + + def alias_name + Arel::Table.new(table_name) + end end end end -- cgit v1.2.3