class WSDL::XMLSchema::XSD2Ruby

Attributes

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

Public Class Methods

new() click to toggle source
# File lib/wsdl/xmlSchema/xsd2ruby.rb, line 43
def initialize
  @location = nil
  @opt = {}
  @logger = Logger.new(STDERR)
  @basedir = nil
  @xsd = nil
  @name = nil
  @name_creator = WSDL::SOAP::ClassNameCreator.new
end

Public Instance Methods

run() click to toggle source
# File lib/wsdl/xmlSchema/xsd2ruby.rb, line 32
def run
  unless @location
    raise RuntimeError, "XML Schema location not given"
  end
  @xsd = import(@location)
  @name = @opt['classdef'] || create_classname(@xsd)
  create_file
end

Private Instance Methods

check_file(filename) click to toggle source
# File lib/wsdl/xmlSchema/xsd2ruby.rb, line 131
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_classdef() click to toggle source
# File lib/wsdl/xmlSchema/xsd2ruby.rb, line 60
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 << WSDL::SOAP::ClassDefCreator.new(@xsd, @name_creator, @modulepath).dump
  end
end
create_classname(xsd) click to toggle source
# File lib/wsdl/xmlSchema/xsd2ruby.rb, line 153
def create_classname(xsd)
  name = nil
  if xsd.targetnamespace
    name = xsd.targetnamespace.scan(/[a-zA-Z0-9]+$/)[0]
  end
  if name.nil?
    'default'
  else
    XSD::CodeGen::GenSupport.safevarname(name)
  end
end
create_file() click to toggle source
# File lib/wsdl/xmlSchema/xsd2ruby.rb, line 53
def create_file
  @modulepath = @opt['module_path']
  create_classdef if @opt.key?('classdef')
  create_mapping_registry if @opt.key?('mapping_registry')
  create_mapper if @opt.key?('mapper')
end
create_mapper() click to toggle source
# File lib/wsdl/xmlSchema/xsd2ruby.rb, line 78
def create_mapper
  @logger.info { "Creating mapper definition." }
  @mapper_filename = @name + '_mapper.rb'
  check_file(@mapper_filename) or return
  write_file(@mapper_filename) do |f|
    f << dump_mapper
  end
end
create_mapping_registry() click to toggle source
# File lib/wsdl/xmlSchema/xsd2ruby.rb, line 69
def create_mapping_registry
  @logger.info { "Creating mapping registry definition." }
  @mr_filename = @name + '_mapping_registry.rb'
  check_file(@mr_filename) or return
  write_file(@mr_filename) do |f|
    f << dump_mapping_registry
  end
end
dump_mapper() click to toggle source
# File lib/wsdl/xmlSchema/xsd2ruby.rb, line 107
def dump_mapper
  class_name = XSD::CodeGen::GenSupport.safeconstname(@name + 'Mapper')
  if @modulepath
    class_name = [@modulepath, class_name].join('::')
  end
  mr_name = XSD::CodeGen::GenSupport.safeconstname(@name + 'MappingRegistry')
  c = XSD::CodeGen::ClassDef.new(class_name, 'XSD::Mapping::Mapper')
  c.def_require("#{@mr_filename}")
  c.def_method("initialize") do
    "super(#{mr_name}::Registry)"
  end
  c.dump
end
dump_mapping_registry() click to toggle source
# File lib/wsdl/xmlSchema/xsd2ruby.rb, line 87
def dump_mapping_registry
  defined_const = {}
  creator = WSDL::SOAP::LiteralMappingRegistryCreator.new(@xsd, @name_creator, @modulepath, defined_const)
  module_name = XSD::CodeGen::GenSupport.safeconstname(@name + 'MappingRegistry')
  if @modulepath
    module_name = [@modulepath, module_name].join('::')
  end
  m = XSD::CodeGen::ModuleDef.new(module_name)
  m.def_require("xsd/mapping")
  m.def_require("#{@classdef_filename}")
  varname = 'Registry'
  m.def_const(varname, '::SOAP::Mapping::LiteralRegistry.new')
  m.def_code(creator.dump(varname))
  #
  defined_const.each do |ns, tag|
    m.def_const(tag, dq(ns))
  end
  m.dump
end
import(location) click to toggle source
# File lib/wsdl/xmlSchema/xsd2ruby.rb, line 165
def import(location)
  WSDL::XMLSchema::Importer.import(location)
end
write_file(filename) { |f| ... } click to toggle source
# File lib/wsdl/xmlSchema/xsd2ruby.rb, line 121
def write_file(filename)
  if @basedir
    filename = File.join(basedir, filename)
  end
  File.open(filename, "w") do |f|
    f.puts "# encoding: UTF-8"
    yield f
  end
end