rspec-expectations 3.9.2 → 3.9.3

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: 1c3782b5fc827b30a6433002b18fb8c7f4d86a17f8cbaf2c88a6bd89425d94ee
4
- data.tar.gz: 1d687e53cb7b7b7b93849c1bc094d46c23fb11cf00aa066bf7a5a0aabcf999d3
3
+ metadata.gz: ba515bcbb264eef62d6948840e73b71ef3a68ed947d2e711df04fdf1b04fa4ec
4
+ data.tar.gz: ba8501df256831e843786ca4f78cc7825e8ad6dca125191beda504de0c1d16e7
5
5
  SHA512:
6
- metadata.gz: 5c938d05c02512b2b8494ddf429732693235147cfdd1e0c316bb33e7fe61b239db113f88927af94d6458d529ab06f1195fa40c9bf7f24e0e0ad718be6a87db20
7
- data.tar.gz: 43d0b0013d79ab9e4a5a9bcd4ebceef0b660fa1356a5ce4f77f1828d1194ee789e66ebf0cc45081045818297f408ff7c871ebcc9930822a639f8308d5f21dfb0
6
+ metadata.gz: ac2ff1267b689ba5daf08898a11ff97f1f2554db817f43135a6b1d96bcada94f03d728ddda4050158fcf8a483b8295644457aea810d18b37686d5aa253007917
7
+ data.tar.gz: 6527bed095e09131e0e8a50f12784d017953f073b4099d710df7fff638f632d03bedba40836adeba6aa33f51d9d4c501f795c364c6e1304ddc8c41225df2c18d
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -1,5 +1,18 @@
1
- ### Development
2
- [Full Changelog](http://github.com/rspec/rspec-expectations/compare/v3.9.2...3-9-maintenance)
1
+ ### 3.9.3 / 2020-10-23
2
+ [Full Changelog](http://github.com/rspec/rspec-expectations/compare/v3.9.2...v3.9.3)
3
+
4
+ Bug Fixes:
5
+
6
+ * Swap the comparison of the delta vs the expected for the `be_within` matcher allowing
7
+ more complicated oobjects to be compared providing they provide `abs` and other
8
+ comparison methods. (Kelly Stannard, #1182)
9
+ * Properly format expected in the description of the `be_within` matcher. (Jon Rowe, #1185)
10
+ * Remove warning when using keyword arguments with `be_` and `have_` matchers on 2.7.x
11
+ (Jon Rowe, #1187)
12
+ * Prevent formatting a single hash as a list of key value pairs in default failure messages
13
+ for custom matches (fixes formatting in `EnglishPhrasing#list`). (Robert Eshleman, #1193)
14
+ * Prevent errors from causing false positives when using `be <operator>` comparison, e.g.
15
+ `expect(1).not_to be < 'a'` will now correctly fail rather than pass. (Jon Rowe, #1208)
3
16
 
4
17
  ### 3.9.2 / 2020-05-08
5
18
  [Full Changelog](http://github.com/rspec/rspec-expectations/compare/v3.9.1...v3.9.2)
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # RSpec Expectations [![Build Status](https://secure.travis-ci.org/rspec/rspec-expectations.svg?branch=master)](http://travis-ci.org/rspec/rspec-expectations) [![Code Climate](https://codeclimate.com/github/rspec/rspec-expectations.svg)](https://codeclimate.com/github/rspec/rspec-expectations)
1
+ # RSpec Expectations [![Build Status](https://secure.travis-ci.org/rspec/rspec-expectations.svg?branch=main)](http://travis-ci.org/rspec/rspec-expectations) [![Code Climate](https://codeclimate.com/github/rspec/rspec-expectations.svg)](https://codeclimate.com/github/rspec/rspec-expectations)
2
2
 
3
3
  RSpec::Expectations lets you express expected outcomes on an object in an
4
4
  example.
@@ -15,12 +15,12 @@ rspec-core and rspec-mocks):
15
15
 
16
16
  gem install rspec
17
17
 
18
- Want to run against the `master` branch? You'll need to include the dependent
18
+ Want to run against the `main` branch? You'll need to include the dependent
19
19
  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 => "https://github.com/rspec/#{lib}.git", :branch => 'master'
23
+ gem lib, :git => "https://github.com/rspec/#{lib}.git", :branch => 'main'
24
24
  end
25
25
  ```
26
26
 
@@ -227,7 +227,7 @@ actual.should be > 3
227
227
  [1, 2, 3].should_not include 4
228
228
  ```
229
229
 
230
- See [detailed information on the `should` syntax and its usage.](https://github.com/rspec/rspec-expectations/blob/master/Should.md)
230
+ See [detailed information on the `should` syntax and its usage.](https://github.com/rspec/rspec-expectations/blob/main/Should.md)
231
231
 
232
232
  ## Compound Matcher Expressions
233
233
 
@@ -2,7 +2,7 @@ module RSpec
2
2
  module Expectations
3
3
  # @private
4
4
  module Version
5
- STRING = '3.9.2'
5
+ STRING = '3.9.3'
6
6
  end
7
7
  end
8
8
  end
@@ -238,7 +238,7 @@ module RSpec
238
238
  # best to find a more positive name for the negated form, such as
239
239
  # `avoid_changing` rather than `not_change`.
240
240
  #
241
- module Matchers
241
+ module Matchers # rubocop:disable Metrics/ModuleLength
242
242
  extend ::RSpec::Matchers::DSL
243
243
 
244
244
  # @!macro [attach] alias_matcher
@@ -953,14 +953,29 @@ module RSpec
953
953
  HAS_REGEX = /^(?:have_)(.*)/
954
954
  DYNAMIC_MATCHER_REGEX = Regexp.union(BE_PREDICATE_REGEX, HAS_REGEX)
955
955
 
956
- def method_missing(method, *args, &block)
957
- case method.to_s
958
- when BE_PREDICATE_REGEX
959
- BuiltIn::BePredicate.new(method, *args, &block)
960
- when HAS_REGEX
961
- BuiltIn::Has.new(method, *args, &block)
962
- else
963
- super
956
+ if RSpec::Support::RubyFeatures.kw_args_supported?
957
+ binding.eval(<<-CODE, __FILE__, __LINE__)
958
+ def method_missing(method, *args, **kwargs, &block)
959
+ case method.to_s
960
+ when BE_PREDICATE_REGEX
961
+ BuiltIn::BePredicate.new(method, *args, **kwargs, &block)
962
+ when HAS_REGEX
963
+ BuiltIn::Has.new(method, *args, **kwargs, &block)
964
+ else
965
+ super
966
+ end
967
+ end
968
+ CODE
969
+ else
970
+ def method_missing(method, *args, &block)
971
+ case method.to_s
972
+ when BE_PREDICATE_REGEX
973
+ BuiltIn::BePredicate.new(method, *args, &block)
974
+ when HAS_REGEX
975
+ BuiltIn::Has.new(method, *args, &block)
976
+ else
977
+ super
978
+ end
964
979
  end
965
980
  end
966
981
 
@@ -143,8 +143,13 @@ module RSpec
143
143
  end
144
144
 
145
145
  def matches?(actual)
146
- @actual = actual
147
- @actual.__send__ @operator, @expected
146
+ perform_match(actual)
147
+ rescue ArgumentError, NoMethodError
148
+ false
149
+ end
150
+
151
+ def does_not_match?(actual)
152
+ !perform_match(actual)
148
153
  rescue ArgumentError, NoMethodError
149
154
  false
150
155
  end
@@ -173,6 +178,13 @@ module RSpec
173
178
  def description
174
179
  "be #{@operator} #{expected_to_sentence}#{args_to_sentence}"
175
180
  end
181
+
182
+ private
183
+
184
+ def perform_match(actual)
185
+ @actual = actual
186
+ @actual.__send__ @operator, @expected
187
+ end
176
188
  end
177
189
 
178
190
  # @api private
@@ -181,10 +193,21 @@ module RSpec
181
193
  class BePredicate < BaseMatcher
182
194
  include BeHelpers
183
195
 
184
- def initialize(*args, &block)
185
- @expected = parse_expected(args.shift)
186
- @args = args
187
- @block = block
196
+ if RSpec::Support::RubyFeatures.kw_args_supported?
197
+ binding.eval(<<-CODE, __FILE__, __LINE__)
198
+ def initialize(*args, **kwargs, &block)
199
+ @expected = parse_expected(args.shift)
200
+ @args = args
201
+ @kwargs = kwargs
202
+ @block = block
203
+ end
204
+ CODE
205
+ else
206
+ def initialize(*args, &block)
207
+ @expected = parse_expected(args.shift)
208
+ @args = args
209
+ @block = block
210
+ end
188
211
  end
189
212
 
190
213
  def matches?(actual, &block)
@@ -236,9 +259,22 @@ module RSpec
236
259
  end
237
260
  end
238
261
 
239
- def predicate_matches?
240
- method_name = actual.respond_to?(predicate) ? predicate : present_tense_predicate
241
- @predicate_matches = actual.__send__(method_name, *@args, &@block)
262
+ if RSpec::Support::RubyFeatures.kw_args_supported?
263
+ binding.eval(<<-CODE, __FILE__, __LINE__)
264
+ def predicate_matches?
265
+ method_name = actual.respond_to?(predicate) ? predicate : present_tense_predicate
266
+ if @kwargs.empty?
267
+ @predicate_matches = actual.__send__(method_name, *@args, &@block)
268
+ else
269
+ @predicate_matches = actual.__send__(method_name, *@args, **@kwargs, &@block)
270
+ end
271
+ end
272
+ CODE
273
+ else
274
+ def predicate_matches?
275
+ method_name = actual.respond_to?(predicate) ? predicate : present_tense_predicate
276
+ @predicate_matches = actual.__send__(method_name, *@args, &@block)
277
+ end
242
278
  end
243
279
 
244
280
  def predicate
@@ -23,7 +23,7 @@ module RSpec
23
23
  # a percent comparison.
24
24
  def percent_of(expected)
25
25
  @expected = expected
26
- @tolerance = @delta * @expected.abs / 100.0
26
+ @tolerance = @expected.abs * @delta / 100.0
27
27
  @unit = '%'
28
28
  self
29
29
  end
@@ -50,7 +50,7 @@ module RSpec
50
50
  # @api private
51
51
  # @return [String]
52
52
  def description
53
- "be within #{@delta}#{@unit} of #{@expected}"
53
+ "be within #{@delta}#{@unit} of #{expected_formatted}"
54
54
  end
55
55
 
56
56
  private
@@ -5,8 +5,16 @@ module RSpec
5
5
  # Provides the implementation for `has_<predicate>`.
6
6
  # Not intended to be instantiated directly.
7
7
  class Has < BaseMatcher
8
- def initialize(method_name, *args, &block)
9
- @method_name, @args, @block = method_name, args, block
8
+ if RSpec::Support::RubyFeatures.kw_args_supported?
9
+ binding.eval(<<-CODE, __FILE__, __LINE__)
10
+ def initialize(method_name, *args, **kwargs, &block)
11
+ @method_name, @args, @kwargs, @block = method_name, args, kwargs, block
12
+ end
13
+ CODE
14
+ else
15
+ def initialize(method_name, *args, &block)
16
+ @method_name, @args, @block = method_name, args, block
17
+ end
10
18
  end
11
19
 
12
20
  # @private
@@ -64,8 +72,20 @@ module RSpec
64
72
  @actual.respond_to? predicate
65
73
  end
66
74
 
67
- def predicate_matches?
68
- @actual.__send__(predicate, *@args, &@block)
75
+ if RSpec::Support::RubyFeatures.kw_args_supported?
76
+ binding.eval(<<-CODE, __FILE__, __LINE__)
77
+ def predicate_matches?
78
+ if @kwargs.empty?
79
+ @actual.__send__(predicate, *@args, &@block)
80
+ else
81
+ @actual.__send__(predicate, *@args, **@kwargs, &@block)
82
+ end
83
+ end
84
+ CODE
85
+ else
86
+ def predicate_matches?
87
+ @actual.__send__(predicate, *@args, &@block)
88
+ end
69
89
  end
70
90
 
71
91
  def predicate
@@ -24,7 +24,7 @@ module RSpec
24
24
  # list([]) #=> ""
25
25
  #
26
26
  def self.list(obj)
27
- return " #{RSpec::Support::ObjectFormatter.format(obj)}" if !obj || Struct === obj
27
+ return " #{RSpec::Support::ObjectFormatter.format(obj)}" if !obj || Struct === obj || Hash === obj
28
28
  items = Array(obj).map { |w| RSpec::Support::ObjectFormatter.format(w) }
29
29
  case items.length
30
30
  when 0
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-expectations
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.9.2
4
+ version: 3.9.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steven Baker
8
8
  - David Chelimsky
9
9
  - Myron Marston
10
- autorequire:
10
+ autorequire:
11
11
  bindir: bin
12
12
  cert_chain:
13
13
  - |
@@ -45,7 +45,7 @@ cert_chain:
45
45
  ZsVDj6a7lH3cNqtWXZxrb2wO38qV5AkYj8SQK7Hj3/Yui9myUX3crr+PdetazSqQ
46
46
  F3MdtaDehhjC
47
47
  -----END CERTIFICATE-----
48
- date: 2020-05-08 00:00:00.000000000 Z
48
+ date: 2020-10-23 00:00:00.000000000 Z
49
49
  dependencies:
50
50
  - !ruby/object:Gem::Dependency
51
51
  name: rspec-support
@@ -202,11 +202,11 @@ licenses:
202
202
  - MIT
203
203
  metadata:
204
204
  bug_tracker_uri: https://github.com/rspec/rspec-expectations/issues
205
- changelog_uri: https://github.com/rspec/rspec-expectations/blob/v3.9.2/Changelog.md
205
+ changelog_uri: https://github.com/rspec/rspec-expectations/blob/v3.9.3/Changelog.md
206
206
  documentation_uri: https://rspec.info/documentation/
207
207
  mailing_list_uri: https://groups.google.com/forum/#!forum/rspec
208
208
  source_code_uri: https://github.com/rspec/rspec-expectations
209
- post_install_message:
209
+ post_install_message:
210
210
  rdoc_options:
211
211
  - "--charset=UTF-8"
212
212
  require_paths:
@@ -222,8 +222,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
222
222
  - !ruby/object:Gem::Version
223
223
  version: '0'
224
224
  requirements: []
225
- rubygems_version: 3.1.2
226
- signing_key:
225
+ rubygems_version: 3.1.3
226
+ signing_key:
227
227
  specification_version: 4
228
- summary: rspec-expectations-3.9.2
228
+ summary: rspec-expectations-3.9.3
229
229
  test_files: []
metadata.gz.sig CHANGED
Binary file