In Files

  • wsdl/soap/complexType.rb
  • wsdl/xmlSchema/complexType.rb

Class/Module Index [+]

Quicksearch

WSDL::XMLSchema::ComplexType

Constants

AnyAsElement

Attributes

attributes[R]
complexcontent[RW]
content[R]
final[RW]
mixed[RW]
name[RW]
simplecontent[RW]

Public Class Methods

new(name = nil) click to toggle source
 
               # File wsdl/xmlSchema/complexType.rb, line 28
def initialize(name = nil)
  super()
  @name = name
  @complexcontent = nil
  @simplecontent = nil
  @content = nil
  @final = nil
  @mixed = false
  @attributes = XSD::NamedElements.new
end
            

Public Instance Methods

all_elements=(elements) click to toggle source
 
               # File wsdl/xmlSchema/complexType.rb, line 95
def all_elements=(elements)
  @content = All.new
  elements.each do |element|
    @content << element
  end
end
            
check_type() click to toggle source
 
               # File wsdl/soap/complexType.rb, line 22
def check_type
  if content
    if attributes.empty? and
        content.elements.size == 1 and content.elements[0].maxoccurs != '1'
      if name == ::SOAP::Mapping::MapQName
        :TYPE_MAP
      else
        :TYPE_ARRAY
      end
    else
      :TYPE_STRUCT
    end
  elsif complexcontent
    if complexcontent.base == ::SOAP::ValueArrayName
      :TYPE_ARRAY
    else
      complexcontent.basetype.check_type
    end
  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 wsdl/soap/complexType.rb, line 74
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
    if content.elements.size == 1
      ele = content.elements[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 wsdl/soap/complexType.rb, line 49
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
            
compoundtype() click to toggle source
 
               # File wsdl/soap/complexType.rb, line 18
def compoundtype
  @compoundtype ||= check_type
end
            
each_element() click to toggle source
 
               # File wsdl/xmlSchema/complexType.rb, line 50
def each_element
  if content
    content.elements.each do |element|
      if element.is_a?(Any)
        yield(AnyAsElement)
      else
        yield(element)
      end
    end
  end
end
            
elementformdefault() click to toggle source
 
               # File wsdl/xmlSchema/complexType.rb, line 45
def elementformdefault
  parent.elementformdefault
end
            
find_aryelement() click to toggle source
 
               # File wsdl/soap/complexType.rb, line 117
def find_aryelement
  unless compoundtype == :TYPE_ARRAY
    raise RuntimeError.new("Assert: not for array")
  end
  if complexcontent
    if check_array_content(complexcontent.content)
      return complexcontent.content.elements[0]
    end
  elsif check_array_content(content)
    return content.elements[0]
  end
  nil # use default item name
end
            
find_arytype() click to toggle source
 
               # File wsdl/soap/complexType.rb, line 98
def find_arytype
  unless compoundtype == :TYPE_ARRAY
    raise RuntimeError.new("Assert: not for array")
  end
  if complexcontent
    complexcontent.attributes.each do |attribute|
      if attribute.ref == ::SOAP::AttrArrayTypeName
        return attribute.arytype
      end
    end
    if check_array_content(complexcontent.content)
      return element_simpletype(complexcontent.content.elements[0])
    end
  elsif check_array_content(content)
    return element_simpletype(content.elements[0])
  end
  raise RuntimeError.new("Assert: Unknown array definition.")
end
            
find_element(name) click to toggle source
 
               # File wsdl/xmlSchema/complexType.rb, line 62
def find_element(name)
  if content
    content.elements.each do |element|
      if element.is_a?(Any)
        return AnyAsElement if name == AnyAsElement.name
      else
        return element if name == element.name
      end
    end
  end
  nil
end
            
find_element_by_name(name) click to toggle source
 
               # File wsdl/xmlSchema/complexType.rb, line 75
def find_element_by_name(name)
  if content
    content.elements.each do |element|
      if element.is_a?(Any)
        return AnyAsElement if name == AnyAsElement.name.name
      else
        return element if name == element.name.name
      end
    end
  end
  nil
end
            
parse_attr(attr, value) click to toggle source
 
               # File wsdl/xmlSchema/complexType.rb, line 123
def parse_attr(attr, value)
  case attr
  when FinalAttrName
    @final = value.source
  when MixedAttrName
    @mixed = (value.source == 'true')
  when NameAttrName
    @name = XSD::QName.new(targetnamespace, value.source)
  else
    nil
  end
end
            
parse_element(element) click to toggle source
 
               # File wsdl/xmlSchema/complexType.rb, line 102
def parse_element(element)
  case element
  when AllName
    @content = All.new
  when SequenceName
    @content = Sequence.new
  when ChoiceName
    @content = Choice.new
  when ComplexContentName
    @complexcontent = ComplexContent.new
  when SimpleContentName
    @simplecontent = SimpleContent.new
  when AttributeName
    o = Attribute.new
    @attributes << o
    o
  else
    nil
  end
end
            
sequence_elements=(elements) click to toggle source
 
               # File wsdl/xmlSchema/complexType.rb, line 88
def sequence_elements=(elements)
  @content = Sequence.new
  elements.each do |element|
    @content << element
  end
end
            
targetnamespace() click to toggle source
 
               # File 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
            

Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.

If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.

If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.

If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.

blog comments powered by Disqus