def compute_type(type_name)
if type_name.match(/^::/)
ActiveSupport::Dependencies.constantize(type_name)
else
candidates = []
name.scan(/::|$/) { candidates.unshift "#{$`}::#{type_name}" }
candidates << type_name
candidates.each do |candidate|
begin
constant = ActiveSupport::Dependencies.constantize(candidate)
return constant if candidate == constant.to_s
rescue NameError => e
raise e unless e.instance_of?(NameError)
rescue ArgumentError
end
end
raise NameError, "uninitialized constant #{candidates.first}"
end
end