Class: CoverRage::Stores::Redis

Inherits:
Object
  • Object
show all
Defined in:
lib/cover_rage/stores/redis.rb

Constant Summary collapse

KEY =
'cover_rage_records'

Instance Method Summary collapse

Constructor Details

#initialize(url) ⇒ Redis

Returns a new instance of Redis.



12
13
14
15
16
17
18
19
# File 'lib/cover_rage/stores/redis.rb', line 12

def initialize(url)
  @redis =
    if url.start_with?('rediss')
      ::Redis.new(url: url, ssl_params: { verify_mode: OpenSSL::SSL::VERIFY_NONE })
    else
      ::Redis.new(url: url)
    end
end

Instance Method Details

#clearObject



50
51
52
# File 'lib/cover_rage/stores/redis.rb', line 50

def clear
  @redis.del(KEY)
end

#find(path) ⇒ Object



36
37
38
39
40
41
# File 'lib/cover_rage/stores/redis.rb', line 36

def find(path)
  result = @redis.hget(KEY, path)
  return nil if result.nil?

  Record.new(**JSON.parse(result))
end

#import(records) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/cover_rage/stores/redis.rb', line 21

def import(records)
  loop do
    break if @redis.watch(KEY) do
      records_to_save = Record.merge(list, records)
      if records_to_save.any?
        arguments = []
        records_to_save.each do |record|
          arguments.push(record.path, JSON.dump(record.to_h))
        end
        @redis.multi { _1.hset(KEY, *arguments) }
      end
    end
  end
end

#listObject



43
44
45
46
47
48
# File 'lib/cover_rage/stores/redis.rb', line 43

def list
  result = @redis.hgetall(KEY)
  return [] if result.empty?

  result.map { |_, value| Record.new(**JSON.parse(value)) }
end