rematch 2.1.0 → 3.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e4215339cb95a5fa7ecc1973a0941c0f25c6246fc13ac9b8df167d84100899db
4
- data.tar.gz: 8ff79fd882236eff9ca9c874b9b447f4f8309206a221ce720620d1a31e2f112a
3
+ metadata.gz: eda4df7b006973089166c780f17fe7ce888a2fdc4b23f4666897f7b4a89fa9e5
4
+ data.tar.gz: c8ab36a9be7dee2706ddf3850feb864a27a4f2cb93c78bdea487aae2ba2bad52
5
5
  SHA512:
6
- metadata.gz: 30090d94864f2fc45082671d94bef638a9c6611576642c7345c38ae28d72d9cf509832203ecff243a809a944b86db94c8c23aff82d7124710738fc66353cae11
7
- data.tar.gz: 63ed9212a5a0d3cddaa0b9d99301d29e4c4fe40abee1e339bb87551898b22502a0e8250c4eb44ef1cdfba9526d774d917978d29a86ce53313ac960b5cbfa812f
6
+ metadata.gz: 8e38063d219a49f9aee6082ed4cb1710c69473863efded0691e3948fba9259aa8a676f46a1335c247e3a2d2132a44fe39d9826cdada8ee673699da49b1127aab
7
+ data.tar.gz: 5cfe12e89fc6a48fb25c070b6ec87572b634ba6770c4bea2cf46b7bb1de3385b363e7ebfe05019079a911b47110c0be2de7c0329c258054794a66579c5c530b6
@@ -7,16 +7,23 @@ module Minitest
7
7
  # Set Rematch.rebuild with the --rematch-rebuild
8
8
  def self.plugin_rematch_options(opts, _options)
9
9
  opts.on '--rematch-rebuild', 'Rebuild the stores with the current entries/values' do
10
- Rematch.rebuild = true
10
+ Rematch.rebuild = true
11
+ Rematch.skip_warning = true
11
12
  end
13
+ # :nocov:
14
+ opts.on '--rematch-skip-warning', 'Skip the warning on storing a new value' do
15
+ Rematch.skip_warning = true
16
+ end
17
+ # :nocov:
12
18
  end
13
19
 
14
20
  # Reopen the minitest class
15
21
  class Test
16
22
  # Create the rematch object for each test
17
- def before_setup
23
+ def after_setup
18
24
  super
19
- @rematch = Rematch.new(path: method(name).source_location.first, id: location)
25
+ @rematch = Rematch.new(path: method(name).source_location.first,
26
+ id: location)
20
27
  end
21
28
  end
22
29
 
@@ -36,7 +43,7 @@ module Minitest
36
43
 
37
44
  # Temporarily used to store the actual value, useful for reconciliation of expected changed values
38
45
  def store_assert_rematch(key, actual, *_args)
39
- @rematch.store(key, actual)
46
+ @rematch.rematch(key, actual, overwrite: true)
40
47
  # Always fail after storing, forcing the restore of the original assertion/expectation
41
48
  raise Minitest::Assertion, '[rematch] the value has been stored: remove the "store_" prefix to pass the test'
42
49
  end
data/lib/rematch.rb CHANGED
@@ -5,13 +5,15 @@ require 'fileutils'
5
5
 
6
6
  # Handles the key/value store for each test
7
7
  class Rematch
8
- VERSION = '2.1.0'
9
- EXT = '.rematch'
8
+ VERSION = '3.1.0'
9
+ CONFIG = { ext: '.yaml' } # rubocop:disable Style/MutableConstant
10
+
11
+ @rebuild = false # rebuild the store?
12
+ @rebuilt = [] # paths already rebuilt
13
+ @skip_warning = false
10
14
 
11
- @rebuild = false # rebuild the store?
12
- @rebuilt = [] # paths already rebuilt
13
15
  class << self
14
- attr_accessor :rebuild
16
+ attr_accessor :rebuild, :skip_warning
15
17
 
16
18
  # Check whether path requires rebuild and do it if required
17
19
  def check_rebuild(path)
@@ -25,38 +27,34 @@ class Rematch
25
27
 
26
28
  # Instantiated at each test, stores the path and the unique id of the test being run
27
29
  def initialize(path:, id:)
28
- path = "#{path}#{EXT}"
29
- self.class.check_rebuild(path)
30
- @store = YAML::Store.new(path, true)
31
- @id = id
30
+ store_path = "#{path}#{CONFIG[:ext]}"
31
+ self.class.check_rebuild(store_path)
32
+ @store = YAML::Store.new(store_path, true)
33
+ @id = id.tr('#: ', '_') # easier key string for clumsy yaml parsers/highlighters
32
34
  end
33
35
 
34
36
  # Retrieve the stored value for the current assertion if its key is known; store the value otherwise
35
- def rematch(key, value)
37
+ def rematch(key, value, overwrite: nil)
36
38
  # key = assertion_key(key)
37
39
  @store.transaction do |s|
38
- if s.root?(@id) # there is the root id
39
- if s[@id].key?(key) # there is the key
40
- s[@id][key] # return it
41
- else # not such a key
42
- s[@id][key] = value # set
40
+ if s.root?(@id) # there is the root id
41
+ if s[@id].key?(key) && !overwrite # there is the key and not overwrite
42
+ s[@id][key] # return it
43
+ else # not such a key
44
+ s[@id][key] = value # set it
45
+ store_warning(key) unless overwrite
46
+ value
43
47
  end
44
- else # there is no root yet
45
- s[@id] = { key => value } # the key is the first one
46
- value # always return the value
48
+ else # there is no root yet
49
+ s[@id] = { key => value } # the key is the first one
50
+ store_warning(key)
51
+ value # always return the value
47
52
  end
48
53
  end
49
54
  end
50
55
 
51
- # Store the value
52
- def store(key, value)
53
- @store.transaction do |s|
54
- if s.root?(@id) # there is the root id
55
- s[@id][key] = value # set
56
- else # there is no root yet
57
- s[@id] = { key => value } # the key is the first one
58
- value # always return the value
59
- end
60
- end
56
+ def store_warning(key)
57
+ warn "Rematch stored new value for: #{key.inspect}\n#{@id}\n#{@store.path}\n\n" \
58
+ unless Rematch.skip_warning
61
59
  end
62
60
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rematch
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Domizio Demichelis
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-02-07 00:00:00.000000000 Z
11
+ date: 2024-07-21 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Instead of copying and pasting large outputs or big ruby structures into
14
14
  all the affected test files every time your code change, you can do it the easy
@@ -30,7 +30,7 @@ metadata:
30
30
  homepage_uri: https://github.com/ddnexus/rematch
31
31
  bug_tracker_uri: https://github.com/ddnexus/rematch/issues
32
32
  changelog_uri: https://github.com/ddnexus/rematch/blob/master/CHANGELOG.md
33
- post_install_message:
33
+ post_install_message:
34
34
  rdoc_options: []
35
35
  require_paths:
36
36
  - lib
@@ -45,8 +45,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
45
45
  - !ruby/object:Gem::Version
46
46
  version: '0'
47
47
  requirements: []
48
- rubygems_version: 3.5.3
49
- signing_key:
48
+ rubygems_version: 3.5.11
49
+ signing_key:
50
50
  specification_version: 4
51
51
  summary: Declutter your test files from large hardcoded data and update them automatically
52
52
  when your code changes