summaryrefslogtreecommitdiff
path: root/lib/wsdl/xmlSchema/element.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/wsdl/xmlSchema/element.rb')
-rw-r--r--lib/wsdl/xmlSchema/element.rb36
1 files changed, 28 insertions, 8 deletions
diff --git a/lib/wsdl/xmlSchema/element.rb b/lib/wsdl/xmlSchema/element.rb
index 4a144cd522..fffb6485d0 100644
--- a/lib/wsdl/xmlSchema/element.rb
+++ b/lib/wsdl/xmlSchema/element.rb
@@ -18,9 +18,8 @@ class Element < Info
if RUBY_VERSION > "1.7.0"
def attr_reader_ref(symbol)
name = symbol.to_s
- iv = "@#{name}"
define_method(name) {
- instance_variable_get(iv) ||
+ instance_variable_get("@#{name}") ||
(refelement ? refelement.__send__(name) : nil)
}
end
@@ -37,6 +36,7 @@ class Element < Info
end
attr_writer :name # required
+ attr_writer :form
attr_writer :type
attr_writer :local_simpletype
attr_writer :local_complextype
@@ -46,6 +46,7 @@ class Element < Info
attr_writer :nillable
attr_reader_ref :name
+ attr_reader_ref :form
attr_reader_ref :type
attr_reader_ref :local_simpletype
attr_reader_ref :local_complextype
@@ -59,6 +60,7 @@ class Element < Info
def initialize(name = nil, type = nil)
super()
@name = name
+ @form = nil
@type = type
@local_simpletype = @local_complextype = nil
@constraint = nil
@@ -70,18 +72,21 @@ class Element < Info
end
def refelement
- @refelement ||= root.collect_elements[@ref]
+ @refelement ||= (@ref ? root.collect_elements[@ref] : nil)
end
def targetnamespace
parent.targetnamespace
end
- def elementform
- # ToDo: must be overwritten.
+ def elementformdefault
parent.elementformdefault
end
+ def elementform
+ self.form.nil? ? parent.elementformdefault : self.form
+ end
+
def parse_element(element)
case element
when SimpleTypeName
@@ -102,7 +107,14 @@ class Element < Info
def parse_attr(attr, value)
case attr
when NameAttrName
- @name = XSD::QName.new(targetnamespace, value.source)
+ # namespace may be nil
+ if directelement? or elementform == 'qualified'
+ @name = XSD::QName.new(targetnamespace, value.source)
+ else
+ @name = XSD::QName.new(nil, value.source)
+ end
+ when FormAttrName
+ @form = value.source
when TypeAttrName
@type = value
when RefAttrName
@@ -110,14 +122,16 @@ class Element < Info
when MaxOccursAttrName
if parent.is_a?(All)
if value.source != '1'
- raise Parser::AttrConstraintError.new("cannot parse #{value} for #{attr}")
+ raise Parser::AttrConstraintError.new(
+ "cannot parse #{value} for #{attr}")
end
end
@maxoccurs = value.source
when MinOccursAttrName
if parent.is_a?(All)
unless ['0', '1'].include?(value.source)
- raise Parser::AttrConstraintError.new("cannot parse #{value} for #{attr}")
+ raise Parser::AttrConstraintError.new(
+ "cannot parse #{value} for #{attr}")
end
end
@minoccurs = value.source
@@ -127,6 +141,12 @@ class Element < Info
nil
end
end
+
+private
+
+ def directelement?
+ parent.is_a?(Schema)
+ end
end