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

- (ComplexType) initialize(name = nil)

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

- (Object) abstract

Returns the value of attribute abstract



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

def abstract
  @abstract
end

- (Object) complexcontent

Returns the value of attribute complexcontent



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

def complexcontent
  @complexcontent
end

- (Object) content (readonly)

Returns the value of attribute content



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

def content
  @content
end

- (Object) final

Returns the value of attribute final



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

def final
  @final
end

- (Object) mixed

Returns the value of attribute mixed



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

def mixed
  @mixed
end

- (Object) name

Returns the value of attribute name



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

def name
  @name
end

- (Object) simplecontent

Returns the value of attribute simplecontent



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

def simplecontent
  @simplecontent
end

Instance Method Details

- (Object) all_elements=(elements)



137
138
139
140
141
142
# File 'lib/wsdl/xmlSchema/complexType.rb', line 137

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

- (Object) attributes



79
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
# 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

- (Object) base



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

def base
  if c = @complexcontent || @simplecontent
    c.base
  end
end

- (Object) check_type



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

- (Object) child_defined_complextype(name)



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

- (Object) child_type(name = nil)



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

- (Boolean) choice?

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

- (Object) compoundtype



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

def compoundtype
  @compoundtype ||= check_type
end

- (Object) elementformdefault



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

def elementformdefault
  parent.elementformdefault
end

- (Object) elements



71
72
73
74
75
76
77
# File 'lib/wsdl/xmlSchema/complexType.rb', line 71

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

- (Object) find_aryelement



125
126
127
128
129
130
131
132
133
# File 'lib/wsdl/soap/complexType.rb', line 125

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

- (Object) find_arytype

Raises:

  • (RuntimeError)


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

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

- (Object) find_element(name)



114
115
116
117
118
119
120
# 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

- (Object) find_element_by_name(name)



122
123
124
125
126
127
128
# 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

- (Object) find_soapenc_arytype



96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# 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
  nil
end

- (Boolean) have_any?

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

- (Object) nested_elements



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

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

- (Object) parse_attr(attr, value)



175
176
177
178
179
180
181
182
183
184
185
186
187
188
# 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

- (Object) parse_element(element)



144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
# 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

- (Object) sequence_elements=(elements)



130
131
132
133
134
135
# File 'lib/wsdl/xmlSchema/complexType.rb', line 130

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

- (Object) targetnamespace



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