aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/arel/visitors/reduce.rb8
-rw-r--r--lib/arel/visitors/visitor.rb20
-rw-r--r--test/visitors/test_to_sql.rb2
3 files changed, 11 insertions, 19 deletions
diff --git a/lib/arel/visitors/reduce.rb b/lib/arel/visitors/reduce.rb
index 1d74934fe5..9670cad27c 100644
--- a/lib/arel/visitors/reduce.rb
+++ b/lib/arel/visitors/reduce.rb
@@ -10,14 +10,14 @@ module Arel
private
def visit object, collector
- send dispatch[object.class.name], object, collector
+ send dispatch[object.class], object, collector
rescue NoMethodError => e
- raise e if respond_to?(dispatch[object.class.name], true)
+ raise e if respond_to?(dispatch[object.class], true)
superklass = object.class.ancestors.find { |klass|
- respond_to?(dispatch[klass.name], true)
+ respond_to?(dispatch[klass], true)
}
raise(TypeError, "Cannot visit #{object.class}") unless superklass
- dispatch[object.class.name] = dispatch[superklass.name]
+ dispatch[object.class] = dispatch[superklass]
retry
end
end
diff --git a/lib/arel/visitors/visitor.rb b/lib/arel/visitors/visitor.rb
index 2152da9f05..bfe7342f04 100644
--- a/lib/arel/visitors/visitor.rb
+++ b/lib/arel/visitors/visitor.rb
@@ -12,17 +12,9 @@ module Arel
private
def self.dispatch_cache
- dispatch = Hash.new do |hash, class_name|
- hash[class_name] = "visit_#{(class_name || '').gsub('::', '_')}"
+ Hash.new do |hash, klass|
+ hash[klass] = "visit_#{(klass.name || '').gsub('::', '_')}"
end
-
- # pre-populate cache. FIXME: this should be passed in to each
- # instance, but we can do that later.
- self.class.private_instance_methods.sort.each do |name|
- next unless name =~ /^visit_(.*)$/
- dispatch[$1.gsub('_', '::')] = name
- end
- dispatch
end
def get_dispatch_cache
@@ -34,14 +26,14 @@ module Arel
end
def visit object
- send dispatch[object.class.name], object
+ send dispatch[object.class], object
rescue NoMethodError => e
- raise e if respond_to?(dispatch[object.class.name], true)
+ raise e if respond_to?(dispatch[object.class], true)
superklass = object.class.ancestors.find { |klass|
- respond_to?(dispatch[klass.name], true)
+ respond_to?(dispatch[klass], true)
}
raise(TypeError, "Cannot visit #{object.class}") unless superklass
- dispatch[object.class.name] = dispatch[superklass.name]
+ dispatch[object.class] = dispatch[superklass]
retry
end
end
diff --git a/test/visitors/test_to_sql.rb b/test/visitors/test_to_sql.rb
index 7895866809..2e3f7f8624 100644
--- a/test/visitors/test_to_sql.rb
+++ b/test/visitors/test_to_sql.rb
@@ -36,7 +36,7 @@ module Arel
end
def dispatch
- { Arel::Table.name => 'hello' }
+ { Arel::Table => 'hello' }
end
}.new