class WSDL::XMLSchema::ComplexType
Attributes
abstract[RW]
complexcontent[RW]
content[R]
final[RW]
mixed[RW]
name[RW]
simplecontent[RW]
Public Class Methods
new(name = nil)
click to toggle source
Calls superclass method
WSDL::Info.new
# File lib/wsdl/xmlSchema/complexType.rb, line 27 def initialize(name = nil) super() @name = name @complexcontent = nil @simplecontent = nil @content = nil @final = nil @mixed = false @abstract = false @attributes = XSD::NamedElements.new end
Public Instance Methods
all_elements=(elements)
click to toggle source
# File lib/wsdl/xmlSchema/complexType.rb, line 137 def all_elements=(elements) @content = All.new elements.each do |element| @content << element end end
attributes()
click to toggle source
# File lib/wsdl/xmlSchema/complexType.rb, line 79 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 # ignored else warn("unknown attribute: #{attr}") end end found end
base()
click to toggle source
# File lib/wsdl/xmlSchema/complexType.rb, line 65 def base if c = @complexcontent || @simplecontent c.base end end
check_type()
click to toggle source
# File lib/wsdl/soap/complexType.rb, line 22 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 # empty complexType definition (seen in partner.wsdl of salesforce) :TYPE_EMPTY end end
child_defined_complextype(name)
click to toggle source
# File lib/wsdl/soap/complexType.rb, line 71 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)
click to toggle source
# File lib/wsdl/soap/complexType.rb, line 46 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?()
click to toggle source
# File lib/wsdl/xmlSchema/complexType.rb, line 57 def choice? if c = @complexcontent || @content c.choice? else false end end
compoundtype()
click to toggle source
# File lib/wsdl/soap/complexType.rb, line 18 def compoundtype @compoundtype ||= check_type end
elementformdefault()
click to toggle source
# File lib/wsdl/xmlSchema/complexType.rb, line 45 def elementformdefault parent.elementformdefault end
elements()
click to toggle source
# File lib/wsdl/xmlSchema/complexType.rb, line 71 def elements if c = @complexcontent || @content c.elements else XSD::NamedElements::Empty end end
find_aryelement()
click to toggle source
# File lib/wsdl/soap/complexType.rb, line 124 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 # use default item name end
find_arytype()
click to toggle source
# File lib/wsdl/soap/complexType.rb, line 111 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)
click to toggle source
# File lib/wsdl/xmlSchema/complexType.rb, line 114 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)
click to toggle source
# File lib/wsdl/xmlSchema/complexType.rb, line 122 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()
click to toggle source
# File lib/wsdl/soap/complexType.rb, line 96 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 end
have_any?()
click to toggle source
# File lib/wsdl/xmlSchema/complexType.rb, line 49 def have_any? if c = @complexcontent || @content c.have_any? else false end end
nested_elements()
click to toggle source
# File lib/wsdl/xmlSchema/complexType.rb, line 106 def nested_elements if c = @complexcontent || @content c.nested_elements else XSD::NamedElements::Empty end end
parse_attr(attr, value)
click to toggle source
# File lib/wsdl/xmlSchema/complexType.rb, line 175 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)
click to toggle source
# File lib/wsdl/xmlSchema/complexType.rb, line 144 def parse_element(element) case element when AllName @content = All.new when SequenceName @content = Sequence.new when ChoiceName @content = Choice.new when GroupName @content = Group.new when ComplexContentName @complexcontent = ComplexContent.new when SimpleContentName @simplecontent = SimpleContent.new when AttributeName o = Attribute.new @attributes << o o when AttributeGroupName o = AttributeGroup.new @attributes << o o when AnyAttributeName o = AnyAttribute.new @attributes << o o else nil end end
sequence_elements=(elements)
click to toggle source
# File lib/wsdl/xmlSchema/complexType.rb, line 130 def sequence_elements=(elements) @content = Sequence.new elements.each do |element| @content << element end end
targetnamespace()
click to toggle source
# File lib/wsdl/xmlSchema/complexType.rb, line 39 def targetnamespace # inner elements can be qualified # parent.is_a?(WSDL::XMLSchema::Element) ? nil : parent.targetnamespace parent.targetnamespace end
Private Instance Methods
content_arytype()
click to toggle source
# File lib/wsdl/soap/complexType.rb, line 159 def content_arytype if arytype = find_arytype ns = arytype.namespace name = arytype.name.sub(/\[(?:,)*\]$/, '') XSD::QName.new(ns, name) else nil end end
element_simpletype(element)
click to toggle source
# File lib/wsdl/soap/complexType.rb, line 136 def element_simpletype(element) case element when XMLSchema::Element if element.type element.type elsif element.local_simpletype element.local_simpletype.base else # element definition nil end when XMLSchema::Any XSD::AnyTypeName else nil end end
map_as_array?()
click to toggle source
# File lib/wsdl/soap/complexType.rb, line 154 def map_as_array? e = nested_elements e.size == 1 and e[0].map_as_array? end