модуль ActiveSupport::Callbacks
Обработчики событий — это фрагменты кода, которые выполняются в ключевые моменты жизненного цикла объекта. Типичный случай использования — определение набора обработчиков в базовом классе, относящихся к предоставляемому функционалу, чтобы подклассы могли устанавливать обработчики, улучшающие или изменяющие базовый функционал, без необходимости переопределения методов базового класса.
Включение этого модуля позволяет определять события в жизненном цикле объекта, которые будут поддерживать обработчики (через ClassMethods.define_callbacks), устанавливать методы экземпляра, проги или объекты обработчиков, которые будут вызываться (через ClassMethods.set_callback), и запускать установленные обработчики в соответствующее время (через run_callbacks).
Поддерживаются три вида обработчиков: обработчики до события, выполняемые перед событием; обработчики после события, выполняемые после события; и обработчики вокруг события, блоки, которые окружают событие, вызывая его, когда они передают управление. Код обработчика может содержаться в методах экземпляра, прогах или лямбдах или объектах обработчика, которые отвечают на определённые предопределённые методы. Смотрите ClassMethods.set_callback для подробностей.
class Record
include ActiveSupport::Callbacks
define_callbacks :save
def save
run_callbacks :save do
puts "- save"
end
end
end
class PersonRecord < Record
set_callback :save, :before, :saving_message
def saving_message
puts "saving..."
end
set_callback :save, :after do |object|
puts "saved"
end
end
person = PersonRecord.new
person.save
Вывод:
saving... - save saved
Константы
- CALLBACK_FILTER_TYPES
Публичные методы экземпляра
# File activesupport/lib/active_support/callbacks.rb, line 80
def run_callbacks(kind, &block)
send "_run_#{kind}_callbacks", &block
end Выполняет обработчики для заданного события.
Вызывает обработчики до и вокруг события в порядке их установки, передает управление блоку (если он задан), а затем выполняет обработчики после события в обратном порядке.
Если цепочка обработчиков была прервана, возвращает false. В противном случае возвращает результат блока, nil, если обработчики не установлены, или true, если обработчики установлены, но блок не задан.
run_callbacks :save do save end
© 2004–2018 David Heinemeier Hansson
Licensed under the MIT License.