Class: MockRedis::Stream

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Includes:
Enumerable
Defined in:
lib/mock_redis/stream.rb,
lib/mock_redis/stream/id.rb

Defined Under Namespace

Classes: Id

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeStream

Returns a new instance of Stream.



15
16
17
18
# File 'lib/mock_redis/stream.rb', line 15

def initialize
  @members = Set.new
  @last_id = nil
end

Instance Attribute Details

#membersObject

Returns the value of attribute members.



11
12
13
# File 'lib/mock_redis/stream.rb', line 11

def members
  @members
end

Instance Method Details

#add(id, values) ⇒ Object



24
25
26
27
28
# File 'lib/mock_redis/stream.rb', line 24

def add(id, values)
  @last_id = MockRedis::Stream::Id.new(id, min: @last_id)
  members.add [@last_id, Hash[values.map { |k, v| [k.to_s, v.to_s] }]]
  @last_id.to_s
end

#eachObject



48
49
50
# File 'lib/mock_redis/stream.rb', line 48

def each
  members.each { |m| yield m }
end

#last_idObject



20
21
22
# File 'lib/mock_redis/stream.rb', line 20

def last_id
  @last_id.to_s
end

#range(start, finish, reversed, *opts_in) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
# File 'lib/mock_redis/stream.rb', line 36

def range(start, finish, reversed, *opts_in)
  opts = options opts_in, ['count']
  start_id = MockRedis::Stream::Id.new(start)
  finish_id = MockRedis::Stream::Id.new(finish, sequence: Float::INFINITY)
  items = members
          .select { |m| (start_id <= m[0]) && (finish_id >= m[0]) }
          .map { |m| [m[0].to_s, m[1]] }
  items.reverse! if reversed
  return items.first(opts['count'].to_i) if opts.key?('count')
  items
end

#trim(count) ⇒ Object



30
31
32
33
34
# File 'lib/mock_redis/stream.rb', line 30

def trim(count)
  deleted = @members.size - count
  @members = @members.to_a[-count..-1].to_set
  deleted
end