rspec-puppet 2.11.1 → 3.0.0.rc.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +139 -477
  3. data/README.md +18 -5
  4. data/bin/rspec-puppet-init +4 -3
  5. data/lib/rspec-puppet/adapters.rb +67 -61
  6. data/lib/rspec-puppet/cache.rb +3 -2
  7. data/lib/rspec-puppet/consts.rb +16 -14
  8. data/lib/rspec-puppet/coverage.rb +37 -42
  9. data/lib/rspec-puppet/errors.rb +6 -6
  10. data/lib/rspec-puppet/example/application_example_group.rb +3 -1
  11. data/lib/rspec-puppet/example/class_example_group.rb +3 -1
  12. data/lib/rspec-puppet/example/define_example_group.rb +3 -1
  13. data/lib/rspec-puppet/example/function_example_group.rb +28 -23
  14. data/lib/rspec-puppet/example/host_example_group.rb +3 -1
  15. data/lib/rspec-puppet/example/provider_example_group.rb +2 -0
  16. data/lib/rspec-puppet/example/type_alias_example_group.rb +4 -2
  17. data/lib/rspec-puppet/example/type_example_group.rb +3 -1
  18. data/lib/rspec-puppet/example.rb +6 -7
  19. data/lib/rspec-puppet/facter_impl.rb +11 -10
  20. data/lib/rspec-puppet/matchers/allow_value.rb +10 -10
  21. data/lib/rspec-puppet/matchers/compile.rb +54 -61
  22. data/lib/rspec-puppet/matchers/count_generic.rb +18 -18
  23. data/lib/rspec-puppet/matchers/create_generic.rb +68 -78
  24. data/lib/rspec-puppet/matchers/dynamic_matchers.rb +13 -2
  25. data/lib/rspec-puppet/matchers/include_class.rb +5 -4
  26. data/lib/rspec-puppet/matchers/parameter_matcher.rb +11 -12
  27. data/lib/rspec-puppet/matchers/raise_error.rb +5 -1
  28. data/lib/rspec-puppet/matchers/run.rb +41 -42
  29. data/lib/rspec-puppet/matchers/type_matchers.rb +37 -48
  30. data/lib/rspec-puppet/matchers.rb +2 -0
  31. data/lib/rspec-puppet/monkey_patches/win32/registry.rb +7 -5
  32. data/lib/rspec-puppet/monkey_patches/win32/taskscheduler.rb +3 -1
  33. data/lib/rspec-puppet/monkey_patches/windows/taskschedulerconstants.rb +208 -205
  34. data/lib/rspec-puppet/monkey_patches.rb +56 -56
  35. data/lib/rspec-puppet/rake_task.rb +6 -4
  36. data/lib/rspec-puppet/raw_string.rb +2 -0
  37. data/lib/rspec-puppet/sensitive.rb +9 -7
  38. data/lib/rspec-puppet/setup.rb +43 -48
  39. data/lib/rspec-puppet/spec_helper.rb +2 -0
  40. data/lib/rspec-puppet/support.rb +133 -134
  41. data/lib/rspec-puppet/tasks/release_test.rb +8 -5
  42. data/lib/rspec-puppet/version.rb +5 -0
  43. data/lib/rspec-puppet.rb +43 -51
  44. metadata +11 -9
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'set'
2
4
  require 'rspec-puppet/matchers/parameter_matcher'
3
5
 
@@ -22,21 +24,21 @@ module RSpec::Puppet
22
24
  @befores = []
23
25
  end
24
26
 
25
- def with(*args, &block)
27
+ def with(*args)
26
28
  params = args.shift
27
- @expected_params = @expected_params | params.to_a
29
+ @expected_params |= params.to_a
28
30
  self
29
31
  end
30
32
 
31
33
  def only_with(*args, &block)
32
34
  params = args.shift
33
- @expected_params_count = (@expected_params_count || 0) + params.select { |_, v| !v.nil? }.size
34
- self.with(params, &block)
35
+ @expected_params_count = (@expected_params_count || 0) + params.compact.size
36
+ with(params, &block)
35
37
  end
36
38
 
37
- def without(*args, &block)
39
+ def without(*args)
38
40
  params = args.shift
39
- @expected_undef_params = @expected_undef_params | Array(params)
41
+ @expected_undef_params |= Array(params)
40
42
  self
41
43
  end
42
44
 
@@ -61,16 +63,17 @@ module RSpec::Puppet
61
63
  end
62
64
 
63
65
  def method_missing(method, *args, &block)
64
- if method.to_s =~ /^with_/
66
+ case method.to_s
67
+ when /^with_/
65
68
  param = method.to_s.gsub(/^with_/, '')
66
69
  @expected_params << [param, args[0]]
67
70
  self
68
- elsif method.to_s =~ /^only_with_/
71
+ when /^only_with_/
69
72
  param = method.to_s.gsub(/^only_with_/, '')
70
73
  @expected_params_count = (@expected_params_count || 0) + 1
71
74
  @expected_params << [param, args[0]]
72
75
  self
73
- elsif method.to_s =~ /^without_/
76
+ when /^without_/
74
77
  param = method.to_s.gsub(/^without_/, '')
75
78
  @expected_undef_params << [param, args[0]]
76
79
  self
@@ -95,21 +98,19 @@ module RSpec::Puppet
95
98
  end
96
99
  end
97
100
 
98
- if resource.builtin_type?
99
- namevar = resource.resource_type.key_attributes.first.to_s
100
- else
101
- namevar = 'name'
102
- end
101
+ namevar = if resource.builtin_type?
102
+ resource.resource_type.key_attributes.first.to_s
103
+ else
104
+ 'name'
105
+ end
103
106
 
104
- unless @expected_params.any? { |param| param.first.to_s == namevar }
105
- rsrc_hsh.delete(namevar.to_sym) if rsrc_hsh.has_key?(namevar.to_sym)
107
+ if @expected_params.none? { |param| param.first.to_s == namevar } && rsrc_hsh.key?(namevar.to_sym)
108
+ rsrc_hsh.delete(namevar.to_sym)
106
109
  end
107
110
 
108
- if @expected_params_count
109
- unless rsrc_hsh.size == @expected_params_count
110
- ret = false
111
- (@errors ||= []) << "exactly #{@expected_params_count} parameters but the catalogue contains #{rsrc_hsh.size}"
112
- end
111
+ if @expected_params_count && rsrc_hsh.size != @expected_params_count
112
+ ret = false
113
+ (@errors ||= []) << "exactly #{@expected_params_count} parameters but the catalogue contains #{rsrc_hsh.size}"
113
114
  end
114
115
 
115
116
  check_params(rsrc_hsh, @expected_params, :should) if @expected_params.any?
@@ -133,46 +134,40 @@ module RSpec::Puppet
133
134
 
134
135
  def description
135
136
  values = []
136
- value_str_prefix = "with"
137
+ value_str_prefix = 'with'
137
138
 
138
- if @expected_params_count
139
- values << "exactly #{@expected_params_count} parameters"
140
- end
139
+ values << "exactly #{@expected_params_count} parameters" if @expected_params_count
141
140
 
142
- if @expected_params.any?
143
- values.concat(generate_param_list(@expected_params, :should))
144
- end
141
+ values.concat(generate_param_list(@expected_params, :should)) if @expected_params.any?
145
142
 
146
- if @expected_undef_params.any?
147
- values.concat(generate_param_list(@expected_undef_params, :not))
148
- end
143
+ values.concat(generate_param_list(@expected_undef_params, :not)) if @expected_undef_params.any?
149
144
 
150
145
  if @notifies.any?
151
- value_str_prefix = "that notifies"
146
+ value_str_prefix = 'that notifies'
152
147
  values = @notifies
153
148
  end
154
149
 
155
150
  if @subscribes.any?
156
- value_str_prefix = "that subscribes to"
151
+ value_str_prefix = 'that subscribes to'
157
152
  values = @subscribes
158
153
  end
159
154
 
160
155
  if @requires.any?
161
- value_str_prefix = "that requires"
156
+ value_str_prefix = 'that requires'
162
157
  values = @requires
163
158
  end
164
159
 
165
160
  if @befores.any?
166
- value_str_prefix = "that comes before"
161
+ value_str_prefix = 'that comes before'
167
162
  values = @befores
168
163
  end
169
164
 
170
165
  unless values.empty?
171
- if values.length == 1
172
- value_str = " #{value_str_prefix} #{values.first}"
173
- else
174
- value_str = " #{value_str_prefix} #{values[0..-2].join(", ")} and #{values[-1]}"
175
- end
166
+ value_str = if values.length == 1
167
+ " #{value_str_prefix} #{values.first}"
168
+ else
169
+ " #{value_str_prefix} #{values[0..-2].join(', ')} and #{values[-1]}"
170
+ end
176
171
  end
177
172
 
178
173
  "contain #{@referenced_type}[#{@title}]#{value_str}"
@@ -191,41 +186,42 @@ module RSpec::Puppet
191
186
  end
192
187
 
193
188
  def expected
194
- @errors.map {|e| e.expected if e.respond_to?(:expected)}.compact.join("\n\n")
189
+ @errors.filter_map { |e| e.expected if e.respond_to?(:expected) }.join("\n\n")
195
190
  end
196
191
 
197
192
  def actual
198
- @errors.map {|e| e.actual if e.respond_to?(:actual)}.compact.join("\n\n")
193
+ @errors.filter_map { |e| e.actual if e.respond_to?(:actual) }.join("\n\n")
199
194
  end
200
195
 
201
196
  private
197
+
202
198
  def referenced_type(type)
203
- type.split('__').map { |r| r.capitalize }.join('::')
199
+ type.split('__').map(&:capitalize).join('::')
204
200
  end
205
201
 
206
202
  def errors
207
- @errors.empty? ? "" : " with #{@errors.join(', and parameter ')}"
203
+ @errors.empty? ? '' : " with #{@errors.join(', and parameter ')}"
208
204
  end
209
205
 
210
206
  def generate_param_list(list, type)
211
207
  output = []
212
208
  list.each do |param, value|
213
209
  if value.nil?
214
- output << "#{param.to_s} #{type == :not ? 'un' : ''}defined"
210
+ output << "#{param} #{type == :not ? 'un' : ''}defined"
215
211
  else
216
212
  a = type == :not ? '!' : '='
217
213
  b = value.is_a?(Regexp) ? '~' : '>'
218
- if param.to_s == 'content' and value.is_a?( String )
219
- output << "#{param.to_s} #{type == :not ? 'not ' : ''} supplied string"
220
- else
221
- output << "#{param.to_s} #{a}#{b} #{value.inspect}"
222
- end
214
+ output << if (param.to_s == 'content') && value.is_a?(String)
215
+ "#{param} #{type == :not ? 'not ' : ''} supplied string"
216
+ else
217
+ "#{param} #{a}#{b} #{value.inspect}"
218
+ end
223
219
  end
224
220
  end
225
221
  output
226
222
  end
227
223
 
228
- def check_befores(catalogue, resource)
224
+ def check_befores(_catalogue, resource)
229
225
  @befores.each do |ref|
230
226
  unless precedes?(resource, canonicalize_resource(ref))
231
227
  @errors << BeforeRelationshipError.new(resource.to_ref, ref)
@@ -233,7 +229,7 @@ module RSpec::Puppet
233
229
  end
234
230
  end
235
231
 
236
- def check_requires(catalogue, resource)
232
+ def check_requires(_catalogue, resource)
237
233
  @requires.each do |ref|
238
234
  unless precedes?(canonicalize_resource(ref), resource)
239
235
  @errors << RequireRelationshipError.new(resource.to_ref, ref)
@@ -241,7 +237,7 @@ module RSpec::Puppet
241
237
  end
242
238
  end
243
239
 
244
- def check_notifies(catalogue, resource)
240
+ def check_notifies(_catalogue, resource)
245
241
  @notifies.each do |ref|
246
242
  unless notifies?(resource, canonicalize_resource(ref))
247
243
  @errors << NotifyRelationshipError.new(resource.to_ref, ref)
@@ -249,7 +245,7 @@ module RSpec::Puppet
249
245
  end
250
246
  end
251
247
 
252
- def check_subscribes(catalogue, resource)
248
+ def check_subscribes(_catalogue, resource)
253
249
  @subscribes.each do |ref|
254
250
  unless notifies?(canonicalize_resource(ref), resource)
255
251
  @errors << SubscribeRelationshipError.new(resource.to_ref, ref)
@@ -269,13 +265,13 @@ module RSpec::Puppet
269
265
  res = resource_from_ref(resource_ref(resource))
270
266
  if res.nil?
271
267
  resource = Struct.new(:type, :title).new(*@catalogue.title_key_for_ref(resource)) if resource.is_a?(String)
272
- res = @catalogue.resource_keys.select { |type, name|
268
+ res = @catalogue.resource_keys.select do |type, _name|
273
269
  type == resource.type
274
- }.map { |type, name|
270
+ end.filter_map do |type, name|
275
271
  @catalogue.resource(type, name)
276
- }.compact.find { |cat_res|
272
+ end.find do |cat_res|
277
273
  cat_res.builtin_type? && cat_res.uniqueness_key.first == resource.title
278
- }
274
+ end
279
275
  end
280
276
  res
281
277
  end
@@ -290,31 +286,31 @@ module RSpec::Puppet
290
286
  return results unless resource
291
287
 
292
288
  # guard to prevent infinite recursion
293
- if visited.include?(resource.object_id)
294
- return [canonicalize_resource_ref(resource)]
295
- else
296
- visited << resource.object_id
297
- end
289
+ return [canonicalize_resource_ref(resource)] if visited.include?(resource.object_id)
290
+
291
+ visited << resource.object_id
298
292
 
299
293
  Array[resource[type]].flatten.compact.each do |r|
300
294
  results << canonicalize_resource_ref(r)
301
295
  results << relationship_refs(r, type, visited)
302
296
 
303
297
  res = canonicalize_resource(r)
304
- if res && res.builtin_type?
298
+ if res&.builtin_type?
305
299
  results << res.to_ref
306
300
  results << "#{res.type.to_s.capitalize}[#{res.uniqueness_key.first}]"
307
301
  end
308
302
  end
309
303
 
310
304
  # Add auto* (autorequire etc) if any
311
- if [:before, :notify, :require, :subscribe].include?(type)
305
+ if %i[before notify require subscribe].include?(type)
312
306
  func = "eachauto#{type}".to_sym
313
307
  if resource.resource_type.respond_to?(func)
314
308
  resource.resource_type.send(func) do |t, b|
315
309
  Array(resource.to_ral.instance_eval(&b)).each do |dep|
310
+ next if dep.nil?
311
+
316
312
  res = "#{t.to_s.capitalize}[#{dep}]"
317
- if r = relationship_refs(res, type, visited)
313
+ if (r = relationship_refs(res, type, visited))
318
314
  results << res
319
315
  results << r
320
316
  end
@@ -345,7 +341,7 @@ module RSpec::Puppet
345
341
  end
346
342
 
347
343
  # Nothing found
348
- return false
344
+ false
349
345
  end
350
346
 
351
347
  def notifies?(first, second)
@@ -356,14 +352,12 @@ module RSpec::Puppet
356
352
  notify_refs = relationship_refs(u, :notify)
357
353
  subscribe_refs = relationship_refs(v, :subscribe)
358
354
 
359
- if notify_refs.include?(v.to_ref) || subscribe_refs.include?(u.to_ref)
360
- return true
361
- end
355
+ return true if notify_refs.include?(v.to_ref) || subscribe_refs.include?(u.to_ref)
362
356
  end
363
357
  end
364
358
 
365
359
  # Nothing found
366
- return false
360
+ false
367
361
  end
368
362
 
369
363
  # @param resource [Hash<Symbol, Object>] The resource in the catalog
@@ -373,15 +367,11 @@ module RSpec::Puppet
373
367
  list.each do |param, value|
374
368
  param = param.to_sym
375
369
 
376
- if value.nil? then
377
- unless resource[param].nil?
378
- @errors << "#{param} undefined but it is set to #{resource[param].inspect}"
379
- end
370
+ if value.nil?
371
+ @errors << "#{param} undefined but it is set to #{resource[param].inspect}" unless resource[param].nil?
380
372
  else
381
373
  m = ParameterMatcher.new(param, value, type)
382
- unless m.matches?(resource)
383
- @errors.concat m.errors
384
- end
374
+ @errors.concat m.errors unless m.matches?(resource)
385
375
  end
386
376
  end
387
377
  end
@@ -1,9 +1,18 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RSpec::Puppet
2
4
  module ManifestMatchers
3
5
  def method_missing(method, *args, &block)
4
- return RSpec::Puppet::ManifestMatchers::CreateGeneric.new(method, *args, &block) if method.to_s =~ /^(create|contain)_/
5
- return RSpec::Puppet::ManifestMatchers::CountGeneric.new(nil, args[0], method) if method.to_s =~ /^have_.+_count$/
6
+ if /^(create|contain)_/.match?(method.to_s)
7
+ return RSpec::Puppet::ManifestMatchers::CreateGeneric.new(method, *args,
8
+ &block)
9
+ end
10
+ if /^have_.+_count$/.match?(method.to_s)
11
+ return RSpec::Puppet::ManifestMatchers::CountGeneric.new(nil, args[0],
12
+ method)
13
+ end
6
14
  return RSpec::Puppet::ManifestMatchers::Compile.new if method == :compile
15
+
7
16
  super
8
17
  end
9
18
  end
@@ -11,6 +20,7 @@ module RSpec::Puppet
11
20
  module FunctionMatchers
12
21
  def method_missing(method, *args, &block)
13
22
  return RSpec::Puppet::FunctionMatchers::Run.new if method == :run
23
+
14
24
  super
15
25
  end
16
26
  end
@@ -18,6 +28,7 @@ module RSpec::Puppet
18
28
  module TypeMatchers
19
29
  def method_missing(method, *args, &block)
20
30
  return RSpec::Puppet::TypeMatchers::CreateGeneric.new(method, *args, &block) if method == :be_valid_type
31
+
21
32
  super
22
33
  end
23
34
  end
@@ -1,10 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RSpec::Puppet
2
4
  module ManifestMatchers
3
5
  extend RSpec::Matchers::DSL
4
6
 
5
7
  matcher :include_class do |expected_class|
6
8
  match do |catalogue|
7
- RSpec.deprecate('include_class()', :replacement => 'contain_class()')
9
+ RSpec.deprecate('include_class()', replacement: 'contain_class()')
8
10
  catalogue.call.classes.include?(expected_class)
9
11
  end
10
12
 
@@ -13,11 +15,11 @@ module RSpec::Puppet
13
15
  end
14
16
 
15
17
  if RSpec::Version::STRING < '3'
16
- failure_message_for_should do |actual|
18
+ failure_message_for_should do |_actual|
17
19
  "expected that the catalogue would include Class[#{expected_class}]"
18
20
  end
19
21
  else
20
- failure_message do |actual|
22
+ failure_message do |_actual|
21
23
  "expected that the catalogue would include Class[#{expected_class}]"
22
24
  end
23
25
  end
@@ -30,6 +32,5 @@ module RSpec::Puppet
30
32
  true
31
33
  end
32
34
  end
33
-
34
35
  end
35
36
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RSpec::Puppet
2
4
  module ManifestMatchers
3
5
  class ParameterMatcher
@@ -7,7 +9,9 @@ module RSpec::Puppet
7
9
  # @param value [Object] The expected data to match the parameter against
8
10
  # @param type [:should, :not] Whether the given parameter should match
9
11
  def initialize(parameter, value, type)
10
- @parameter, @value, @type = parameter, value, type
12
+ @parameter = parameter
13
+ @value = value
14
+ @type = type
11
15
 
12
16
  @should_match = (type == :should)
13
17
 
@@ -31,9 +35,7 @@ module RSpec::Puppet
31
35
 
32
36
  retval = check(expected, actual)
33
37
 
34
- unless retval
35
- @errors << MatchError.new(@parameter, expected, actual, !@should_match)
36
- end
38
+ @errors << MatchError.new(@parameter, expected, actual, !@should_match) unless retval
37
39
 
38
40
  retval
39
41
  end
@@ -53,6 +55,7 @@ module RSpec::Puppet
53
55
  # @return [true, false] If the resource matched
54
56
  def check(expected, actual)
55
57
  return false if !expected.is_a?(Proc) && actual.nil? && !expected.nil?
58
+
56
59
  case expected
57
60
  when Proc
58
61
  check_proc(expected, actual)
@@ -84,16 +87,14 @@ module RSpec::Puppet
84
87
  # key in the expected hash, there's a stringified key in the actual hash
85
88
  # with a matching value.
86
89
  def check_hash(expected, actual)
87
- op = @should_match ? :"==" : :"!="
90
+ op = @should_match ? :'==' : :'!='
88
91
 
89
92
  unless actual.class.send(op, expected.class)
90
93
  @errors << MatchError.new(@parameter, expected, actual, !@should_match)
91
94
  return false
92
95
  end
93
96
 
94
- unless expected.keys.size.send(op, actual.keys.size)
95
- return false
96
- end
97
+ return false unless expected.keys.size.send(op, actual.keys.size)
97
98
 
98
99
  expected.keys.all? do |key|
99
100
  check(expected[key], actual[key])
@@ -101,16 +102,14 @@ module RSpec::Puppet
101
102
  end
102
103
 
103
104
  def check_array(expected, actual)
104
- op = @should_match ? :"==" : :"!="
105
+ op = @should_match ? :'==' : :'!='
105
106
 
106
107
  unless actual.class.send(op, expected.class)
107
108
  @errors << MatchError.new(@parameter, expected, actual, !@should_match)
108
109
  return false
109
110
  end
110
111
 
111
- unless expected.size.send(op, actual.size)
112
- return false
113
- end
112
+ return false unless expected.size.send(op, actual.size)
114
113
 
115
114
  (0...expected.size).all? do |index|
116
115
  check(expected[index], actual[index])
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RSpec::Puppet
2
4
  module GenericMatchers
3
5
  # Due to significant code base depending on the
@@ -16,7 +18,9 @@ module RSpec::Puppet
16
18
  end
17
19
  end
18
20
 
19
- def raise_error(error=defined?(RSpec::Matchers::BuiltIn::RaiseError::UndefinedValue) ? RSpec::Matchers::BuiltIn::RaiseError::UndefinedValue : nil, message=nil, &block)
21
+ def raise_error(
22
+ error = defined?(RSpec::Matchers::BuiltIn::RaiseError::UndefinedValue) ? RSpec::Matchers::BuiltIn::RaiseError::UndefinedValue : nil, message = nil, &block
23
+ )
20
24
  RaiseError.new(error, message, &block)
21
25
  end
22
26
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RSpec::Puppet
2
4
  module FunctionMatchers
3
5
  class Run
@@ -15,32 +17,33 @@ module RSpec::Puppet
15
17
 
16
18
  if @has_expected_error
17
19
  if @has_returned
18
- return false
20
+ false
19
21
  elsif @actual_error.is_a?(@expected_error)
20
22
  case @expected_error_message
21
23
  when nil
22
- return true
24
+ true
23
25
  when Regexp
24
- return !!(@actual_error.message =~ @expected_error_message)
26
+ !(@actual_error.message =~ @expected_error_message).nil?
25
27
  else
26
- return @actual_error.message == @expected_error_message
28
+ @actual_error.message == @expected_error_message
27
29
  end
28
30
  else # error did not match
29
- return false
31
+ false
30
32
  end
31
33
  elsif @has_expected_return
32
- if !@has_returned
33
- return false
34
+ return false unless @has_returned
35
+
36
+ case @expected_return
37
+ when Regexp
38
+ !(@actual_return =~ @expected_return).nil?
39
+ when RSpec::Mocks::ArgumentMatchers::KindOf, RSpec::Matchers::AliasedMatcher
40
+ @expected_return === @actual_return
34
41
  else
35
- case @expected_return
36
- when Regexp
37
- return !!(@actual_return =~ @expected_return)
38
- else
39
- return @actual_return == @expected_return
40
- end
42
+ @actual_return == @expected_return
41
43
  end
44
+
42
45
  else
43
- return @has_returned
46
+ @has_returned
44
47
  end
45
48
  end
46
49
 
@@ -60,30 +63,30 @@ module RSpec::Puppet
60
63
  def and_return(value)
61
64
  @has_expected_return = true
62
65
  @expected_return = value
63
- if value.is_a? Regexp
64
- @desc = "match #{value.inspect}"
65
- else
66
- @desc = "return #{value.inspect}"
67
- end
66
+ @desc = if value.is_a? Regexp
67
+ "match #{value.inspect}"
68
+ else
69
+ "return #{value.inspect}"
70
+ end
68
71
  self
69
72
  end
70
73
 
71
- def and_raise_error(error_or_message, message=nil)
74
+ def and_raise_error(error_or_message, message = nil)
72
75
  @has_expected_error = true
73
76
  case error_or_message
74
77
  when String, Regexp
75
- @expected_error, @expected_error_message = Exception, error_or_message
78
+ @expected_error = Exception
79
+ @expected_error_message = error_or_message
76
80
  else
77
- @expected_error, @expected_error_message = error_or_message, message
81
+ @expected_error = error_or_message
82
+ @expected_error_message = message
78
83
  end
79
84
 
80
85
  if @expected_error_message.is_a? Regexp
81
86
  @desc = "raise an #{@expected_error} with the message matching #{@expected_error_message.inspect}"
82
87
  else
83
88
  @desc = "raise an #{@expected_error}"
84
- unless @expected_error_message.nil?
85
- @desc += "with the message #{@expected_error_message.inspect}"
86
- end
89
+ @desc += "with the message #{@expected_error_message.inspect}" unless @expected_error_message.nil?
87
90
  end
88
91
  self
89
92
  end
@@ -113,6 +116,7 @@ module RSpec::Puppet
113
116
  end
114
117
 
115
118
  private
119
+
116
120
  def func_name
117
121
  @func_obj.func_name
118
122
  end
@@ -130,30 +134,25 @@ module RSpec::Puppet
130
134
  else
131
135
  " instead of #{@actual_error.class.inspect}(#{@actual_error})\n#{@actual_error.backtrace.join("\n")}"
132
136
  end
133
- else # function has returned
134
- if @has_expected_error
135
- " instead of returning #{@actual_return.inspect}"
136
- else
137
- " instead of #{@actual_return.inspect}"
138
- end
137
+ elsif @has_expected_error # function has returned
138
+ " instead of returning #{@actual_return.inspect}"
139
+ else
140
+ " instead of #{@actual_return.inspect}"
139
141
  end
140
142
  end
141
143
 
142
- def failure_message_generic(type, func_obj)
143
- message = "expected #{func_name}(#{func_params}) to "
144
- message << "not " if type == :should_not
144
+ def failure_message_generic(type, _func_obj)
145
+ # message is mutable
146
+ message = +"expected #{func_name}(#{func_params}) to "
147
+ message << 'not ' if type == :should_not
145
148
 
146
149
  if @has_expected_return
147
150
  message << "have returned #{@expected_return.inspect}"
151
+ elsif @has_expected_error
152
+ message << "have raised #{@expected_error.inspect}"
153
+ message << " matching #{@expected_error_message.inspect}" if @expected_error_message
148
154
  else
149
- if @has_expected_error
150
- message << "have raised #{@expected_error.inspect}"
151
- if @expected_error_message
152
- message << " matching #{@expected_error_message.inspect}"
153
- end
154
- else
155
- message << "have run successfully"
156
- end
155
+ message << 'have run successfully'
157
156
  end
158
157
  message << failure_message_actual(type)
159
158
  end