1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
#
# e2mmap.rb - for ruby 1.1
# $Release Version: 1.2$
# $Revision: 1.8 $
# $Date: 1998/08/19 15:22:22 $
# by Keiju ISHITSUKA
#
# --
# Usage:
#
# class Foo
# extend Exception2MassageMapper
# def_exception :NewExceptionClass, "message..."[, superclass]
# def_e2meggage ExistingExceptionClass, "message..."
# ...
# end
#
# Foo.Fail NewExceptionClass, arg...
# Foo.Fail ExistingExceptionClass, arg...
#
#
if VERSION < "1.1"
require "e2mmap1_0.rb"
else
module Exception2MessageMapper
@RCS_ID='-$Id: e2mmap.rb,v 1.8 1998/08/19 15:22:22 keiju Exp keiju $-'
E2MM = Exception2MessageMapper
def E2MM.extend_object(cl)
super
cl.bind(self)
end
# backward compatibility
def E2MM.extend_to(b)
c = eval("self", b)
c.extend(self)
end
# public :fail
alias fail! fail
#def fail(err = nil, *rest)
# super
#end
def Fail(err = nil, *rest)
Exception2MessageMapper.Fail Exception2MessageMapper::ErrNotRegisteredException, err.inspect
end
def bind(cl)
self.module_eval %q^
E2MM_ErrorMSG = {} unless self.const_defined?(:E2MM_ErrorMSG)
# fail(err, *rest)
# err: Exception
# rest: Parameter accompanied with the exception
#
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
# 過去の互換性のため
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
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
# s: superclass_of_exception (default: Exception)
# defines excaption named ``c'', whose message is ``m''.
#
#def def_exception(n, m)
def self.def_exception(n, m, s = nil)
n = n.id2name if n.kind_of?(Fixnum)
unless s
if defined?(StandardError)
s = StandardError
else
s = Exception
end
end
e = Class.new(s)
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
|