Class: ChefSpec::Matchers::ResourceMatcher
- Inherits:
-
Object
- Object
- ChefSpec::Matchers::ResourceMatcher
show all
- Defined in:
- lib/chefspec/matchers/resource_matcher.rb
Instance Method Summary
collapse
Constructor Details
#initialize(resource_name, expected_action, expected_identity) ⇒ ResourceMatcher
Returns a new instance of ResourceMatcher.
6
7
8
9
10
|
# File 'lib/chefspec/matchers/resource_matcher.rb', line 6
def initialize(resource_name, expected_action, expected_identity)
@resource_name = resource_name
@expected_action = expected_action
@expected_identity = expected_identity
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(m, *args, &block) ⇒ Object
Allow users to specify fancy #with matchers.
32
33
34
35
36
37
38
39
|
# File 'lib/chefspec/matchers/resource_matcher.rb', line 32
def method_missing(m, *args, &block)
if m.to_s =~ /^with_(.+)$/
with($1.to_sym => args.first)
self
else
super
end
end
|
Instance Method Details
#at_compile_time ⇒ Object
17
18
19
20
21
|
# File 'lib/chefspec/matchers/resource_matcher.rb', line 17
def at_compile_time
raise ArgumentError, 'Cannot specify both .at_converge_time and .at_compile_time!' if @converge_time
@compile_time = true
self
end
|
#at_converge_time ⇒ Object
23
24
25
26
27
|
# File 'lib/chefspec/matchers/resource_matcher.rb', line 23
def at_converge_time
raise ArgumentError, 'Cannot specify both .at_compile_time and .at_converge_time!' if @compile_time
@converge_time = true
self
end
|
#description ⇒ Object
41
42
43
|
# File 'lib/chefspec/matchers/resource_matcher.rb', line 41
def description
%Q{#{@expected_actioe} #{@resource_name} "#{@expected_identity}"}
end
|
#failure_message ⇒ Object
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
|
# File 'lib/chefspec/matchers/resource_matcher.rb', line 54
def failure_message
if resource
if unmatched_parameters.empty?
if @compile_time
%Q{expected "#{resource.to_s}" to be run at compile time}
else
%Q{expected "#{resource.to_s}" to be run at converge time}
end
else
message = %Q{expected "#{resource.to_s}" to have parameters:} \
"\n\n" \
" " + unmatched_parameters.collect { |parameter, h|
msg = "#{parameter} #{h[:expected].inspect}, was #{h[:actual].inspect}"
diff = ::RSpec::Matchers::ExpectedsForMultipleDiffs.from(h[:expected]) \
.message_with_diff(message, ::RSpec::Expectations::differ, h[:actual])
msg += diff if diff
msg
}.join("\n ")
end
else
%Q{expected "#{@resource_name}[#{@expected_identity}]"} \
" with action :#{@expected_action} to be in Chef run." \
" Other #{@resource_name} resources:" \
"\n\n" \
" " + similar_resources.map(&:to_s).join("\n ") + "\n "
end
end
|
#failure_message_when_negated ⇒ Object
82
83
84
85
86
87
88
89
90
91
92
|
# File 'lib/chefspec/matchers/resource_matcher.rb', line 82
def failure_message_when_negated
if resource
message = %Q{expected "#{resource.to_s}" actions #{resource.performed_actions.inspect} to not exist}
else
message = %Q{expected "#{resource.to_s}" to not exist}
end
message << " at compile time" if @compile_time
message << " at converge time" if @converge_time
message
end
|
#matches?(runner) ⇒ Boolean
45
46
47
48
49
50
51
52
|
# File 'lib/chefspec/matchers/resource_matcher.rb', line 45
def matches?(runner)
@runner = runner
if resource
ChefSpec::Coverage.cover!(resource)
unmatched_parameters.empty? && correct_phase?
end
end
|
#with(parameters = {}) ⇒ Object
12
13
14
15
|
# File 'lib/chefspec/matchers/resource_matcher.rb', line 12
def with(parameters = {})
params.merge!(parameters)
self
end
|