Module: Mongoid::Callbacks
Overview
This module contains all the callback hooks for Mongoid.
Defined Under Namespace
Modules: ClassMethods
Constant Summary collapse
- CALLBACKS =
[ :after_build, :after_create, :after_destroy, :after_find, :after_initialize, :after_save, :after_touch, :after_update, :after_upsert, :after_validation, :around_create, :around_destroy, :around_save, :around_update, :around_upsert, :before_create, :before_destroy, :before_save, :before_update, :before_upsert, :before_validation ].freeze
Class Method Summary collapse
-
.observables ⇒ Array<Symbol>
Get all callbacks that can be observed.
-
.registered_observables ⇒ Array<Symbol>
Get all registered callbacks that can be observed, not included in Mongoid’s defaults.
Instance Method Summary collapse
-
#callback_executable?(kind) ⇒ true, false
Is the provided type of callback executable by this document?.
-
#in_callback_state?(kind) ⇒ true, false
Is the document currently in a state that could potentially require callbacks to be executed?.
-
#run_after_callbacks(*kinds) ⇒ Object
Run only the after callbacks for the specific event.
-
#run_before_callbacks(*kinds) ⇒ Object
Run only the before callbacks for the specific event.
-
#run_callbacks(kind, *args, &block) ⇒ Document
Run the callbacks for the document.
Class Method Details
.observables ⇒ Array<Symbol>
Get all callbacks that can be observed.
273 274 275 |
# File 'lib/mongoid/callbacks.rb', line 273 def observables CALLBACKS + registered_observables end |
.registered_observables ⇒ Array<Symbol>
Get all registered callbacks that can be observed, not included in Mongoid’s defaults.
286 287 288 |
# File 'lib/mongoid/callbacks.rb', line 286 def registered_observables @registered_observables ||= [] end |
Instance Method Details
#callback_executable?(kind) ⇒ true, false
Is the provided type of callback executable by this document?
52 53 54 |
# File 'lib/mongoid/callbacks.rb', line 52 def callback_executable?(kind) respond_to?("_#{kind}_callbacks") end |
#in_callback_state?(kind) ⇒ true, false
Is the document currently in a state that could potentially require callbacks to be executed?
67 68 69 |
# File 'lib/mongoid/callbacks.rb', line 67 def in_callback_state?(kind) [ :create, :destroy ].include?(kind) || new_record? || flagged_for_destroy? || changed? end |
#run_after_callbacks(*kinds) ⇒ Object
ActiveSupport does not allow this type of behaviour by default, so Mongoid has to get around it and implement itself.
Run only the after callbacks for the specific event.
84 85 86 87 88 |
# File 'lib/mongoid/callbacks.rb', line 84 def run_after_callbacks(*kinds) kinds.each do |kind| run_targeted_callbacks(:after, kind) end end |
#run_before_callbacks(*kinds) ⇒ Object
ActiveSupport does not allow this type of behaviour by default, so Mongoid has to get around it and implement itself.
Run only the before callbacks for the specific event.
103 104 105 106 107 |
# File 'lib/mongoid/callbacks.rb', line 103 def run_before_callbacks(*kinds) kinds.each do |kind| run_targeted_callbacks(:before, kind) end end |
#run_callbacks(kind, *args, &block) ⇒ Document
Run the callbacks for the document. This overrides active support’s functionality to cascade callbacks to embedded documents that have been flagged as such.
124 125 126 127 128 129 130 131 |
# File 'lib/mongoid/callbacks.rb', line 124 def run_callbacks(kind, *args, &block) cascadable_children(kind).each do |child| unless child.run_callbacks(child_callback_type(kind, child), *args) return false end end callback_executable?(kind) ? super(kind, *args, &block) : true end |