rspec-expectations 3.12.0 → 3.13.0
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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/Changelog.md +45 -5
- data/lib/rspec/expectations/fail_with.rb +1 -1
- data/lib/rspec/expectations/failure_aggregator.rb +17 -0
- data/lib/rspec/expectations/version.rb +1 -1
- data/lib/rspec/matchers/aliased_matcher.rb +3 -3
- data/lib/rspec/matchers/built_in/base_matcher.rb +41 -0
- data/lib/rspec/matchers/built_in/compound.rb +3 -3
- data/lib/rspec/matchers/built_in/eq.rb +5 -1
- data/lib/rspec/matchers/built_in/eql.rb +5 -1
- data/lib/rspec/matchers/built_in/exist.rb +1 -1
- data/lib/rspec/matchers/built_in/include.rb +9 -2
- data/lib/rspec/matchers/composable.rb +1 -1
- data/lib/rspec/matchers/dsl.rb +8 -7
- data/lib/rspec/matchers/matcher_delegator.rb +27 -1
- data/lib/rspec/matchers/{expecteds_for_multiple_diffs.rb → multi_matcher_diff.rb} +16 -16
- data/lib/rspec/matchers.rb +2 -2
- data.tar.gz.sig +0 -0
- metadata +8 -8
- metadata.gz.sig +2 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f09f6ee084c32b2e2090849e672c3f71479b002183e0a3731ee6dd72c08352bf
|
4
|
+
data.tar.gz: 997ea963ec0460e393ac82075843e67aaf47513d9de082c88c083ad38da49a6d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 58cb3644c01f1771f2109faf971acba2bdc04c6e528ff68a55765ea850666ab27bec8ffcaf39e23b72b194f936e09de263136b5ac8cbc2cbc3d51d7e2d1dddee
|
7
|
+
data.tar.gz: 73204c1e6f84100a10e27f78ea853e1282ca26daf39927dd5a72f3c8294ff0555ea49ca01fcf5626faedc9af972a56f8641a7496e765eedd7936b647dcb28b5a
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/Changelog.md
CHANGED
@@ -1,5 +1,47 @@
|
|
1
1
|
### Development
|
2
|
-
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v3.12.
|
2
|
+
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v3.12.3...main)
|
3
|
+
|
4
|
+
### 3.13.0 / 2024-02-04
|
5
|
+
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v3.12.4...v3.13.0)
|
6
|
+
|
7
|
+
Enhancements:
|
8
|
+
|
9
|
+
* Update `eq` and `eql` matchers to better highlight difference in string encoding.
|
10
|
+
(Alan Foster, #1425)
|
11
|
+
|
12
|
+
### 3.12.4 / 2024-02-04
|
13
|
+
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v3.12.3...v3.12.4)
|
14
|
+
|
15
|
+
Bug Fixes:
|
16
|
+
|
17
|
+
* Fix the diff for redefined `actual` and reassigned `@actual` in compound
|
18
|
+
expectations failure messages. (Phil Pirozhkov, #1440)
|
19
|
+
|
20
|
+
### 3.12.3 / 2023-04-20
|
21
|
+
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v3.12.2...v3.12.3)
|
22
|
+
|
23
|
+
Bug Fixes:
|
24
|
+
|
25
|
+
* Fix `include` matcher when fuzzy matching on keys with a hash-like actual which
|
26
|
+
has a non standard `key?` method which may raise.
|
27
|
+
(Jon Rowe, #1416)
|
28
|
+
|
29
|
+
### 3.12.2 / 2023-01-07
|
30
|
+
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v3.12.1...v3.12.2)
|
31
|
+
|
32
|
+
Bug Fixes:
|
33
|
+
|
34
|
+
* Prevent deprecation warning when using the `exist` matcher with `Dir`.
|
35
|
+
(Steve Dierker, #1398)
|
36
|
+
|
37
|
+
### 3.12.1 / 2022-12-16
|
38
|
+
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v3.12.0...v3.12.1)
|
39
|
+
|
40
|
+
Bug Fixes:
|
41
|
+
|
42
|
+
* Pass keyword arguments through to aliased (and thus negated) matchers. (Jon Rowe, #1394)
|
43
|
+
* When handling failures in an aggregated_failures block (or example) prevent
|
44
|
+
the failure list leaking out. (Maciek Rząsa, #1392)
|
3
45
|
|
4
46
|
### 3.12.0 / 2022-10-26
|
5
47
|
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v3.11.1...v3.12.0)
|
@@ -314,10 +356,8 @@ Enhancements:
|
|
314
356
|
can cause uses of `super` to trigger infinite recursion. (Myron Marston, #816)
|
315
357
|
* Stop rescuing `NoMemoryError`, `SignalExcepetion`, `Interrupt` and
|
316
358
|
`SystemExit`. It is dangerous to interfere with these. (Myron Marston, #845)
|
317
|
-
* Add `#with_captures` to the
|
318
|
-
|
319
|
-
which allows a user to specify expected captures when matching a regex
|
320
|
-
against a string. (Sam Phippen, #848)
|
359
|
+
* Add `#with_captures` to the match matcher which allows a user to specify expected
|
360
|
+
captures when matching a regex against a string. (Sam Phippen, #848)
|
321
361
|
* Always print compound failure messages in the multi-line form. Trying
|
322
362
|
to print it all on a single line didn't read very well. (Myron Marston, #859)
|
323
363
|
|
@@ -30,7 +30,7 @@ module RSpec
|
|
30
30
|
"appropriate failure_message[_when_negated] method to return a string?"
|
31
31
|
end
|
32
32
|
|
33
|
-
message = ::RSpec::Matchers::
|
33
|
+
message = ::RSpec::Matchers::MultiMatcherDiff.from(expected, actual).message_with_diff(message, differ)
|
34
34
|
|
35
35
|
RSpec::Support.notify_failure(RSpec::Expectations::ExpectationNotMetError.new message)
|
36
36
|
end
|
@@ -4,6 +4,21 @@ module RSpec
|
|
4
4
|
class FailureAggregator
|
5
5
|
attr_reader :block_label, :metadata
|
6
6
|
|
7
|
+
# @private
|
8
|
+
class AggregatedFailure
|
9
|
+
# @private
|
10
|
+
MESSAGE =
|
11
|
+
'AggregatedFailure: This method caused a failure which has been ' \
|
12
|
+
'suppressed to be aggregated into our failure report by returning ' \
|
13
|
+
'this value, further errors can be ignored.'
|
14
|
+
|
15
|
+
def inspect
|
16
|
+
MESSAGE
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
AGGREGATED_FAILURE = AggregatedFailure.new
|
21
|
+
|
7
22
|
def aggregate
|
8
23
|
RSpec::Support.with_failure_notifier(self) do
|
9
24
|
begin
|
@@ -48,6 +63,8 @@ module RSpec
|
|
48
63
|
@seen_source_ids[source_id] = true
|
49
64
|
assign_backtrace(failure) unless failure.backtrace
|
50
65
|
failures << failure
|
66
|
+
|
67
|
+
AGGREGATED_FAILURE
|
51
68
|
end
|
52
69
|
|
53
70
|
private
|
@@ -99,14 +99,14 @@ module RSpec
|
|
99
99
|
# by going through the effort of defining a negated matcher.
|
100
100
|
#
|
101
101
|
# However, if the override didn't actually change anything, then we
|
102
|
-
# should return the opposite failure message instead -- the
|
102
|
+
# should return the opposite failure message instead -- the overridden
|
103
103
|
# message is going to be confusing if we return it as-is, as it represents
|
104
104
|
# the non-negated failure message for a negated match (or vice versa).
|
105
105
|
def optimal_failure_message(same, inverted)
|
106
106
|
if DefaultFailureMessages.has_default_failure_messages?(@base_matcher)
|
107
107
|
base_message = @base_matcher.__send__(same)
|
108
|
-
|
109
|
-
return
|
108
|
+
overridden = @description_block.call(base_message)
|
109
|
+
return overridden if overridden != base_message
|
110
110
|
end
|
111
111
|
|
112
112
|
@base_matcher.__send__(inverted)
|
@@ -161,6 +161,47 @@ module RSpec
|
|
161
161
|
|
162
162
|
include HashFormatting
|
163
163
|
|
164
|
+
# @private
|
165
|
+
module StringEncodingFormatting
|
166
|
+
# @api private
|
167
|
+
# @return [Boolean] True if the actual and expected string encoding are different.
|
168
|
+
# i.e. the failure may be related to encoding differences and the encoding
|
169
|
+
# should be shown to the user. false otherwise.
|
170
|
+
if String.method_defined?(:encoding)
|
171
|
+
def string_encoding_differs?
|
172
|
+
actual.is_a?(String) && expected.is_a?(String) && actual.encoding != expected.encoding
|
173
|
+
end
|
174
|
+
else
|
175
|
+
# @api private
|
176
|
+
# @return [Boolean] False always as the curent Ruby version does not support String encoding
|
177
|
+
def string_encoding_differs?
|
178
|
+
false
|
179
|
+
end
|
180
|
+
end
|
181
|
+
module_function :string_encoding_differs?
|
182
|
+
|
183
|
+
if String.method_defined?(:encoding)
|
184
|
+
# @api private
|
185
|
+
# Formats a String's encoding as a human readable string
|
186
|
+
# @param value [String]
|
187
|
+
# @return [String]
|
188
|
+
def format_encoding(value)
|
189
|
+
"#<Encoding:#{value.encoding.name}>"
|
190
|
+
end
|
191
|
+
else
|
192
|
+
# @api private
|
193
|
+
# Formats a String's encoding as a human readable string
|
194
|
+
# @param _value [String]
|
195
|
+
# @return [nil] nil as the curent Ruby version does not support String encoding
|
196
|
+
def format_encoding(_value)
|
197
|
+
nil
|
198
|
+
end
|
199
|
+
end
|
200
|
+
module_function :format_encoding
|
201
|
+
end
|
202
|
+
|
203
|
+
include StringEncodingFormatting
|
204
|
+
|
164
205
|
# @api private
|
165
206
|
# Provides default implementations of failure messages, based on the `description`.
|
166
207
|
module DefaultFailureMessages
|
@@ -51,10 +51,10 @@ module RSpec
|
|
51
51
|
end
|
52
52
|
|
53
53
|
# @api private
|
54
|
-
# @return [RSpec::Matchers::
|
54
|
+
# @return [RSpec::Matchers::MultiMatcherDiff]
|
55
55
|
def expected
|
56
56
|
return nil unless evaluator
|
57
|
-
::RSpec::Matchers::
|
57
|
+
::RSpec::Matchers::MultiMatcherDiff.for_many_matchers(diffable_matcher_list)
|
58
58
|
end
|
59
59
|
|
60
60
|
protected
|
@@ -171,7 +171,7 @@ module RSpec
|
|
171
171
|
@match_results.fetch(matcher) do
|
172
172
|
raise ArgumentError, "Your #{matcher.description} has no match " \
|
173
173
|
"results, this can occur when an unexpected call stack or " \
|
174
|
-
"local jump occurs.
|
174
|
+
"local jump occurs. Perhaps one of your matchers needs to " \
|
175
175
|
"declare `expects_call_stack_jump?` as `true`?"
|
176
176
|
end
|
177
177
|
end
|
@@ -8,7 +8,11 @@ module RSpec
|
|
8
8
|
# @api private
|
9
9
|
# @return [String]
|
10
10
|
def failure_message
|
11
|
-
|
11
|
+
if string_encoding_differs?
|
12
|
+
"\nexpected: #{format_encoding(expected)} #{expected_formatted}\n got: #{format_encoding(actual)} #{actual_formatted}\n\n(compared using ==)\n"
|
13
|
+
else
|
14
|
+
"\nexpected: #{expected_formatted}\n got: #{actual_formatted}\n\n(compared using ==)\n"
|
15
|
+
end
|
12
16
|
end
|
13
17
|
|
14
18
|
# @api private
|
@@ -8,7 +8,11 @@ module RSpec
|
|
8
8
|
# @api private
|
9
9
|
# @return [String]
|
10
10
|
def failure_message
|
11
|
-
|
11
|
+
if string_encoding_differs?
|
12
|
+
"\nexpected: #{format_encoding(expected)} #{expected_formatted}\n got: #{format_encoding(actual)} #{actual_formatted}\n\n(compared using eql?)\n"
|
13
|
+
else
|
14
|
+
"\nexpected: #{expected_formatted}\n got: #{actual_formatted}\n\n(compared using eql?)\n"
|
15
|
+
end
|
12
16
|
end
|
13
17
|
|
14
18
|
# @api private
|
@@ -153,8 +153,15 @@ module RSpec
|
|
153
153
|
def actual_hash_has_key?(expected_key)
|
154
154
|
# We check `key?` first for perf:
|
155
155
|
# `key?` is O(1), but `any?` is O(N).
|
156
|
-
|
157
|
-
|
156
|
+
|
157
|
+
has_exact_key =
|
158
|
+
begin
|
159
|
+
actual.key?(expected_key)
|
160
|
+
rescue
|
161
|
+
false
|
162
|
+
end
|
163
|
+
|
164
|
+
has_exact_key || actual.keys.any? { |key| values_match?(expected_key, key) }
|
158
165
|
end
|
159
166
|
|
160
167
|
def actual_collection_includes?(expected_item)
|
@@ -83,7 +83,7 @@ module RSpec
|
|
83
83
|
RSpec::Support::ObjectFormatter.format(object)
|
84
84
|
end
|
85
85
|
|
86
|
-
# Transforms the given data
|
86
|
+
# Transforms the given data structure (typically a hash or array)
|
87
87
|
# into a new data structure that, when `#inspect` is called on it,
|
88
88
|
# will provide descriptions of any contained matchers rather than
|
89
89
|
# the normal `#inspect` output.
|
data/lib/rspec/matchers/dsl.rb
CHANGED
@@ -4,7 +4,7 @@ module RSpec
|
|
4
4
|
module Matchers
|
5
5
|
# Defines the custom matcher DSL.
|
6
6
|
module DSL
|
7
|
-
# Defines a matcher alias. The returned matcher's `description` will be
|
7
|
+
# Defines a matcher alias. The returned matcher's `description` will be overridden
|
8
8
|
# to reflect the phrasing of the new name, which will be used in failure messages
|
9
9
|
# when passed as an argument to another matcher in a composed matcher expression.
|
10
10
|
#
|
@@ -25,7 +25,7 @@ module RSpec
|
|
25
25
|
# @param old_name [Symbol] the original name for the matcher
|
26
26
|
# @param options [Hash] options for the aliased matcher
|
27
27
|
# @option options [Class] :klass the ruby class to use as the decorator. (Not normally used).
|
28
|
-
# @yield [String] optional block that, when given, is used to define the
|
28
|
+
# @yield [String] optional block that, when given, is used to define the overridden
|
29
29
|
# logic. The yielded arg is the original description or failure message. If no
|
30
30
|
# block is provided, a default override is used based on the old and new names.
|
31
31
|
# @see RSpec::Matchers
|
@@ -40,10 +40,11 @@ module RSpec
|
|
40
40
|
matcher.matcher_name = new_name if matcher.respond_to?(:matcher_name=)
|
41
41
|
klass.new(matcher, description_override)
|
42
42
|
end
|
43
|
+
ruby2_keywords new_name if respond_to?(:ruby2_keywords, true)
|
43
44
|
end
|
44
45
|
|
45
46
|
# Defines a negated matcher. The returned matcher's `description` and `failure_message`
|
46
|
-
# will be
|
47
|
+
# will be overridden to reflect the phrasing of the new name, and the match logic will
|
47
48
|
# be based on the original matcher but negated.
|
48
49
|
#
|
49
50
|
# @example
|
@@ -53,7 +54,7 @@ module RSpec
|
|
53
54
|
#
|
54
55
|
# @param negated_name [Symbol] the name for the negated matcher
|
55
56
|
# @param base_name [Symbol] the name of the original matcher that will be negated
|
56
|
-
# @yield [String] optional block that, when given, is used to define the
|
57
|
+
# @yield [String] optional block that, when given, is used to define the overridden
|
57
58
|
# logic. The yielded arg is the original description or failure message. If no
|
58
59
|
# block is provided, a default override is used based on the old and new names.
|
59
60
|
# @see RSpec::Matchers
|
@@ -197,7 +198,7 @@ module RSpec
|
|
197
198
|
end
|
198
199
|
end
|
199
200
|
|
200
|
-
# Customizes the failure
|
201
|
+
# Customizes the failure message to use when this matcher is
|
201
202
|
# asked to positively match. Only use this when the message
|
202
203
|
# generated by default doesn't suit your needs.
|
203
204
|
#
|
@@ -216,7 +217,7 @@ module RSpec
|
|
216
217
|
define_user_override(__method__, definition)
|
217
218
|
end
|
218
219
|
|
219
|
-
# Customize the failure
|
220
|
+
# Customize the failure message to use when this matcher is asked
|
220
221
|
# to negatively match. Only use this when the message generated by
|
221
222
|
# default doesn't suit your needs.
|
222
223
|
#
|
@@ -330,7 +331,7 @@ module RSpec
|
|
330
331
|
# - Defines the named method using a user-provided block
|
331
332
|
# in @user_method_defs, which is included as an ancestor
|
332
333
|
# in the singleton class in which we eval the `define` block.
|
333
|
-
# - Defines an
|
334
|
+
# - Defines an overridden definition for the same method
|
334
335
|
# usign the provided `our_def` block.
|
335
336
|
# - Provides a default `our_def` block for the common case
|
336
337
|
# of needing to call the user's definition with `@actual`
|
@@ -1,8 +1,34 @@
|
|
1
1
|
module RSpec
|
2
2
|
module Matchers
|
3
|
+
# Provides a base class with as little methods as possible, so that
|
4
|
+
# most methods can be delegated via `method_missing`.
|
5
|
+
#
|
6
|
+
# On Ruby 2.0+ BasicObject could be used for this purpose, but it
|
7
|
+
# introduce some extra complexity with constant resolution, so the
|
8
|
+
# BlankSlate pattern was prefered.
|
9
|
+
# @private
|
10
|
+
class BaseDelegator
|
11
|
+
kept_methods = [
|
12
|
+
# Methods that raise warnings if removed.
|
13
|
+
:__id__, :__send__, :object_id,
|
14
|
+
|
15
|
+
# Methods that are explicitly undefined in some subclasses.
|
16
|
+
:==, :===,
|
17
|
+
|
18
|
+
# Methods we keep on purpose.
|
19
|
+
:class, :respond_to?, :__method__, :method, :dup,
|
20
|
+
:clone, :initialize_dup, :initialize_copy, :initialize_clone,
|
21
|
+
]
|
22
|
+
instance_methods.each do |method|
|
23
|
+
unless kept_methods.include?(method.to_sym)
|
24
|
+
undef_method(method)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
3
29
|
# Provides the necessary plumbing to wrap a matcher with a decorator.
|
4
30
|
# @private
|
5
|
-
class MatcherDelegator
|
31
|
+
class MatcherDelegator < BaseDelegator
|
6
32
|
include Composable
|
7
33
|
attr_reader :base_matcher
|
8
34
|
|
@@ -1,9 +1,9 @@
|
|
1
1
|
module RSpec
|
2
2
|
module Matchers
|
3
3
|
# @api private
|
4
|
-
# Handles list of expected
|
5
|
-
# multiple diffs. Also can handle one
|
6
|
-
class
|
4
|
+
# Handles list of expected and actual value pairs when there is a need
|
5
|
+
# to render multiple diffs. Also can handle one pair.
|
6
|
+
class MultiMatcherDiff
|
7
7
|
# @private
|
8
8
|
# Default diff label when there is only one matcher in diff
|
9
9
|
# output
|
@@ -19,22 +19,23 @@ module RSpec
|
|
19
19
|
|
20
20
|
# @api private
|
21
21
|
# Wraps provided expected value in instance of
|
22
|
-
#
|
23
|
-
#
|
22
|
+
# MultiMatcherDiff. If provided value is already an
|
23
|
+
# MultiMatcherDiff then it just returns it.
|
24
24
|
# @param [Any] expected value to be wrapped
|
25
|
-
# @
|
26
|
-
|
25
|
+
# @param [Any] actual value
|
26
|
+
# @return [RSpec::Matchers::MultiMatcherDiff]
|
27
|
+
def self.from(expected, actual)
|
27
28
|
return expected if self === expected
|
28
|
-
new([[expected, DEFAULT_DIFF_LABEL]])
|
29
|
+
new([[expected, DEFAULT_DIFF_LABEL, actual]])
|
29
30
|
end
|
30
31
|
|
31
32
|
# @api private
|
32
33
|
# Wraps provided matcher list in instance of
|
33
|
-
#
|
34
|
+
# MultiMatcherDiff.
|
34
35
|
# @param [Array<Any>] matchers list of matchers to wrap
|
35
|
-
# @return [RSpec::Matchers::
|
36
|
+
# @return [RSpec::Matchers::MultiMatcherDiff]
|
36
37
|
def self.for_many_matchers(matchers)
|
37
|
-
new(matchers.map { |m| [m.expected, diff_label_for(m)] })
|
38
|
+
new(matchers.map { |m| [m.expected, diff_label_for(m), m.actual] })
|
38
39
|
end
|
39
40
|
|
40
41
|
# @api private
|
@@ -42,10 +43,9 @@ module RSpec
|
|
42
43
|
# factory and actual value if there are any
|
43
44
|
# @param [String] message original failure message
|
44
45
|
# @param [Proc] differ
|
45
|
-
# @param [Any] actual value
|
46
46
|
# @return [String]
|
47
|
-
def message_with_diff(message, differ
|
48
|
-
diff = diffs(differ
|
47
|
+
def message_with_diff(message, differ)
|
48
|
+
diff = diffs(differ)
|
49
49
|
message = "#{message}\n#{diff}" unless diff.empty?
|
50
50
|
message
|
51
51
|
end
|
@@ -65,8 +65,8 @@ module RSpec
|
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
68
|
-
def diffs(differ
|
69
|
-
@expected_list.map do |(expected, diff_label)|
|
68
|
+
def diffs(differ)
|
69
|
+
@expected_list.map do |(expected, diff_label, actual)|
|
70
70
|
diff = differ.diff(actual, expected)
|
71
71
|
next if diff.strip.empty?
|
72
72
|
if diff == "\e[0m\n\e[0m"
|
data/lib/rspec/matchers.rb
CHANGED
@@ -10,7 +10,7 @@ RSpec::Support.define_optimized_require_for_rspec(:matchers) { |f| require_relat
|
|
10
10
|
dsl
|
11
11
|
matcher_delegator
|
12
12
|
aliased_matcher
|
13
|
-
|
13
|
+
multi_matcher_diff
|
14
14
|
].each { |file| RSpec::Support.require_rspec_matchers(file) }
|
15
15
|
|
16
16
|
# RSpec's top level namespace. All of rspec-expectations is contained
|
@@ -704,7 +704,7 @@ module RSpec
|
|
704
704
|
|
705
705
|
# An alternate form of `contain_exactly` that accepts
|
706
706
|
# the expected contents as a single array arg rather
|
707
|
-
#
|
707
|
+
# than splatted out as individual items.
|
708
708
|
#
|
709
709
|
# @example
|
710
710
|
# expect(results).to contain_exactly(1, 2)
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec-expectations
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.13.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Steven Baker
|
@@ -45,7 +45,7 @@ cert_chain:
|
|
45
45
|
ZsVDj6a7lH3cNqtWXZxrb2wO38qV5AkYj8SQK7Hj3/Yui9myUX3crr+PdetazSqQ
|
46
46
|
F3MdtaDehhjC
|
47
47
|
-----END CERTIFICATE-----
|
48
|
-
date:
|
48
|
+
date: 2024-02-04 00:00:00.000000000 Z
|
49
49
|
dependencies:
|
50
50
|
- !ruby/object:Gem::Dependency
|
51
51
|
name: rspec-support
|
@@ -53,14 +53,14 @@ dependencies:
|
|
53
53
|
requirements:
|
54
54
|
- - "~>"
|
55
55
|
- !ruby/object:Gem::Version
|
56
|
-
version: 3.
|
56
|
+
version: 3.13.0
|
57
57
|
type: :runtime
|
58
58
|
prerelease: false
|
59
59
|
version_requirements: !ruby/object:Gem::Requirement
|
60
60
|
requirements:
|
61
61
|
- - "~>"
|
62
62
|
- !ruby/object:Gem::Version
|
63
|
-
version: 3.
|
63
|
+
version: 3.13.0
|
64
64
|
- !ruby/object:Gem::Dependency
|
65
65
|
name: diff-lcs
|
66
66
|
requirement: !ruby/object:Gem::Requirement
|
@@ -193,17 +193,17 @@ files:
|
|
193
193
|
- lib/rspec/matchers/composable.rb
|
194
194
|
- lib/rspec/matchers/dsl.rb
|
195
195
|
- lib/rspec/matchers/english_phrasing.rb
|
196
|
-
- lib/rspec/matchers/expecteds_for_multiple_diffs.rb
|
197
196
|
- lib/rspec/matchers/fail_matchers.rb
|
198
197
|
- lib/rspec/matchers/generated_descriptions.rb
|
199
198
|
- lib/rspec/matchers/matcher_delegator.rb
|
200
199
|
- lib/rspec/matchers/matcher_protocol.rb
|
200
|
+
- lib/rspec/matchers/multi_matcher_diff.rb
|
201
201
|
homepage: https://github.com/rspec/rspec-expectations
|
202
202
|
licenses:
|
203
203
|
- MIT
|
204
204
|
metadata:
|
205
205
|
bug_tracker_uri: https://github.com/rspec/rspec-expectations/issues
|
206
|
-
changelog_uri: https://github.com/rspec/rspec-expectations/blob/v3.
|
206
|
+
changelog_uri: https://github.com/rspec/rspec-expectations/blob/v3.13.0/Changelog.md
|
207
207
|
documentation_uri: https://rspec.info/documentation/
|
208
208
|
mailing_list_uri: https://groups.google.com/forum/#!forum/rspec
|
209
209
|
source_code_uri: https://github.com/rspec/rspec-expectations
|
@@ -223,8 +223,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
223
223
|
- !ruby/object:Gem::Version
|
224
224
|
version: '0'
|
225
225
|
requirements: []
|
226
|
-
rubygems_version: 3.3.
|
226
|
+
rubygems_version: 3.3.26
|
227
227
|
signing_key:
|
228
228
|
specification_version: 4
|
229
|
-
summary: rspec-expectations-3.
|
229
|
+
summary: rspec-expectations-3.13.0
|
230
230
|
test_files: []
|
metadata.gz.sig
CHANGED
@@ -1,3 +1,2 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
'I^q�[����PS4:���VY8@.@�HF%�4��3E
|
1
|
+
:���-t$r�9z�p�{\�' O�<.m�J�p�口C���M7Et������h�vt��76S<V��Ұ��ar�|
|
2
|
+
B"��)���(l%ϋ�d�*Z�ad%��L)u����vyD��n� ^��v��dZyC����d��'zNc�2�x.��U�iZ�n�X�E6ͬ����a;~RF������U3�Lqg��^����ENʥ��i���l�z�/M��i���|���WD�c�2��wa�r�O�ab�xq�٥�Db<c��tmf�k�R�D�,p�I�d1b�䟭������YvF��ܔ~�e��ѱtk��8�ȑ�e�:���Y�c�z>�N��Mg%���$����T٩�]"V�$vHj&�2��܇��ʊ�Mh����/��c`����ӪOf�l����G�a�O�g��s3��#�1Q������l�$��q�`��u[��j$h����m�v�wT����K��@�`��8��(�]�T7���Wd�6:��z�˯�~���
|