class Prong::Hooks::Define

Public Class Methods

construct(base,arg) click to toggle source
# File lib/prong/hooks/define.rb, line 5
def self.construct(base,arg)
  self.new(base,arg).handle
end
new(base,name) click to toggle source
# File lib/prong/hooks/define.rb, line 9
def initialize(base,name)
  @base = base
  @name = name
end

Public Instance Methods

handle() click to toggle source
# File lib/prong/hooks/define.rb, line 14
def handle
  callback_attrs
  define_callbacks_chain
  define_callbacks
end

Private Instance Methods

callback_attrs() click to toggle source
# File lib/prong/hooks/define.rb, line 21
def callback_attrs
  @callback_attrs ||= @base.class_attr("_before_#{@name}", "_around_#{@name}", "_after_#{@name}")
end
define_callbacks() click to toggle source
# File lib/prong/hooks/define.rb, line 30
def define_callbacks
  callback_attrs.each do |attribute|
    name = @name
    @base.class_eval do
      define_singleton_method(attribute[1..-1]) do |*args, &block|
        condition = (args.pop if args.last.kind_of?(Hash)) || {}
        args << block if block
        self.send("#{attribute}=", self.send("#{attribute}") << [[condition[:if]].compact, args])
        self.send("_#{name}_callbacks=", Chain.new(self, name).prepare)
      end
    end
  end
end
define_callbacks_chain() click to toggle source
# File lib/prong/hooks/define.rb, line 25
def define_callbacks_chain
  @base.class_attr("_#{@name}_callbacks")
  @base.send("_#{@name}_callbacks=", Chain.new(@base, @name).prepare)
end