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.



27
28
29
30
31
32
33
34
35
36
37
# 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

Instance Attribute Details

#abstractObject

Returns the value of attribute abstract.



25
26
27
# File 'lib/wsdl/xmlSchema/complexType.rb', line 25

def abstract
  @abstract
end

#complexcontentObject

Returns the value of attribute complexcontent.



20
21
22
# File 'lib/wsdl/xmlSchema/complexType.rb', line 20

def complexcontent
  @complexcontent
end

#contentObject (readonly)

Returns the value of attribute content.



22
23
24
# File 'lib/wsdl/xmlSchema/complexType.rb', line 22

def content
  @content
end

#finalObject

Returns the value of attribute final.



23
24
25
# File 'lib/wsdl/xmlSchema/complexType.rb', line 23

def final
  @final
end

#mixedObject

Returns the value of attribute mixed.



24
25
26
# File 'lib/wsdl/xmlSchema/complexType.rb', line 24

def mixed
  @mixed
end

#nameObject

Returns the value of attribute name.



19
20
21
# File 'lib/wsdl/xmlSchema/complexType.rb', line 19

def name
  @name
end

#simplecontentObject

Returns the value of attribute simplecontent.



21
22
23
# File 'lib/wsdl/xmlSchema/complexType.rb', line 21

def simplecontent
  @simplecontent
end

Instance Method Details

#all_elements=(elements) ⇒ Object



114
115
116
117
118
119
# File 'lib/wsdl/xmlSchema/complexType.rb', line 114

def all_elements=(elements)
  @content = All.new
  elements.each do |element|
    @content << element
  end
end

#attributesObject



73
74
75
76
77
78
79
80
81
# File 'lib/wsdl/xmlSchema/complexType.rb', line 73

def attributes
  if @complexcontent
    @complexcontent.attributes + @attributes
  elsif @simplecontent
    @simplecontent.attributes + @attributes
  else
    @attributes
  end
end

#check_typeObject



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# 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) ⇒ Object



71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# 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) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# 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?Boolean

Returns:

  • (Boolean)


57
58
59
60
61
62
63
# File 'lib/wsdl/xmlSchema/complexType.rb', line 57

def choice?
  if c = @complexcontent || @content
    c.choice?
  else
    false
  end
end

#compoundtypeObject



18
19
20
# File 'lib/wsdl/soap/complexType.rb', line 18

def compoundtype
  @compoundtype ||= check_type
end

#elementformdefaultObject



45
46
47
# File 'lib/wsdl/xmlSchema/complexType.rb', line 45

def elementformdefault
  parent.elementformdefault
end

#elementsObject



65
66
67
68
69
70
71
# File 'lib/wsdl/xmlSchema/complexType.rb', line 65

def elements
  if c = @complexcontent || @content
    c.elements
  else
    XSD::NamedElements::Empty
  end
end

#find_aryelementObject



115
116
117
118
119
120
121
122
123
# File 'lib/wsdl/soap/complexType.rb', line 115

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_arytypeObject

Raises:

  • (RuntimeError)


96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/wsdl/soap/complexType.rb', line 96

def find_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
  if map_as_array?
    return element_simpletype(elements[0])
  end
  raise RuntimeError.new("Assert: Unknown array definition.")
end

#find_element(name) ⇒ Object



91
92
93
94
95
96
97
# File 'lib/wsdl/xmlSchema/complexType.rb', line 91

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



99
100
101
102
103
104
105
# File 'lib/wsdl/xmlSchema/complexType.rb', line 99

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

#have_any?Boolean

Returns:

  • (Boolean)


49
50
51
52
53
54
55
# File 'lib/wsdl/xmlSchema/complexType.rb', line 49

def have_any?
  if c = @complexcontent || @content
    c.have_any?
  else
    false
  end
end

#nested_elementsObject



83
84
85
86
87
88
89
# File 'lib/wsdl/xmlSchema/complexType.rb', line 83

def nested_elements
  if c = @complexcontent || @content
    c.nested_elements
  else
    XSD::NamedElements::Empty
  end
end

#parse_attr(attr, value) ⇒ Object



142
143
144
145
146
147
148
149
150
151
152
153
154
155
# File 'lib/wsdl/xmlSchema/complexType.rb', line 142

def parse_attr(attr, value)
  case attr
  when AbstractAttrName
    @abstract = (value.source == 'true')
  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) ⇒ Object



121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# File 'lib/wsdl/xmlSchema/complexType.rb', line 121

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) ⇒ Object



107
108
109
110
111
112
# File 'lib/wsdl/xmlSchema/complexType.rb', line 107

def sequence_elements=(elements)
  @content = Sequence.new
  elements.each do |element|
    @content << element
  end
end

#targetnamespaceObject



39
40
41
42
43
# 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