module WSDL::SOAP::ClassDefCreatorSupport

requires @defined_const, @simpletypes, @name_creator

Public Instance Methods

assign_const(value, prefix = '') click to toggle source
# File lib/wsdl/soap/classDefCreatorSupport.rb, line 87
def assign_const(value, prefix = '')
  return if value.nil? or @defined_const.key?(value)
  name = value.scan(/[^:\/]+\/?\z/)[0] || 'C'
  tag = prefix + safeconstname(name)
  if @defined_const.value?(tag)
    idx = 0
    while true
      tag = prefix + safeconstname(name + "_#{idx}")
      break unless @defined_const.value?(tag)
      idx += 1
      raise RuntimeError.new("too much similar names") if idx > 100
    end
  end
  @defined_const[value] = tag
end
basetype_mapped_class(name) click to toggle source
# File lib/wsdl/soap/classDefCreatorSupport.rb, line 32
def basetype_mapped_class(name)
  ::SOAP::TypeMap[name]
end
create_type_name(modulepath, element) click to toggle source
# File lib/wsdl/soap/classDefCreatorSupport.rb, line 103
def create_type_name(modulepath, element)
  if element.type == XSD::AnyTypeName
    # nil means anyType.
    nil
  elsif simpletype = @simpletypes[element.type]
    if simpletype.restriction and simpletype.restriction.enumeration?
      mapped_class_name(element.type, modulepath)
    else
      nil
    end
  elsif klass = element_basetype(element)
    klass.name
  elsif element.type
    mapped_class_name(element.type, modulepath)
  elsif element.ref
    mapped_class_name(element.ref, modulepath)
  elsif element.anonymous_type?
    # inner class
    mapped_class_name(element.name, modulepath)
  else
    nil
  end
end
dq(ele) click to toggle source
# File lib/wsdl/soap/classDefCreatorSupport.rb, line 63
def dq(ele)
  ele.dump
end
dqname(qname) click to toggle source
# File lib/wsdl/soap/classDefCreatorSupport.rb, line 79
def dqname(qname)
  if @defined_const.key?(qname.namespace)
    qname.dump(@defined_const[qname.namespace])
  else
    qname.dump
  end
end
dump_method_signature(operation, element_definitions) click to toggle source
# File lib/wsdl/soap/classDefCreatorSupport.rb, line 36
  def dump_method_signature(operation, element_definitions)
    name = operation.name
    input = operation.input
    output = operation.output
    fault = operation.fault
    signature = "#{ name }#{ dump_inputparam(input) }"
    str = <<__EOD__
# SYNOPSIS
#   #{name}#{dump_inputparam(input)}
#
# ARGS
#{dump_inout_type(input, element_definitions).chomp}
#
# RETURNS
#{dump_inout_type(output, element_definitions).chomp}
#
__EOD__
    unless fault.empty?
      str <<<<__EOD__
# RAISES
#{dump_fault_type(fault, element_definitions)}
#
__EOD__
    end
    str
  end
mapped_class_basename(qname, modulepath) click to toggle source
# File lib/wsdl/soap/classDefCreatorSupport.rb, line 27
def mapped_class_basename(qname, modulepath)
  classname = @name_creator.assign_name(qname, modulepath)
  classname.sub(/\A.*:/, '')
end
mapped_class_name(qname, modulepath) click to toggle source
# File lib/wsdl/soap/classDefCreatorSupport.rb, line 23
def mapped_class_name(qname, modulepath)
  @name_creator.assign_name(qname, modulepath)
end
ndq(ele) click to toggle source
# File lib/wsdl/soap/classDefCreatorSupport.rb, line 67
def ndq(ele)
  ele.nil? ? 'nil' : dq(ele)
end
nsym(ele) click to toggle source
# File lib/wsdl/soap/classDefCreatorSupport.rb, line 75
def nsym(ele)
  ele.nil? ? 'nil' : sym(ele)
end
sym(ele) click to toggle source
# File lib/wsdl/soap/classDefCreatorSupport.rb, line 71
def sym(ele)
  ':' + ele.id2name
end

Private Instance Methods

add_at(base, str, pos) click to toggle source
# File lib/wsdl/soap/classDefCreatorSupport.rb, line 172
def add_at(base, str, pos)
  if base.size >= pos
    base + ' ' + str
  else
    base + ' ' * (pos - base.size) + str
  end
end
attribute_basetype(attr) click to toggle source
# File lib/wsdl/soap/classDefCreatorSupport.rb, line 196
def attribute_basetype(attr)
  if klass = basetype_class(attr.type)
    klass
  elsif attr.local_simpletype
    basetype_class(attr.local_simpletype.base)
  else
    nil
  end
end
basetype_class(type) click to toggle source
# File lib/wsdl/soap/classDefCreatorSupport.rb, line 206
def basetype_class(type)
  return nil if type.nil?
  if simpletype = @simpletypes[type]
    basetype_mapped_class(simpletype.base)
  else
    basetype_mapped_class(type)
  end
end
dump_fault_type(fault, element_definitions) click to toggle source
# File lib/wsdl/soap/classDefCreatorSupport.rb, line 180
def dump_fault_type(fault, element_definitions)
  fault.collect { |ele|
    dump_inout_type(ele, element_definitions).chomp
  }.join("\n")
end
dump_inout_type(param, element_definitions) click to toggle source
# File lib/wsdl/soap/classDefCreatorSupport.rb, line 129
def dump_inout_type(param, element_definitions)
  if param
    message = param.find_message
    params = ""
    message.parts.each do |part|
      name = safevarname(part.name)
      if part.type
        typename = safeconstname(part.type.name)
        qname = part.type
        params << add_at("#   #{name}", "#{typename} - #{qname}\n", 20)
      elsif part.element
        ele = element_definitions[part.element]
        if ele.type
          typename = safeconstname(ele.type.name)
          qname = ele.type
        else
          typename = safeconstname(ele.name.name)
          qname = ele.name
        end
        params << add_at("#   #{name}", "#{typename} - #{qname}\n", 20)
      end
    end
    unless params.empty?
      return params
    end
  end
  "#   N/A\n"
end
dump_inputparam(input) click to toggle source
# File lib/wsdl/soap/classDefCreatorSupport.rb, line 158
def dump_inputparam(input)
  message = input.find_message
  params = ""
  message.parts.each do |part|
    params << ", " unless params.empty?
    params << safevarname(part.name)
  end
  if params.empty?
    ""
  else
    "(#{ params })"
  end
end
element_basetype(ele) click to toggle source
# File lib/wsdl/soap/classDefCreatorSupport.rb, line 186
def element_basetype(ele)
  if klass = basetype_class(ele.type)
    klass
  elsif ele.local_simpletype
    basetype_class(ele.local_simpletype.base)
  else
    nil
  end
end
name_attribute(attribute) click to toggle source
# File lib/wsdl/soap/classDefCreatorSupport.rb, line 221
def name_attribute(attribute)
  return attribute.name if attribute.name 
  return attribute.ref if attribute.ref
  raise RuntimeError.new("cannot define name of #{attribute}")
end
name_element(element) click to toggle source
# File lib/wsdl/soap/classDefCreatorSupport.rb, line 215
def name_element(element)
  return element.name if element.name 
  return element.ref if element.ref
  raise RuntimeError.new("cannot define name of #{element}")
end