class Soybean::InterfaceBuilder

Attributes

definitions[R]

Public Class Methods

new(definitions, name_creator, modulepath = nil) click to toggle source
# File lib/soybean/interface_builder.rb, line 8
def initialize(definitions, name_creator, modulepath = nil)
  @definitions = definitions
  @name_creator = name_creator
  @modulepath = modulepath
  @porttype = @definitions.porttypes.first
end

Public Instance Methods

actions() click to toggle source
# File lib/soybean/interface_builder.rb, line 37
def actions
  assigned_method = collect_assigned_method(@definitions, @porttype.name, @modulepath)
  binding = @porttype.find_binding
  if binding
    binding.operations.map do |op_bind|
      operation = op_bind.find_operation
      if operation.nil?
        warn("operation not found for binding: #{op_bind}")
        next
      end
      name = assigned_method[op_bind.boundid] || operation.name
      methodname = safemethodname(name)
      input = operation.input
      params = input.find_message.parts.collect { |part|
        safevarname(part.name)
      }
      [methodname.underscore, params, operation]
    end
  else
    []
  end
end
dump() click to toggle source
# File lib/soybean/interface_builder.rb, line 15
def dump
  result = ""
  if @modulepath
    result << "\n"
    modulepath = @modulepath.respond_to?(:lines) ? @modulepath.lines : @modulepath # RubyJedi: compatible with Ruby 1.8.6 and above
    result << modulepath.collect { |ele| "module #{ele}" }.join("; ")
    result << "\n\n"
  end
  result << dump_porttype
  if @modulepath
    result << "\n\n"
    modulepath = @modulepath.respond_to?(:lines) ? @modulepath.lines : @modulepath # RubyJedi: compatible with Ruby 1.8.6 and above
    result << modulepath.collect { |ele| "end" }.join("; ")
    result << "\n"
  end
  result
end
mapped_class_basename(*) click to toggle source
# File lib/soybean/interface_builder.rb, line 33
def mapped_class_basename(*)
  (@definitions.name.name.gsub(/Service$/, '') rescue 'Base') + 'Interface'
end

Private Instance Methods

dump_porttype() click to toggle source
# File lib/soybean/interface_builder.rb, line 62
    def dump_porttype
      class_name = mapped_class_basename(@porttype.name, @modulepath)
      c = XSD::CodeGen::ClassDef.new(class_name, 'Soybean::Interface')

      element_definitions = @definitions.collect_elements
      actions.each do |method_name, params, operation|
        m = XSD::CodeGen::MethodDef.new(method_name, params) do
          <<-EOD
            p [#{params.join(", ")}]
            raise NotImplementedError.new
          EOD
        end
        m.comment = dump_method_signature(method_name, operation, element_definitions)
        c.add_method(m)
      end

      methoddef = MethodDefCreator.new(@definitions, @name_creator, @modulepath, {}).dump(@porttype.name)
      c.def_code %Q{Methods = [\n#{methoddef.gsub(/^/, "  ")}\n]}

      c.dump
    end