Class | WSDL::XMLSchema::ComplexType |
In: |
lib/wsdl/xmlSchema/complexType.rb
lib/wsdl/soap/complexType.rb |
Parent: | Info |
AnyAsElement | = | Element.new(XSD::QName.new(nil, 'any'), XSD::AnyTypeName) |
attributes | [R] | |
complexcontent | [RW] | |
content | [R] | |
final | [RW] | |
mixed | [RW] | |
name | [RW] | |
simplecontent | [RW] |
# File lib/wsdl/xmlSchema/complexType.rb, line 28 28: def initialize(name = nil) 29: super() 30: @name = name 31: @complexcontent = nil 32: @simplecontent = nil 33: @content = nil 34: @final = nil 35: @mixed = false 36: @attributes = XSD::NamedElements.new 37: end
# File lib/wsdl/xmlSchema/complexType.rb, line 95 95: def all_elements=(elements) 96: @content = All.new 97: elements.each do |element| 98: @content << element 99: end 100: end
# File lib/wsdl/soap/complexType.rb, line 22 22: def check_type 23: if content 24: if attributes.empty? and 25: content.elements.size == 1 and content.elements[0].maxoccurs != '1' 26: if name == ::SOAP::Mapping::MapQName 27: :TYPE_MAP 28: else 29: :TYPE_ARRAY 30: end 31: else 32: :TYPE_STRUCT 33: end 34: elsif complexcontent 35: if complexcontent.base == ::SOAP::ValueArrayName 36: :TYPE_ARRAY 37: else 38: complexcontent.basetype.check_type 39: end 40: elsif simplecontent 41: :TYPE_SIMPLE 42: elsif !attributes.empty? 43: :TYPE_STRUCT 44: else # empty complexType definition (seen in partner.wsdl of salesforce) 45: :TYPE_EMPTY 46: end 47: end
# File lib/wsdl/soap/complexType.rb, line 74 74: def child_defined_complextype(name) 75: ele = nil 76: case compoundtype 77: when :TYPE_STRUCT, :TYPE_MAP 78: unless ele = find_element(name) 79: if name.namespace.nil? 80: ele = find_element_by_name(name.name) 81: end 82: end 83: when :TYPE_ARRAY 84: if content.elements.size == 1 85: ele = content.elements[0] 86: else 87: raise RuntimeError.new("Assert: must not reach.") 88: end 89: else 90: raise RuntimeError.new("Assert: Not implemented.") 91: end 92: unless ele 93: raise RuntimeError.new("Cannot find #{name} as a children of #{@name}.") 94: end 95: ele.local_complextype 96: end
# File lib/wsdl/soap/complexType.rb, line 49 49: def child_type(name = nil) 50: case compoundtype 51: when :TYPE_STRUCT 52: if ele = find_element(name) 53: ele.type 54: elsif ele = find_element_by_name(name.name) 55: ele.type 56: end 57: when :TYPE_ARRAY 58: @contenttype ||= content_arytype 59: when :TYPE_MAP 60: item_ele = find_element_by_name("item") or 61: raise RuntimeError.new("'item' element not found in Map definition.") 62: content = item_ele.local_complextype or 63: raise RuntimeError.new("No complexType definition for 'item'.") 64: if ele = content.find_element(name) 65: ele.type 66: elsif ele = content.find_element_by_name(name.name) 67: ele.type 68: end 69: else 70: raise NotImplementedError.new("Unknown kind of complexType.") 71: end 72: end
# File lib/wsdl/soap/complexType.rb, line 18 18: def compoundtype 19: @compoundtype ||= check_type 20: end
# File lib/wsdl/xmlSchema/complexType.rb, line 50 50: def each_element 51: if content 52: content.elements.each do |element| 53: if element.is_a?(Any) 54: yield(AnyAsElement) 55: else 56: yield(element) 57: end 58: end 59: end 60: end
# File lib/wsdl/xmlSchema/complexType.rb, line 45 45: def elementformdefault 46: parent.elementformdefault 47: end
# File lib/wsdl/soap/complexType.rb, line 117 117: def find_aryelement 118: unless compoundtype == :TYPE_ARRAY 119: raise RuntimeError.new("Assert: not for array") 120: end 121: if complexcontent 122: if check_array_content(complexcontent.content) 123: return complexcontent.content.elements[0] 124: end 125: elsif check_array_content(content) 126: return content.elements[0] 127: end 128: nil # use default item name 129: end
# File lib/wsdl/soap/complexType.rb, line 98 98: def find_arytype 99: unless compoundtype == :TYPE_ARRAY 100: raise RuntimeError.new("Assert: not for array") 101: end 102: if complexcontent 103: complexcontent.attributes.each do |attribute| 104: if attribute.ref == ::SOAP::AttrArrayTypeName 105: return attribute.arytype 106: end 107: end 108: if check_array_content(complexcontent.content) 109: return element_simpletype(complexcontent.content.elements[0]) 110: end 111: elsif check_array_content(content) 112: return element_simpletype(content.elements[0]) 113: end 114: raise RuntimeError.new("Assert: Unknown array definition.") 115: end
# File lib/wsdl/xmlSchema/complexType.rb, line 62 62: def find_element(name) 63: if content 64: content.elements.each do |element| 65: if element.is_a?(Any) 66: return AnyAsElement if name == AnyAsElement.name 67: else 68: return element if name == element.name 69: end 70: end 71: end 72: nil 73: end
# File lib/wsdl/xmlSchema/complexType.rb, line 75 75: def find_element_by_name(name) 76: if content 77: content.elements.each do |element| 78: if element.is_a?(Any) 79: return AnyAsElement if name == AnyAsElement.name.name 80: else 81: return element if name == element.name.name 82: end 83: end 84: end 85: nil 86: end
# File lib/wsdl/xmlSchema/complexType.rb, line 123 123: def parse_attr(attr, value) 124: case attr 125: when FinalAttrName 126: @final = value.source 127: when MixedAttrName 128: @mixed = (value.source == 'true') 129: when NameAttrName 130: @name = XSD::QName.new(targetnamespace, value.source) 131: else 132: nil 133: end 134: end
# File lib/wsdl/xmlSchema/complexType.rb, line 102 102: def parse_element(element) 103: case element 104: when AllName 105: @content = All.new 106: when SequenceName 107: @content = Sequence.new 108: when ChoiceName 109: @content = Choice.new 110: when ComplexContentName 111: @complexcontent = ComplexContent.new 112: when SimpleContentName 113: @simplecontent = SimpleContent.new 114: when AttributeName 115: o = Attribute.new 116: @attributes << o 117: o 118: else 119: nil 120: end 121: end
# File lib/wsdl/xmlSchema/complexType.rb, line 88 88: def sequence_elements=(elements) 89: @content = Sequence.new 90: elements.each do |element| 91: @content << element 92: end 93: end
# File lib/wsdl/xmlSchema/complexType.rb, line 39 39: def targetnamespace 40: # inner elements can be qualified 41: # parent.is_a?(WSDL::XMLSchema::Element) ? nil : parent.targetnamespace 42: parent.targetnamespace 43: end
# File lib/wsdl/soap/complexType.rb, line 143 143: def check_array_content(content) 144: content and content.elements.size == 1 and 145: content.elements[0].maxoccurs != '1' 146: end
# File lib/wsdl/soap/complexType.rb, line 148 148: def content_arytype 149: if arytype = find_arytype 150: ns = arytype.namespace 151: name = arytype.name.sub(/\[(?:,)*\]$/, '') 152: XSD::QName.new(ns, name) 153: else 154: nil 155: end 156: end