rematch 3.0.0 → 3.2.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: b1c8f28666e75297ba7dfa84ba0432715976075f2a2e1699b145eea7f41789fc
4
- data.tar.gz: 39c024389c8ccdfd97627952719c2cd0004a69f906b50621e1a9ab9b230e2947
3
+ metadata.gz: d53eeaada3490407b3977d044320c853c8ebe446099a365c53457a83a34c2ecd
4
+ data.tar.gz: 289b892aad3fc9edb098751583d7c99882b21311b72bf9be173508266882d45d
5
5
  SHA512:
6
- metadata.gz: 20cce9b1ae1ee171648d98f8838370bf913100c6dd0d9ccb92af0bbfcd6c0d41a49471e18e78b4235c06151ab8500a23c5a15293b583cc2e141ea035ba8af11b
7
- data.tar.gz: dc681036308b31d4d08efe48813c3ffa0a5d8d71d326b6a2495df2ac4f3c00c295a1a45b288046b10d2d8b2069756e150d57f1ab904b247cbc606faae27d216b
6
+ metadata.gz: 2417bb23ed9c231c6e26fca90596171d004fa2010e75b886aed56b844a82fd4883f4d37244fd1edbd47ecdb415966fafa589501b1c992c7de4271274ef7bfd7a
7
+ data.tar.gz: a9f1a10ab07482c461ae189d7d89ab0a16dbac2dce1f7dd388bce6a40e2722215574158fe0298dd8426aec336d077d79a59390f1de441b1470de892e0a941834
data/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2021 Domizio Demichelis
3
+ Copyright (c) 2025 Domizio Demichelis
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -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
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'yaml/store'
4
+
5
+ class Rematch
6
+ # Subclass of YAML::Store
7
+ class Store < YAML::Store
8
+ # Use unsafe load, because tests are trusted content
9
+ def load(content)
10
+ YAML.unsafe_load(content) || {}
11
+ end
12
+ end
13
+ end
data/lib/rematch.rb CHANGED
@@ -1,17 +1,19 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'yaml/store'
4
3
  require 'fileutils'
4
+ require_relative 'rematch/store'
5
5
 
6
6
  # Handles the key/value store for each test
7
7
  class Rematch
8
- VERSION = '3.0.0'
9
- DEFAULT = { ext: '.yaml' } # rubocop:disable Style/MutableConstant
8
+ VERSION = '3.2.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}#{DEFAULT[:ext]}"
29
- self.class.check_rebuild(path)
30
- @store = YAML::Store.new(path, true)
30
+ store_path = "#{path}#{CONFIG[:ext]}"
31
+ self.class.check_rebuild(store_path)
32
+ @store = Store.new(store_path, true)
31
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,15 +1,42 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rematch
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 3.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Domizio Demichelis
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-07-20 00:00:00.000000000 Z
12
- dependencies: []
10
+ date: 2025-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: logger
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '0'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '0'
26
+ - !ruby/object:Gem::Dependency
27
+ name: pstore
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
13
40
  description: Instead of copying and pasting large outputs or big ruby structures into
14
41
  all the affected test files every time your code change, you can do it the easy
15
42
  way, possibly saving many hours of boring maintenance work!
@@ -22,6 +49,7 @@ files:
22
49
  - LICENSE.txt
23
50
  - lib/minitest/rematch_plugin.rb
24
51
  - lib/rematch.rb
52
+ - lib/rematch/store.rb
25
53
  homepage: https://github.com/ddnexus/rematch
26
54
  licenses:
27
55
  - MIT
@@ -30,7 +58,6 @@ metadata:
30
58
  homepage_uri: https://github.com/ddnexus/rematch
31
59
  bug_tracker_uri: https://github.com/ddnexus/rematch/issues
32
60
  changelog_uri: https://github.com/ddnexus/rematch/blob/master/CHANGELOG.md
33
- post_install_message:
34
61
  rdoc_options: []
35
62
  require_paths:
36
63
  - lib
@@ -38,15 +65,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
38
65
  requirements:
39
66
  - - ">"
40
67
  - !ruby/object:Gem::Version
41
- version: '3.1'
68
+ version: '3.2'
42
69
  required_rubygems_version: !ruby/object:Gem::Requirement
43
70
  requirements:
44
71
  - - ">="
45
72
  - !ruby/object:Gem::Version
46
73
  version: '0'
47
74
  requirements: []
48
- rubygems_version: 3.5.11
49
- signing_key:
75
+ rubygems_version: 3.6.2
50
76
  specification_version: 4
51
77
  summary: Declutter your test files from large hardcoded data and update them automatically
52
78
  when your code changes