rspec-core 3.8.0 → 3.8.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
- SHA1:
3
- metadata.gz: 01f0ed2875b8c4e0801d2857936e4a4116ceb309
4
- data.tar.gz: 58b9a780de52779ef48a2c510d99c14dd7a22f1d
2
+ SHA256:
3
+ metadata.gz: f10137b78862f926840a5956452d1def7be1715745bb73edab35b73af27cd801
4
+ data.tar.gz: 7d2c59eea23bd759487efb177c7e9de131a416d832ee6467b4849813d759832c
5
5
  SHA512:
6
- metadata.gz: dc81061f5a9badff82a346285c6571447b9884906540c0502aeec96c1d100d4c764e2422f87dadd46148a8db96926b9c1a5e5d57a72adda28d6f05ddceae65e9
7
- data.tar.gz: 940193670454593373c80e55c407e31a70b3eb8f9579b108663ec9234e2025149a93aed2d8aec8e2e7eeffd124853bf1a5a068d2a79e4bbcaed551b769d485fd
6
+ metadata.gz: a4344a9bdf65524dc82da9368cc8d844ed1da304aa139f2a95d5a6f1c177534d95ebbf7ecd3a488c2fa65221706cf0f4afdfbfdc3d0b6846f18ffaff1b9cda17
7
+ data.tar.gz: 063aee16e467179dd13d1f94a98b57fbc135d93ab9b46cf0d860903ca8a5ce130579830e6f561b288a78f642da976ac56be5ccf3ec4753d8754e2d508e650cb0
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -1,3 +1,25 @@
1
+ ### 3.8.2 / 2019-06-29
2
+ [Full Changelog](http://github.com/rspec/rspec-core/compare/v3.8.1...v3.8.2)
3
+
4
+ Bug Fixes:
5
+
6
+ * Fix `config.define_derived_metadata` so that cascades are not triggered
7
+ until metadata has been assigned to the example or example group
8
+ (Myron Marston, #2635).
9
+
10
+ ### 3.8.1 / 2019-06-13
11
+ [Full Changelog](http://github.com/rspec/rspec-core/compare/v3.8.0...3.8.1)
12
+
13
+ Bug Fixes:
14
+
15
+ * Handle RSpec description(s) with japanese chars in CP932 encoded files.
16
+ (Benoit Tigeot, #2575)
17
+ * When defining `let` methods that overwrite an existing method, prevent
18
+ a warning being issued by removing the old definition. (Jon Rowe, #2593)
19
+ * Prevent warning on Ruby 2.6.0-rc1 (Keiji Yoshimi, #2582)
20
+ * Fix `config.define_derived_metadata` so that it supports cascades.
21
+ (Myron Marston, #2630).
22
+
1
23
  ### 3.8.0 / 2018-08-04
2
24
  [Full Changelog](http://github.com/rspec/rspec-core/compare/v3.7.1...v3.8.0)
3
25
 
data/README.md CHANGED
@@ -19,20 +19,6 @@ RSpec repos as well. Add the following to your `Gemfile`:
19
19
  end
20
20
  ```
21
21
 
22
- ## Contributing
23
-
24
- Once you've set up the environment, you'll need to cd into the working
25
- directory of whichever repo you want to work in. From there you can run the
26
- specs and cucumber features, and make patches.
27
-
28
- NOTE: You do not need to use rspec-dev to work on a specific RSpec repo. You
29
- can treat each RSpec repo as an independent project.
30
-
31
- * [Build details](BUILD_DETAIL.md)
32
- * [Code of Conduct](CODE_OF_CONDUCT.md)
33
- * [Detailed contributing guide](CONTRIBUTING.md)
34
- * [Development setup guide](DEVELOPMENT.md)
35
-
36
22
  ## Basic Structure
37
23
 
38
24
  RSpec uses the words "describe" and "it" so we can express concepts like a conversation:
@@ -376,6 +362,20 @@ Finished in 0.000379 seconds
376
362
  1 example, 0 failures
377
363
  ```
378
364
 
365
+ ## Contributing
366
+
367
+ Once you've set up the environment, you'll need to cd into the working
368
+ directory of whichever repo you want to work in. From there you can run the
369
+ specs and cucumber features, and make patches.
370
+
371
+ NOTE: You do not need to use rspec-dev to work on a specific RSpec repo. You
372
+ can treat each RSpec repo as an independent project.
373
+
374
+ * [Build details](BUILD_DETAIL.md)
375
+ * [Code of Conduct](CODE_OF_CONDUCT.md)
376
+ * [Detailed contributing guide](CONTRIBUTING.md)
377
+ * [Development setup guide](DEVELOPMENT.md)
378
+
379
379
  ## Also see
380
380
 
381
381
  * [https://github.com/rspec/rspec](https://github.com/rspec/rspec)
@@ -1855,9 +1855,28 @@ module RSpec
1855
1855
 
1856
1856
  # @private
1857
1857
  def apply_derived_metadata_to(metadata)
1858
- @derived_metadata_blocks.items_for(metadata).each do |block|
1859
- block.call(metadata)
1858
+ already_run_blocks = Set.new
1859
+
1860
+ # We loop and attempt to re-apply metadata blocks to support cascades
1861
+ # (e.g. where a derived bit of metadata triggers the application of
1862
+ # another piece of derived metadata, etc)
1863
+ #
1864
+ # We limit our looping to 200 times as a way to detect infinitely recursing derived metadata blocks.
1865
+ # It's hard to imagine a valid use case for a derived metadata cascade greater than 200 iterations.
1866
+ 200.times do
1867
+ return if @derived_metadata_blocks.items_for(metadata).all? do |block|
1868
+ already_run_blocks.include?(block).tap do |skip_block|
1869
+ block.call(metadata) unless skip_block
1870
+ already_run_blocks << block
1871
+ end
1872
+ end
1860
1873
  end
1874
+
1875
+ # If we got here, then `@derived_metadata_blocks.items_for(metadata).all?` never returned
1876
+ # `true` above and we treat this as an attempt to recurse infinitely. It's better to fail
1877
+ # with a clear # error than hang indefinitely, which is what would happen if we didn't limit
1878
+ # the looping above.
1879
+ raise SystemStackError, "Attempted to recursively derive metadata indefinitely."
1861
1880
  end
1862
1881
 
1863
1882
  # Defines a `before` hook. See {Hooks#before} for full docs.
@@ -203,10 +203,13 @@ module RSpec
203
203
  description, example_block
204
204
  )
205
205
 
206
+ config = RSpec.configuration
207
+ config.apply_derived_metadata_to(@metadata)
208
+
206
209
  # This should perhaps be done in `Metadata::ExampleHash.create`,
207
210
  # but the logic there has no knowledge of `RSpec.world` and we
208
211
  # want to keep it that way. It's easier to just assign it here.
209
- @metadata[:last_run_status] = RSpec.configuration.last_run_statuses[id]
212
+ @metadata[:last_run_status] = config.last_run_statuses[id]
210
213
 
211
214
  @example_group_instance = @exception = nil
212
215
  @clock = RSpec::Core::Time
@@ -424,11 +424,15 @@ module RSpec
424
424
  superclass.method(:next_runnable_index_for),
425
425
  description, *args, &example_group_block
426
426
  )
427
+
428
+ config = RSpec.configuration
429
+ config.apply_derived_metadata_to(@metadata)
430
+
427
431
  ExampleGroups.assign_const(self)
428
432
 
429
433
  @currently_executing_a_context_hook = false
430
434
 
431
- RSpec.configuration.configure_group(self)
435
+ config.configure_group(self)
432
436
  end
433
437
 
434
438
  # @private
@@ -81,7 +81,7 @@ module RSpec
81
81
 
82
82
  def fully_formatted_lines(failure_number, colorizer)
83
83
  lines = [
84
- description,
84
+ encoded_description(description),
85
85
  detail_formatter.call(example, colorizer),
86
86
  formatted_message_and_backtrace(colorizer),
87
87
  extra_detail_formatter.call(failure_number, colorizer),
@@ -244,6 +244,17 @@ module RSpec
244
244
  end
245
245
  end
246
246
 
247
+ if String.method_defined?(:encoding)
248
+ def encoded_description(description)
249
+ return if description.nil?
250
+ encoded_string(description)
251
+ end
252
+ else # for 1.8.7
253
+ def encoded_description(description)
254
+ description
255
+ end
256
+ end
257
+
247
258
  def exception_backtrace
248
259
  exception.backtrace || []
249
260
  end
@@ -288,7 +288,26 @@ EOS
288
288
  raise(
289
289
  "#let or #subject called with a reserved name #initialize"
290
290
  ) if :initialize == name
291
- MemoizedHelpers.module_for(self).__send__(:define_method, name, &block)
291
+ our_module = MemoizedHelpers.module_for(self)
292
+
293
+ # If we have a module clash in our helper module
294
+ # then we need to remove it to prevent a warning.
295
+ #
296
+ # Note we do not check ancestor modules (see: `instance_methods(false)`)
297
+ # as we can override them.
298
+ if our_module.instance_methods(false).include?(name)
299
+ our_module.__send__(:remove_method, name)
300
+ end
301
+ our_module.__send__(:define_method, name, &block)
302
+
303
+ # If we have a module clash in the example module
304
+ # then we need to remove it to prevent a warning.
305
+ #
306
+ # Note we do not check ancestor modules (see: `instance_methods(false)`)
307
+ # as we can override them.
308
+ if instance_methods(false).include?(name)
309
+ remove_method(name)
310
+ end
292
311
 
293
312
  # Apply the memoization. The method has been defined in an ancestor
294
313
  # module so we can use `super` here to get the value.
@@ -136,7 +136,6 @@ module RSpec
136
136
 
137
137
  populate_location_attributes
138
138
  metadata.update(user_metadata)
139
- RSpec.configuration.apply_derived_metadata_to(metadata)
140
139
  end
141
140
 
142
141
  private
@@ -169,7 +168,7 @@ module RSpec
169
168
  end
170
169
 
171
170
  def description_separator(parent_part, child_part)
172
- if parent_part.is_a?(Module) && child_part =~ /^(#|::|\.)/
171
+ if parent_part.is_a?(Module) && /^(?:#|::|\.)/.match(child_part.to_s)
173
172
  ''.freeze
174
173
  else
175
174
  ' '.freeze
@@ -3,7 +3,7 @@ module RSpec
3
3
  # Version information for RSpec Core.
4
4
  module Version
5
5
  # Current version of RSpec Core, in semantic versioning format.
6
- STRING = '3.8.0'
6
+ STRING = '3.8.2'
7
7
  end
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.8.0
4
+ version: 3.8.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steven Baker
@@ -46,7 +46,7 @@ cert_chain:
46
46
  ZsVDj6a7lH3cNqtWXZxrb2wO38qV5AkYj8SQK7Hj3/Yui9myUX3crr+PdetazSqQ
47
47
  F3MdtaDehhjC
48
48
  -----END CERTIFICATE-----
49
- date: 2018-08-04 00:00:00.000000000 Z
49
+ date: 2019-06-29 00:00:00.000000000 Z
50
50
  dependencies:
51
51
  - !ruby/object:Gem::Dependency
52
52
  name: rspec-support
@@ -263,7 +263,12 @@ files:
263
263
  homepage: https://github.com/rspec/rspec-core
264
264
  licenses:
265
265
  - MIT
266
- metadata: {}
266
+ metadata:
267
+ bug_tracker_uri: https://github.com/rspec/rspec-core/issues
268
+ changelog_uri: https://github.com/rspec/rspec-core/blob/v3.8.2/Changelog.md
269
+ documentation_uri: https://rspec.info/documentation/
270
+ mailing_list_uri: https://groups.google.com/forum/#!forum/rspec
271
+ source_code_uri: https://github.com/rspec/rspec-core
267
272
  post_install_message:
268
273
  rdoc_options:
269
274
  - "--charset=UTF-8"
@@ -280,9 +285,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
280
285
  - !ruby/object:Gem::Version
281
286
  version: '0'
282
287
  requirements: []
283
- rubyforge_project:
284
- rubygems_version: 2.6.13
288
+ rubygems_version: 3.0.3
285
289
  signing_key:
286
290
  specification_version: 4
287
- summary: rspec-core-3.8.0
291
+ summary: rspec-core-3.8.2
288
292
  test_files: []
metadata.gz.sig CHANGED
Binary file