class WsdlMapper::Deserializers::ElementDirectory

Public Class Methods

new(type_directory, *base, &block) click to toggle source
# File lib/wsdl_mapper/deserializers/element_directory.rb, line 12
def initialize(type_directory, *base, &block)
  @type_directory = type_directory
  @directory = WsdlMapper::Dom::Directory.new on_nil: Errors::UnknownElementError
  @base = base

  instance_exec(&block) if block_given?
end

Public Instance Methods

each_element(&block) click to toggle source
# File lib/wsdl_mapper/deserializers/element_directory.rb, line 49
def each_element(&block)
  if block_given?
    @base.each do |base|
      base.each_element(&block)
    end
    @directory.each(&block)
  else
    types = @base.inject([]) { |sum, b| sum + b.each_element.to_a }
    types + @directory.each.to_a
  end
end
each_type(&block) click to toggle source
# File lib/wsdl_mapper/deserializers/element_directory.rb, line 61
def each_type(&block)
  @type_directory.each_type(&block)
end
knows?(element_name) click to toggle source
# File lib/wsdl_mapper/deserializers/element_directory.rb, line 26
def knows?(element_name)
  @directory.has_key?(element_name) || @base.any? { |b| b.knows? element_name }
end
load(element_name) click to toggle source
# File lib/wsdl_mapper/deserializers/element_directory.rb, line 30
def load(element_name)
  if @directory.has_key? element_name
    item = @directory[element_name]
    if item.loaded
      false
    else
      require item.require_path
      item.loaded = true
      true
    end
  else
    base = @base.find { |b| b.knows? element_name }
    unless base
      raise Errors::UnknownElementError.new element_name
    end
    base.load element_name
  end
end
register_element(element_name, type_name, require_path, class_name) click to toggle source
# File lib/wsdl_mapper/deserializers/element_directory.rb, line 20
def register_element(element_name, type_name, require_path, class_name)
  element_name = WsdlMapper::Dom::Name.get(*element_name)
  type_name = WsdlMapper::Dom::Name.get(*type_name)
  @directory[element_name] = ElementItem.new element_name, type_name, require_path, class_name
end