rspec-expectations 3.7.0 → 3.8.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.tar.gz.sig +0 -0
- data/Changelog.md +20 -2
- data/README.md +1 -1
- data/lib/rspec/expectations/block_snippet_extractor.rb +1 -1
- data/lib/rspec/expectations/configuration.rb +14 -0
- data/lib/rspec/expectations/expectation_target.rb +1 -1
- data/lib/rspec/expectations/minitest_integration.rb +1 -1
- data/lib/rspec/expectations/syntax.rb +2 -2
- data/lib/rspec/expectations/version.rb +1 -1
- data/lib/rspec/matchers.rb +4 -1
- data/lib/rspec/matchers/built_in/change.rb +73 -34
- data/lib/rspec/matchers/built_in/compound.rb +0 -1
- data/lib/rspec/matchers/built_in/contain_exactly.rb +2 -1
- data/lib/rspec/matchers/built_in/has.rb +1 -1
- data/lib/rspec/matchers/built_in/include.rb +2 -0
- data/lib/rspec/matchers/built_in/respond_to.rb +1 -1
- data/lib/rspec/matchers/built_in/satisfy.rb +1 -1
- data/lib/rspec/matchers/composable.rb +2 -0
- data/lib/rspec/matchers/english_phrasing.rb +2 -2
- data/lib/rspec/matchers/generated_descriptions.rb +1 -2
- metadata +6 -7
- metadata.gz.sig +3 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c64b53ac0865670b12407e85b12dfef41a915675
|
4
|
+
data.tar.gz: 72290b7d0bfa0774d0a75ba08c9c4f87b3684e9b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9c98a819df168dca33a9a74275a8b8034d7670c22e9bf40cfa4c4e483fe0c78d1aba80ff6a846024153b8e31e60fcecfd3b8473ff12172bb58801cea842c921f
|
7
|
+
data.tar.gz: 1901f329e2f9c3023e25a2bd198c0a5aa89efbbf40e33dbd25e31d56c5584bcd30472878fb07a19fa9ca24d743c7f6c60744081c76ab4aeb0081f73efaae5207
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/Changelog.md
CHANGED
@@ -1,5 +1,23 @@
|
|
1
|
-
### 3.8
|
2
|
-
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v3.7.0...
|
1
|
+
### 3.8.0 / 2018-08-04
|
2
|
+
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v3.7.0...v3.8.0)
|
3
|
+
|
4
|
+
Enhancements:
|
5
|
+
|
6
|
+
* Improve failure message of `change(receiver, :message)` by including the
|
7
|
+
receiver as `SomeClass#some_message`. (Tomohiro Hashidate, #1005)
|
8
|
+
* Improve `change` matcher so that it can correctly detect changes in
|
9
|
+
deeply nested mutable objects (such as arrays-of-hashes-of-arrays).
|
10
|
+
The improved logic uses the before/after `hash` value to see if the
|
11
|
+
object has been mutated, rather than shallow duping the object.
|
12
|
+
(Myron Marston, #1034)
|
13
|
+
* Improve `include` matcher so that pseudo-hash objects (e.g. objects
|
14
|
+
that decorate a hash using a `SimpleDelegator` or similar) are treated
|
15
|
+
as a hash, as long as they implement `to_hash`. (Pablo Brasero, #1012)
|
16
|
+
* Add `max_formatted_output_length=` to configuration, allowing changing
|
17
|
+
the length at which we truncate large output strings.
|
18
|
+
(Sam Phippen #951, Benoit Tigeot #1056)
|
19
|
+
* Improve error message when passing a matcher that doesn't support block
|
20
|
+
expectations to a block based `expect`. (@nicktime, #1066)
|
3
21
|
|
4
22
|
### 3.7.0 / 2017-10-17
|
5
23
|
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v3.6.0...v3.7.0)
|
data/README.md
CHANGED
@@ -20,7 +20,7 @@ RSpec repos as well. Add the following to your `Gemfile`:
|
|
20
20
|
|
21
21
|
```ruby
|
22
22
|
%w[rspec-core rspec-expectations rspec-mocks rspec-support].each do |lib|
|
23
|
-
gem lib, :git => "
|
23
|
+
gem lib, :git => "https://github.com/rspec/#{lib}.git", :branch => 'master'
|
24
24
|
end
|
25
25
|
```
|
26
26
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module RSpec
|
2
2
|
module Expectations
|
3
3
|
# @private
|
4
|
-
class BlockSnippetExtractor # rubocop:disable
|
4
|
+
class BlockSnippetExtractor # rubocop:disable Metrics/ClassLength
|
5
5
|
# rubocop should properly handle `Struct.new {}` as an inner class definition.
|
6
6
|
|
7
7
|
attr_reader :proc, :method_name
|
@@ -56,6 +56,20 @@ module RSpec
|
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
|
+
# Configures the maximum character length that RSpec will print while
|
60
|
+
# formatting an object. You can set length to nil to prevent RSpec from
|
61
|
+
# doing truncation.
|
62
|
+
# @param [Fixnum] length the number of characters to limit the formatted output to.
|
63
|
+
# @example
|
64
|
+
# RSpec.configure do |rspec|
|
65
|
+
# rspec.expect_with :rspec do |c|
|
66
|
+
# c.max_formatted_output_length = 200
|
67
|
+
# end
|
68
|
+
# end
|
69
|
+
def max_formatted_output_length=(length)
|
70
|
+
RSpec::Support::ObjectFormatter.default_instance.max_formatted_output_length = length
|
71
|
+
end
|
72
|
+
|
59
73
|
# The list of configured syntaxes.
|
60
74
|
# @return [Array<Symbol>] the list of configured syntaxes.
|
61
75
|
# @example
|
@@ -112,7 +112,7 @@ module RSpec
|
|
112
112
|
def enforce_block_expectation(matcher)
|
113
113
|
return if supports_block_expectations?(matcher)
|
114
114
|
|
115
|
-
raise ExpectationNotMetError, "You must pass an argument rather than a block to use the provided " \
|
115
|
+
raise ExpectationNotMetError, "You must pass an argument rather than a block to `expect` to use the provided " \
|
116
116
|
"matcher (#{RSpec::Support::ObjectFormatter.format(matcher)}), or the matcher must implement " \
|
117
117
|
"`supports_block_expectations?`."
|
118
118
|
end
|
@@ -106,7 +106,7 @@ if defined?(BasicObject)
|
|
106
106
|
# that this syntax does not always play nice with delegate/proxy objects.
|
107
107
|
# We recommend you use the non-monkeypatching `:expect` syntax instead.
|
108
108
|
class BasicObject
|
109
|
-
# @method should
|
109
|
+
# @method should(matcher, message)
|
110
110
|
# Passes if `matcher` returns true. Available on every `Object`.
|
111
111
|
# @example
|
112
112
|
# actual.should eq expected
|
@@ -118,7 +118,7 @@ if defined?(BasicObject)
|
|
118
118
|
# @note This is only available when you have enabled the `:should` syntax.
|
119
119
|
# @see RSpec::Matchers
|
120
120
|
|
121
|
-
# @method should_not
|
121
|
+
# @method should_not(matcher, message)
|
122
122
|
# Passes if `matcher` returns false. Available on every `Object`.
|
123
123
|
# @example
|
124
124
|
# actual.should_not eq expected
|
data/lib/rspec/matchers.rb
CHANGED
@@ -480,7 +480,10 @@ module RSpec
|
|
480
480
|
# == Notes
|
481
481
|
#
|
482
482
|
# Evaluates `receiver.message` or `block` before and after it
|
483
|
-
# evaluates the block passed to `expect`.
|
483
|
+
# evaluates the block passed to `expect`. If the value is the same
|
484
|
+
# object, its before/after `hash` value is used to see if it has changed.
|
485
|
+
# Therefore, your object needs to properly implement `hash` to work correctly
|
486
|
+
# with this matcher.
|
484
487
|
#
|
485
488
|
# `expect( ... ).not_to change` supports the form that specifies `from`
|
486
489
|
# (which specifies what you expect the starting, unchanged value to be)
|
@@ -43,16 +43,13 @@ module RSpec
|
|
43
43
|
|
44
44
|
# @private
|
45
45
|
def matches?(event_proc)
|
46
|
-
@event_proc = event_proc
|
47
|
-
return false unless Proc === event_proc
|
48
46
|
raise_block_syntax_error if block_given?
|
49
|
-
|
50
|
-
change_details.changed?
|
47
|
+
perform_change(event_proc) && change_details.changed?
|
51
48
|
end
|
52
49
|
|
53
50
|
def does_not_match?(event_proc)
|
54
51
|
raise_block_syntax_error if block_given?
|
55
|
-
|
52
|
+
perform_change(event_proc) && !change_details.changed?
|
56
53
|
end
|
57
54
|
|
58
55
|
# @api private
|
@@ -92,6 +89,18 @@ module RSpec
|
|
92
89
|
@change_details ||= ChangeDetails.new(matcher_name, @receiver, @message, &@block)
|
93
90
|
end
|
94
91
|
|
92
|
+
def perform_change(event_proc)
|
93
|
+
@event_proc = event_proc
|
94
|
+
change_details.perform_change(event_proc) do |actual_before|
|
95
|
+
# pre-compute values derived from the `before` value before the
|
96
|
+
# mutation is applied, in case the specified mutation is mutation
|
97
|
+
# of a single object (rather than a changing what object a method
|
98
|
+
# returns). We need to cache these values before the `before` value
|
99
|
+
# they are based on potentially gets mutated.
|
100
|
+
@actual_before_description = description_of(actual_before)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
95
104
|
def raise_block_syntax_error
|
96
105
|
raise SyntaxError, "Block not received by the `change` matcher. " \
|
97
106
|
"Perhaps you want to use `{ ... }` instead of do/end?"
|
@@ -99,12 +108,12 @@ module RSpec
|
|
99
108
|
|
100
109
|
def positive_failure_reason
|
101
110
|
return "was not given a block" unless Proc === @event_proc
|
102
|
-
"is still #{
|
111
|
+
"is still #{@actual_before_description}"
|
103
112
|
end
|
104
113
|
|
105
114
|
def negative_failure_reason
|
106
115
|
return "was not given a block" unless Proc === @event_proc
|
107
|
-
"did change from #{
|
116
|
+
"did change from #{@actual_before_description} " \
|
108
117
|
"to #{description_of change_details.actual_after}"
|
109
118
|
end
|
110
119
|
end
|
@@ -129,9 +138,7 @@ module RSpec
|
|
129
138
|
# @private
|
130
139
|
def matches?(event_proc)
|
131
140
|
@event_proc = event_proc
|
132
|
-
|
133
|
-
@change_details.perform_change(event_proc)
|
134
|
-
@comparer.call(@change_details.actual_delta)
|
141
|
+
@change_details.perform_change(event_proc) && @comparer.call(@change_details.actual_delta)
|
135
142
|
end
|
136
143
|
|
137
144
|
# @private
|
@@ -173,10 +180,7 @@ module RSpec
|
|
173
180
|
|
174
181
|
# @private
|
175
182
|
def matches?(event_proc)
|
176
|
-
|
177
|
-
return false unless Proc === event_proc
|
178
|
-
@change_details.perform_change(event_proc)
|
179
|
-
@change_details.changed? && matches_before? && matches_after?
|
183
|
+
perform_change(event_proc) && @change_details.changed? && @matches_before && matches_after?
|
180
184
|
end
|
181
185
|
|
182
186
|
# @private
|
@@ -187,7 +191,7 @@ module RSpec
|
|
187
191
|
# @private
|
188
192
|
def failure_message
|
189
193
|
return not_given_a_block_failure unless Proc === @event_proc
|
190
|
-
return before_value_failure unless matches_before
|
194
|
+
return before_value_failure unless @matches_before
|
191
195
|
return did_not_change_failure unless @change_details.changed?
|
192
196
|
after_value_failure
|
193
197
|
end
|
@@ -199,8 +203,17 @@ module RSpec
|
|
199
203
|
|
200
204
|
private
|
201
205
|
|
202
|
-
def
|
203
|
-
|
206
|
+
def perform_change(event_proc)
|
207
|
+
@event_proc = event_proc
|
208
|
+
@change_details.perform_change(event_proc) do |actual_before|
|
209
|
+
# pre-compute values derived from the `before` value before the
|
210
|
+
# mutation is applied, in case the specified mutation is mutation
|
211
|
+
# of a single object (rather than a changing what object a method
|
212
|
+
# returns). We need to cache these values before the `before` value
|
213
|
+
# they are based on potentially gets mutated.
|
214
|
+
@matches_before = values_match?(@expected_before, actual_before)
|
215
|
+
@actual_before_description = description_of(actual_before)
|
216
|
+
end
|
204
217
|
end
|
205
218
|
|
206
219
|
def matches_after?
|
@@ -210,7 +223,7 @@ module RSpec
|
|
210
223
|
def before_value_failure
|
211
224
|
"expected #{@change_details.value_representation} " \
|
212
225
|
"to have initially been #{description_of @expected_before}, " \
|
213
|
-
"but was #{
|
226
|
+
"but was #{@actual_before_description}"
|
214
227
|
end
|
215
228
|
|
216
229
|
def after_value_failure
|
@@ -226,7 +239,7 @@ module RSpec
|
|
226
239
|
|
227
240
|
def did_change_failure
|
228
241
|
"expected #{@change_details.value_representation} not to have changed, but " \
|
229
|
-
"did change from #{
|
242
|
+
"did change from #{@actual_before_description} " \
|
230
243
|
"to #{description_of @change_details.actual_after}"
|
231
244
|
end
|
232
245
|
|
@@ -260,16 +273,13 @@ module RSpec
|
|
260
273
|
"is not supported"
|
261
274
|
end
|
262
275
|
|
263
|
-
|
264
|
-
return false unless Proc === event_proc
|
265
|
-
@change_details.perform_change(event_proc)
|
266
|
-
!@change_details.changed? && matches_before?
|
276
|
+
perform_change(event_proc) && !@change_details.changed? && @matches_before
|
267
277
|
end
|
268
278
|
|
269
279
|
# @private
|
270
280
|
def failure_message_when_negated
|
271
281
|
return not_given_a_block_failure unless Proc === @event_proc
|
272
|
-
return before_value_failure unless matches_before
|
282
|
+
return before_value_failure unless @matches_before
|
273
283
|
did_change_failure
|
274
284
|
end
|
275
285
|
|
@@ -312,8 +322,20 @@ module RSpec
|
|
312
322
|
|
313
323
|
# @private
|
314
324
|
# Encapsulates the details of the before/after values.
|
325
|
+
#
|
326
|
+
# Note that this class exposes the `actual_after` value, to allow the
|
327
|
+
# matchers above to derive failure messages, etc from the value on demand
|
328
|
+
# as needed, but it intentionally does _not_ expose the `actual_before`
|
329
|
+
# value. Some usages of the `change` matcher mutate a specific object
|
330
|
+
# returned by the value proc, which means that failure message snippets,
|
331
|
+
# etc, which are derived from the `before` value may not be accurate if
|
332
|
+
# they are lazily computed as needed. We must pre-compute them before
|
333
|
+
# applying the change in the `expect` block. To ensure that all `change`
|
334
|
+
# matchers do that properly, we do not expose the `actual_before` value.
|
335
|
+
# Instead, matchers must pass a block to `perform_change`, which yields
|
336
|
+
# the `actual_before` value before applying the change.
|
315
337
|
class ChangeDetails
|
316
|
-
attr_reader :
|
338
|
+
attr_reader :actual_after
|
317
339
|
|
318
340
|
def initialize(matcher_name, receiver=nil, message=nil, &block)
|
319
341
|
if receiver && !message
|
@@ -334,7 +356,7 @@ module RSpec
|
|
334
356
|
def value_representation
|
335
357
|
@value_representation ||=
|
336
358
|
if @message
|
337
|
-
"
|
359
|
+
"`#{message_notation(@receiver, @message)}`"
|
338
360
|
elsif (value_block_snippet = extract_value_block_snippet)
|
339
361
|
"`#{value_block_snippet}`"
|
340
362
|
else
|
@@ -344,12 +366,29 @@ module RSpec
|
|
344
366
|
|
345
367
|
def perform_change(event_proc)
|
346
368
|
@actual_before = evaluate_value_proc
|
369
|
+
@before_hash = @actual_before.hash
|
370
|
+
yield @actual_before if block_given?
|
371
|
+
|
372
|
+
return false unless Proc === event_proc
|
347
373
|
event_proc.call
|
374
|
+
|
348
375
|
@actual_after = evaluate_value_proc
|
376
|
+
true
|
349
377
|
end
|
350
378
|
|
351
379
|
def changed?
|
352
|
-
|
380
|
+
# Consider it changed if either:
|
381
|
+
#
|
382
|
+
# - The before/after values are unequal
|
383
|
+
# - The before/after values have different hash values
|
384
|
+
#
|
385
|
+
# The latter case specifically handles the case when the value proc
|
386
|
+
# returns the exact same object, but it has been mutated.
|
387
|
+
#
|
388
|
+
# Note that it is not sufficient to only check the hashes; it is
|
389
|
+
# possible for two values to be unequal (and of different classes)
|
390
|
+
# but to return the same hash value.
|
391
|
+
@actual_before != @actual_after || @before_hash != @actual_after.hash
|
353
392
|
end
|
354
393
|
|
355
394
|
def actual_delta
|
@@ -359,15 +398,15 @@ module RSpec
|
|
359
398
|
private
|
360
399
|
|
361
400
|
def evaluate_value_proc
|
362
|
-
value_proc
|
401
|
+
@value_proc ? @value_proc.call : @receiver.__send__(@message)
|
402
|
+
end
|
363
403
|
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
val.dup
|
404
|
+
def message_notation(receiver, message)
|
405
|
+
case receiver
|
406
|
+
when Module
|
407
|
+
"#{receiver}.#{message}"
|
369
408
|
else
|
370
|
-
|
409
|
+
"#{Support.class_of(receiver)}##{message}"
|
371
410
|
end
|
372
411
|
end
|
373
412
|
|
@@ -89,7 +89,7 @@ module RSpec
|
|
89
89
|
elsif actual.respond_to?(:to_a) && !to_a_disallowed?(actual)
|
90
90
|
@actual = actual.to_a
|
91
91
|
else
|
92
|
-
|
92
|
+
false
|
93
93
|
end
|
94
94
|
end
|
95
95
|
|
@@ -176,6 +176,7 @@ module RSpec
|
|
176
176
|
#
|
177
177
|
# @private
|
178
178
|
class PairingsMaximizer
|
179
|
+
# @private
|
179
180
|
Solution = Struct.new(:unmatched_expected_indexes, :unmatched_actual_indexes,
|
180
181
|
:indeterminate_expected_indexes, :indeterminate_actual_indexes) do
|
181
182
|
def worse_than?(other)
|
@@ -15,12 +15,14 @@ module RSpec
|
|
15
15
|
# @api private
|
16
16
|
# @return [Boolean]
|
17
17
|
def matches?(actual)
|
18
|
+
actual = actual.to_hash if actual.respond_to?(:to_hash)
|
18
19
|
perform_match(actual) { |v| v }
|
19
20
|
end
|
20
21
|
|
21
22
|
# @api private
|
22
23
|
# @return [Boolean]
|
23
24
|
def does_not_match?(actual)
|
25
|
+
actual = actual.to_hash if actual.respond_to?(:to_hash)
|
24
26
|
perform_match(actual) { |v| !v }
|
25
27
|
end
|
26
28
|
|
@@ -151,7 +151,7 @@ module RSpec
|
|
151
151
|
@expected_keywords.map(&:inspect).join(' and ')
|
152
152
|
else
|
153
153
|
"#{@expected_keywords[0...-1].map(&:inspect).join(', ')}, and #{@expected_keywords.last.inspect}"
|
154
|
-
|
154
|
+
end
|
155
155
|
|
156
156
|
"keyword#{@expected_keywords.count == 1 ? '' : 's'} #{kw_str}"
|
157
157
|
end
|
@@ -156,10 +156,12 @@ module RSpec
|
|
156
156
|
# Wraps an item in order to surface its `description` via `inspect`.
|
157
157
|
# @api private
|
158
158
|
DescribableItem = Struct.new(:item) do
|
159
|
+
# Inspectable version of the item description
|
159
160
|
def inspect
|
160
161
|
"(#{item.description})"
|
161
162
|
end
|
162
163
|
|
164
|
+
# A pretty printed version of the item description.
|
163
165
|
def pretty_print(pp)
|
164
166
|
pp.text "(#{item.description})"
|
165
167
|
end
|
@@ -44,14 +44,14 @@ module RSpec
|
|
44
44
|
# So it appears that `Array` can trigger that (e.g. by calling `to_a` on the passed object?)
|
45
45
|
# So here we replace `Kernel#Array` with our own warning-free implementation for 1.8.7.
|
46
46
|
# @private
|
47
|
-
# rubocop:disable
|
47
|
+
# rubocop:disable Naming/MethodName
|
48
48
|
def self.Array(obj)
|
49
49
|
case obj
|
50
50
|
when Array then obj
|
51
51
|
else [obj]
|
52
52
|
end
|
53
53
|
end
|
54
|
-
# rubocop:enable
|
54
|
+
# rubocop:enable Naming/MethodName
|
55
55
|
end
|
56
56
|
end
|
57
57
|
end
|
@@ -21,8 +21,7 @@ module RSpec
|
|
21
21
|
"#{last_expectation_handler.verb} #{last_description}"
|
22
22
|
end
|
23
23
|
|
24
|
-
|
25
|
-
|
24
|
+
# @private
|
26
25
|
def self.last_description
|
27
26
|
last_matcher.respond_to?(:description) ? last_matcher.description : <<-MESSAGE
|
28
27
|
When you call a matcher in an example without a String, like this:
|
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.8.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: 2018-08-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.8.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.8.0
|
64
64
|
- !ruby/object:Gem::Dependency
|
65
65
|
name: diff-lcs
|
66
66
|
requirement: !ruby/object:Gem::Requirement
|
@@ -218,9 +218,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
218
218
|
version: '0'
|
219
219
|
requirements: []
|
220
220
|
rubyforge_project:
|
221
|
-
rubygems_version: 2.6.
|
221
|
+
rubygems_version: 2.6.13
|
222
222
|
signing_key:
|
223
223
|
specification_version: 4
|
224
|
-
summary: rspec-expectations-3.
|
224
|
+
summary: rspec-expectations-3.8.0
|
225
225
|
test_files: []
|
226
|
-
has_rdoc:
|
metadata.gz.sig
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
|
2
|
-
�
|
3
|
-
|
4
|
-
/�$!>���878�8�f6���bDGȝI�9�����vZ�_ t��,(��t$�N�ޔ�.�?�24�5�FD�ǔV�O&��E��^��F�]��V(��W}�y�d(CUw�����Rr8qƤ0�vǣ2髜�:V���-p6q �h��P#��7�[�5�W͓-�yIl�ػ���'cS<Av��By;���(1��a�I�䝰εY�*����X�R}�v5ڵ�p��o3Q�u����8%:>U���Q��QLܡ���%i��D������nK���o�����@��O_@�k7x}
|
5
|
-
=
|
1
|
+
�q�/F
|
2
|
+
Q3m�_��m0y�v�y%g��yW��_Nk�e3�8r/��#�
|
3
|
+
V�����_�ێ�8����DX[��zwm�&Zg%���?�`=�5������V�h�m�R+,6�H��~c�0I�d�1v�G��h�H����\��}����hr*�N�o֓C����^�OW]v�};W�-�}>�_G�y1��<X������1�j q�;�(��Z{�ܦ��d^z��\��/q�[�� P��,�܅7�G
|