Module: Exception2MessageMapper

Defined in:
lib/e2mmap.rb

Constant Summary collapse

E2MM =
Exception2MessageMapper

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.def_e2message(k, c, m) ⇒ Object

E2MM.def_exception(k, e, m)

k:  class to define exception under.
e:  exception
m:  message_form

define exception c with message m.



136
137
138
139
# File 'lib/e2mmap.rb', line 136

def E2MM.def_e2message(k, c, m)
  E2MM.instance_eval{@MessageMap[[k, c]] = m}
  c
end

.def_exception(k, n, m, s = StandardError) ⇒ Object

E2MM.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.



148
149
150
151
152
153
# File 'lib/e2mmap.rb', line 148

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

.e2mm_message(klass, exp) ⇒ Object Also known as: message



176
177
178
179
180
181
182
183
184
185
# File 'lib/e2mmap.rb', line 176

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

.extend_object(cl) ⇒ Object



58
59
60
61
# File 'lib/e2mmap.rb', line 58

def E2MM.extend_object(cl)
  super
  cl.bind(self) unless cl == E2MM
end

.extend_to(b) ⇒ Object

backward compatibility



64
65
66
67
# File 'lib/e2mmap.rb', line 64

def E2MM.extend_to(b)
  c = eval("self", b)
  c.extend(self)
end

.failObject

.Raise(klass = E2MM, err = nil, *rest) ⇒ Object Also known as: Fail

Fail(klass, err, *rest) klass: class to define exception under. err: exception rest: message arguments



160
161
162
163
164
165
166
167
168
169
170
171
# File 'lib/e2mmap.rb', line 160

def E2MM.Raise(klass = E2MM, err = nil, *rest)
  if form = e2mm_message(klass, err)
    $! = err.new(sprintf(form, *rest))
    $@ = caller(1) if $@.nil?
    #p $@
    #p __FILE__
    $@.shift if $@[0] =~ /^#{Regexp.quote(__FILE__)}:/
    raise
  else
    E2MM.Fail E2MM, ErrNotRegisteredException, err.inspect
  end
end

Instance Method Details

#bind(cl) ⇒ Object



69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/e2mmap.rb', line 69

def bind(cl)
  self.module_eval %[
    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) ⇒ Object

def_e2message(c, m)

c:  exception
m:  message_form

define exception c with message m.



110
111
112
# File 'lib/e2mmap.rb', line 110

def def_e2message(c, m)
  E2MM.def_e2message(self, c, m)
end

#def_exception(n, m, s = StandardError) ⇒ Object

def_exception(n, m, s)

n:  exception_name
m:  message_form
s:	superclass(default: StandardError)

define exception named "c" with message m.



120
121
122
# File 'lib/e2mmap.rb', line 120

def def_exception(n, m, s = StandardError)
  E2MM.def_exception(self, n, m, s)
end

#fail(err = nil, *rest) ⇒ Object Also known as: fail!



93
94
95
96
97
98
99
# File 'lib/e2mmap.rb', line 93

def fail(err = nil, *rest)
  begin 
    E2MM.Fail(self, err, *rest)
  rescue E2MM::ErrNotRegisteredException
    super
  end
end

#Raise(err = nil, *rest) ⇒ Object Also known as: Fail

Fail(err, *rest) err: exception rest: message arguments



86
87
88
# File 'lib/e2mmap.rb', line 86

def Raise(err = nil, *rest)
  E2MM.Raise(self, err, *rest)
end