rematch 1.2.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: 586bcff5cd631385dd5dd60787cd47220d4367e42a9c34a74f6c2c1617940278
4
- data.tar.gz: c5afbca2c06ea0e7c78500c9a2a172e1114251b021e2a257edf278bc031223c6
3
+ metadata.gz: 2b3e156f501309072c0c57f782f4954d878d6fca881df21be60294d048e8499d
4
+ data.tar.gz: '09b2e677934c63c345dcd5df0aaa1d045136b2089f93abbc9e88c19109bfaddc'
5
5
  SHA512:
6
- metadata.gz: 7c4a5aa9c5247e0789c54736a1b09a69ffe5aed69f0035c2fe8a79c98b52b20e21a2ce727d331520df969dbb593298cca1efc8ac0d6f4e153aa94422e964e04b
7
- data.tar.gz: abfdbf717e06179fd84e3a37348a4272e5fa207a859761a50f0b3b3debab6806a95c3595165c522b87e01226cc13859b1ce9d0e01040bc2e6f86e648f83e960f
6
+ metadata.gz: ae7b319799b53c0c459217113ca1bb2e4811cadcacf26f2bb5be127414d8e1064fe70a3dfd15ce691a3013016fb8b772168568e450913f6b09045fe5d4e469e4
7
+ data.tar.gz: 8124b42a3eaa69c37c10b8991f1d3a3eb13c4c70fc2ecde3908580eae388da11e18848a89848c9a2f4682c8f2903afd77f336e70753c33c0ae665c02213c3105
@@ -4,29 +4,44 @@ require 'rematch'
4
4
 
5
5
  # Implement the minitest plugin
6
6
  module Minitest
7
+ # Set Rematch.rebuild with the --rematch-rebuild
7
8
  def self.plugin_rematch_options(opts, _options)
8
9
  opts.on '--rematch-rebuild', 'Rebuild the stores with the current entries/values' do
9
10
  Rematch.rebuild = true
10
11
  end
11
12
  end
12
13
 
13
- # reopen the minitest class
14
+ # Reopen the minitest class
14
15
  class Test
16
+ # Create the rematch object for each test
15
17
  def before_setup
16
18
  super
17
19
  @rematch = Rematch.new(path: method(name).source_location.first, id: location)
18
20
  end
19
21
  end
20
22
 
21
- # reopen the minitest module
23
+ # Reopen the minitest module
22
24
  module Assertions
23
- def assert_rematch(actual, assert_method = :assert_equal)
24
- send assert_method, @rematch.rematch(actual), actual
25
+ # Main assertion
26
+ def assert_rematch(actual, *args)
27
+ assertion = :assert_equal
28
+ message = nil
29
+ args.each { |arg| arg.is_a?(Symbol) ? assertion = arg : message = arg }
30
+ send assertion, @rematch.rematch(actual), actual, message # assert that the stored value is the same actual value
31
+ end
32
+
33
+ # Temporarily used to store the actual value, useful for reconciliation of expected changed values
34
+ def store_assert_rematch(actual, *_args)
35
+ @rematch.store(actual)
36
+ # Always fail after storing, forcing the restore of the original assertion/expectation
37
+ raise Minitest::Assertion, '[rematch] the value has been stored: remove the "store_" prefix to pass the test'
25
38
  end
26
39
  end
27
40
 
28
- # reopen the minitest module
41
+ # Reopen the minitest module
29
42
  module Expectations
43
+ # Add the expectations pointing to the assertions
30
44
  infect_an_assertion :assert_rematch, :must_rematch, true # dont_flip
45
+ infect_an_assertion :store_assert_rematch, :store_must_rematch, true # dont_flip
31
46
  end
32
47
  end
data/lib/rematch.rb CHANGED
@@ -3,15 +3,17 @@
3
3
  require 'yaml/store'
4
4
  require 'fileutils'
5
5
 
6
- # Implement the key/value store
6
+ # Handles the key/value store for each test
7
7
  class Rematch
8
- VERSION = '1.2.0'
8
+ VERSION = '1.4.1'
9
9
  EXT = '.rematch'
10
10
 
11
- @rebuilt = []
11
+ @rebuild = false # rebuild the store?
12
+ @rebuilt = [] # paths already rebuilt
12
13
  class << self
13
14
  attr_accessor :rebuild
14
15
 
16
+ # Check whether path requires rebuild and do it if required
15
17
  def check_rebuild(path)
16
18
  return unless @rebuild && !@rebuilt.include?(path)
17
19
 
@@ -21,7 +23,7 @@ class Rematch
21
23
  end
22
24
  end
23
25
 
24
- # path and unique id of the test being run
26
+ # Instantiated at each test, stores the path and the unique id of the test being run
25
27
  def initialize(path:, id:)
26
28
  path = "#{path}#{EXT}"
27
29
  self.class.check_rebuild(path)
@@ -30,9 +32,21 @@ class Rematch
30
32
  @count = 0
31
33
  end
32
34
 
33
- # store if unknown; retrieve otherwise
35
+ # Retrieve the stored value for the current assertion if its key is known; store the value otherwise
34
36
  def rematch(value)
35
- key = "[#{@count += 1}] #{@id}"
37
+ key = assertion_key
36
38
  @store.transaction { |s| s.root?(key) ? s[key] : s[key] = value }
37
39
  end
40
+
41
+ # Store the value
42
+ def store(value)
43
+ @store.transaction { |s| s[assertion_key] = value }
44
+ end
45
+
46
+ private
47
+
48
+ # Return the key for the current assertion
49
+ def assertion_key
50
+ "[#{@count += 1}] #{@id}"
51
+ end
38
52
  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: 1.2.0
4
+ version: 1.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Domizio Demichelis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-05-21 00:00:00.000000000 Z
11
+ date: 2021-12-10 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
@@ -25,7 +25,11 @@ files:
25
25
  homepage: https://github.com/ddnexus/rematch
26
26
  licenses:
27
27
  - MIT
28
- metadata: {}
28
+ metadata:
29
+ rubygems_mfa_required: 'true'
30
+ homepage_uri: https://github.com/ddneus/rematch
31
+ bug_tracker_uri: https://github.com/ddnexus/rematch/issues
32
+ changelog_uri: https://github.com/ddnexus/rematch/blob/master/CHANGELOG.md
29
33
  post_install_message:
30
34
  rdoc_options: []
31
35
  require_paths:
@@ -34,14 +38,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
34
38
  requirements:
35
39
  - - ">"
36
40
  - !ruby/object:Gem::Version
37
- version: '2.1'
41
+ version: '2.5'
38
42
  required_rubygems_version: !ruby/object:Gem::Requirement
39
43
  requirements:
40
44
  - - ">="
41
45
  - !ruby/object:Gem::Version
42
46
  version: '0'
43
47
  requirements: []
44
- rubygems_version: 3.2.15
48
+ rubygems_version: 3.2.32
45
49
  signing_key:
46
50
  specification_version: 4
47
51
  summary: Declutter your test files from large hardcoded data and update them automatically