Sha256: 7a1508a6c27875289486dfcc04ac8f135275b4470e75323da78464161f2d6aa1

Contents?: true

Size: 1.98 KB

Versions: 16

Compression:

Stored size: 1.98 KB

Contents

module ResqueBus
  class Matcher
    SPECIAL_PREPEND = "bus_special_value_"
    attr_reader :filters
    def initialize(hash)
      @filters = encode(hash)
    end
    
    def to_redis
      @filters
    end
    
    def match?(attribute_name, attributes)
      mine = filters[attribute_name].to_s
      return false if mine.size == 0
      
      given = attributes[attribute_name]
      case mine
      when "#{SPECIAL_PREPEND}key"
        return true if attributes.has_key?(attribute_name)
        return false
      when "#{SPECIAL_PREPEND}blank"
        return true if given.to_s.strip.size == 0
        return false
      when "#{SPECIAL_PREPEND}empty"
        return false if given == nil
        return true if given.to_s.size == 0
        return false
      when "#{SPECIAL_PREPEND}nil"
        return true if given == nil
        return false
      when "#{SPECIAL_PREPEND}value"
        return false if given == nil
        return true
      when "#{SPECIAL_PREPEND}present"
        return true if given.to_s.strip.size > 0
        return false
      end
      
      given = given.to_s
      
      return true if mine == given
      begin
        # if it's already a regex, don't mess with it
        # otherwise, it should have start and end line situation
        if mine[0..6] == "(?-mix:"
          regex = Regexp.new(mine)
        else
          regex = Regexp.new("^#{mine}$")
        end
        return !!regex.match(given)
      rescue
        return false
      end
    end
    
    def matches?(attributes)
      return false if filters.empty?
      return false if attributes == nil
      
      filters.keys.each do |key|
        return false unless match?(key, attributes)
      end
      
      true
    end
    
    def encode(hash)
      out = {}
      hash.each do |key, value|
        case value
        when :key, :blank, :nil, :present, :empty, :value
          value = "#{SPECIAL_PREPEND}#{value}"
        end
        out[key.to_s] = value.to_s
      end      
      out
    end
  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
resque-bus-0.3.7 lib/resque_bus/matcher.rb
resque-bus-0.3.6 lib/resque_bus/matcher.rb
resque-bus-0.3.5 lib/resque_bus/matcher.rb
resque-bus-0.3.4 lib/resque_bus/matcher.rb
resque-bus-0.3.3 lib/resque_bus/matcher.rb
resque-bus-0.3.2 lib/resque_bus/matcher.rb
resque-bus-0.3.1 lib/resque_bus/matcher.rb
resque-bus-0.3.0 lib/resque_bus/matcher.rb
resque-bus-0.2.10 lib/resque_bus/matcher.rb
resque-bus-0.2.9 lib/resque_bus/matcher.rb
resque-bus-0.2.8 lib/resque_bus/matcher.rb
resque-bus-0.2.7 lib/resque_bus/matcher.rb
resque-bus-0.2.6 lib/resque_bus/matcher.rb
resque-bus-0.2.5 lib/resque_bus/matcher.rb
resque-bus-0.2.4 lib/resque_bus/matcher.rb
resque-bus-0.2.3 lib/resque_bus/matcher.rb