class SOAP::RPC::SOAPMethod

Constants

IN
INOUT
OUT
RETVAL

Attributes

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

Public Class Methods

create_doc_param_def(req_qnames, res_qnames) click to toggle source
# File lib/soap/rpc/element.rb, line 186
def SOAPMethod.create_doc_param_def(req_qnames, res_qnames)
  req_qnames = [req_qnames] if req_qnames.is_a?(XSD::QName)
  res_qnames = [res_qnames] if res_qnames.is_a?(XSD::QName)
  param_def = []
  # req_qnames and res_qnames can be nil
  if req_qnames
    req_qnames.each do |qname|
      param_def << [IN, qname.name, [nil, qname.namespace, qname.name]]
    end
  end
  if res_qnames
    res_qnames.each do |qname|
      param_def << [OUT, qname.name, [nil, qname.namespace, qname.name]]
    end
  end
  param_def
end
create_rpc_param_def(param_names) click to toggle source
# File lib/soap/rpc/element.rb, line 177
def SOAPMethod.create_rpc_param_def(param_names)
  param_def = []
  param_names.each do |param_name|
    param_def.push([IN, param_name, nil])
  end
  param_def.push([RETVAL, 'return', nil])
  param_def
end
derive_rpc_param_def(obj, name, *param) click to toggle source
# File lib/soap/rpc/element.rb, line 164
def SOAPMethod.derive_rpc_param_def(obj, name, *param)
  if param.size == 1 and param[0].is_a?(Array)
    return param[0]
  end
  if param.empty?
    method = obj.method(name)
    param_names = (1..method.arity.abs).collect { |i| "p#{i}" }
  else
    param_names = param
  end
  create_rpc_param_def(param_names)
end
new(qname, param_def = nil) click to toggle source
Calls superclass method SOAP::SOAPStruct::new
# File lib/soap/rpc/element.rb, line 84
def initialize(qname, param_def = nil)
  super(nil)
  @elename = qname
  @encodingstyle = nil

  @param_def = param_def

  @signature = []
  @inparam_names = []
  @inoutparam_names = []
  @outparam_names = []

  @inparam = {}
  @outparam = {}
  @retval_name = nil
  @retval_class_name = nil

  init_params(@param_def) if @param_def
end
param_count(param_def, *type) click to toggle source
# File lib/soap/rpc/element.rb, line 153
def SOAPMethod.param_count(param_def, *type)
  count = 0
  param_def.each do |param|
    param = MethodDef.to_param(param)
    if type.include?(param.io_type.to_sym)
      count += 1
    end
  end
  count
end

Private Class Methods

parse_mapped_class(mapped_class) click to toggle source
# File lib/soap/rpc/element.rb, line 256
def self.parse_mapped_class(mapped_class)
  # the first element of typedef in param_def can be a String like
  # "::SOAP::SOAPStruct" or "CustomClass[]".  turn this String to a class if
  # we can.
  if mapped_class.is_a?(String)
    if /\[\]\Z/ =~ mapped_class
      # when '[]' is added, ignore this.
      mapped_class = nil
    else
      mapped_class = Mapping.class_from_name(mapped_class)
    end
  end
  mapped_class
end

Public Instance Methods

get_paramtypes(names) click to toggle source
# File lib/soap/rpc/element.rb, line 143
def get_paramtypes(names)
  types = []
  @signature.each do |io_type, name, type_qname|
    if type_qname && idx = names.index(name)
      types[idx] = type_qname
    end
  end
  types
end
have_member() click to toggle source
# File lib/soap/rpc/element.rb, line 104
def have_member
  true
end
have_outparam?() click to toggle source
# File lib/soap/rpc/element.rb, line 108
def have_outparam?
  @outparam_names.size > 0
end
input_param_types() click to toggle source
# File lib/soap/rpc/element.rb, line 120
def input_param_types
  collect_param_types(IN, INOUT)
end
input_params() click to toggle source
# File lib/soap/rpc/element.rb, line 112
def input_params
  collect_params(IN, INOUT)
end
output_param_types() click to toggle source
# File lib/soap/rpc/element.rb, line 124
def output_param_types
  collect_param_types(OUT, INOUT)
end
output_params() click to toggle source
# File lib/soap/rpc/element.rb, line 116
def output_params
  collect_params(OUT, INOUT)
end
set_outparam(params) click to toggle source
# File lib/soap/rpc/element.rb, line 136
def set_outparam(params)
  params.each do |param, data|
    @outparam[param] = data
    data.elename = XSD::QName.new(data.elename.namespace, param)
  end
end
set_param(params) click to toggle source
# File lib/soap/rpc/element.rb, line 128
def set_param(params)
  params.each do |param, data|
    @inparam[param] = data
    data.elename = XSD::QName.new(data.elename.namespace, param)
    data.parent = self
  end
end

Private Instance Methods

collect_param_types(*type) click to toggle source
# File lib/soap/rpc/element.rb, line 206
def collect_param_types(*type)
  names = []
  @signature.each do |io_type, name, type_qname|
    names << type_qname if type.include?(io_type)
  end
  names
end
collect_params(*type) click to toggle source
# File lib/soap/rpc/element.rb, line 214
def collect_params(*type)
  names = []
  @signature.each do |io_type, name, type_qname|
    names << name if type.include?(io_type)
  end
  names
end
init_param(param) click to toggle source
# File lib/soap/rpc/element.rb, line 229
def init_param(param)
  mapped_class = SOAPMethod.parse_mapped_class(param.mapped_class)
  qname = param.qname
  if qname.nil? and mapped_class
    qname = TypeMap.key(mapped_class)
  end
  case param.io_type
  when IN
    @signature.push([IN, param.name, qname])
    @inparam_names.push(param.name)
  when OUT
    @signature.push([OUT, param.name, qname])
    @outparam_names.push(param.name)
  when INOUT
    @signature.push([INOUT, param.name, qname])
    @inoutparam_names.push(param.name)
  when RETVAL
    if @retval_name
      raise MethodDefinitionError.new('duplicated retval')
    end
    @retval_name = param.name
    @retval_class_name = mapped_class
  else
    raise MethodDefinitionError.new("unknown type: #{param.io_type}")
  end
end
init_params(param_def) click to toggle source
# File lib/soap/rpc/element.rb, line 222
def init_params(param_def)
  param_def.each do |param|
    param = MethodDef.to_param(param)
    init_param(param)
  end
end