Class: Metacrunch::Redis::QueueSource

Inherits:
Object
  • Object
show all
Defined in:
lib/metacrunch/redis/queue_source.rb

Instance Method Summary collapse

Constructor Details

#initialize(redis_connection_or_url, queue_name, options = {}) ⇒ QueueSource

Returns a new instance of QueueSource.

Raises:

  • (ArgumentError)


6
7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/metacrunch/redis/queue_source.rb', line 6

def initialize(redis_connection_or_url, queue_name, options = {})
  @queue_name = queue_name
  raise ArgumentError, "queue_name must be a string" unless queue_name.is_a?(String)

  @blocking_mode = options.delete(:blocking) || false
  @blocking_timeout = options.delete(:blocking_timeout) || 0

  @redis = if redis_connection_or_url.is_a?(String)
    ::Redis.new(url: redis_connection_or_url)
  else
    redis_connection_or_url
  end
end

Instance Method Details

#each(&block) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/metacrunch/redis/queue_source.rb', line 20

def each(&block)
  return enum_for(__method__) unless block_given?

  if @blocking_mode
    while true
      list, result = @redis.blpop(@queue_name, timeout: @blocking_timeout)
      if result.present?
        yield JSON.parse(result)
      else
        yield nil
      end
    end
  else
    while result = @redis.lpop(@queue_name)
      yield JSON.parse(result)
    end
  end

  self
end