1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

using a Hash with default proc to memoize dispatch methods

This commit is contained in:
Mike Dalessio 2010-09-16 11:49:34 -04:00
parent f95f0918d7
commit 6b8a382a75

View file

@ -222,17 +222,12 @@ module Arel
def visit_BigDecimal o; quote(o) end
def visit_FalseClass o; quote(o) end
DISPATCH = {}
def visit object
send "visit_#{object.class.name.gsub('::', '_')}", object
#send DISPATCH[object.class], object
DISPATCH = Hash.new do |hash, klass|
hash[klass] = "visit_#{klass.name.gsub('::', '_')}"
end
private_instance_methods(false).each do |method|
method = method.to_s
next unless method =~ /^visit_(.*)$/
const = $1.split('_').inject(Object) { |m,s| m.const_get s }
DISPATCH[const] = method
def visit object
send DISPATCH[object.class], object
end
def quote value, column = nil