Class SOAP::Mapping::Registry::Map
In: soap/mapping/registry.rb
Parent: Object

Methods

Public Class methods

[Source]

# File soap/mapping/registry.rb, line 179
    def initialize(registry)
      @obj2soap = {}
      @soap2obj = {}
      @registry = registry
    end

Public Instance methods

Give priority to latter entry.

[Source]

# File soap/mapping/registry.rb, line 230
    def add(obj_class, soap_class, factory, info)
      info ||= {}
      (@obj2soap[obj_class] ||= []).unshift([soap_class, factory, info])
      (@soap2obj[soap_class] ||= []).unshift([obj_class, factory, info])
    end

[Source]

# File soap/mapping/registry.rb, line 236
    def clear
      @obj2soap.clear
      @soap2obj.clear
    end

[Source]

# File soap/mapping/registry.rb, line 246
    def find_mapped_obj_class(target_soap_class)
      map = @soap2obj[target_soap_class]
      map.empty? ? nil : map[0][0]
    end

[Source]

# File soap/mapping/registry.rb, line 241
    def find_mapped_soap_class(target_obj_class)
      map = @obj2soap[target_obj_class]
      map.empty? ? nil : map[0][1]
    end

Give priority to former entry.

[Source]

# File soap/mapping/registry.rb, line 222
    def init(init_map = [])
      clear
      init_map.reverse_each do |obj_class, soap_class, factory, info|
        add(obj_class, soap_class, factory, info)
      end
    end

[Source]

# File soap/mapping/registry.rb, line 185
    def obj2soap(obj)
      klass = obj.class
      if map = @obj2soap[klass]
        map.each do |soap_class, factory, info|
          ret = factory.obj2soap(soap_class, obj, info, @registry)
          return ret if ret
        end
      end
      ancestors = klass.ancestors
      ancestors.delete(klass)
      ancestors.delete(::Object)
      ancestors.delete(::Kernel)
      ancestors.each do |klass|
        if map = @obj2soap[klass]
          map.each do |soap_class, factory, info|
            if info[:derived_class]
              ret = factory.obj2soap(soap_class, obj, info, @registry)
              return ret if ret
            end
          end
        end
      end
      nil
    end

[Source]

# File soap/mapping/registry.rb, line 210
    def soap2obj(node, klass = nil)
      if map = @soap2obj[node.class]
        map.each do |obj_class, factory, info|
          next if klass and obj_class != klass
          conv, obj = factory.soap2obj(obj_class, node, info, @registry)
          return true, obj if conv
        end
      end
      return false, nil
    end

[Validate]