Class: Predef
- Inherits:
-
Module
show all
- Defined in:
- lib/predef.rb
Defined Under Namespace
Modules: Refinements
Classes: Error
Constant Summary
collapse
- VERSION =
'0.8.0'
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(klass) ⇒ Predef
45
46
47
|
# File 'lib/predef.rb', line 45
def initialize klass
prepend_features klass
end
|
Class Method Details
.predef(klass, method_name, &definition) ⇒ Object
6
7
8
9
10
11
12
|
# File 'lib/predef.rb', line 6
def self.predef klass, method_name, &definition
unless klass.public_method_defined? method_name
raise ::Predef::Error, "#{klass}##{method_name} is not defined! Use `Predef.predef!` if you want to define a new method."
end
predef! klass, method_name, &definition
end
|
.predef!(klass, method_name, &definition) ⇒ Object
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
# File 'lib/predef.rb', line 14
def self.predef! klass, method_name, &definition
if defined? klass.__PREDEF__
instance = klass.__PREDEF__
else
instance = new(klass)
singleton_class = class << klass; self ; end
singleton_class.class_eval do
define_method(:__PREDEF__) { instance }
end
end
instance.module_eval do
define_method(method_name, &definition)
end
method_name
end
|
.unpredef(klass, method_name) ⇒ Object
32
33
34
35
36
37
|
# File 'lib/predef.rb', line 32
def self.unpredef klass, method_name
if !(defined? klass.__PREDEF__) || !(klass.__PREDEF__.public_method_defined? method_name)
raise ::Predef::Error, "#{klass}##{method_name} has never been predef-ed!"
end
self.unpredef! klass, method_name
end
|
.unpredef!(klass, method_name) ⇒ Object
39
40
41
42
43
|
# File 'lib/predef.rb', line 39
def self.unpredef! klass, method_name
klass.__PREDEF__.module_eval do
remove_method method_name
end
end
|