Class: WsdlMapper::Deserializers::ClassMapping
- Inherits:
-
Object
- Object
- WsdlMapper::Deserializers::ClassMapping
- Includes:
- WsdlMapper::Dom
- Defined in:
- lib/wsdl_mapper/deserializers/class_mapping.rb
Defined Under Namespace
Classes: Delegate
Constant Summary collapse
- XSI_NS =
'http://www.w3.org/2001/XMLSchema-instance'- XSI_NIL =
WsdlMapper::Dom::Name.get XSI_NS, 'nil'
Instance Attribute Summary collapse
-
#attributes ⇒ Object
readonly
Returns the value of attribute attributes.
-
#properties ⇒ Object
readonly
Returns the value of attribute properties.
Instance Method Summary collapse
- #build_object(base, frame) ⇒ Object
- #end(base, frame) ⇒ Object
- #get_type_name_for_prop(prop_name) ⇒ Object
-
#initialize(cls, simple: false, &block) ⇒ ClassMapping
constructor
A new instance of ClassMapping.
- #nil_attr?(attrs) ⇒ Boolean
- #register_attr(accessor, attr_name, type_name) ⇒ Object
- #register_delegate(accessor, type_name) ⇒ Object
- #register_prop(accessor, prop_name, type_name, array: false) ⇒ Object
- #register_wrapper(name) ⇒ Object
- #set_attributes(base, frame, object) ⇒ Object
- #set_properties(base, frame, object) ⇒ Object
- #start(_base, _frame) ⇒ Object
- #wrapper?(name) ⇒ Boolean
Constructor Details
#initialize(cls, simple: false, &block) ⇒ ClassMapping
Returns a new instance of ClassMapping.
20 21 22 23 24 25 26 27 28 29 |
# 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 |
Instance Attribute Details
#attributes ⇒ Object (readonly)
Returns the value of attribute attributes.
18 19 20 |
# File 'lib/wsdl_mapper/deserializers/class_mapping.rb', line 18 def attributes @attributes end |
#properties ⇒ Object (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
#build_object(base, frame) ⇒ Object
81 82 83 84 85 86 87 88 89 |
# 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) ⇒ Object
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# 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) ⇒ Object
91 92 93 94 95 96 |
# 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) ⇒ Boolean
74 75 76 77 78 79 |
# 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) ⇒ Object
31 32 33 34 |
# 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) ⇒ Object
41 42 43 |
# 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) ⇒ Object
36 37 38 39 |
# 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) ⇒ Object
45 46 47 48 |
# 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) ⇒ Object
112 113 114 115 116 117 118 119 |
# 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) ⇒ Object
98 99 100 101 102 103 104 105 106 107 108 109 110 |
# 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) ⇒ Object
54 55 |
# File 'lib/wsdl_mapper/deserializers/class_mapping.rb', line 54 def start(_base, _frame) end |
#wrapper?(name) ⇒ Boolean
50 51 52 |
# File 'lib/wsdl_mapper/deserializers/class_mapping.rb', line 50 def wrapper?(name) @wrappers[name] end |