rspec-mocks 3.12.6 → 3.13.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/Changelog.md +15 -1
- data/README.md +2 -0
- data/lib/rspec/mocks/any_instance/recorder.rb +11 -9
- data/lib/rspec/mocks/argument_matchers.rb +51 -7
- data/lib/rspec/mocks/version.rb +1 -1
- data.tar.gz.sig +0 -0
- metadata +17 -11
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 71211650b0472cd386136d98bc36d04f66c9944aa4ef5da7bf72541c6847b0d3
|
4
|
+
data.tar.gz: e0fe8ffaa23df6885b6be3b11a1ed53a65ab750c7e969d0477a3a0af6ef343a0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3d389141c0abec2c4bae1008f96b34978b6d576d2ed229f96ca1eff3af1bf47a78d95d37f30630e7dbd0346483b140982d2a3aa2b80663058e61b7ba4fe4fec5
|
7
|
+
data.tar.gz: 21c8cab0cf3ec3ea8dcc485dcd36301bea5dba1f4828c0f924d0e32f028870f3b3e793adb4553dc09931ec33bd0990189c5c36b24bb7cb166fd0635bdff4b2e7
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/Changelog.md
CHANGED
@@ -1,5 +1,19 @@
|
|
1
1
|
### Development
|
2
|
-
[Full Changelog](http://github.com/rspec/rspec-mocks/compare/v3.
|
2
|
+
[Full Changelog](http://github.com/rspec/rspec-mocks/compare/v3.13.0...main)
|
3
|
+
|
4
|
+
### 3.13.0 / 2024-02-04
|
5
|
+
[Full Changelog](http://github.com/rspec/rspec-mocks/compare/v3.12.7...v3.13.0)
|
6
|
+
|
7
|
+
Enhancements:
|
8
|
+
|
9
|
+
* Add an `array_excluding` matcher for arguments. (Zane Wolfgang Pickett, #1528)
|
10
|
+
|
11
|
+
### 3.12.7 / 2024-02-04
|
12
|
+
[Full Changelog](http://github.com/rspec/rspec-mocks/compare/v3.12.6...v3.12.7)
|
13
|
+
|
14
|
+
Bug Fixes:
|
15
|
+
|
16
|
+
* Reduce allocations from "any_instance" style mocks. (Carlos Palhares, #1479)
|
3
17
|
|
4
18
|
### 3.12.6 / 2023-07-11
|
5
19
|
[Full Changelog](http://github.com/rspec/rspec-mocks/compare/v3.12.5...v3.12.6)
|
data/README.md
CHANGED
@@ -278,6 +278,8 @@ expect(double).to receive(:msg).with(1, duck_type(:abs, :div), "b") #2nd argumen
|
|
278
278
|
expect(double).to receive(:msg).with(hash_including(:a => 5)) # first arg is a hash with a: 5 as one of the key-values
|
279
279
|
expect(double).to receive(:msg).with(array_including(5)) # first arg is an array with 5 as one of the key-values
|
280
280
|
expect(double).to receive(:msg).with(hash_excluding(:a => 5)) # first arg is a hash without a: 5 as one of the key-values
|
281
|
+
expect(double).to receive(:msg).with(start_with('a')) # any matcher, custom or from rspec-expectations
|
282
|
+
expect(double).to receive(:msg).with(satisfy { |data| data.dig(:a, :b, :c) == 5 }) # assert anything you want
|
281
283
|
```
|
282
284
|
|
283
285
|
## Receive Counts
|
@@ -156,21 +156,23 @@ module RSpec
|
|
156
156
|
|
157
157
|
private
|
158
158
|
|
159
|
-
def ancestor_is_an_observer?(method_name)
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
end
|
165
|
-
end
|
159
|
+
def ancestor_is_an_observer?(ancestor, method_name)
|
160
|
+
return if ancestor == @klass
|
161
|
+
|
162
|
+
::RSpec::Mocks.space.
|
163
|
+
any_instance_recorder_for(ancestor).already_observing?(method_name)
|
166
164
|
end
|
167
165
|
|
168
166
|
def super_class_observers_for(method_name)
|
169
|
-
@klass.ancestors.select
|
167
|
+
@klass.ancestors.select do |ancestor|
|
168
|
+
ancestor_is_an_observer?(ancestor, method_name)
|
169
|
+
end
|
170
170
|
end
|
171
171
|
|
172
172
|
def super_class_observing?(method_name)
|
173
|
-
@klass.ancestors.any?
|
173
|
+
@klass.ancestors.any? do |ancestor|
|
174
|
+
ancestor_is_an_observer?(ancestor, method_name)
|
175
|
+
end
|
174
176
|
end
|
175
177
|
|
176
178
|
def normalize_chain(*args)
|
@@ -71,6 +71,16 @@ module RSpec
|
|
71
71
|
HashIncludingMatcher.new(ArgumentMatchers.anythingize_lonely_keys(*args))
|
72
72
|
end
|
73
73
|
|
74
|
+
# Matches a hash that doesn't include the specified key(s) or key/value.
|
75
|
+
#
|
76
|
+
# @example
|
77
|
+
# expect(object).to receive(:message).with(hash_excluding(:key => val))
|
78
|
+
# expect(object).to receive(:message).with(hash_excluding(:key))
|
79
|
+
# expect(object).to receive(:message).with(hash_excluding(:key, :key2 => :val2))
|
80
|
+
def hash_excluding(*args)
|
81
|
+
HashExcludingMatcher.new(ArgumentMatchers.anythingize_lonely_keys(*args))
|
82
|
+
end
|
83
|
+
|
74
84
|
# Matches an array that includes the specified items at least once.
|
75
85
|
# Ignores duplicates and additional values
|
76
86
|
#
|
@@ -82,14 +92,14 @@ module RSpec
|
|
82
92
|
ArrayIncludingMatcher.new(actually_an_array)
|
83
93
|
end
|
84
94
|
|
85
|
-
# Matches
|
95
|
+
# Matches an array that excludes the specified items.
|
86
96
|
#
|
87
97
|
# @example
|
88
|
-
# expect(object).to receive(:message).with(
|
89
|
-
# expect(object).to receive(:message).with(
|
90
|
-
|
91
|
-
|
92
|
-
|
98
|
+
# expect(object).to receive(:message).with(array_excluding(1,2,3))
|
99
|
+
# expect(object).to receive(:message).with(array_excluding([1,2,3]))
|
100
|
+
def array_excluding(*args)
|
101
|
+
actually_an_array = Array === args.first && args.count == 1 ? args.first : args
|
102
|
+
ArrayExcludingMatcher.new(actually_an_array)
|
93
103
|
end
|
94
104
|
|
95
105
|
alias_method :hash_not_including, :hash_excluding
|
@@ -236,6 +246,8 @@ module RSpec
|
|
236
246
|
|
237
247
|
def ===(actual)
|
238
248
|
actual = actual.uniq
|
249
|
+
return true if (actual & @expected).count >= @expected.count
|
250
|
+
|
239
251
|
@expected.uniq.all? do |expected_element|
|
240
252
|
actual.any? do |actual_element|
|
241
253
|
RSpec::Support::FuzzyMatcher.values_match?(expected_element, actual_element)
|
@@ -258,6 +270,38 @@ module RSpec
|
|
258
270
|
end
|
259
271
|
end
|
260
272
|
|
273
|
+
# @private
|
274
|
+
class ArrayExcludingMatcher
|
275
|
+
def initialize(unexpected)
|
276
|
+
@unexpected = unexpected.uniq
|
277
|
+
end
|
278
|
+
|
279
|
+
def ===(actual)
|
280
|
+
actual = actual.uniq
|
281
|
+
return false unless (actual & @unexpected).empty?
|
282
|
+
|
283
|
+
actual.none? do |actual_element|
|
284
|
+
@unexpected.any? do |unexpected_element|
|
285
|
+
RSpec::Support::FuzzyMatcher.values_match?(unexpected_element, actual_element)
|
286
|
+
end
|
287
|
+
end
|
288
|
+
rescue NoMethodError
|
289
|
+
false
|
290
|
+
end
|
291
|
+
|
292
|
+
def description
|
293
|
+
"array_excluding(#{formatted_unexpected_values})"
|
294
|
+
end
|
295
|
+
|
296
|
+
private
|
297
|
+
|
298
|
+
def formatted_unexpected_values
|
299
|
+
@unexpected.map do |x|
|
300
|
+
RSpec::Support.rspec_description_for_object(x)
|
301
|
+
end.join(", ")
|
302
|
+
end
|
303
|
+
end
|
304
|
+
|
261
305
|
# @private
|
262
306
|
class DuckTypeMatcher
|
263
307
|
def initialize(*methods_to_respond_to)
|
@@ -312,7 +356,7 @@ module RSpec
|
|
312
356
|
begin
|
313
357
|
object.class.name.include?(matcher_namespace)
|
314
358
|
rescue NoMethodError
|
315
|
-
# Some objects, like BasicObject, don't
|
359
|
+
# Some objects, like BasicObject, don't implement standard
|
316
360
|
# reflection methods.
|
317
361
|
false
|
318
362
|
end
|
data/lib/rspec/mocks/version.rb
CHANGED
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec-mocks
|
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
|
@@ -113,16 +113,22 @@ dependencies:
|
|
113
113
|
name: aruba
|
114
114
|
requirement: !ruby/object:Gem::Requirement
|
115
115
|
requirements:
|
116
|
-
- - "
|
116
|
+
- - ">="
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: 1.1.0
|
119
|
+
- - "<"
|
117
120
|
- !ruby/object:Gem::Version
|
118
|
-
version:
|
121
|
+
version: 3.0.0
|
119
122
|
type: :development
|
120
123
|
prerelease: false
|
121
124
|
version_requirements: !ruby/object:Gem::Requirement
|
122
125
|
requirements:
|
123
|
-
- - "
|
126
|
+
- - ">="
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
version: 1.1.0
|
129
|
+
- - "<"
|
124
130
|
- !ruby/object:Gem::Version
|
125
|
-
version:
|
131
|
+
version: 3.0.0
|
126
132
|
- !ruby/object:Gem::Dependency
|
127
133
|
name: minitest
|
128
134
|
requirement: !ruby/object:Gem::Requirement
|
@@ -194,7 +200,7 @@ licenses:
|
|
194
200
|
- MIT
|
195
201
|
metadata:
|
196
202
|
bug_tracker_uri: https://github.com/rspec/rspec-mocks/issues
|
197
|
-
changelog_uri: https://github.com/rspec/rspec-mocks/blob/v3.
|
203
|
+
changelog_uri: https://github.com/rspec/rspec-mocks/blob/v3.13.0/Changelog.md
|
198
204
|
documentation_uri: https://rspec.info/documentation/
|
199
205
|
mailing_list_uri: https://groups.google.com/forum/#!forum/rspec
|
200
206
|
source_code_uri: https://github.com/rspec/rspec-mocks
|
@@ -214,8 +220,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
214
220
|
- !ruby/object:Gem::Version
|
215
221
|
version: '0'
|
216
222
|
requirements: []
|
217
|
-
rubygems_version: 3.
|
223
|
+
rubygems_version: 3.1.6
|
218
224
|
signing_key:
|
219
225
|
specification_version: 4
|
220
|
-
summary: rspec-mocks-3.
|
226
|
+
summary: rspec-mocks-3.13.0
|
221
227
|
test_files: []
|
metadata.gz.sig
CHANGED
Binary file
|