rspec-core 3.5.0 → 3.5.1

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
  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��?Ϳ�&����^��[{�֤