Pull to refresh

Рецепты: Свои наборы обработчиков событий

Reading time1 min
Views876
Думаю, большинство из пользователей Ruby работали с Rails, и использовали их обработчики событий.

validate :validate_humanity_conflicts

validates_presence_of :radius # это не обработчик события, но декларация

Польза от них очевидна:
  • Декларативность описания поведения, когда мы видим особенности классов по декларациям в его начале;
  • Возможность создавать наборы из обработчиков событий, не заморачиваясь на управление ими.
Нам, скорее всего, захочется использовать декларации для удобства описания своих собственных событий.

И я покажу, как это делать:

class AnyClass
  include ActiveSupport::Callbacks # already included by ActiveRecord::Base

  define_callbacks :after_something

  def after_something
    run_callbacks(:after_something)
  end
end

class ChildClass < AnyClass
  after_something :eliminate_frags

  def eliminate_frags
    # do it
    true # to stop callback chain return false
  end
end

Для работы данного функционала нужен gem active_support (входит в состав rails, но может использоваться и отдельно).

Чуть не забыл, цепочка обработчиков событий в данном случае будет вызвана при вызове метода экземпляра 

after_something
Tags:
Hubs:
Total votes 17: ↑14 and ↓3+11
Comments3

Articles