module Spec::Example::BeforeAndAfterHooks

def after_all_parts # :nodoc:

:nodoc:
def after_all_parts # :nodoc:
  @after_all_parts ||= []
end

def after_each_parts # :nodoc:

:nodoc:
def after_each_parts # :nodoc:
  @after_each_parts ||= []
end

def after_parts(scope)

def after_parts(scope)
  case scope
  when :each; after_each_parts
  when :all; after_all_parts
  when :suite; after_suite_parts
  end
end

def after_suite_parts # :nodoc:

:nodoc:
def after_suite_parts # :nodoc:
  @after_suite_parts ||= []
end

def after_suite_parts # :nodoc:

:nodoc:
def after_suite_parts # :nodoc:
  BeforeAndAfterHooks.after_suite_parts
end

def append_after(scope = :each, &block)

See append_before for scoping semantics.

This method appends +block+ to existing after blocks.
Registers a block to be executed after each example.
def append_after(scope = :each, &block)
  after_parts(scope) << block
end

def append_before(scope = :each, &block)

run.
:all, the block is executed only once before any examples are
:each, the block is executed before each example. When
:each (default), :all, or :suite. When
Registers a block to be executed before examples. scope can be
def append_before(scope = :each, &block)
  before_parts(scope) << block
end

def before_all_parts # :nodoc:

:nodoc:
def before_all_parts # :nodoc:
  @before_all_parts ||= []
end

def before_each_parts # :nodoc:

:nodoc:
def before_each_parts # :nodoc:
  @before_each_parts ||= []
end

def before_parts(scope)

def before_parts(scope)
  case scope
  when :each; before_each_parts
  when :all; before_all_parts
  when :suite; before_suite_parts
  end
end

def before_suite_parts # :nodoc:

:nodoc:
def before_suite_parts # :nodoc:
  @before_suite_parts ||= []
end

def before_suite_parts # :nodoc:

:nodoc:
def before_suite_parts # :nodoc:
  BeforeAndAfterHooks.before_suite_parts
end

def prepend_after(scope = :each, &block)

See append_before for scoping semantics.

This method prepends +block+ to existing after blocks.
Registers a block to be executed after each example.
def prepend_after(scope = :each, &block)
  after_parts(scope).unshift(block)
end

def prepend_before(scope = :each, &block)

See append_before for scoping semantics.

This method prepends +block+ to existing before blocks.
Registers a block to be executed before each example.
def prepend_before(scope = :each, &block)
  before_parts(scope).unshift(block)
end