1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
module Bogus
class ConvertsNameToClass
extend Takes
class CanNotFindClass < RuntimeError; end
takes :search_modules
def convert(name)
class_name = camelize(name)
klass = nil
@search_modules.each do |mod|
klass = mod.const_get(class_name) rescue nil
break if klass
end
raise CanNotFindClass.new("Can not locate class for name: #{name}") unless klass
klass
end
private
def camelize(symbol)
string = symbol.to_s
string = string.gsub(/_\w/) { |match| match[1].upcase }
return string.gsub(/^\w/) { |match| match.upcase }
end
end
end
|