Last active
March 29, 2016 18:20
-
-
Save artofhuman/04d0795ba1178e3e759febeb914de04a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Callback | |
class Apress::Demands::Tenders::AcceptTender | |
include Interator | |
include ActiveSupport::Callbacks | |
define_callbacks :accept | |
def call | |
run_callbacks :accept do | |
tender.accept! | |
end | |
end | |
ActiveSupport.run_load_hooks(:'apress/demands/interators/accept_tender', self) | |
end | |
# In project mail plugin init.rb | |
ActiveSupport.on_load(:'apress/demands/interators/accept_tende') { include Extensions::Apress::Demands::Tenders::Accept } | |
module Extensions::Apress::Demands::Tenders::Accept | |
extend ActiveSupport::Concern | |
included do | |
set_callback :send_mail, :after, :accept | |
end | |
def send_mail | |
.... | |
end | |
end | |
# Observer | |
class Apress::Demands::Tenders::AcceptTender | |
include Interator | |
include ActiveModel::Observing | |
def call | |
tender.accept! | |
notify_observers(:after_accept) | |
end | |
end | |
# in project mail plugin init.rb | |
Apress::Demands::Tenders::AcceptTender.add_observer(MailDeliveries::AcceptTenderObserver.instance) | |
class MailDeliveries::AcceptTenderObserver < ActionModel::Observer | |
def after_accept(context) | |
send_mail(context.tender) | |
end | |
end | |
Callback | |
+ Обкатаный рабочий метод | |
- Надо заниматься монки патчингом из проекта целевого класса, что добавлем методы классу о которых он знать не должен. | |
Observer | |
+ Патчить исходный объект не надо | |
- В нашем 3.1 мирке похоже есть бага AwesomeObserver.instance рейзит ошибку так как там вырезается слово Observer из класса, но вот так работает | |
Awesome.instance. Проверил в геме куда вынесли обсерверы из 4.0 там ошибки нет |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
по мне особой разницы нет.
для меня калбеки привычней и гибче за счет того что сразу получаешь before/after/around.
с обсервером патчить не надо, но нужна регистрация + класс,
а с колбеком: инклуд + экстеншн.
класс + регистрация выглядит лучше, но с учетом гибкости, привычности и беспроблемности, для меня колбек выглядят предпочтительней.