class Coverband::Adapters::RedisStore
RedisStore
store a merged coverage file to redis
Constants
- REDIS_STORAGE_FORMAT_VERSION
This key isn't related to the coverband version, but to the interal format used to store data to redis. It is changed only when breaking changes to our redis format are required.
Attributes
redis[R]
redis_namespace[R]
Public Class Methods
new(redis, opts = {})
click to toggle source
Calls superclass method
Coverband::Adapters::Base::new
# File lib/coverband/adapters/redis_store.rb, line 18 def initialize(redis, opts = {}) super() @redis = redis @ttl = opts[:ttl] @redis_namespace = opts[:redis_namespace] @format_version = REDIS_STORAGE_FORMAT_VERSION @keys = {} Coverband::TYPES.each do |type| @keys[type] = [@format_version, @redis_namespace, type].compact.join(".") end end
Public Instance Methods
clear!()
click to toggle source
# File lib/coverband/adapters/redis_store.rb, line 30 def clear! Coverband::TYPES.each do |type| @redis.del(type_base_key(type)) end # temporarily clear the old namespace of coverband_3_2 @redis.del(type_base_key(nil)) end
clear_file!(filename)
click to toggle source
# File lib/coverband/adapters/redis_store.rb, line 38 def clear_file!(filename) Coverband::TYPES.each do |type| data = coverage(type) data.delete(filename) save_coverage(data, type) end end
coverage(local_type = nil, opts = {})
click to toggle source
# File lib/coverband/adapters/redis_store.rb, line 77 def coverage(local_type = nil, opts = {}) local_type ||= opts.key?(:override_type) ? opts[:override_type] : type data = redis.get type_base_key(local_type) data = data ? JSON.parse(data) : {} data.delete_if { |file_path, file_data| file_hash(file_path) != file_data["file_hash"] } unless opts[:skip_hash_check] data end
migrate!()
click to toggle source
Current implementation moves from coverband3_1 to coverband_3_2 In the future this can be made more general and support a more specific version format.
# File lib/coverband/adapters/redis_store.rb, line 55 def migrate! reset_base_key @format_version = "coverband3_1" previous_data = coverage if previous_data.empty? puts "no previous data to migrate found" exit 0 end relative_path_report = previous_data.each_with_object({}) { |(key, vals), fixed_report| fixed_report[Utils::RelativeFileConverter.convert(key)] = vals } clear! reset_base_key @format_version = REDIS_STORAGE_FORMAT_VERSION save_coverage(merge_reports(coverage, relative_path_report, skip_expansion: true)) end
raw_store()
click to toggle source
# File lib/coverband/adapters/redis_store.rb, line 95 def raw_store @redis end
save_report(report)
click to toggle source
Note: This could lead to slight race on redis where multiple processes pull the old coverage and add to it then push the Coverband
2 had the same issue, and the tradeoff has always been acceptable
# File lib/coverband/adapters/redis_store.rb, line 89 def save_report(report) data = report.dup data = merge_reports(data, coverage(nil, skip_hash_check: true)) save_coverage(data) end
size()
click to toggle source
# File lib/coverband/adapters/redis_store.rb, line 46 def size @redis.get(base_key) ? @redis.get(base_key).bytesize : "N/A" end
type=(type)
click to toggle source
Calls superclass method
# File lib/coverband/adapters/redis_store.rb, line 72 def type=(type) super reset_base_key end
Private Instance Methods
base_key()
click to toggle source
# File lib/coverband/adapters/redis_store.rb, line 107 def base_key @base_key ||= [@format_version, @redis_namespace, type].compact.join(".") end
reset_base_key()
click to toggle source
# File lib/coverband/adapters/redis_store.rb, line 103 def reset_base_key @base_key = nil end
save_coverage(data, local_type = nil)
click to toggle source
# File lib/coverband/adapters/redis_store.rb, line 115 def save_coverage(data, local_type = nil) local_type ||= type redis.set type_base_key(local_type), data.to_json redis.expire(type_base_key(local_type), @ttl) if @ttl end
type_base_key(local_type)
click to toggle source
# File lib/coverband/adapters/redis_store.rb, line 111 def type_base_key(local_type) @keys[local_type] end