Class SOAP::RPC::SOAPMethod
In: lib/soap/rpc/element.rb
Parent: SOAPStruct

Methods

Constants

RETVAL = 'retval'
IN = 'in'
OUT = 'out'
INOUT = 'inout'

Attributes

inparam  [R] 
outparam  [R] 
param_def  [R] 
retval_class_name  [R] 
retval_name  [R] 

Public Class methods

[Source]

     # File lib/soap/rpc/element.rb, line 162
162:   def SOAPMethod.create_doc_param_def(req_qnames, res_qnames)
163:     req_qnames = [req_qnames] if req_qnames.is_a?(XSD::QName)
164:     res_qnames = [res_qnames] if res_qnames.is_a?(XSD::QName)
165:     param_def = []
166:     req_qnames.each do |qname|
167:       param_def << [IN, qname.name, [nil, qname.namespace, qname.name]]
168:     end
169:     res_qnames.each do |qname|
170:       param_def << [OUT, qname.name, [nil, qname.namespace, qname.name]]
171:     end
172:     param_def
173:   end

[Source]

     # File lib/soap/rpc/element.rb, line 153
153:   def SOAPMethod.create_rpc_param_def(param_names)
154:     param_def = []
155:     param_names.each do |param_name|
156:       param_def.push([IN, param_name, nil])
157:     end
158:     param_def.push([RETVAL, 'return', nil])
159:     param_def
160:   end

[Source]

     # File lib/soap/rpc/element.rb, line 140
140:   def SOAPMethod.derive_rpc_param_def(obj, name, *param)
141:     if param.size == 1 and param[0].is_a?(Array)
142:       return param[0]
143:     end
144:     if param.empty?
145:       method = obj.method(name)
146:       param_names = (1..method.arity.abs).collect { |i| "p#{i}" }
147:     else
148:       param_names = param
149:     end
150:     create_rpc_param_def(param_names)
151:   end

[Source]

     # File lib/soap/rpc/element.rb, line 83
 83:   def initialize(qname, param_def = nil)
 84:     super(nil)
 85:     @elename = qname
 86:     @encodingstyle = nil
 87: 
 88:     @param_def = param_def
 89: 
 90:     @signature = []
 91:     @inparam_names = []
 92:     @inoutparam_names = []
 93:     @outparam_names = []
 94: 
 95:     @inparam = {}
 96:     @outparam = {}
 97:     @retval_name = nil
 98:     @retval_class_name = nil
 99: 
100:     init_param(@param_def) if @param_def
101:   end

[Source]

     # File lib/soap/rpc/element.rb, line 130
130:   def SOAPMethod.param_count(param_def, *type)
131:     count = 0
132:     param_def.each do |io_type, name, param_type|
133:       if type.include?(io_type)
134:         count += 1
135:       end
136:     end
137:     count
138:   end

Public Instance methods

[Source]

     # File lib/soap/rpc/element.rb, line 103
103:   def have_outparam?
104:     @outparam_names.size > 0
105:   end

[Source]

     # File lib/soap/rpc/element.rb, line 107
107:   def input_params
108:     collect_params(IN, INOUT)
109:   end

[Source]

     # File lib/soap/rpc/element.rb, line 111
111:   def output_params
112:     collect_params(OUT, INOUT)
113:   end

[Source]

     # File lib/soap/rpc/element.rb, line 123
123:   def set_outparam(params)
124:     params.each do |param, data|
125:       @outparam[param] = data
126:       data.elename.name = param
127:     end
128:   end

[Source]

     # File lib/soap/rpc/element.rb, line 115
115:   def set_param(params)
116:     params.each do |param, data|
117:       @inparam[param] = data
118:       data.elename.name = param
119:       data.parent = self
120:     end
121:   end

Private Instance methods

[Source]

     # File lib/soap/rpc/element.rb, line 177
177:   def collect_params(*type)
178:     names = []
179:     @signature.each do |io_type, name, param_type|
180:       names << name if type.include?(io_type)
181:     end
182:     names
183:   end

[Source]

     # File lib/soap/rpc/element.rb, line 185
185:   def init_param(param_def)
186:     param_def.each do |io_type, name, param_type|
187:       case io_type
188:       when IN
189:         @signature.push([IN, name, param_type])
190:         @inparam_names.push(name)
191:       when OUT
192:         @signature.push([OUT, name, param_type])
193:         @outparam_names.push(name)
194:       when INOUT
195:         @signature.push([INOUT, name, param_type])
196:         @inoutparam_names.push(name)
197:       when RETVAL
198:         if @retval_name
199:           raise MethodDefinitionError.new('duplicated retval')
200:         end
201:         @retval_name = name
202:         @retval_class_name = nil
203:         if param_type
204:           if param_type[0].is_a?(String)
205:             @retval_class_name = Mapping.class_from_name(param_type[0])
206:           else
207:             @retval_class_name = param_type[0]
208:           end
209:         end
210:       else
211:         raise MethodDefinitionError.new("unknown type: #{io_type}")
212:       end
213:     end
214:   end

[Validate]