#!/usr/bin/env ruby # encoding: UTF-8 $:.unshift File.join(File.dirname(__FILE__),'../lib') if ENV['DEBUG_SOAP4R'] require 'getoptlong' require 'logger' require 'logger-application' unless defined?(Logger::Application) require 'wsdl/xmlSchema/xsd2ruby' class XSD2RubyApp < Logger::Application private OptSet = [ ['--xsd','-x', GetoptLong::REQUIRED_ARGUMENT], ['--module_path','-m', GetoptLong::REQUIRED_ARGUMENT], ['--classdef','-e', GetoptLong::OPTIONAL_ARGUMENT], ['--mapping_registry','-r', GetoptLong::NO_ARGUMENT], ['--mapper','-p', GetoptLong::NO_ARGUMENT], ['--force','-f', GetoptLong::NO_ARGUMENT], ['--quiet','-q', GetoptLong::NO_ARGUMENT], ] def initialize super('app') STDERR.sync = true self.level = Logger::FATAL end def run @worker = WSDL::XMLSchema::XSD2Ruby.new @worker.logger = @log location, opt = parse_opt(GetoptLong.new(*OptSet)) usage_exit unless location @worker.location = location if opt['quiet'] self.level = Logger::FATAL else self.level = Logger::INFO end @worker.opt.update(opt) @worker.run 0 end def usage_exit puts <<__EOU__ Usage: #{ $0 } --xsd xsd_location [options] xsd_location: filename or URL Example: #{ $0 } --xsd myapp.xsd --classdef foo Options: --xsd xsd_location --classdef [filenameprefix] --mapping_registry --mapper --module_path [Module::Path::Name] --force --quiet __EOU__ exit 1 end def parse_opt(getoptlong) opt = {} xsd = nil begin getoptlong.each do |name, arg| case name when "--xsd" xsd = arg when "--module_path" opt['module_path'] = arg when "--classdef", "--mapping_registry", "--mapper" opt[name.sub(/^--/, '')] = arg.empty? ? nil : arg when "--force" opt['force'] = true when "--quiet" opt['quiet'] = true else raise ArgumentError.new("Unknown type #{ arg }") end end rescue usage_exit end return xsd, opt end end XSD2RubyApp.new.start