class WsdlMapper::Deserializers::ClassMapping

Constants

XSI_NIL
XSI_NS

Attributes

attributes[R]
properties[R]

Public Class Methods

new(cls, simple: false, &block) click to toggle source
# File lib/wsdl_mapper/deserializers/class_mapping.rb, line 20
def initialize(cls, simple: false, &block)
  @cls = cls
  @attributes = Directory.new #on_nil: Errors::UnknownAttributeError
  @properties = Directory.new on_nil: Errors::UnknownElementError
  @simple = simple
  @wrappers = Directory.new
  @delegate = nil

  instance_exec(&block)
end

Public Instance Methods

build_object(base, frame) click to toggle source
# File lib/wsdl_mapper/deserializers/class_mapping.rb, line 81
def build_object(base, frame)
  if @simple
    type_name = WsdlMapper::Dom::Name.get(*@simple)
    content = base.to_ruby type_name, frame.text
    @cls.new content
  else
    @cls.new
  end
end
end(base, frame) click to toggle source
# File lib/wsdl_mapper/deserializers/class_mapping.rb, line 57
def end(base, frame)
  return if nil_attr?(frame.attrs)

  frame.object = build_object base, frame

  if @delegate
    mapping = base.get_type_mapping @delegate.type_name
    delegate = mapping.build_object base, frame
    mapping.set_properties base, frame, delegate
    mapping.set_attributes base, frame, delegate
    frame.object.send "#{@delegate.accessor}=", delegate
  else
    set_attributes base, frame, frame.object
    set_properties base, frame, frame.object
  end
end
get_type_name_for_prop(prop_name) click to toggle source
# File lib/wsdl_mapper/deserializers/class_mapping.rb, line 91
def get_type_name_for_prop(prop_name)
  @properties[prop_name].type_name
rescue Errors::UnknownElementError => e
  e.parent = @cls
  raise e
end
nil_attr?(attrs) click to toggle source
# File lib/wsdl_mapper/deserializers/class_mapping.rb, line 74
def nil_attr? attrs
  # TODO: test
  !!attrs.find do |(name, _)|
    name == XSI_NIL
  end
end
register_attr(accessor, attr_name, type_name) click to toggle source
# File lib/wsdl_mapper/deserializers/class_mapping.rb, line 31
def register_attr(accessor, attr_name, type_name)
  attr_name = Name.get(*attr_name)
  @attributes[attr_name] = AttrMapping.new(accessor, attr_name, Name.get(*type_name))
end
register_delegate(accessor, type_name) click to toggle source
# File lib/wsdl_mapper/deserializers/class_mapping.rb, line 41
def register_delegate(accessor, type_name)
  @delegate = Delegate.new accessor, Name.get(*type_name)
end
register_prop(accessor, prop_name, type_name, array: false) click to toggle source
# File lib/wsdl_mapper/deserializers/class_mapping.rb, line 36
def register_prop(accessor, prop_name, type_name, array: false)
  prop_name = Name.get(*prop_name)
  @properties[prop_name] = PropMapping.new(accessor, prop_name, Name.get(*type_name), array: array)
end
register_wrapper(name) click to toggle source
# File lib/wsdl_mapper/deserializers/class_mapping.rb, line 45
def register_wrapper(name)
  name = Name.get(*name)
  @wrappers[name] = true
end
set_attributes(base, frame, object) click to toggle source
# File lib/wsdl_mapper/deserializers/class_mapping.rb, line 112
def set_attributes(base, frame, object)
  frame.attrs.each do |(name, value)|
    attr_mapping = attributes[name]
    next unless attr_mapping
    ruby_value = base.to_ruby attr_mapping.type_name, value
    attr_mapping.set object, ruby_value
  end
end
set_properties(base, frame, object) click to toggle source
# File lib/wsdl_mapper/deserializers/class_mapping.rb, line 98
def set_properties(base, frame, object)
  frame.children.each do |child|
    name = child.name
    prop_mapping = properties[name]

    if BuiltinType.builtin? prop_mapping.type_name
      ruby_value = base.to_ruby prop_mapping.type_name, child.text
      prop_mapping.set object, ruby_value
    else
      prop_mapping.set object, child.object
    end
  end
end
start(_base, _frame) click to toggle source
# File lib/wsdl_mapper/deserializers/class_mapping.rb, line 54
def start(_base, _frame)
end
wrapper?(name) click to toggle source
# File lib/wsdl_mapper/deserializers/class_mapping.rb, line 50
def wrapper?(name)
  @wrappers[name]
end