rspec-core 2.8.0.rc1 → 2.8.0.rc2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. data/License.txt +24 -0
  2. data/README.md +197 -37
  3. data/features/command_line/format_option.feature +3 -3
  4. data/features/command_line/init.feature +18 -0
  5. data/features/example_groups/shared_examples.feature +1 -1
  6. data/features/hooks/around_hooks.feature +4 -4
  7. data/features/pending/pending_examples.feature +5 -5
  8. data/features/support/env.rb +8 -1
  9. data/lib/autotest/rspec2.rb +2 -6
  10. data/lib/rspec/core.rb +48 -158
  11. data/lib/rspec/core/backward_compatibility.rb +2 -0
  12. data/lib/rspec/core/command_line.rb +4 -0
  13. data/lib/rspec/core/configuration.rb +201 -106
  14. data/lib/rspec/core/configuration_options.rb +2 -1
  15. data/lib/rspec/core/deprecation.rb +2 -3
  16. data/lib/rspec/core/drb_options.rb +69 -58
  17. data/lib/rspec/core/dsl.rb +12 -0
  18. data/lib/rspec/core/example.rb +53 -18
  19. data/lib/rspec/core/example_group.rb +144 -54
  20. data/lib/rspec/core/extensions.rb +4 -4
  21. data/lib/rspec/core/extensions/instance_eval_with_args.rb +5 -0
  22. data/lib/rspec/core/extensions/kernel.rb +1 -1
  23. data/lib/rspec/core/extensions/module_eval_with_args.rb +4 -0
  24. data/lib/rspec/core/extensions/ordered.rb +7 -2
  25. data/lib/rspec/core/filter_manager.rb +69 -36
  26. data/lib/rspec/core/formatters/base_text_formatter.rb +1 -1
  27. data/lib/rspec/core/formatters/html_formatter.rb +10 -4
  28. data/lib/rspec/core/hooks.rb +93 -34
  29. data/lib/rspec/core/let.rb +62 -61
  30. data/lib/rspec/core/metadata.rb +103 -80
  31. data/lib/rspec/core/metadata_hash_builder.rb +4 -0
  32. data/lib/rspec/core/option_parser.rb +42 -44
  33. data/lib/rspec/core/pending.rb +25 -3
  34. data/lib/rspec/core/project_initializer.rb +62 -0
  35. data/lib/rspec/core/rake_task.rb +7 -13
  36. data/lib/rspec/core/runner.rb +2 -2
  37. data/lib/rspec/core/shared_context.rb +1 -1
  38. data/lib/rspec/core/shared_example_group.rb +11 -5
  39. data/lib/rspec/core/subject.rb +3 -3
  40. data/lib/rspec/core/version.rb +1 -1
  41. data/lib/rspec/monkey.rb +1 -1
  42. data/lib/rspec/monkey/spork/test_framework/rspec.rb +2 -0
  43. data/spec/command_line/order_spec.rb +19 -13
  44. data/spec/rspec/core/command_line_spec.rb +1 -5
  45. data/spec/rspec/core/configuration_options_spec.rb +22 -27
  46. data/spec/rspec/core/configuration_spec.rb +32 -14
  47. data/spec/rspec/core/drb_command_line_spec.rb +20 -37
  48. data/spec/rspec/core/drb_options_spec.rb +51 -3
  49. data/spec/rspec/core/example_group_spec.rb +101 -84
  50. data/spec/rspec/core/example_spec.rb +14 -0
  51. data/spec/rspec/core/filter_manager_spec.rb +114 -33
  52. data/spec/rspec/core/formatters/html_formatted-1.8.7-jruby.html +17 -69
  53. data/spec/rspec/core/formatters/html_formatted-1.8.7.html +14 -4
  54. data/spec/rspec/core/formatters/html_formatted-1.9.2.html +14 -4
  55. data/spec/rspec/core/formatters/html_formatted-1.9.3.html +14 -4
  56. data/spec/rspec/core/formatters/html_formatter_spec.rb +1 -1
  57. data/spec/rspec/core/formatters/text_mate_formatted-1.8.7-jruby.html +20 -72
  58. data/spec/rspec/core/formatters/text_mate_formatted-1.8.7.html +24 -14
  59. data/spec/rspec/core/formatters/text_mate_formatted-1.9.2.html +29 -19
  60. data/spec/rspec/core/formatters/text_mate_formatted-1.9.3.html +29 -19
  61. data/spec/rspec/core/formatters/text_mate_formatter_spec.rb +1 -2
  62. data/spec/rspec/core/metadata_spec.rb +77 -45
  63. data/spec/rspec/core/option_parser_spec.rb +5 -0
  64. data/spec/rspec/core/pending_example_spec.rb +44 -12
  65. data/spec/rspec/core/project_initializer_spec.rb +130 -0
  66. data/spec/rspec/core/rake_task_spec.rb +1 -1
  67. data/spec/spec_helper.rb +2 -0
  68. data/spec/support/matchers.rb +2 -12
  69. metadata +18 -16
  70. data/features/command_line/configure.feature +0 -22
  71. data/lib/rspec/core/command_line_configuration.rb +0 -62
  72. data/lib/rspec/core/errors.rb +0 -13
  73. data/spec/rspec/core/command_line_configuration_spec.rb +0 -26
@@ -1,4 +1,4 @@
1
- require 'rspec/core/extensions/kernel'
2
- require 'rspec/core/extensions/instance_eval_with_args'
3
- require 'rspec/core/extensions/module_eval_with_args'
4
- require 'rspec/core/extensions/ordered'
1
+ require_rspec 'core/extensions/kernel'
2
+ require_rspec 'core/extensions/instance_eval_with_args'
3
+ require_rspec 'core/extensions/module_eval_with_args'
4
+ require_rspec 'core/extensions/ordered'
@@ -1,7 +1,12 @@
1
1
  module RSpec
2
2
  module Core
3
3
  module Extensions
4
+ # @private
4
5
  module InstanceEvalWithArgs
6
+ # @private
7
+ #
8
+ # Used internally to support `instance_exec` in Ruby 1.8.6.
9
+ #
5
10
  # based on Bounded Spec InstanceExec (Mauricio Fernandez)
6
11
  # http://eigenclass.org/hiki/bounded+space+instance_exec
7
12
  # - uses singleton_class instead of global InstanceExecHelper module
@@ -1,5 +1,5 @@
1
1
  module Kernel
2
- unless respond_to?(:debugger)
2
+ unless defined?(debugger)
3
3
  # If not already defined by ruby-debug, this implementation prints helpful
4
4
  # message to STDERR when ruby-debug is not loaded.
5
5
  def debugger(*args)
@@ -1,9 +1,13 @@
1
1
  module RSpec
2
2
  module Core
3
3
  module Extensions
4
+ # @private
4
5
  module ModuleEvalWithArgs
5
6
  include InstanceEvalWithArgs
6
7
 
8
+ # @private
9
+ #
10
+ # Used internally to support `module_exec` in Ruby 1.8.6.
7
11
  def module_eval_with_args(*args, &block)
8
12
  # ruby > 1.8.6
9
13
  return module_exec(*args, &block) if respond_to?(:module_exec)
@@ -1,11 +1,16 @@
1
1
  module RSpec
2
2
  module Core
3
+ # @private
3
4
  module Extensions
5
+ # @private
6
+ # Used to extend lists of examples and groups to support ordering
7
+ # strategies like randomization.
4
8
  module Ordered
9
+ # @private
5
10
  def ordered
6
11
  if RSpec.configuration.randomize?
7
- srand RSpec.configuration.seed
8
- sort_by { rand size }
12
+ Kernel.srand RSpec.configuration.seed
13
+ sort_by { Kernel.rand size }
9
14
  else
10
15
  self
11
16
  end
@@ -61,6 +61,10 @@ module RSpec
61
61
  # end
62
62
  #
63
63
  # These declarations can also be overridden from the command line.
64
+ #
65
+ # @see RSpec.configure
66
+ # @see Configuration#filter_run_including
67
+ # @see Configuration#filter_run_excluding
64
68
  class FilterManager
65
69
  DEFAULT_EXCLUSIONS = {
66
70
  :if => lambda { |value, metadata| metadata.has_key?(:if) && !value },
@@ -83,20 +87,29 @@ module RSpec
83
87
  end
84
88
 
85
89
  module BackwardCompatibility
86
- # This is to support a use case that probably doesn't exist: overriding
87
- # the if/unless procs.
88
- def update(orig, opposite, *updates)
89
- if updates.last.has_key?(:unless)
90
- RSpec.warn_deprecation("\nDEPRECATION NOTICE: FilterManager#exclude(:unless => #{updates.last[:unless].inspect}) is deprecated with no replacement, and will be removed from rspec-3.0.")
91
- @exclusions[:unless] = updates.last.delete(:unless)
92
- end
93
- if updates.last.has_key?(:if)
94
- RSpec.warn_deprecation("\nDEPRECATION NOTICE: FilterManager#exclude(:if => #{updates.last[:if].inspect}) is deprecated with no replacement, and will be removed from rspec-3.0.")
95
- @exclusions[:if] = updates.last.delete(:if)
96
- end
90
+ def merge(orig, opposite, *updates)
91
+ _warn_deprecated_keys(updates.last)
92
+ super
93
+ end
97
94
 
95
+ def reverse_merge(orig, opposite, *updates)
96
+ _warn_deprecated_keys(updates.last)
98
97
  super
99
98
  end
99
+
100
+ # Supports a use case that probably doesn't exist: overriding the
101
+ # if/unless procs.
102
+ def _warn_deprecated_keys(updates)
103
+ _warn_deprecated_key(:unless, updates) if updates.has_key?(:unless)
104
+ _warn_deprecated_key(:if, updates) if updates.has_key?(:if)
105
+ end
106
+
107
+ # Emits a deprecation warning for keys that will not be supported in
108
+ # the future.
109
+ def _warn_deprecated_key(key, updates)
110
+ RSpec.warn_deprecation("\nDEPRECATION NOTICE: FilterManager#exclude(#{key.inspect} => #{updates[key].inspect}) is deprecated with no replacement, and will be removed from rspec-3.0.")
111
+ @exclusions[key] = updates.delete(key)
112
+ end
100
113
  end
101
114
 
102
115
  attr_reader :exclusions, :inclusions
@@ -108,14 +121,13 @@ module RSpec
108
121
  end
109
122
 
110
123
  def add_location(file_path, line_numbers)
111
- # filter_locations is a hash of expanded paths to arrays of line
124
+ # locations is a hash of expanded paths to arrays of line
112
125
  # numbers to match against. e.g.
113
126
  # { "path/to/file.rb" => [37, 42] }
114
- filter_locations = @inclusions[:locations] ||= Hash.new {|h,k| h[k] = []}
127
+ locations = @inclusions.delete(:locations) || Hash.new {|h,k| h[k] = []}
128
+ locations[File.expand_path(file_path)].push(*line_numbers)
129
+ @inclusions.replace(:locations => locations)
115
130
  @exclusions.clear
116
- @inclusions.clear
117
- filter_locations[File.expand_path(file_path)].push(*line_numbers)
118
- include :locations => filter_locations
119
131
  end
120
132
 
121
133
  def empty?
@@ -126,36 +138,57 @@ module RSpec
126
138
  examples.select {|e| !exclude?(e) && include?(e)}
127
139
  end
128
140
 
141
+ def exclude(*args)
142
+ merge(@exclusions, @inclusions, *args)
143
+ end
144
+
145
+ def exclude!(*args)
146
+ replace(@exclusions, @inclusions, *args)
147
+ end
148
+
149
+ def exclude_with_low_priority(*args)
150
+ reverse_merge(@exclusions, @inclusions, *args)
151
+ end
152
+
129
153
  def exclude?(example)
130
154
  @exclusions.empty? ? false : example.any_apply?(@exclusions)
131
155
  end
132
156
 
157
+ def include(*args)
158
+ unless_standalone(*args) { merge(@inclusions, @exclusions, *args) }
159
+ end
160
+
161
+ def include!(*args)
162
+ unless_standalone(*args) { replace(@inclusions, @exclusions, *args) }
163
+ end
164
+
165
+ def include_with_low_priority(*args)
166
+ unless_standalone(*args) { reverse_merge(@inclusions, @exclusions, *args) }
167
+ end
168
+
133
169
  def include?(example)
134
170
  @inclusions.empty? ? true : example.any_apply?(@inclusions)
135
171
  end
136
172
 
137
- def exclude(*args)
138
- update(@exclusions, @inclusions, *args)
173
+ private
174
+
175
+ def unless_standalone(*args)
176
+ is_standalone_filter?(args.last) ? @inclusions.replace(args.last) : yield unless already_set_standalone_filter?
139
177
  end
140
178
 
141
- def include(*args)
142
- return if already_set_standalone_filter?
143
-
144
- is_standalone_filter?(args.last) ? @inclusions.replace(args.last) : update(@inclusions, @exclusions, *args)
145
- end
146
-
147
- def update(orig, opposite, *updates)
148
- if updates.length == 2
149
- if updates[0] == :replace
150
- updated = updates.last
151
- else
152
- updated = updates.last.merge(orig)
153
- opposite.each_key {|k| updated.delete(k)}
154
- end
155
- orig.replace(updated)
156
- else
157
- orig.merge!(updates.last).each_key {|k| opposite.delete(k)}
158
- end
179
+ def merge(orig, opposite, *updates)
180
+ orig.merge!(updates.last).each_key {|k| opposite.delete(k)}
181
+ end
182
+
183
+ def replace(orig, opposite, *updates)
184
+ updates.last.each_key {|k| opposite.delete(k)}
185
+ orig.replace(updates.last)
186
+ end
187
+
188
+ def reverse_merge(orig, opposite, *updates)
189
+ updated = updates.last.merge(orig)
190
+ opposite.each_pair {|k,v| updated.delete(k) if updated[k] == v}
191
+ orig.replace(updated)
159
192
  end
160
193
 
161
194
  def already_set_standalone_filter?
@@ -159,7 +159,7 @@ module RSpec
159
159
  end
160
160
 
161
161
  def dump_pending_example_fixed(example, index)
162
- if RSpec::Core::PendingExampleFixedError === example.execution_result[:exception]
162
+ if example.execution_result[:exception].pending_fixed?
163
163
  output.puts "#{short_padding}#{index.next}) #{example.full_description} FIXED"
164
164
  output.puts blue("#{long_padding}Expected pending '#{example.metadata[:execution_result][:pending_message]}' to fail. No Error was raised.")
165
165
  true
@@ -67,7 +67,7 @@ module RSpec
67
67
 
68
68
  def example_passed(example)
69
69
  move_progress
70
- @output.puts " <dd class=\"example passed\"><span class=\"passed_spec_name\">#{h(example.description)}</span></dd>"
70
+ @output.puts " <dd class=\"example passed\"><span class=\"passed_spec_name\">#{h(example.description)}</span><span class='duration'>#{sprintf("%.5f", example.execution_result[:run_time])}s</span></dd>"
71
71
  @output.flush
72
72
  end
73
73
 
@@ -75,15 +75,15 @@ module RSpec
75
75
  super(example)
76
76
  exception = example.metadata[:execution_result][:exception]
77
77
  extra = extra_failure_content(exception)
78
- failure_style = RSpec::Core::PendingExampleFixedError === exception ? 'pending_fixed' : 'failed'
79
78
  @output.puts " <script type=\"text/javascript\">makeRed('rspec-header');</script>" unless @header_red
80
79
  @header_red = true
81
80
  @output.puts " <script type=\"text/javascript\">makeRed('div_group_#{example_group_number}');</script>" unless @example_group_red
82
81
  @output.puts " <script type=\"text/javascript\">makeRed('example_group_#{example_group_number}');</script>" unless @example_group_red
83
82
  @example_group_red = true
84
83
  move_progress
85
- @output.puts " <dd class=\"example #{failure_style}\">"
84
+ @output.puts " <dd class=\"example #{exception.pending_fixed? ? 'pending_fixed' : 'failed'}\">"
86
85
  @output.puts " <span class=\"failed_spec_name\">#{h(example.description)}</span>"
86
+ @output.puts " <span class=\"duration\">#{sprintf('%.5f', example.execution_result[:run_time])}s</span>"
87
87
  @output.puts " <div class=\"failure\" id=\"failure_#{@failed_examples.size}\">"
88
88
  @output.puts " <div class=\"message\"><pre>#{h(exception.message)}</pre></div>" unless exception.nil?
89
89
  @output.puts " <div class=\"backtrace\"><pre>#{format_backtrace(exception.backtrace, example).join("\n")}</pre></div>" if exception
@@ -142,7 +142,7 @@ module RSpec
142
142
  totals << "#{failure_count} failure#{'s' unless failure_count == 1}"
143
143
  totals << ", #{pending_count} pending" if pending_count > 0
144
144
  end
145
- @output.puts "<script type=\"text/javascript\">document.getElementById('duration').innerHTML = \"Finished in <strong>#{duration} seconds</strong>\";</script>"
145
+ @output.puts "<script type=\"text/javascript\">document.getElementById('duration').innerHTML = \"Finished in <strong>#{sprintf("%.5f", duration)} seconds</strong>\";</script>"
146
146
  @output.puts "<script type=\"text/javascript\">document.getElementById('totals').innerHTML = \"#{totals}\";</script>"
147
147
  @output.puts "</div>"
148
148
  @output.puts "</div>"
@@ -354,6 +354,12 @@ dd {
354
354
  padding: 3px 3px 3px 18px;
355
355
  }
356
356
 
357
+ dd .duration {
358
+ padding-left: 5px;
359
+ text-align: right;
360
+ right: 0px;
361
+ float:right;
362
+ }
357
363
 
358
364
  dd.example.passed {
359
365
  border-left: 5px solid #65C400;
@@ -87,7 +87,7 @@ module RSpec
87
87
 
88
88
  class AroundHooks < HookCollection; end
89
89
 
90
- # @api private
90
+ # @private
91
91
  def hooks
92
92
  @hooks ||= {
93
93
  :around => { :each => AroundHooks.new },
@@ -99,10 +99,15 @@ module RSpec
99
99
  # @api public
100
100
  # @overload before(&block)
101
101
  # @overload before(scope, &block)
102
- # @overload before(scope, tags, &block)
103
- # @overload before(tags, &block)
102
+ # @overload before(scope, conditions, &block)
103
+ # @overload before(conditions, &block)
104
+ #
104
105
  # @param [Symbol] scope `:each`, `:all`, or `:suite` (defaults to `:each`)
105
- # @param [Hash] tags
106
+ # @param [Hash] conditions
107
+ # constrains this hook to examples matching these conditions e.g.
108
+ # `before(:each, :ui => true) { ... }` will only run with examples or
109
+ # groups declared with `:ui => true`.
110
+ #
106
111
  # @see #after
107
112
  # @see #around
108
113
  # @see ExampleGroup
@@ -122,12 +127,6 @@ module RSpec
122
127
  # Instance variables declared in `before(:each)` or `before(:all)` are
123
128
  # accessible within each example.
124
129
  #
125
- # ### Exceptions
126
- #
127
- # When an exception is raised in a `before` block, RSpec skips any
128
- # subsequent `before` blocks and the example, but runs all of the
129
- # `after(:each)` and `after(:all)` hooks.
130
- #
131
130
  # ### Order
132
131
  #
133
132
  # `before` hooks are stored in three scopes, which are run in order:
@@ -135,16 +134,55 @@ module RSpec
135
134
  # different places: `RSpec.configure`, a parent group, the current group.
136
135
  # They are run in the following order:
137
136
  #
138
- # before(:all) declared in RSpec.configure
139
- # before(:all) declared in a parent group
140
- # before(:all) declared in the current group
141
- # before(:each) declared in RSpec.configure
142
- # before(:each) declared in a parent group
143
- # before(:each) declared in the current group
137
+ # before(:suite) # declared in RSpec.configure
138
+ # before(:all) # declared in RSpec.configure
139
+ # before(:all) # declared in a parent group
140
+ # before(:all) # declared in the current group
141
+ # before(:each) # declared in RSpec.configure
142
+ # before(:each) # declared in a parent group
143
+ # before(:each) # declared in the current group
144
144
  #
145
145
  # If more than one `before` is declared within any one scope, they are run
146
146
  # in the order in which they are declared.
147
147
  #
148
+ # ### Conditions
149
+ #
150
+ # When you add a conditions hash to `before(:each)` or `before(:all)`,
151
+ # RSpec will only apply that hook to groups or examples that match the
152
+ # conditions. e.g.
153
+ #
154
+ # RSpec.configure do |config|
155
+ # config.before(:each, :authorized => true) do
156
+ # log_in_as :authorized_user
157
+ # end
158
+ # end
159
+ #
160
+ # describe Something, :authorized => true do
161
+ # # the before hook will run in before each example in this group
162
+ # end
163
+ #
164
+ # describe SomethingElse do
165
+ # it "does something", :authorized => true do
166
+ # # the before hook will run before this example
167
+ # end
168
+ #
169
+ # it "does something else" do
170
+ # # the hook will not run before this example
171
+ # end
172
+ # end
173
+ #
174
+ # ### Warning: `before(:suite, :with => :conditions)`
175
+ #
176
+ # The conditions hash is used to match against specific examples. Since
177
+ # `before(:suite)` is not run in relation to any specific example or
178
+ # group, conditions passed along with `:suite` are effectively ignored.
179
+ #
180
+ # ### Exceptions
181
+ #
182
+ # When an exception is raised in a `before` block, RSpec skips any
183
+ # subsequent `before` blocks and the example, but runs all of the
184
+ # `after(:each)` and `after(:all)` hooks.
185
+ #
148
186
  # ### Warning: implicit before blocks
149
187
  #
150
188
  # `before` hooks can also be declared in shared contexts which get
@@ -203,8 +241,8 @@ module RSpec
203
241
  # before(:all) do
204
242
  # File.open(file_to_parse, 'w') do |f|
205
243
  # f.write <<-CONTENT
206
- # Stuff in the file
207
- # end
244
+ # stuff in the file
245
+ # CONTENT
208
246
  # end
209
247
  # end
210
248
  #
@@ -224,10 +262,15 @@ module RSpec
224
262
  # @api public
225
263
  # @overload after(&block)
226
264
  # @overload after(scope, &block)
227
- # @overload after(scope, tags, &block)
228
- # @overload after(tags, &block)
265
+ # @overload after(scope, conditions, &block)
266
+ # @overload after(conditions, &block)
267
+ #
229
268
  # @param [Symbol] scope `:each`, `:all`, or `:suite` (defaults to `:each`)
230
- # @param [Hash] tags
269
+ # @param [Hash] conditions
270
+ # constrains this hook to examples matching these conditions e.g.
271
+ # `after(:each, :ui => true) { ... }` will only run with examples or
272
+ # groups declared with `:ui => true`.
273
+ #
231
274
  # @see #before
232
275
  # @see #around
233
276
  # @see ExampleGroup
@@ -254,12 +297,12 @@ module RSpec
254
297
  # different places: `RSpec.configure`, a parent group, the current group.
255
298
  # They are run in the following order:
256
299
  #
257
- # after(:each) declared in the current group
258
- # after(:each) declared in a parent group
259
- # after(:each) declared in RSpec.configure
260
- # after(:all) declared in the current group
261
- # after(:all) declared in a parent group
262
- # after(:all) declared in RSpec.configure
300
+ # after(:each) # declared in the current group
301
+ # after(:each) # declared in a parent group
302
+ # after(:each) # declared in RSpec.configure
303
+ # after(:all) # declared in the current group
304
+ # after(:all) # declared in a parent group
305
+ # after(:all) # declared in RSpec.configure
263
306
  #
264
307
  # This is the reverse of the order in which `before` hooks are run.
265
308
  # Similarly, if more than one `after` is declared within any one scope,
@@ -272,12 +315,28 @@ module RSpec
272
315
  # @api public
273
316
  # @overload around(&block)
274
317
  # @overload around(scope, &block)
275
- # @overload around(scope, tags, &block)
276
- # @overload around(tags, &block)
318
+ # @overload around(scope, conditions, &block)
319
+ # @overload around(conditions, &block)
320
+ #
277
321
  # @param [Symbol] scope `:each` (defaults to `:each`)
278
- # @param [Hash] tags
322
+ # present for syntax parity with `before` and `after`, but `:each` is
323
+ # the only supported value.
324
+ #
325
+ # @param [Hash] conditions
326
+ # constrains this hook to examples matching these conditions e.g.
327
+ # `around(:each, :ui => true) { ... }` will only run with examples or
328
+ # groups declared with `:ui => true`.
329
+ #
279
330
  # @yield [Example] the example to run
280
331
  #
332
+ # @note the syntax of `around` is similar to that of `before` and `after`
333
+ # but the semantics are quite different. `before` and `after` hooks are
334
+ # run in the context of of the examples with which they are associated,
335
+ # whereas `around` hooks are actually responsible for running the
336
+ # examples. Consequently, `around` hooks do not have direct access to
337
+ # resources that are made available within the examples and their
338
+ # associated `before` and `after` hooks.
339
+ #
281
340
  # @note `:each` is the only supported scope.
282
341
  #
283
342
  # Declare a block of code, parts of which will be run before and parts
@@ -302,26 +361,26 @@ module RSpec
302
361
  hooks[:around][scope] << AroundHook.new(options, &block)
303
362
  end
304
363
 
305
- # @api private
364
+ # @private
306
365
  # Runs all of the blocks stored with the hook in the context of the
307
366
  # example. If no example is provided, just calls the hook directly.
308
367
  def run_hook(hook, scope, example_group_instance=nil)
309
368
  hooks[hook][scope].run_all(example_group_instance)
310
369
  end
311
370
 
312
- # @api private
371
+ # @private
313
372
  # Just like run_hook, except it removes the blocks as it evalutes them,
314
373
  # ensuring that they will only be run once.
315
374
  def run_hook!(hook, scope, example_group_instance)
316
375
  hooks[hook][scope].run_all!(example_group_instance)
317
376
  end
318
377
 
319
- # @api private
378
+ # @private
320
379
  def run_hook_filtered(hook, scope, group, example_group_instance, example = nil)
321
380
  find_hook(hook, scope, group, example).run_all(example_group_instance)
322
381
  end
323
382
 
324
- # @api private
383
+ # @private
325
384
  def find_hook(hook, scope, example_group_class, example = nil)
326
385
  found_hooks = hooks[hook][scope].find_hooks_for(example || example_group_class)
327
386