rspec-core 3.5.0 → 3.5.1

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
  SHA1:
3
- metadata.gz: 48b30f78fc81b772c3546f4bf60a8c375396a642
4
- data.tar.gz: 614a957ebe046aad31a3f79be0a15eb475a57b55
3
+ metadata.gz: 8edadb66ad16d53a8e8b9c24bcb0d6e0d0cf60a4
4
+ data.tar.gz: 482215825781fdb27385c38e782ae15eea0d4340
5
5
  SHA512:
6
- metadata.gz: f5548e10c144396ab4922516d43e109c8280085153bebe01963745f543714b2568203aae83eb8ba8c627e37d0d5364469761915eb51572bbc185ae759273f8b4
7
- data.tar.gz: f6ee8389462ab8ad0fa78d87ef230c7f0f4ebb21f77a6d23dbfc1daa3e6ad348c1e43d02a7041ecb88ec44cf1f2afae27909a2ab76a8d583eb21f5dd3a17c4ab
6
+ metadata.gz: 033297ca6896a612fda69a3a7c4f60b98dac28da47312c866a0c1bbfcf799163393b9520f4e158f48d7bdf5b0d8d21dd65091f79779e9fe4e0e0530913588079
7
+ data.tar.gz: 290acfab949ab5e5bf54b6cb67d298c232e03c3c00155a18754e327d79aa68d0bf8f210db2ee1f6aea2fc9b7271dd518cd08ee606c31a8f66035b4eee92b6e0f
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -1,3 +1,11 @@
1
+ ### 3.5.1 / 2016-07-06
2
+ [Full Changelog](http://github.com/rspec/rspec-core/compare/v3.5.0...v3.5.1)
3
+
4
+ Bug Fixes:
5
+
6
+ * Ensure that config hooks that are added to existing example groups are
7
+ added only once. (Eugene Kenny, #2280)
8
+
1
9
  ### 3.5.0 / 2016-07-01
2
10
  [Full Changelog](http://github.com/rspec/rspec-core/compare/v3.5.0.beta4...v3.5.0)
3
11
 
@@ -1749,7 +1749,7 @@ module RSpec
1749
1749
  handle_suite_hook(scope, meta) do
1750
1750
  @before_suite_hooks << Hooks::BeforeHook.new(block, {})
1751
1751
  end || begin
1752
- on_existing_matching_groups({}) { |g| g.before(scope, *meta, &block) }
1752
+ add_hook_to_existing_matching_groups(meta, scope) { |g| g.before(scope, *meta, &block) }
1753
1753
  super(scope, *meta, &block)
1754
1754
  end
1755
1755
  end
@@ -1772,7 +1772,7 @@ module RSpec
1772
1772
  handle_suite_hook(scope, meta) do
1773
1773
  @before_suite_hooks.unshift Hooks::BeforeHook.new(block, {})
1774
1774
  end || begin
1775
- on_existing_matching_groups({}) { |g| g.prepend_before(scope, *meta, &block) }
1775
+ add_hook_to_existing_matching_groups(meta, scope) { |g| g.prepend_before(scope, *meta, &block) }
1776
1776
  super(scope, *meta, &block)
1777
1777
  end
1778
1778
  end
@@ -1790,7 +1790,7 @@ module RSpec
1790
1790
  handle_suite_hook(scope, meta) do
1791
1791
  @after_suite_hooks.unshift Hooks::AfterHook.new(block, {})
1792
1792
  end || begin
1793
- on_existing_matching_groups({}) { |g| g.after(scope, *meta, &block) }
1793
+ add_hook_to_existing_matching_groups(meta, scope) { |g| g.after(scope, *meta, &block) }
1794
1794
  super(scope, *meta, &block)
1795
1795
  end
1796
1796
  end
@@ -1813,7 +1813,7 @@ module RSpec
1813
1813
  handle_suite_hook(scope, meta) do
1814
1814
  @after_suite_hooks << Hooks::AfterHook.new(block, {})
1815
1815
  end || begin
1816
- on_existing_matching_groups({}) { |g| g.append_after(scope, *meta, &block) }
1816
+ add_hook_to_existing_matching_groups(meta, scope) { |g| g.append_after(scope, *meta, &block) }
1817
1817
  super(scope, *meta, &block)
1818
1818
  end
1819
1819
  end
@@ -1822,8 +1822,7 @@ module RSpec
1822
1822
  #
1823
1823
  # See {Hooks#around} for full `around` hook docs.
1824
1824
  def around(scope=nil, *meta, &block)
1825
- on_existing_matching_groups({}) { |g| g.around(scope, *meta, &block) }
1826
-
1825
+ add_hook_to_existing_matching_groups(meta, scope) { |g| g.around(scope, *meta, &block) }
1827
1826
  super(scope, *meta, &block)
1828
1827
  end
1829
1828
 
@@ -2027,12 +2026,32 @@ module RSpec
2027
2026
  end
2028
2027
  end
2029
2028
 
2029
+ def add_hook_to_existing_matching_groups(meta, scope, &block)
2030
+ # For example hooks, we have to apply it to each of the top level
2031
+ # groups, even if the groups do not match. When we apply it, we
2032
+ # apply it with the metadata, so it will only apply to examples
2033
+ # in the group that match the metadata.
2034
+ # #2280 for background and discussion.
2035
+ if scope == :example || scope == :each || scope.nil?
2036
+ world.example_groups.each(&block)
2037
+ else
2038
+ meta = Metadata.build_hash_from(meta.dup)
2039
+ on_existing_matching_groups(meta, &block)
2040
+ end
2041
+ end
2042
+
2030
2043
  def on_existing_matching_groups(meta)
2031
- world.all_example_groups.each do |group|
2032
- yield group if meta.empty? || MetadataFilter.apply?(:any?, meta, group.metadata)
2044
+ world.traverse_example_group_trees_until do |group|
2045
+ metadata_applies_to_group?(meta, group).tap do |applies|
2046
+ yield group if applies
2047
+ end
2033
2048
  end
2034
2049
  end
2035
2050
 
2051
+ def metadata_applies_to_group?(meta, group)
2052
+ meta.empty? || MetadataFilter.apply?(:any?, meta, group.metadata)
2053
+ end
2054
+
2036
2055
  if RSpec::Support::RubyFeatures.module_prepends_supported?
2037
2056
  def safe_prepend(mod, host)
2038
2057
  host.__send__(:prepend, mod) unless host < mod
@@ -450,6 +450,20 @@ module RSpec
450
450
  @children ||= []
451
451
  end
452
452
 
453
+ # @private
454
+ # Traverses the tree of groups, starting with `self`, then the children, recursively.
455
+ # Halts the traversal of a branch of the tree as soon as the passed block returns true.
456
+ # Note that siblings groups and their sub-trees will continue to be explored.
457
+ # This is intended to make it easy to find the top-most group that satisfies some
458
+ # condition.
459
+ def self.traverse_tree_until(&block)
460
+ return if yield self
461
+
462
+ children.each do |child|
463
+ child.traverse_tree_until(&block)
464
+ end
465
+ end
466
+
453
467
  # @private
454
468
  def self.next_runnable_index_for(file)
455
469
  if self == ExampleGroup
@@ -191,7 +191,7 @@ module RSpec
191
191
  #
192
192
  # @note The `:example` and `:context` scopes are also available as
193
193
  # `:each` and `:all`, respectively. Use whichever you prefer.
194
- # @note The `:scope` alias is only supported for hooks registered on
194
+ # @note The `:suite` scope is only supported for hooks registered on
195
195
  # `RSpec.configuration` since they exist independently of any
196
196
  # example or example group.
197
197
  def before(*args, &block)
@@ -265,7 +265,7 @@ module RSpec
265
265
  #
266
266
  # @note The `:example` and `:context` scopes are also available as
267
267
  # `:each` and `:all`, respectively. Use whichever you prefer.
268
- # @note The `:scope` alias is only supported for hooks registered on
268
+ # @note The `:suite` scope is only supported for hooks registered on
269
269
  # `RSpec.configuration` since they exist independently of any
270
270
  # example or example group.
271
271
  def after(*args, &block)
@@ -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.5.0'
6
+ STRING = '3.5.1'
7
7
  end
8
8
  end
9
9
  end
@@ -92,6 +92,19 @@ module RSpec
92
92
  FlatMap.flat_map(all_example_groups) { |g| g.examples }
93
93
  end
94
94
 
95
+ # @private
96
+ # Traverses the tree of each top level group.
97
+ # For each it yields the group, then the children, recursively.
98
+ # Halts the traversal of a branch of the tree as soon as the passed block returns true.
99
+ # Note that siblings groups and their sub-trees will continue to be explored.
100
+ # This is intended to make it easy to find the top-most group that satisfies some
101
+ # condition.
102
+ def traverse_example_group_trees_until(&block)
103
+ example_groups.each do |group|
104
+ group.traverse_tree_until(&block)
105
+ end
106
+ end
107
+
95
108
  # @api private
96
109
  #
97
110
  # Find line number of previous declaration.
@@ -215,6 +228,9 @@ module RSpec
215
228
  []
216
229
  end
217
230
 
231
+ def self.traverse_example_group_trees_until
232
+ end
233
+
218
234
  # :nocov:
219
235
  def self.example_groups
220
236
  []
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.5.0
4
+ version: 3.5.1
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: 2016-07-01 00:00:00.000000000 Z
49
+ date: 2016-07-07 00:00:00.000000000 Z
50
50
  dependencies:
51
51
  - !ruby/object:Gem::Dependency
52
52
  name: rspec-support
@@ -280,9 +280,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
280
280
  version: '0'
281
281
  requirements: []
282
282
  rubyforge_project:
283
- rubygems_version: 2.5.1
283
+ rubygems_version: 2.2.2
284
284
  signing_key:
285
285
  specification_version: 4
286
- summary: rspec-core-3.5.0
286
+ summary: rspec-core-3.5.1
287
287
  test_files: []
288
288
  has_rdoc:
metadata.gz.sig CHANGED
@@ -1,3 +1,4 @@
1
- %k��]F8����&{Q )+ힹ�(����ç�b��-,�rO��"h�'������۴T||�a��G]-�K���\��a��b�E@g@(�ǿ-��=� �9�c�nA�ȉ����7a����@��.~��\����9���ζ��_�����oq��ĤM�kP��Y�?��Rg��hm���tE=�ޅ}Љ�ұ'=��V ӝOHmit��{G��1�ue�;w
2
- +���zIs����e^�>�N�.�}:�}h��*��t(��y������G-Vd�ۖ���xd�!�9^�W�&�6?W��2K ���������u�^MP?&���]�o-z'ѫ?��C�6)?�˗�Q�He�2/�Fm�ұ6�Q�$��v"�L�*U��n�LWi���
3
- R ��Α*9��M͙Elr ���Q
1
+ Q��AP�3�%,�ֶ�UNfJD`��2d\�pF*���(&�A�ڹC�ع��e gC��/�'�rMfp},
2
+ `Չ&O�XL(@IJEc���o���[M؞�DQTIT5��~ xD��ф��)������9+-fy�ۜ�e���^�f~���"���"�пc��sV��h�����)P vߕ�{sؗ$�� ���>V����ƪX
3
+ E'�KqqJ*�v�?$� FN8����7���k/�#�?���'`Jœ�Y�ͷŕRƭ�����$�`dҡQ�P�y��.tGН�G�T7�ϫ@�l�ތ2����Y�0U���!�X���,���fL���F݀ٴV�/�����p�&��+��Mx֟ݔX��
4
+ (�����u���}�ZgY�2^"��yݦ�< d�^z_ �(�JgrNMI�y=KLyXx?Q9�Ǜ�z�-F%U$��0���@���7�G�ܬ�ٟ�g'k�k�0�IE��?Ϳ�&����^��[{�֤