1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
module Spec
module DSL
# See http://rspec.rubyforge.org/documentation/before_and_after.html
module BehaviourCallbacks
def prepend_before(*args, &block)
scope, options = scope_and_options(*args)
add(scope, options, :before, :unshift, &block)
end
def append_before(*args, &block)
scope, options = scope_and_options(*args)
add(scope, options, :before, :<<, &block)
end
alias_method :before, :append_before
def prepend_after(*args, &block)
scope, options = scope_and_options(*args)
add(scope, options, :after, :unshift, &block)
end
alias_method :after, :prepend_after
def append_after(*args, &block)
scope, options = scope_and_options(*args)
add(scope, options, :after, :<<, &block)
end
def scope_and_options(*args)
args, options = args_and_options(*args)
scope = (args[0] || :each), options
end
def add(scope, options, where, how, &block)
scope ||= :each
options ||= {}
behaviour_type = options[:behaviour_type]
case scope
when :each; self.__send__("#{where}_each_parts", behaviour_type).__send__(how, block)
when :all; self.__send__("#{where}_all_parts", behaviour_type).__send__(how, block)
end
end
def remove_after(scope, &block)
after_each_parts.delete(block)
end
# Deprecated. Use before(:each)
def setup(&block)
before(:each, &block)
end
# Deprecated. Use after(:each)
def teardown(&block)
after(:each, &block)
end
def before_all_parts(behaviour_type=nil) # :nodoc:
@before_all_parts ||= {}
@before_all_parts[behaviour_type] ||= []
end
def after_all_parts(behaviour_type=nil) # :nodoc:
@after_all_parts ||= {}
@after_all_parts[behaviour_type] ||= []
end
def before_each_parts(behaviour_type=nil) # :nodoc:
@before_each_parts ||= {}
@before_each_parts[behaviour_type] ||= []
end
def after_each_parts(behaviour_type=nil) # :nodoc:
@after_each_parts ||= {}
@after_each_parts[behaviour_type] ||= []
end
def clear_before_and_after! # :nodoc:
@before_all_parts = nil
@after_all_parts = nil
@before_each_parts = nil
@after_each_parts = nil
end
end
end
end
|