1998-01-16 12:13:05 +00:00
|
|
|
|
#
|
|
|
|
|
# e2mmap.rb - for ruby 1.1
|
1999-01-20 04:59:39 +00:00
|
|
|
|
# $Release Version: 1.2$
|
|
|
|
|
# $Revision: 1.8 $
|
|
|
|
|
# $Date: 1998/08/19 15:22:22 $
|
1998-01-16 12:13:05 +00:00
|
|
|
|
# by Keiju ISHITSUKA
|
|
|
|
|
#
|
|
|
|
|
# --
|
1999-01-20 04:59:39 +00:00
|
|
|
|
# Usage:
|
|
|
|
|
#
|
|
|
|
|
# class Foo
|
|
|
|
|
# extend Exception2MassageMapper
|
|
|
|
|
# def_exception :NewExceptionClass, "message..."[, superclass]
|
|
|
|
|
# def_e2meggage ExistingExceptionClass, "message..."
|
|
|
|
|
# ...
|
|
|
|
|
# end
|
|
|
|
|
#
|
|
|
|
|
# Foo.Fail NewExceptionClass, arg...
|
|
|
|
|
# Foo.Fail ExistingExceptionClass, arg...
|
1998-01-16 12:13:05 +00:00
|
|
|
|
#
|
|
|
|
|
#
|
|
|
|
|
if VERSION < "1.1"
|
|
|
|
|
require "e2mmap1_0.rb"
|
|
|
|
|
else
|
|
|
|
|
|
|
|
|
|
module Exception2MessageMapper
|
1999-01-20 04:59:39 +00:00
|
|
|
|
@RCS_ID='-$Id: e2mmap.rb,v 1.8 1998/08/19 15:22:22 keiju Exp keiju $-'
|
1998-01-16 12:13:05 +00:00
|
|
|
|
|
|
|
|
|
E2MM = Exception2MessageMapper
|
1999-01-20 04:59:39 +00:00
|
|
|
|
|
1998-01-16 12:13:05 +00:00
|
|
|
|
def E2MM.extend_object(cl)
|
|
|
|
|
super
|
|
|
|
|
cl.bind(self)
|
|
|
|
|
end
|
|
|
|
|
|
1999-01-20 04:59:39 +00:00
|
|
|
|
# backward compatibility
|
1998-01-16 12:13:05 +00:00
|
|
|
|
def E2MM.extend_to(b)
|
|
|
|
|
c = eval("self", b)
|
|
|
|
|
c.extend(self)
|
|
|
|
|
end
|
|
|
|
|
|
1999-01-20 04:59:39 +00:00
|
|
|
|
# public :fail
|
|
|
|
|
alias fail! fail
|
|
|
|
|
|
|
|
|
|
#def fail(err = nil, *rest)
|
|
|
|
|
# super
|
|
|
|
|
#end
|
1998-01-16 12:13:05 +00:00
|
|
|
|
|
1999-01-20 04:59:39 +00:00
|
|
|
|
def Fail(err = nil, *rest)
|
|
|
|
|
Exception2MessageMapper.Fail Exception2MessageMapper::ErrNotRegisteredException, err.inspect
|
1998-01-16 12:13:05 +00:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def bind(cl)
|
|
|
|
|
self.module_eval %q^
|
1999-01-20 04:59:39 +00:00
|
|
|
|
E2MM_ErrorMSG = {} unless self.const_defined?(:E2MM_ErrorMSG)
|
1998-01-16 12:13:05 +00:00
|
|
|
|
# fail(err, *rest)
|
1999-01-20 04:59:39 +00:00
|
|
|
|
# err: Exception
|
|
|
|
|
# rest: Parameter accompanied with the exception
|
1998-01-16 12:13:05 +00:00
|
|
|
|
#
|
1999-01-20 04:59:39 +00:00
|
|
|
|
def self.Fail(err = nil, *rest)
|
|
|
|
|
if form = E2MM_ErrorMSG[err]
|
|
|
|
|
$! = err.new(sprintf(form, *rest))
|
|
|
|
|
$@ = caller(0) if $@.nil?
|
|
|
|
|
$@.shift
|
|
|
|
|
# e2mm_fail()
|
|
|
|
|
raise()
|
|
|
|
|
# elsif self == Exception2MessageMapper
|
|
|
|
|
# fail Exception2MessageMapper::ErrNotRegisteredException, err.to_s
|
|
|
|
|
else
|
|
|
|
|
# print "super\n"
|
|
|
|
|
super
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
# <20><><EFBFBD><EFBFBD><EFBFBD>θߴ<CEB8><DFB4><EFBFBD><EFBFBD>Τ<EFBFBD><CEA4><EFBFBD>
|
1998-01-16 12:13:05 +00:00
|
|
|
|
def self.fail(err = nil, *rest)
|
|
|
|
|
if form = E2MM_ErrorMSG[err]
|
|
|
|
|
$! = err.new(sprintf(form, *rest))
|
1999-01-20 04:59:39 +00:00
|
|
|
|
$@ = caller(0) if $@.nil?
|
|
|
|
|
$@.shift
|
1998-01-16 12:13:05 +00:00
|
|
|
|
# e2mm_fail()
|
|
|
|
|
raise()
|
|
|
|
|
# elsif self == Exception2MessageMapper
|
|
|
|
|
# fail Exception2MessageMapper::ErrNotRegisteredException, err.to_s
|
|
|
|
|
else
|
|
|
|
|
# print "super\n"
|
|
|
|
|
super
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
class << self
|
|
|
|
|
public :fail
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
# def_exception(c, m)
|
|
|
|
|
# c: exception
|
|
|
|
|
# m: message_form
|
|
|
|
|
#
|
|
|
|
|
def self.def_e2message(c, m)
|
|
|
|
|
E2MM_ErrorMSG[c] = m
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
# def_exception(c, m)
|
|
|
|
|
# n: exception_name
|
|
|
|
|
# m: message_form
|
1999-01-20 04:59:39 +00:00
|
|
|
|
# s: superclass_of_exception (default: Exception)
|
|
|
|
|
# defines excaption named ``c'', whose message is ``m''.
|
1998-01-16 12:13:05 +00:00
|
|
|
|
#
|
|
|
|
|
#def def_exception(n, m)
|
1999-01-20 04:59:39 +00:00
|
|
|
|
def self.def_exception(n, m, s = nil)
|
1998-01-16 12:13:05 +00:00
|
|
|
|
n = n.id2name if n.kind_of?(Fixnum)
|
1999-01-20 04:59:39 +00:00
|
|
|
|
unless s
|
|
|
|
|
if defined?(StandardError)
|
|
|
|
|
s = StandardError
|
|
|
|
|
else
|
|
|
|
|
s = Exception
|
|
|
|
|
end
|
|
|
|
|
end
|
1998-01-16 12:13:05 +00:00
|
|
|
|
e = Class.new(s)
|
1999-01-20 04:59:39 +00:00
|
|
|
|
|
1998-01-16 12:13:05 +00:00
|
|
|
|
const_set(n, e)
|
|
|
|
|
E2MM_ErrorMSG[e] = m
|
|
|
|
|
# const_get(:E2MM_ErrorMSG)[e] = m
|
|
|
|
|
end
|
|
|
|
|
^
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
extend E2MM
|
|
|
|
|
def_exception(:ErrNotClassOrModule, "Not Class or Module")
|
|
|
|
|
def_exception(:ErrNotRegisteredException, "not registerd exception(%s)")
|
|
|
|
|
end
|
|
|
|
|
end
|