Class: WSDL::XMLSchema::ComplexType
- Inherits:
-
Info
show all
- Defined in:
- lib/wsdl/soap/complexType.rb,
lib/wsdl/xmlSchema/complexType.rb
Instance Attribute Summary collapse
Attributes inherited from Info
#id, #parent, #root
Instance Method Summary
collapse
Methods inherited from Info
#inspect, #parse_epilogue
Constructor Details
#initialize(name = nil) ⇒ ComplexType
Returns a new instance of ComplexType.
28
29
30
31
32
33
34
35
36
37
38
|
# File 'lib/wsdl/xmlSchema/complexType.rb', line 28
def initialize(name = nil)
super()
@name = name
@complexcontent = nil
@simplecontent = nil
@content = nil
@final = nil
@mixed = false
@abstract = false
@attributes = XSD::NamedElements.new
end
|
Instance Attribute Details
Returns the value of attribute abstract.
26
27
28
|
# File 'lib/wsdl/xmlSchema/complexType.rb', line 26
def abstract
@abstract
end
|
#complexcontent ⇒ Object
Returns the value of attribute complexcontent.
21
22
23
|
# File 'lib/wsdl/xmlSchema/complexType.rb', line 21
def complexcontent
@complexcontent
end
|
Returns the value of attribute content.
23
24
25
|
# File 'lib/wsdl/xmlSchema/complexType.rb', line 23
def content
@content
end
|
Returns the value of attribute final.
24
25
26
|
# File 'lib/wsdl/xmlSchema/complexType.rb', line 24
def final
@final
end
|
Returns the value of attribute mixed.
25
26
27
|
# File 'lib/wsdl/xmlSchema/complexType.rb', line 25
def mixed
@mixed
end
|
Returns the value of attribute name.
20
21
22
|
# File 'lib/wsdl/xmlSchema/complexType.rb', line 20
def name
@name
end
|
#simplecontent ⇒ Object
Returns the value of attribute simplecontent.
22
23
24
|
# File 'lib/wsdl/xmlSchema/complexType.rb', line 22
def simplecontent
@simplecontent
end
|
Instance Method Details
#all_elements=(elements) ⇒ Object
138
139
140
141
142
143
|
# File 'lib/wsdl/xmlSchema/complexType.rb', line 138
def all_elements=(elements)
@content = All.new
elements.each do |element|
@content << element
end
end
|
#attributes ⇒ Object
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
# File 'lib/wsdl/xmlSchema/complexType.rb', line 80
def attributes
attrs = nil
if @complexcontent
attrs = @complexcontent.attributes + @attributes
elsif @simplecontent
attrs = @simplecontent.attributes + @attributes
else
attrs = @attributes
end
found = XSD::NamedElements.new
attrs.each do |attr|
case attr
when Attribute
found << attr
when AttributeGroup
if attr.attributes
found.concat(attr.attributes)
end
when AnyAttribute
else
warn("unknown attribute: #{attr}")
end
end
found
end
|
66
67
68
69
70
|
# File 'lib/wsdl/xmlSchema/complexType.rb', line 66
def base
if c = @complexcontent || @simplecontent
c.base
end
end
|
#check_type ⇒ Object
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
# File 'lib/wsdl/soap/complexType.rb', line 23
def check_type
if have_any?
:TYPE_STRUCT
elsif content
if attributes.empty? and map_as_array?
if name == ::SOAP::Mapping::MapQName
:TYPE_MAP
else
:TYPE_ARRAY
end
else
:TYPE_STRUCT
end
elsif complexcontent
complexcontent.check_type
elsif simplecontent
:TYPE_SIMPLE
elsif !attributes.empty?
:TYPE_STRUCT
else :TYPE_EMPTY
end
end
|
#child_defined_complextype(name) ⇒ Object
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
# File 'lib/wsdl/soap/complexType.rb', line 72
def child_defined_complextype(name)
ele = nil
case compoundtype
when :TYPE_STRUCT, :TYPE_MAP
unless ele = find_element(name)
if name.namespace.nil?
ele = find_element_by_name(name.name)
end
end
when :TYPE_ARRAY
e = elements
if e.size == 1
ele = e[0]
else
raise RuntimeError.new("Assert: must not reach.")
end
else
raise RuntimeError.new("Assert: Not implemented.")
end
unless ele
raise RuntimeError.new("Cannot find #{name} as a children of #{@name}.")
end
ele.local_complextype
end
|
#child_type(name = nil) ⇒ Object
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
# File 'lib/wsdl/soap/complexType.rb', line 47
def child_type(name = nil)
case compoundtype
when :TYPE_STRUCT
if ele = find_element(name)
ele.type
elsif ele = find_element_by_name(name.name)
ele.type
end
when :TYPE_ARRAY
@contenttype ||= content_arytype
when :TYPE_MAP
item_ele = find_element_by_name("item") or
raise RuntimeError.new("'item' element not found in Map definition.")
content = item_ele.local_complextype or
raise RuntimeError.new("No complexType definition for 'item'.")
if ele = content.find_element(name)
ele.type
elsif ele = content.find_element_by_name(name.name)
ele.type
end
else
raise NotImplementedError.new("Unknown kind of complexType.")
end
end
|
#choice? ⇒ Boolean
58
59
60
61
62
63
64
|
# File 'lib/wsdl/xmlSchema/complexType.rb', line 58
def choice?
if c = @complexcontent || @content
c.choice?
else
false
end
end
|
#compoundtype ⇒ Object
19
20
21
|
# File 'lib/wsdl/soap/complexType.rb', line 19
def compoundtype
@compoundtype ||= check_type
end
|
46
47
48
|
# File 'lib/wsdl/xmlSchema/complexType.rb', line 46
def elementformdefault
parent.elementformdefault
end
|
72
73
74
75
76
77
78
|
# File 'lib/wsdl/xmlSchema/complexType.rb', line 72
def elements
if c = @complexcontent || @content
c.elements
else
XSD::NamedElements::Empty
end
end
|
#find_aryelement ⇒ Object
126
127
128
129
130
131
132
133
134
|
# File 'lib/wsdl/soap/complexType.rb', line 126
def find_aryelement
unless compoundtype == :TYPE_ARRAY
raise RuntimeError.new("Assert: not for array")
end
if map_as_array?
return nested_elements[0]
end
nil end
|
#find_arytype ⇒ Object
113
114
115
116
117
118
119
120
121
122
123
124
|
# File 'lib/wsdl/soap/complexType.rb', line 113
def find_arytype
unless compoundtype == :TYPE_ARRAY
raise RuntimeError.new("Assert: not for array")
end
if arytype = find_soapenc_arytype
return arytype
end
if map_as_array?
return element_simpletype(elements[0])
end
raise RuntimeError.new("Assert: Unknown array definition.")
end
|
#find_element(name) ⇒ Object
115
116
117
118
119
120
121
|
# File 'lib/wsdl/xmlSchema/complexType.rb', line 115
def find_element(name)
return nil if name.nil?
elements.each do |element|
return element if name == element.name
end
nil
end
|
#find_element_by_name(name) ⇒ Object
123
124
125
126
127
128
129
|
# File 'lib/wsdl/xmlSchema/complexType.rb', line 123
def find_element_by_name(name)
return nil if name.nil?
elements.each do |element|
return element if name == element.name.name
end
nil
end
|
#find_soapenc_arytype ⇒ Object
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
# File 'lib/wsdl/soap/complexType.rb', line 97
def find_soapenc_arytype
unless compoundtype == :TYPE_ARRAY
raise RuntimeError.new("Assert: not for array")
end
if complexcontent
if complexcontent.restriction
complexcontent.restriction.attributes.each do |attribute|
if attribute.ref == ::SOAP::AttrArrayTypeName
return attribute.arytype
end
end
end
end
nil
end
|
#have_any? ⇒ Boolean
50
51
52
53
54
55
56
|
# File 'lib/wsdl/xmlSchema/complexType.rb', line 50
def have_any?
if c = @complexcontent || @content
c.have_any?
else
false
end
end
|
#nested_elements ⇒ Object
107
108
109
110
111
112
113
|
# File 'lib/wsdl/xmlSchema/complexType.rb', line 107
def nested_elements
if c = @complexcontent || @content
c.nested_elements
else
XSD::NamedElements::Empty
end
end
|
#parse_attr(attr, value) ⇒ Object
176
177
178
179
180
181
182
183
184
185
186
187
188
189
|
# File 'lib/wsdl/xmlSchema/complexType.rb', line 176
def parse_attr(attr, value)
case attr
when AbstractAttrName
@abstract = to_boolean(value)
when FinalAttrName
@final = value.source
when MixedAttrName
@mixed = to_boolean(value)
when NameAttrName
@name = XSD::QName.new(targetnamespace, value.source)
else
nil
end
end
|
#parse_element(element) ⇒ Object
#sequence_elements=(elements) ⇒ Object
131
132
133
134
135
136
|
# File 'lib/wsdl/xmlSchema/complexType.rb', line 131
def sequence_elements=(elements)
@content = Sequence.new
elements.each do |element|
@content << element
end
end
|
#targetnamespace ⇒ Object
40
41
42
43
44
|
# File 'lib/wsdl/xmlSchema/complexType.rb', line 40
def targetnamespace
parent.targetnamespace
end
|