Welcome to the "trac"-ing site of soap4r!
[soap4r] [httpclient] [openpgp4u] [pkcs1] [logger] [csv] [vtr]

root/branches/1_5/lib/wsdl/xmlSchema/group.rb

Revision 1917, 2.4 kB (checked in by nahi, 1 year ago)
  • added support for attributeGroup.
Line 
1 # WSDL4R - XMLSchema group definition.
2 # Copyright (C) 2000-2007  NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
4 # This program is copyrighted free software by NAKAMURA, Hiroshi.  You can
5 # redistribute it and/or modify it under the same terms of Ruby's license;
6 # either the dual license version in 2003, or any later version.
7
8
9 require 'wsdl/info'
10
11
12 module WSDL
13 module XMLSchema
14
15
16 class Group < Info
17   class << self
18     if RUBY_VERSION > "1.7.0"
19       def attr_reader_ref(symbol)
20         name = symbol.to_s
21         define_method(name) {
22           instance_variable_get("@#{name}") ||
23             (refelement ? refelement.__send__(name) : nil)
24         }
25       end
26     else
27       def attr_reader_ref(symbol)
28         name = symbol.to_s
29         module_eval <<-EOS
30           def #{name}
31             @#{name} || (refelement ? refelement.#{name} : nil)
32           end
33         EOS
34       end
35     end
36   end
37
38   attr_writer :name     # required
39   attr_accessor :maxoccurs
40   attr_accessor :minoccurs
41   attr_writer :content
42
43   attr_reader_ref :name
44   attr_reader_ref :content
45
46   attr_accessor :ref
47
48   def initialize(name = nil)
49     super()
50     @name = name
51     @maxoccurs = 1
52     @minoccurs = 1
53     @content = nil
54     @ref = nil
55     @refelement = nil
56   end
57
58   def refelement
59     @refelement ||= (@ref ? root.collect_modelgroups[@ref] : nil)
60   end
61
62   def targetnamespace
63     parent.targetnamespace
64   end
65
66   def elementformdefault
67     parent.elementformdefault
68   end
69
70   def parse_element(element)
71     case element
72     when AllName
73       @content = All.new
74     when SequenceName
75       @content = Sequence.new
76     when ChoiceName
77       @content = Choice.new
78     else
79       nil
80     end
81   end
82
83   def parse_attr(attr, value)
84     case attr
85     when NameAttrName
86       @name = XSD::QName.new(targetnamespace, value.source)
87     when RefAttrName
88       @ref = value
89     when MaxOccursAttrName
90       if parent.is_a?(All)
91         if value.source != '1'
92           raise Parser::AttributeConstraintError.new(
93             "cannot parse #{value} for #{attr}")
94         end
95       end
96       if value.source == 'unbounded'
97         @maxoccurs = nil
98       else
99         @maxoccurs = Integer(value.source)
100       end
101       value.source
102     when MinOccursAttrName
103       if parent.is_a?(All)
104         unless ['0', '1'].include?(value.source)
105           raise Parser::AttributeConstraintError.new(
106             "cannot parse #{value} for #{attr}")
107         end
108       end
109       @minoccurs = Integer(value.source)
110     else
111       nil
112     end
113   end
114 end
115
116
117 end
118 end
Note: See TracBrowser for help on using the browser.