Class: DataMapper::Callbacks
- Inherits:
-
Object
- Object
- DataMapper::Callbacks
show all
- Defined in:
- lib/data_mapper/callbacks.rb
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
|
# File 'lib/data_mapper/callbacks.rb', line 14
def initialize
@callbacks = Hash.new { |h,k| h[k.to_sym] = [] }
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(sym, *args) ⇒ Object
19
20
21
22
23
24
25
26
27
28
|
# File 'lib/data_mapper/callbacks.rb', line 19
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
40
41
42
43
44
|
# File 'lib/data_mapper/callbacks.rb', line 40
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
30
31
32
33
34
35
36
37
38
|
# File 'lib/data_mapper/callbacks.rb', line 30
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
18
|
# File 'lib/data_mapper/callbacks.rb', line 18
alias ruby_method_missing method_missing
|