cover_rage 1.3.0 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 00ad4585a873585456f2c9948a88bcab8d54438b5c952a7fdb03a0e411763e3e
4
- data.tar.gz: 231662f71294e8e983e7632c8ad530b3c18752f2e6d4d0a5d2ea3ea2de0edc90
3
+ metadata.gz: 0d90184f8a2099a605e3a70ea825577f946312fa5116fdb7b178d3716f507686
4
+ data.tar.gz: e39a25676c9879a64aaecd45c31a2c21adf6cb0c99de5af81fed5468c3423941
5
5
  SHA512:
6
- metadata.gz: '048eb40f6ed0df7c75e4f353ce17fa516345a2832d6b25497453d4bb94aa302197e8e57c5fdbe50444d3a35da91bf641d1a0bbbd2b8d911cf457988016588932'
7
- data.tar.gz: 587134f993d40afb1c4b9242e030aac02ea886436a1e3912413630f1e7f4e97a403b1b2693a4af8907df23e9a4a8f91e7fa2f782089fa7609fe997ed6e45fa88
6
+ metadata.gz: 541824efe9627329848384b72f63fcfde79290ae83d6f7f1367f0018334b8cad09a6169086d5292f35488598cfd0d55773efdc7d52b207847299781fa3e9dacb
7
+ data.tar.gz: 533b57415a77f94b77ad32c00fd220894ec77f4244fb31be3067e904fb4a79aff6ac7b2616842f120602587b89173777a8a8ec44db96782eb5099c527c91a3cb
@@ -2,15 +2,15 @@
2
2
 
3
3
  module CoverRage
4
4
  Record = Data.define(:path, :revision, :source, :execution_count, :last_executed_at) do
5
- def self.merge(existing, current)
5
+ def self.merge(existing_records, current_records)
6
6
  records_to_save = []
7
- current.each do |record|
8
- found = existing.find { _1.path == record.path }
7
+ current_records.each do |current_record|
8
+ existing_record = existing_records.find { _1.path == current_record.path }
9
9
  records_to_save <<
10
- if found.nil? || record.revision != found.revision
11
- record
10
+ if existing_record.nil? || current_record.revision != existing_record.revision
11
+ current_record
12
12
  else
13
- record + found
13
+ existing_record + current_record
14
14
  end
15
15
  end
16
16
  records_to_save
@@ -19,13 +19,17 @@ module CoverRage
19
19
  def +(other)
20
20
  with(
21
21
  execution_count: execution_count.map.with_index do |item, index|
22
- item.nil? ? nil : item + other.execution_count[index]
22
+ other_item = other.execution_count[index]
23
+ if item.nil? && other_item.nil? then nil
24
+ elsif item.nil? || other_item.nil? then other_item
25
+ else item + other_item
26
+ end
23
27
  end,
24
28
  last_executed_at: last_executed_at.map.with_index do |item, index|
25
- if item.nil? && other.last_executed_at[index].nil? then nil
26
- elsif item.nil? then other.last_executed_at[index]
27
- elsif other.last_executed_at[index].nil? then item
28
- else [item, other.last_executed_at[index]].max
29
+ other_item = other.last_executed_at[index]
30
+ if item.nil? && other_item.nil? then nil
31
+ elsif item.nil? || other_item.nil? then other_item
32
+ else [item, other_item].max
29
33
  end
30
34
  end
31
35
  )
@@ -9,13 +9,10 @@ module CoverRage
9
9
  module Stores
10
10
  class Redis
11
11
  KEY = 'cover_rage_records'
12
+ IS_REDIS_BELOW_V5 = Gem::Version.new(::Redis::VERSION) < Gem::Version.new('5')
12
13
  def initialize(url)
13
- @redis =
14
- if url.start_with?('rediss')
15
- ::Redis.new(url:, ssl_params: { verify_mode: OpenSSL::SSL::VERIFY_NONE })
16
- else
17
- ::Redis.new(url:)
18
- end
14
+ @redis = new_redis(url)
15
+ @redis_for_below_v5 = new_redis(url) if IS_REDIS_BELOW_V5
19
16
  end
20
17
 
21
18
  def transaction(&)
@@ -42,7 +39,14 @@ module CoverRage
42
39
  end
43
40
 
44
41
  def list
45
- result = @redis.hgetall(KEY)
42
+ # For Redis versions below 5, we need to use the separate client to read
43
+ # the data while the transaction is in progress.
44
+ client = if Thread.current[:redis_multi] && IS_REDIS_BELOW_V5
45
+ @redis_for_below_v5
46
+ else
47
+ @redis
48
+ end
49
+ result = client.hgetall(KEY)
46
50
  return [] if result.empty?
47
51
 
48
52
  result.map { |_, value| Record.new(**JSON.parse(value)) }
@@ -51,6 +55,16 @@ module CoverRage
51
55
  def clear
52
56
  @redis.del(KEY)
53
57
  end
58
+
59
+ private
60
+
61
+ def new_redis(url)
62
+ if url.start_with?('rediss')
63
+ ::Redis.new(url:, ssl_params: { verify_mode: OpenSSL::SSL::VERIFY_NONE })
64
+ else
65
+ ::Redis.new(url:)
66
+ end
67
+ end
54
68
  end
55
69
  end
56
70
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cover_rage
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Weihang Jian
@@ -69,7 +69,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
69
69
  - !ruby/object:Gem::Version
70
70
  version: '0'
71
71
  requirements: []
72
- rubygems_version: 4.0.4
72
+ rubygems_version: 4.0.13
73
73
  specification_version: 4
74
74
  summary: cover_rage is a Ruby code coverage tool designed to be simple and easy to
75
75
  use. It can be used not only for test coverage but also in production services to