Class: DataMapper::Callbacks
Constant Summary
collapse
- EVENTS =
[
:before_materialize, :after_materialize,
:before_save, :after_save,
:before_create, :after_create,
:before_update, :after_update,
:before_destroy, :after_destroy,
:before_validate, :after_validate
]
Instance Method Summary
collapse
Constructor Details
Returns a new instance of Callbacks.
14
15
16
17
18
19
|
# File 'lib/data_mapper/callbacks.rb', line 14
def initialize
@callbacks = Hash.new do |h,k|
raise 'Callback names must be Symbols' unless k.kind_of?(Symbol)
h[k] = []
end
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(sym, *args) ⇒ Object
22
23
24
25
26
27
28
29
30
31
|
# File 'lib/data_mapper/callbacks.rb', line 22
def method_missing(sym, *args)
if EVENTS.include?(sym)
self.class.send(:define_method, sym) { @callbacks[sym] }
return send(sym)
elsif sym.to_s =~ /^execute_(\w+)/ && EVENTS.include?($1.to_sym)
return execute(args.first, $1.to_sym)
end
super
end
|
Instance Method Details
#add(name, string = nil, &block) ⇒ Object
43
44
45
46
47
|
# File 'lib/data_mapper/callbacks.rb', line 43
def add(name, string = nil, &block)
callback = send(name)
raise ArgumentError.new("You didn't specify a callback in either string or block form.") if string.nil? && block.nil?
callback << (string.nil? ? block : string)
end
|
#execute(name, instance) ⇒ Object
33
34
35
36
37
38
39
40
41
|
# File 'lib/data_mapper/callbacks.rb', line 33
def execute(name, instance)
@callbacks[name].each do |callback|
if callback.kind_of?(String)
instance.instance_eval(callback)
else
instance.instance_eval(&callback)
end
end
end
|
#ruby_method_missing ⇒ Object
21
|
# File 'lib/data_mapper/callbacks.rb', line 21
alias ruby_method_missing method_missing
|