class WSDL::SOAP::WSDL2Ruby

Attributes

basedir[RW]
location[RW]
logger[RW]
opt[R]

Public Class Methods

new() click to toggle source
# File lib/wsdl/soap/wsdl2ruby.rb, line 49
def initialize
  @modulepath = nil
  @location = nil
  @opt = {}
  @logger = Logger.new(STDERR)
  @basedir = nil
  @wsdl = nil
  @name = nil
  @classdef_filename = nil
  @mr_filename = nil
  @name_creator = ClassNameCreator.new
end

Public Instance Methods

run() click to toggle source
# File lib/wsdl/soap/wsdl2ruby.rb, line 34
def run
  unless @location
    raise RuntimeError, "WSDL location not given"
  end
  @wsdl = import(@location)
  if @opt['classdef']
    @name = @opt['classdef']
  else
    @name = @wsdl.name ? @wsdl.name.name : 'default'
  end
  create_file
end

Private Instance Methods

check_file(filename) click to toggle source
# File lib/wsdl/soap/wsdl2ruby.rb, line 193
def check_file(filename)
  if @basedir
    filename = File.join(basedir, filename)
  end
  if FileTest.exist?(filename)
    if @opt.key?('force')
      @logger.warn {
        "File '#{filename}' exists but overrides it."
      }
      true
    else
      @logger.warn {
        "File '#{filename}' exists.  #{$0} did not override it."
      }
      false
    end
  else
    @logger.info { "Creates file '#{filename}'." }
    true
  end
end
create_cgi_stub(servicename) click to toggle source
# File lib/wsdl/soap/wsdl2ruby.rb, line 124
def create_cgi_stub(servicename)
  @logger.info { "Creating CGI stub." }
  servicename ||= @wsdl.services[0].name.name
  @cgi_stubFilename = servicename + '.cgi'
  check_file(@cgi_stubFilename) or return
  write_file(@cgi_stubFilename) do |f|
    f << shbang << "\n"
    f.puts "# encoding: UTF-8"
    f.puts "# Generated by wsdl2ruby (#{::SOAP::VERSION::FORK_STRING})\n"
    f << "require_relative '#{@servant_skelton_filename}'\n" if @servant_skelton_filename
    f << "require_relative '#{@mr_filename}'\n" if @mr_filename
    f << WSDL::SOAP::CGIStubCreator.new(@wsdl, @name_creator, @modulepath).dump(create_name(servicename))
  end
end
create_classdef() click to toggle source
# File lib/wsdl/soap/wsdl2ruby.rb, line 74
def create_classdef
  @logger.info { "Creating class definition." }
  @classdef_filename = @name + '.rb'
  check_file(@classdef_filename) or return
  write_file(@classdef_filename) do |f|
    f.puts "# encoding: UTF-8"
    f.puts "# Generated by wsdl2ruby (#{::SOAP::VERSION::FORK_STRING})\n"
    f << WSDL::SOAP::ClassDefCreator.new(@wsdl, @name_creator, @modulepath).dump
  end
end
create_client_skelton(servicename) click to toggle source
# File lib/wsdl/soap/wsdl2ruby.rb, line 97
def create_client_skelton(servicename)
  return if @wsdl.services.empty?
  @logger.info { "Creating client skelton." }
  servicename ||= @wsdl.services[0].name.name
  @client_skelton_filename = servicename + 'Client.rb'
  check_file(@client_skelton_filename) or return
  write_file(@client_skelton_filename) do |f|
    f << shbang << "\n"
    f.puts "# encoding: UTF-8"
    f.puts "# Generated by wsdl2ruby (#{::SOAP::VERSION::FORK_STRING})\n"
    f << "require_relative '#{@driver_filename}'\n\n" if @driver_filename
    f << WSDL::SOAP::ClientSkeltonCreator.new(@wsdl, @name_creator, @modulepath).dump(create_name(servicename))
  end
end
create_driver(porttypename, drivername_postfix) click to toggle source
# File lib/wsdl/soap/wsdl2ruby.rb, line 169
def create_driver(porttypename, drivername_postfix)
  @logger.info { "Creating driver." }
  @driver_filename = (porttypename || @name) + 'Driver.rb'
  creator = WSDL::SOAP::DriverCreator.new(@wsdl, @name_creator, @modulepath)
  creator.drivername_postfix = drivername_postfix
  check_file(@driver_filename) or return
  write_file(@driver_filename) do |f|
    f.puts "# encoding: UTF-8"
    f.puts "# Generated by wsdl2ruby (#{::SOAP::VERSION::FORK_STRING})\n"
    f << "require_relative '#{@classdef_filename}'\n" if @classdef_filename
    f << "require_relative '#{@mr_filename}'\n" if @mr_filename
    f << creator.dump(create_name(porttypename))
  end
end
create_file() click to toggle source
# File lib/wsdl/soap/wsdl2ruby.rb, line 62
def create_file
  @modulepath = @opt['module_path']
  create_classdef if @opt.key?('classdef')
  create_mapping_registry if @opt.key?('mapping_registry')
  create_servant_skelton(@opt['servant_skelton']) if @opt.key?('servant_skelton')
  create_cgi_stub(@opt['cgi_stub']) if @opt.key?('cgi_stub')
  create_standalone_server_stub(@opt['standalone_server_stub']) if @opt.key?('standalone_server_stub')
  create_servlet_stub(@opt['servlet_stub']) if @opt.key?('servlet_stub')
  create_driver(@opt['driver'], @opt['drivername_postfix'] || '') if @opt.key?('driver')
  create_client_skelton(@opt['client_skelton']) if @opt.key?('client_skelton')
end
create_mapping_registry() click to toggle source
# File lib/wsdl/soap/wsdl2ruby.rb, line 85
def create_mapping_registry
  @logger.info { "Creating mapping registry definition." }
  @mr_filename = @name + 'MappingRegistry.rb'
  check_file(@mr_filename) or return
  write_file(@mr_filename) do |f|
    f.puts "# encoding: UTF-8"
    f.puts "# Generated by wsdl2ruby (#{::SOAP::VERSION::FORK_STRING})\n"
    f << "require_relative '#{@classdef_filename}'\n" if @classdef_filename
    f << WSDL::SOAP::MappingRegistryCreator.new(@wsdl, @name_creator, @modulepath).dump
  end
end
create_name(name) click to toggle source
# File lib/wsdl/soap/wsdl2ruby.rb, line 219
def create_name(name)
  name ? XSD::QName.new(@wsdl.targetnamespace, name) : nil
end
create_servant_skelton(porttypename) click to toggle source
# File lib/wsdl/soap/wsdl2ruby.rb, line 112
def create_servant_skelton(porttypename)
  @logger.info { "Creating servant skelton." }
  @servant_skelton_filename = (porttypename || @name + 'Servant') + '.rb'
  check_file(@servant_skelton_filename) or return
  write_file(@servant_skelton_filename) do |f|
    f.puts "# encoding: UTF-8"
    f.puts "# Generated by wsdl2ruby (#{::SOAP::VERSION::FORK_STRING})\n"
    f << "require_relative '#{@classdef_filename}'\n\n" if @classdef_filename
    f << WSDL::SOAP::ServantSkeltonCreator.new(@wsdl, @name_creator, @modulepath).dump(create_name(porttypename))
  end
end
create_servlet_stub(servicename) click to toggle source
# File lib/wsdl/soap/wsdl2ruby.rb, line 154
def create_servlet_stub(servicename)
  @logger.info { "Creating servlet stub." }
  servicename ||= @wsdl.services[0].name.name
  @servlet_stub_filename = servicename + 'Servlet.rb'
  check_file(@servlet_stub_filename) or return
  write_file(@servlet_stub_filename) do |f|
    f << shbang << "\n"
    f.puts "# encoding: UTF-8"
    f.puts "# Generated by wsdl2ruby (#{::SOAP::VERSION::FORK_STRING})\n"
    f << "require_relative '#{@servant_skelton_filename}'\n" if @servant_skelton_filename
    f << "require_relative '#{@mr_filename}'\n" if @mr_filename
    f << WSDL::SOAP::ServletStubCreator.new(@wsdl, @name_creator, @modulepath).dump(create_name(servicename))
  end
end
create_standalone_server_stub(servicename) click to toggle source
# File lib/wsdl/soap/wsdl2ruby.rb, line 139
def create_standalone_server_stub(servicename)
  @logger.info { "Creating standalone stub." }
  servicename ||= @wsdl.services[0].name.name
  @standalone_server_stub_filename = servicename + '.rb'
  check_file(@standalone_server_stub_filename) or return
  write_file(@standalone_server_stub_filename) do |f|
    f << shbang << "\n"
    f.puts "# encoding: UTF-8"
    f.puts "# Generated by wsdl2ruby (#{::SOAP::VERSION::FORK_STRING})\n"
    f << "require_relative '#{@servant_skelton_filename}'\n" if @servant_skelton_filename
    f << "require_relative '#{@mr_filename}'\n" if @mr_filename
    f << WSDL::SOAP::StandaloneServerStubCreator.new(@wsdl, @name_creator, @modulepath).dump(create_name(servicename))
  end
end
import(location) click to toggle source
# File lib/wsdl/soap/wsdl2ruby.rb, line 223
def import(location)
  WSDL::Importer.import(location)
end
shbang() click to toggle source
# File lib/wsdl/soap/wsdl2ruby.rb, line 215
def shbang
  "#!/usr/bin/env ruby"
end
write_file(filename) { |f| ... } click to toggle source
# File lib/wsdl/soap/wsdl2ruby.rb, line 184
def write_file(filename)
  if @basedir
    filename = File.join(basedir, filename)
  end
  File.open(filename, "w") do |f|
    yield f
  end
end