Skip to content

Instantly share code, notes, and snippets.

@pechorin
Created April 24, 2012 14:12
Show Gist options
  • Save pechorin/2480007 to your computer and use it in GitHub Desktop.
Save pechorin/2480007 to your computer and use it in GitHub Desktop.
грубый черновик :D
# БЫЛО
# нужно создать такие коллбеки, которые могут быть скипнуты, если переменная skip_<имя_коллбека> возвращает true
class A
attr_accessor :skip_send_faye_notify
after_create :send_faye_notify
def send_faye_notify
unless @skip_senf_faye_notify
send
end
end
end
# СТАЛО
# ну вообще надо инклудить модуль, но для быстроты примера я ебнул как наследуемый класс :D
class WithSkip
def self.with_skip(method, *args)
options = args.extract_options!
raise Exception unless options[:on].blank?
class_eval "attr_accessor :skip_{method.to_sym}"
send options[:on] do |record|
unless record.send("skip_#{method.to_sym}")
record.send(method)
end
end
end
end
# и теперь можно сделать
# a = A.new
# a.skip_faye_notify = true
# a.save
# и коллбек не будет выполнен :D
class A < WithSkip
with_skip :faye_notify, :on => :after_create
def faye_notify
send
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment