dballona/actionmessage

View on GitHub
lib/action_message/interceptor.rb

Summary

Maintainability
A
0 mins
Test Coverage
module ActionMessage
  class Interceptor
    cattr_accessor :blacklist
    self.blacklist = {}

    class << self
      def register(conditions={})
        raise TypeError, 'Invalid type. Please provide a hash object' unless conditions.methods.include?(:key)

        conditions.each do |attribute, condition|
          @@blacklist[attribute.to_sym] ||= []
          @@blacklist[attribute.to_sym].push(condition)
        end
      end


      def registered_for?(message)
        @@blacklist.each do |attribute, conditions|
          value = message.send(attribute.to_sym)

          conditions.each do |condition|
            return true if value.send(match_method_for(condition), condition)
          end
        end

        return false
      end

      private
        def match_method_for(condition)
          condition.is_a?(Regexp)? :=~ : :==
        end
    end
  end
end