rspec-mocks 3.11.0 → 3.11.2

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: 12ce7d4b5f6accc3fb2b6af82646843de8ffd500352d4ca5367985e28fec0805
4
- data.tar.gz: 9643bc17b54bd21725aa39946eacda8207e327bdb592a9e0be821ee42c59bddb
3
+ metadata.gz: 4c3dc1584caef34a4124fa5ca6add46de607d0a74718463309417093bd2c1291
4
+ data.tar.gz: 63740bfcd05bc3d8b3005d7c1856c22f50adadbcb8ed02c92287669068474407
5
5
  SHA512:
6
- metadata.gz: 1a1fc3ad0ca28d5371d74985f236f9c222fc310743062a5e8746c5f995803bfd5b63de26b673b94460c6ec47eedfbb150425fe3bb59f0e5bdaf4d639ffe0bc0d
7
- data.tar.gz: 352761f69232f8b5afb6ac918bb596c5961017f622f2aec36052f5f69c426449a51ef2af26394951cad5c7706a165446a9d80d6e01adafeb87e4f6e0804a46af
6
+ metadata.gz: 730afc91e3183e562e0c637dde6913e3fc54b689d74a330fb9dbed0348a9d1faa77df5bf1b3afb51aecc456e9f9cf967d8e90f67e277c55ca4605bf57ededfa0
7
+ data.tar.gz: 0aa402d85c334925fe2f2202c0843f74ca4c9a0ffd08c295838e3bdf9ef12f1c33da4ac9a2b55ae60584952e9e85b63a2f723ee86e5003a291f35d43532bc375
checksums.yaml.gz.sig CHANGED
Binary file
data/Changelog.md CHANGED
@@ -1,5 +1,25 @@
1
1
  ### Development
2
- [Full Changelog](http://github.com/rspec/rspec-mocks/compare/v3.11.0...3-11-maintenance)
2
+ [Full Changelog](http://github.com/rspec/rspec-mocks/compare/v3.11.2...3-11-maintenance)
3
+
4
+ ### 3.11.2 / 2022-10-25
5
+ [Full Changelog](http://github.com/rspec/rspec-mocks/compare/v3.11.1...3.11.2)
6
+
7
+ Bug Fixes:
8
+
9
+ * Use the original implementation of `Class.new` to detect overridden definitions
10
+ of `new` rather than the owner, fixing detection of "double aliased" methods
11
+ in Ruby 3 and above. (Benoit Daloze, #1470, #1476)
12
+ * Support keyword argument semantics when constraining argument expectations using
13
+ `with` on Ruby 3.0+ with `instance_double` (Andrii Malyshko, #1473)
14
+
15
+ ### 3.11.1 / 2022-03-31
16
+ [Full Changelog](http://github.com/rspec/rspec-mocks/compare/v3.11.0...v3.11.1)
17
+
18
+ Bug Fixes:
19
+
20
+ * Add extra `ruby2_keywords` calls to properly designate methods using
21
+ `*args` to pass keyword around, fixes an issue with TruffleRuby.
22
+ (Benoit Daloze, #1464)
3
23
 
4
24
  ### 3.11.0 / 2022-02-09
5
25
  [Full Changelog](http://github.com/rspec/rspec-mocks/compare/v3.10.3...v3.11.0)
@@ -46,7 +46,7 @@ module RSpec
46
46
  @expected_args = expected_args
47
47
  ensure_expected_args_valid!
48
48
  end
49
- ruby2_keywords :initialize if Module.private_method_defined?(:ruby2_keywords)
49
+ ruby2_keywords :initialize if respond_to?(:ruby2_keywords, true)
50
50
 
51
51
  # @api public
52
52
  # @param [Array] actual_args
@@ -71,6 +71,7 @@ module RSpec
71
71
 
72
72
  Support::FuzzyMatcher.values_match?(expected_args, actual_args)
73
73
  end
74
+ ruby2_keywords :args_match? if respond_to?(:ruby2_keywords, true)
74
75
 
75
76
  # @private
76
77
  # Resolves abstract arg placeholders like `no_args` and `any_args` into
@@ -62,7 +62,7 @@ module RSpec
62
62
  @recorded_customizations << ExpectationCustomization.new(method, args, block)
63
63
  self
64
64
  end
65
- ruby2_keywords(method) if Module.private_method_defined?(:ruby2_keywords)
65
+ ruby2_keywords(method) if respond_to?(:ruby2_keywords, true)
66
66
  end
67
67
 
68
68
  private
@@ -139,9 +139,12 @@ module RSpec
139
139
  # counter.increment
140
140
  # expect(counter.count).to eq(original_count + 1)
141
141
  def and_call_original
142
- wrap_original(__method__) do |original, *args, &block|
143
- original.call(*args, &block)
142
+ block = lambda do |original, *args, &b|
143
+ original.call(*args, &b)
144
144
  end
145
+ block = block.ruby2_keywords if block.respond_to?(:ruby2_keywords)
146
+
147
+ wrap_original(__method__, &block)
145
148
  end
146
149
 
147
150
  # Decorates the stubbed method with the supplied block. The original
@@ -364,7 +367,7 @@ module RSpec
364
367
  @argument_list_matcher = ArgumentListMatcher.new(*args)
365
368
  self
366
369
  end
367
- ruby2_keywords(:with) if Module.private_method_defined?(:ruby2_keywords)
370
+ ruby2_keywords(:with) if respond_to?(:ruby2_keywords, true)
368
371
 
369
372
  # Expect messages to be received in a specific order.
370
373
  #
@@ -403,7 +406,6 @@ module RSpec
403
406
  # some collaborators it delegates to for this stuff but for now this was
404
407
  # the simplest way to split the public from private stuff to make it
405
408
  # easier to publish the docs for the APIs we want published.
406
- # rubocop:disable Metrics/ModuleLength
407
409
  module ImplementationDetails
408
410
  attr_accessor :error_generator, :implementation
409
411
  attr_reader :message
@@ -461,18 +463,22 @@ module RSpec
461
463
  def matches?(message, *args)
462
464
  @message == message && @argument_list_matcher.args_match?(*args)
463
465
  end
466
+ ruby2_keywords :matches? if respond_to?(:ruby2_keywords, true)
464
467
 
465
468
  def safe_invoke(parent_stub, *args, &block)
466
469
  invoke_incrementing_actual_calls_by(1, false, parent_stub, *args, &block)
467
470
  end
471
+ ruby2_keywords :safe_invoke if respond_to?(:ruby2_keywords, true)
468
472
 
469
473
  def invoke(parent_stub, *args, &block)
470
474
  invoke_incrementing_actual_calls_by(1, true, parent_stub, *args, &block)
471
475
  end
476
+ ruby2_keywords :invoke if respond_to?(:ruby2_keywords, true)
472
477
 
473
478
  def invoke_without_incrementing_received_count(parent_stub, *args, &block)
474
479
  invoke_incrementing_actual_calls_by(0, true, parent_stub, *args, &block)
475
480
  end
481
+ ruby2_keywords :invoke_without_incrementing_received_count if respond_to?(:ruby2_keywords, true)
476
482
 
477
483
  def negative?
478
484
  @expected_received_count == 0 && !@at_least
@@ -621,6 +627,7 @@ module RSpec
621
627
  @actual_received_count += increment
622
628
  end
623
629
  end
630
+ ruby2_keywords :invoke_incrementing_actual_calls_by if respond_to?(:ruby2_keywords, true)
624
631
 
625
632
  def has_been_invoked?
626
633
  @actual_received_count > 0
@@ -678,7 +685,6 @@ module RSpec
678
685
  nil
679
686
  end
680
687
  end
681
- # rubocop:enable Metrics/ModuleLength
682
688
 
683
689
  include ImplementationDetails
684
690
  end
@@ -755,6 +761,7 @@ module RSpec
755
761
  action.call(*args, &block)
756
762
  end.last
757
763
  end
764
+ ruby2_keywords :call if respond_to?(:ruby2_keywords, true)
758
765
 
759
766
  def present?
760
767
  actions.any?
@@ -800,6 +807,7 @@ module RSpec
800
807
  def call(*args, &block)
801
808
  @block.call(@method, *args, &block)
802
809
  end
810
+ ruby2_keywords :call if respond_to?(:ruby2_keywords, true)
803
811
 
804
812
  private
805
813
 
@@ -63,6 +63,8 @@ module RSpec
63
63
  define_method(method_name) do |*args, &block|
64
64
  method_double.proxy_method_invoked(self, *args, &block)
65
65
  end
66
+ # This can't be `if respond_to?(:ruby2_keywords, true)`,
67
+ # see https://github.com/rspec/rspec-mocks/pull/1385#issuecomment-755340298
66
68
  ruby2_keywords(method_name) if Module.private_method_defined?(:ruby2_keywords)
67
69
  __send__(visibility, method_name)
68
70
  end
@@ -77,6 +79,7 @@ module RSpec
77
79
  def proxy_method_invoked(_obj, *args, &block)
78
80
  @proxy.message_received method_name, *args, &block
79
81
  end
82
+ ruby2_keywords :proxy_method_invoked if respond_to?(:ruby2_keywords, true)
80
83
 
81
84
  # @private
82
85
  def restore_original_method
@@ -185,11 +185,23 @@ module RSpec
185
185
  def self.applies_to?(method_name)
186
186
  return false unless method_name == :new
187
187
  klass = yield
188
- return false unless klass.respond_to?(:new, true)
188
+ return false unless ::Class === klass && klass.respond_to?(:new, true)
189
189
 
190
190
  # We only want to apply our special logic to normal `new` methods.
191
191
  # Methods that the user has monkeyed with should be left as-is.
192
- ::RSpec::Support.method_handle_for(klass, :new).owner == ::Class
192
+ uses_class_new?(klass)
193
+ end
194
+
195
+ if RUBY_VERSION.to_i >= 3
196
+ CLASS_NEW = ::Class.instance_method(:new)
197
+
198
+ def self.uses_class_new?(klass)
199
+ ::RSpec::Support.method_handle_for(klass, :new) == CLASS_NEW.bind(klass)
200
+ end
201
+ else # Ruby 2's Method#== is too strict
202
+ def self.uses_class_new?(klass)
203
+ ::RSpec::Support.method_handle_for(klass, :new).owner == ::Class
204
+ end
193
205
  end
194
206
 
195
207
  def with_signature
@@ -230,6 +230,7 @@ module RSpec
230
230
  @object.__send__(:method_missing, message, *args, &block)
231
231
  end
232
232
  end
233
+ ruby2_keywords :message_received if respond_to?(:ruby2_keywords, true)
233
234
 
234
235
  # @private
235
236
  def raise_unexpected_message_error(method_name, args)
@@ -279,12 +280,14 @@ module RSpec
279
280
  expectation.matches?(method_name, *args)
280
281
  end
281
282
  end
283
+ ruby2_keywords :find_matching_expectation if respond_to?(:ruby2_keywords, true)
282
284
 
283
285
  def find_almost_matching_expectation(method_name, *args)
284
286
  find_best_matching_expectation_for(method_name) do |expectation|
285
287
  expectation.matches_name_but_not_args(method_name, *args)
286
288
  end
287
289
  end
290
+ ruby2_keywords :find_almost_matching_expectation if respond_to?(:ruby2_keywords, true)
288
291
 
289
292
  def find_best_matching_expectation_for(method_name)
290
293
  first_match = nil
@@ -301,10 +304,12 @@ module RSpec
301
304
  def find_matching_method_stub(method_name, *args)
302
305
  method_double_for(method_name).stubs.find { |stub| stub.matches?(method_name, *args) }
303
306
  end
307
+ ruby2_keywords :find_matching_method_stub if respond_to?(:ruby2_keywords, true)
304
308
 
305
309
  def find_almost_matching_stub(method_name, *args)
306
310
  method_double_for(method_name).stubs.find { |stub| stub.matches_name_but_not_args(method_name, *args) }
307
311
  end
312
+ ruby2_keywords :find_almost_matching_stub if respond_to?(:ruby2_keywords, true)
308
313
  end
309
314
 
310
315
  # @private
@@ -360,6 +365,7 @@ module RSpec
360
365
  end
361
366
  super
362
367
  end
368
+ ruby2_keywords :message_received if respond_to?(:ruby2_keywords, true)
363
369
 
364
370
  private
365
371
 
@@ -31,6 +31,7 @@ module RSpec
31
31
  end
32
32
  end
33
33
  end
34
+ ruby2_keywords(:with) if respond_to?(:ruby2_keywords, true)
34
35
 
35
36
  private
36
37
 
@@ -3,7 +3,7 @@ module RSpec
3
3
  # Version information for RSpec mocks.
4
4
  module Version
5
5
  # Version of RSpec mocks currently in use in SemVer format.
6
- STRING = '3.11.0'
6
+ STRING = '3.11.2'
7
7
  end
8
8
  end
9
9
  end
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.11.0
4
+ version: 3.11.2
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: 2022-02-09 00:00:00.000000000 Z
48
+ date: 2022-10-25 00:00:00.000000000 Z
49
49
  dependencies:
50
50
  - !ruby/object:Gem::Dependency
51
51
  name: rspec-support
@@ -194,7 +194,7 @@ licenses:
194
194
  - MIT
195
195
  metadata:
196
196
  bug_tracker_uri: https://github.com/rspec/rspec-mocks/issues
197
- changelog_uri: https://github.com/rspec/rspec-mocks/blob/v3.11.0/Changelog.md
197
+ changelog_uri: https://github.com/rspec/rspec-mocks/blob/v3.11.2/Changelog.md
198
198
  documentation_uri: https://rspec.info/documentation/
199
199
  mailing_list_uri: https://groups.google.com/forum/#!forum/rspec
200
200
  source_code_uri: https://github.com/rspec/rspec-mocks
@@ -214,8 +214,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
214
214
  - !ruby/object:Gem::Version
215
215
  version: '0'
216
216
  requirements: []
217
- rubygems_version: 3.3.3
217
+ rubygems_version: 3.2.3
218
218
  signing_key:
219
219
  specification_version: 4
220
- summary: rspec-mocks-3.11.0
220
+ summary: rspec-mocks-3.11.2
221
221
  test_files: []
metadata.gz.sig CHANGED
Binary file