class WsdlMapper::Serializers::TypeDirectory
Public Class Methods
new(*base, &block)
click to toggle source
# File lib/wsdl_mapper/serializers/type_directory.rb, line 9 def initialize(*base, &block) @base = base @types = {} @elements = {} @serializers = {} @by_type_name = Hash.new do |h, k| h[k] = find_and_load k end instance_exec(&block) if block_given? end
Public Instance Methods
find(obj)
click to toggle source
# File lib/wsdl_mapper/serializers/type_directory.rb, line 48 def find(obj) resolve obj.class.name end
get_element_name(name)
click to toggle source
# File lib/wsdl_mapper/serializers/type_directory.rb, line 30 def get_element_name(name) element_name = @elements[normalize(name)] return element_name if element_name @base.each do |base| element_name = base.get_element_name(name) return element_name if element_name end nil # TODO: raise error? end
register_element(name, element_name)
click to toggle source
# File lib/wsdl_mapper/serializers/type_directory.rb, line 21 def register_element(name, element_name) @elements[normalize(name)] = WsdlMapper::Dom::Name.get(*element_name) end
register_serializer(s8r_name, serializer)
click to toggle source
# File lib/wsdl_mapper/serializers/type_directory.rb, line 44 def register_serializer(s8r_name, serializer) @serializers[normalize(s8r_name)] = serializer end
register_type(type_name, require_path, s8r_name)
click to toggle source
# File lib/wsdl_mapper/serializers/type_directory.rb, line 25 def register_type(type_name, require_path, s8r_name) item = TypeItem.new type_name, require_path, s8r_name @types[normalize(type_name)] = item end
resolve(name)
click to toggle source
# File lib/wsdl_mapper/serializers/type_directory.rb, line 40 def resolve(name) @by_type_name[normalize(name)] end
Protected Instance Methods
find_and_load(type_name)
click to toggle source
# File lib/wsdl_mapper/serializers/type_directory.rb, line 53 def find_and_load(type_name) item = @types[type_name] unless item @base.each do |base| begin return base.resolve(type_name) rescue StandardError end end # TODO: custom error classes as in deserializer raise StandardError.new "Serializer for #{type_name} not found." end require item.require_path @serializers[normalize(item.s8r_name)] end
normalize(name)
click to toggle source
# File lib/wsdl_mapper/serializers/type_directory.rb, line 70 def normalize(name) name[0, 2] == '::' ? name : '::' + name end