From 6b8a382a75d1425ecf978f1e0fe9a636d55c8cc0 Mon Sep 17 00:00:00 2001 From: Mike Dalessio Date: Thu, 16 Sep 2010 11:49:34 -0400 Subject: using a Hash with default proc to memoize dispatch methods --- lib/arel/visitors/to_sql.rb | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) (limited to 'lib/arel/visitors') diff --git a/lib/arel/visitors/to_sql.rb b/lib/arel/visitors/to_sql.rb index 5be95565f3..e8b63a1533 100644 --- a/lib/arel/visitors/to_sql.rb +++ b/lib/arel/visitors/to_sql.rb @@ -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 -- cgit v1.2.3