Sha256: e36992291fc984567a08941bc78415b6831e40aca42dabcf50a0ea5f5dc9f318

Contents?: true

Size: 1.14 KB

Versions: 2

Compression:

Stored size: 1.14 KB

Contents

module Woodhouse

  class QueueCriteria
    attr_reader :criteria
    attr_accessor :exclusive

    def initialize(values = {}, flags = nil)
      flags ||= {}
      self.exclusive ||= flags[:exclusive]
      if values.kind_of?(self.class)
        values = values.criteria
      end
      unless values.nil?
        @criteria = stringify_values(values).freeze
      end
    end

    def ==(other)
      @criteria == other.criteria
    end

    def describe
      @criteria.inspect
    end

    def amqp_headers
      # TODO: needs to be smarter
      @criteria ? @criteria.merge('x-match' => 'all') : {}
    end

    def queue_key
      @criteria ? @criteria.map{|k,v|
        "#{k.downcase}_#{v.downcase}"
      }.join("_") : ""
    end

    def matches?(args)
      return true if @criteria.nil?
      return false if exclusive? and @criteria.length != args.keys.reject{|k| k =~ /^_/ }.length

      @criteria.all? do |key, val|
        args[key] == val
      end
    end

    def exclusive?
      !!exclusive
    end

    private

    def stringify_values(hash)
      hash.inject({}) {|h,(k,v)|
        h[k.to_s] = v.to_s
        h
      }
    end

  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
woodhouse-1.0.0 lib/woodhouse/queue_criteria.rb
woodhouse-0.1.5 lib/woodhouse/queue_criteria.rb