Extended maintenance of Ruby 1.9.3 ended on February 23, 2015. Read more
e2mmap.rb - for ruby 1.1
$Release Version: 2.0$
$Revision: 1.10 $
by Keiju ISHITSUKA
–
Usage:
U1)
class Foo extend Exception2MessageMapper def_e2message ExistingExceptionClass, "message..." def_exception :NewExceptionClass, "message..."[, superclass] ... end
U2)
module Error extend Exception2MessageMapper def_e2meggage ExistingExceptionClass, "message..." def_exception :NewExceptionClass, "message..."[, superclass] ... end class Foo include Error ... end foo = Foo.new foo.Fail ....
U3)
module Error extend Exception2MessageMapper def_e2message ExistingExceptionClass, "message..." def_exception :NewExceptionClass, "message..."[, superclass] ... end class Foo extend Exception2MessageMapper include Error ... end Foo.Fail NewExceptionClass, arg... Foo.Fail ExistingExceptionClass, arg...
Fail(klass, err, *rest)
klass: class to define exception under. err: exception rest: message arguments
# File e2mmap.rb, line 138
def E2MM.Raise(klass = E2MM, err = nil, *rest)
if form = e2mm_message(klass, err)
b = $@.nil? ? caller(1) : $@
#p $@
#p __FILE__
b.shift if b[0] =~ /^#{Regexp.quote(__FILE__)}:/
raise err, sprintf(form, *rest), b
else
E2MM.Fail E2MM, ErrNotRegisteredException, err.inspect
end
end
Exception2MessageMapper#def_e2message(k, e, m)
k: class to define exception under.
e: exception
m: message_form
define exception c with message m.
# File e2mmap.rb, line 114
def E2MM.def_e2message(k, c, m)
E2MM.instance_eval{@MessageMap[[k, c]] = m}
c
end
Exception2MessageMapper#def_exception(k, n, m, s)
k: class to define exception under.
n: exception_name
m: message_form
s: superclass(default: StandardError)
define exception named ``c'' with message m.
# File e2mmap.rb, line 126
def E2MM.def_exception(k, n, m, s = StandardError)
n = n.id2name if n.kind_of?(Fixnum)
e = Class.new(s)
E2MM.instance_eval{@MessageMap[[k, e]] = m}
k.const_set(n, e)
end
# File e2mmap.rb, line 153
def E2MM.e2mm_message(klass, exp)
for c in klass.ancestors
if mes = @MessageMap[[c,exp]]
#p mes
m = klass.instance_eval('"' + mes + '"')
return m
end
end
nil
end
Fail(err, *rest)
err: exception rest: message arguments
# File e2mmap.rb, line 77
def Raise(err = nil, *rest)
E2MM.Raise(self, err, *rest)
end
# File e2mmap.rb, line 60
def bind(cl)
self.module_eval %Q[
def Raise(err = nil, *rest)
Exception2MessageMapper.Raise(self.class, err, *rest)
end
alias Fail Raise
def self.included(mod)
mod.extend Exception2MessageMapper
end
]
end
#def_e2message(c, m)
c: exception
m: message_form
define exception c with message m.
# File e2mmap.rb, line 88
def def_e2message(c, m)
E2MM.def_e2message(self, c, m)
end
#def_exception(n, m, s)
n: exception_name
m: message_form
s: superclass(default: StandardError)
define exception named ``c'' with message m.
# File e2mmap.rb, line 98
def def_exception(n, m, s = StandardError)
E2MM.def_exception(self, n, m, s)
end
Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.
If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.
If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.
If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.