rspec-expectations 3.9.2 → 3.9.3

Sign up to get free protection for your applications and to get access to all the features.
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