Class: WsdlMapper::Deserializers::ClassMapping

Inherits:
Object
  • Object
show all
Includes:
WsdlMapper::Dom
Defined in:
lib/wsdl_mapper/deserializers/class_mapping.rb

Defined Under Namespace

Classes: Delegate

Constant Summary

XSI_NS =
'http://www.w3.org/2001/XMLSchema-instance'
XSI_NIL =
WsdlMapper::Dom::Name.get XSI_NS, 'nil'

Instance Attribute Summary (collapse)

Instance Method Summary (collapse)

Constructor Details

- (ClassMapping) initialize(cls, simple: false, &block)

Returns a new instance of ClassMapping



20
21
22
23
24
25
26
27
# 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
  instance_exec &block
end

Instance Attribute Details

- (Object) attributes (readonly)

Returns the value of attribute attributes



18
19
20
# File 'lib/wsdl_mapper/deserializers/class_mapping.rb', line 18

def attributes
  @attributes
end

- (Object) properties (readonly)

Returns the value of attribute properties



18
19
20
# File 'lib/wsdl_mapper/deserializers/class_mapping.rb', line 18

def properties
  @properties
end

Instance Method Details

- (Object) build_object(base, frame)



80
81
82
83
84
85
86
87
88
# File 'lib/wsdl_mapper/deserializers/class_mapping.rb', line 80

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

- (Object) end(base, frame)



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/wsdl_mapper/deserializers/class_mapping.rb', line 56

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

- (Object) get_type_name_for_prop(prop_name)



90
91
92
93
94
95
# File 'lib/wsdl_mapper/deserializers/class_mapping.rb', line 90

def get_type_name_for_prop(prop_name)
  @properties[prop_name].type_name
rescue Errors::UnknownElementError => e
  e.parent = @cls
  raise e
end

- (Boolean) nil_attr?(attrs)

Returns:

  • (Boolean)


73
74
75
76
77
78
# File 'lib/wsdl_mapper/deserializers/class_mapping.rb', line 73

def nil_attr? attrs
  # TODO: test
  !!attrs.find do |(name, _)|
    name == XSI_NIL
  end
end

- (Object) register_attr(accessor, attr_name, type_name)



29
30
31
32
# File 'lib/wsdl_mapper/deserializers/class_mapping.rb', line 29

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

- (Object) register_delegate(accessor, type_name)



39
40
41
# File 'lib/wsdl_mapper/deserializers/class_mapping.rb', line 39

def register_delegate(accessor, type_name)
  @delegate = Delegate.new accessor, Name.get(*type_name)
end

- (Object) register_prop(accessor, prop_name, type_name, array: false)



34
35
36
37
# File 'lib/wsdl_mapper/deserializers/class_mapping.rb', line 34

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

- (Object) register_wrapper(name)



43
44
45
46
# File 'lib/wsdl_mapper/deserializers/class_mapping.rb', line 43

def register_wrapper(name)
  name = Name.get *name
  @wrappers[name] = true
end

- (Object) set_attributes(base, frame, object)



111
112
113
114
115
116
117
118
# File 'lib/wsdl_mapper/deserializers/class_mapping.rb', line 111

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

- (Object) set_properties(base, frame, object)



97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/wsdl_mapper/deserializers/class_mapping.rb', line 97

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

- (Object) start(base, frame)



52
53
54
# File 'lib/wsdl_mapper/deserializers/class_mapping.rb', line 52

def start(base, frame)
  # frame.object = @simple ? @cls.new(nil) : @cls.new
end

- (Boolean) wrapper?(name)

Returns:

  • (Boolean)


48
49
50
# File 'lib/wsdl_mapper/deserializers/class_mapping.rb', line 48

def wrapper?(name)
  @wrappers[name]
end