module Prong::Hooks::Executer::Falsey

Public Class Methods

with_return_all(obj,name,type,&block) click to toggle source
# File lib/prong/hooks/executer.rb, line 5
def self.with_return_all(obj,name,type,&block)
  return_block = nil
  return_collection = []
  closure = Proc.new { return_block ||= block.call if block }
  callbacks = obj.class.send("_#{name}_callbacks")
  callbacks.compile([closure],type).each do |callback|
    callback[0].each { |b| next callback[1].clear unless obj.instance_exec(callback[1], &b) }
    return_collection << callback[1].map do |i|
      case i
        when Symbol
          if (o = obj.send(i)) == false
            return false
          else
            next o
          end
        when Proc
          if (o = obj.instance_exec(&i)) == false
            return false
          else
            next o
          end
      end
    end
  end
  return [return_collection.flatten].push([return_block||true].flatten)
end
without_return_all(obj,name,type,&block) click to toggle source
# File lib/prong/hooks/executer.rb, line 32
def self.without_return_all(obj,name,type,&block)
  return_block = nil
  closure = Proc.new { return_block ||= block.call if block }
  callbacks = obj.class.send("_#{name}_callbacks")
  callbacks.compile([closure],type).each do |callback|
    callback[0].each { |b| next callback[1].clear unless obj.instance_exec(callback[1], &b) }
    callback[1].each do |i|
      case i
        when Symbol
          if obj.send(i) == false
            return false
          else
            next
          end
        when Proc
          if obj.instance_exec(&i) == false
            return false
          else
            next
          end
      end
    end
  end
  return return_block || true
end