rspec-puppet 2.4.0 → 2.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 09f6ee077554387daa2811aecd6d308670c50693
4
- data.tar.gz: c9c666f424696d2a649b0d034fcc645bb8cd1daf
3
+ metadata.gz: 1a4f52ea0428c49bc328570e7a71776b75b800b2
4
+ data.tar.gz: 461fadebe1cd4756715a99d54fefdf51c020a17b
5
5
  SHA512:
6
- metadata.gz: 9ee25b36e54a9d9fda26f4b1e2d876ee87dbf783a7f216c57c7fbbeae1550a006178edc9358748c6e703b8629a2d0971217c46f6106dddd1f96ed978a3c8c2cd
7
- data.tar.gz: 3083ad10c6066c73da20e5a15a6befbe7f4f54451913046be9a0791c5d52f43f2b346c2d0b52c3551f3f976bd6015149a1d6bb52ffe55a7b448e75acf6bdb59e
6
+ metadata.gz: 8f79f8be40bf4e2c77e11ddf68130ea0fe97b8e629cf4768c2da1a15a096ed65fad3dff160208a36b9d221f652564956fc15113b56589562a8890c01a4678098
7
+ data.tar.gz: bc64b10392874054ebf8cfe7712abc25874bfa3d44ebd3c6dced81d3eae7c99b359754dd3d74481dfc1851264ce347f8f76990e0022f8e653b622a77ade449d5
data/CHANGELOG.md CHANGED
@@ -2,6 +2,25 @@
2
2
  All notable changes to this project will be documented in this file. This
3
3
  project adheres to [Semantic Versioning](http://semver.org/).
4
4
 
5
+ ## [2.5.0]
6
+
7
+ Headline features are app management, nested hashes in params, and testing for "internal" functions.
8
+
9
+ Thanks to everyone who contributed: Leo Arnold, Matt Schuchard, and Si Wilkins
10
+
11
+ ### Changed
12
+
13
+ * Updates to the README
14
+ * Improve Gemfile to work with older rubies
15
+
16
+ ### Added
17
+
18
+ * Add support for app management testing
19
+ * Enable nested hashes in params
20
+ * After refactoring the function test code, puppet 4 "internal" functions can now be tested too
21
+ * Link functions and types on setup
22
+ * Increased test coverage
23
+
5
24
  ## [2.4.0]
6
25
 
7
26
  This release now supports testing exported resources in the same way that normal resources in the catalog are tested. Access them in your examples using `exported_resources`. See "Testing Exported Resources" in the README for examples.
@@ -114,7 +133,8 @@ Thanks to Adrien Thebo, Alex Harvey, Brian, Dan Bode, Dominic Cleal, Javier Pala
114
133
  ## 1.0.1 and earlier
115
134
  For changelog of versions 1.0.1 and earlier, see http://rspec-puppet.com/changelog/
116
135
 
117
- [2.x]: https://github.com/rodjek/rspec-puppet/compare/v2.4.0...master
136
+ [2.x]: https://github.com/rodjek/rspec-puppet/compare/v2.5.0...master
137
+ [2.5.0]: https://github.com/rodjek/rspec-puppet/compare/v2.4.0...v2.5.0
118
138
  [2.4.0]: https://github.com/rodjek/rspec-puppet/compare/v2.3.2...v2.4.0
119
139
  [2.3.2]: https://github.com/rodjek/rspec-puppet/compare/v2.3.1...v2.3.2
120
140
  [2.3.1]: https://github.com/rodjek/rspec-puppet/compare/v2.3.0...v2.3.1
data/README.md CHANGED
@@ -37,6 +37,10 @@ structure and naming convention.
37
37
  | |
38
38
  | +-- <define_name>_spec.rb
39
39
  |
40
+ +-- applications
41
+ | |
42
+ | +-- <application_name>_spec.rb
43
+ |
40
44
  +-- functions
41
45
  | |
42
46
  | +-- <function_name>_spec.rb
@@ -64,6 +68,10 @@ describe 'mydefine', :type => :define do
64
68
  ...
65
69
  end
66
70
 
71
+ describe 'myapplication', :type => :application do
72
+ ...
73
+ end
74
+
67
75
  describe 'myfunction', :type => :puppet_function do
68
76
  ...
69
77
  end
@@ -77,7 +85,7 @@ describe 'myhost.example.com', :type => :host do
77
85
  end
78
86
  ```
79
87
 
80
- ## Defined Types & Classes
88
+ ## Defined Types, Classes & Applications
81
89
 
82
90
  ### Matchers
83
91
 
@@ -354,16 +362,45 @@ let(:title) { 'foo' }
354
362
 
355
363
  #### Specifying the parameters to pass to a resources or parameterised class
356
364
 
365
+ Parameters of a defined type, class or application can be passed defining `:params` in a let,
366
+ and passing it a hash as seen below.
367
+
357
368
  ```ruby
358
369
  let(:params) { {:ensure => 'present', ...} }
359
370
  ```
360
371
 
361
- ##### Passing Puppet's `undef` as a parameter value
372
+ For passing Puppet's `undef` as a paremeter value, you can simply use `:undef` and it will
373
+ be translated to `undef` when compiling. For example:
362
374
 
363
375
  ```ruby
364
376
  let(:params) { {:user => :undef, ...} }
365
377
  ```
366
378
 
379
+ For references to nodes or resources as seen when using `require` or `before` properties,
380
+ or an `application` resource you can pass the string as an argument to the `ref` helper:
381
+
382
+ ```ruby
383
+ let(:params) { :require => ref('Package', 'sudoku') }
384
+ ```
385
+
386
+ Which translates to:
387
+
388
+ ```puppet
389
+ mydefine { 'mytitle': require => Package['sudoku'] }
390
+ ```
391
+
392
+ Another example, for an application setup (when using `app_management`):
393
+
394
+ ```ruby
395
+ let(:params) { { :nodes => { ref('Node', 'dbnode') => ref('Myapp::Mycomponent', 'myapp') } } }
396
+ ```
397
+
398
+ Will translate to:
399
+
400
+ ```puppet
401
+ site { myapp { 'myimpl': nodes => { Node['dbnode'] => Myapp::Mycomponent['myimpl'] } } }
402
+ ```
403
+
367
404
  #### Specifying the FQDN of the test node
368
405
 
369
406
  If the manifest you're testing expects to run on host with a particular name,
@@ -450,6 +487,46 @@ You can also use `exported_resources` directly in a test:
450
487
  it { expect(exported_resources).to contain_file('foo') }
451
488
  ```
452
489
 
490
+ #### Testing applications
491
+
492
+ Applications in some ways behave as defined resources, but are more complex so
493
+ require a number of elements already documented above to be combined for testing.
494
+
495
+ A full example of the simplest rspec test for a single component application:
496
+
497
+ ```ruby
498
+ require 'spec_helper'
499
+
500
+ describe 'orch_app' do
501
+ let(:node) { 'my_node' }
502
+ let(:title) { 'my_awesome_app' }
503
+ let(:params) do
504
+ {
505
+ :nodes => {
506
+ ref('Node', node) => ref('Orch_app::Db', title),
507
+ }
508
+ }
509
+ end
510
+
511
+ it { should compile }
512
+ it { should contain_orch_app(title) }
513
+ end
514
+ ```
515
+
516
+ Each piece is required:
517
+
518
+ * You must turn on app_management during testing for the handling to work
519
+ * The `:node` definition is required to be set so later on you can reference it in the `:nodes` argument within `:params`
520
+ * Applications act like defined resources, and each require a `:title` to be defined
521
+ * The `:nodes` key in `:params` requires the use of node reference mappings to resource
522
+ mappings. The `ref` keyword allows you to provide these (a normal string will not work).
523
+
524
+ Beyond these requirements, the very basic `should compile` test and other matchers
525
+ as you would expect will work the same as classes and defined resources.
526
+
527
+ **Note:** for the moment, cross-node support is not available and will return an error.
528
+ Ensure you model your tests to be single-node for the time being.
529
+
453
530
  ## Functions
454
531
 
455
532
  ### Matchers
@@ -554,6 +631,20 @@ before(:each) { scope.expects(:lookupvar).with('some_variable').returns('some_va
554
631
  it { is_expected.to run.with_params('...').and_return('...') }
555
632
  ```
556
633
 
634
+ Note that this does not work when testing manifests which use custom functions. Instead,
635
+ you'll need to create a replacement function directly.
636
+
637
+ ```ruby
638
+ before(:each) do
639
+ Puppet::Parser::Functions.newfunction(:custom_function, :type => :rvalue) { |args|
640
+ raise ArgumentError, 'expected foobar' unless args[0] == 'foobar'
641
+ 'expected value'
642
+ }
643
+ end
644
+
645
+ ```
646
+
647
+
557
648
  ## Hiera integration
558
649
 
559
650
  ### Configuration
@@ -5,6 +5,7 @@ require 'rspec-puppet/example/function_example_group'
5
5
  require 'rspec-puppet/example/host_example_group'
6
6
  require 'rspec-puppet/example/type_example_group'
7
7
  require 'rspec-puppet/example/provider_example_group'
8
+ require 'rspec-puppet/example/application_example_group'
8
9
 
9
10
  RSpec::configure do |c|
10
11
 
@@ -31,6 +32,9 @@ RSpec::configure do |c|
31
32
  c.include RSpec::Puppet::ProviderExampleGroup, :type => :provider, :example_group => {
32
33
  :file_path => c.escaped_path(%w[spec providers])
33
34
  }
35
+ c.include RSpec::Puppet::ApplicationExampleGroup, :type => :application, :example_group => {
36
+ :file_path => c.escaped_path(%w[spec applications])
37
+ }
34
38
  else
35
39
  c.include RSpec::Puppet::DefineExampleGroup, :type => :define, :file_path => c.escaped_path(%w[spec defines])
36
40
  c.include RSpec::Puppet::ClassExampleGroup, :type => :class, :file_path => c.escaped_path(%w[spec classes])
@@ -38,6 +42,7 @@ RSpec::configure do |c|
38
42
  c.include RSpec::Puppet::HostExampleGroup, :type => :host, :file_path => c.escaped_path(%w[spec hosts])
39
43
  c.include RSpec::Puppet::TypeExampleGroup, :type => :type, :file_path => c.escaped_path(%w[spec types])
40
44
  c.include RSpec::Puppet::ProviderExampleGroup, :type => :provider, :file_path => c.escaped_path(%w[spec providers])
45
+ c.include RSpec::Puppet::ApplicationExampleGroup, :type => :application, :file_path => c.escaped_path(%w[spec applications])
41
46
  end
42
47
 
43
48
  # Hook for each example group type to remove any caches or instance variables, since they will remain
@@ -0,0 +1,19 @@
1
+ module RSpec::Puppet
2
+ # This module provides support for the application type
3
+ module ApplicationExampleGroup
4
+ include RSpec::Puppet::ManifestMatchers
5
+ include RSpec::Puppet::Support
6
+
7
+ def catalogue
8
+ @catalogue ||= load_catalogue(:application)
9
+ end
10
+
11
+ def exported_resources
12
+ lambda { load_catalogue(:application, true) }
13
+ end
14
+
15
+ def rspec_puppet_cleanup
16
+ @catalogue = nil
17
+ end
18
+ end
19
+ end
@@ -4,27 +4,87 @@ module RSpec::Puppet
4
4
  include RSpec::Puppet::ManifestMatchers
5
5
  include RSpec::Puppet::Support
6
6
 
7
+ class V4FunctionWrapper
8
+ attr_reader :func, :func_name
9
+
10
+ def initialize(name, func, overrides)
11
+ @func_name = name
12
+ @func = func
13
+ @overrides = overrides
14
+ end
15
+
16
+ # This method is used by the `run` matcher to trigger the function execution, and provides a uniform interface across all puppet versions.
17
+ def execute(*args)
18
+ Puppet.override(@overrides, "rspec-test scope") do
19
+ @func.call(@overrides[:global_scope], *args)
20
+ end
21
+ end
22
+
23
+ # compatibility alias for existing tests
24
+ def call(scope, *args)
25
+ RSpec.deprecate("subject.call", :replacement => "is_expected.to run.with().and_raise_error(), or execute()")
26
+ execute(*args)
27
+ end
28
+ end
29
+
30
+ class V3FunctionWrapper
31
+ attr_accessor :func_name
32
+
33
+ def initialize(name, func)
34
+ @func_name = name
35
+ @func = func
36
+ end
37
+
38
+ # This method is used by the `run` matcher to trigger the function execution, and provides a uniform interface across all puppet versions.
39
+ def execute(*args)
40
+ if args.nil?
41
+ @func.call
42
+ else
43
+ @func.call(args)
44
+ end
45
+ end
46
+
47
+ # This method was formerly used by the `run` matcher to trigger the function execution, and provides puppet versions dependant interface.
48
+ def call(*args)
49
+ RSpec.deprecate("subject.call", :replacement => "is_expected.to run.with().and_raise_error(), or execute()")
50
+ if args.nil?
51
+ @func.call
52
+ else
53
+ @func.call(*args)
54
+ end
55
+ end
56
+ end
57
+
58
+ # (at least) rspec 3.5 doesn't seem to memoize `subject` when called from
59
+ # a before(:each) hook, so we need to memoize it ourselves.
7
60
  def subject
8
- function_name = self.class.top_level_description.downcase
61
+ @subject ||= find_function
62
+ end
9
63
 
10
- vardir = setup_puppet
64
+ def find_function
65
+ function_name = self.class.top_level_description.downcase
11
66
 
12
- if Puppet.version.to_f >= 4.0
67
+ with_vardir do
13
68
  env = adapter.current_environment
14
- loader = Puppet::Pops::Loaders.new(env)
15
- func = loader.private_environment_loader.load(:function,function_name)
16
- return func if func
17
- end
18
69
 
19
- # Return the method instance for the function. This can be used with
20
- # method.call
21
- if env
22
- return nil unless Puppet::Parser::Functions.function(function_name,env)
23
- else
24
- return nil unless Puppet::Parser::Functions.function(function_name)
70
+ if Puppet.version.to_f >= 4.0
71
+ context_overrides = compiler.context_overrides
72
+ func = nil
73
+ Puppet.override(context_overrides, "rspec-test scope") do
74
+ loader = Puppet::Pops::Loaders.new(env)
75
+ func = V4FunctionWrapper.new(function_name, loader.private_environment_loader.load(:function, function_name), context_overrides)
76
+ @scope = context_overrides[:global_scope]
77
+ end
78
+
79
+ return func if func.func
80
+ end
81
+
82
+ if Puppet::Parser::Functions.function(function_name)
83
+ V3FunctionWrapper.new(function_name, scope.method("function_#{function_name}".intern))
84
+ else
85
+ nil
86
+ end
25
87
  end
26
- FileUtils.rm_rf(vardir) if File.directory?(vardir)
27
- scope.method("function_#{function_name}".intern)
28
88
  end
29
89
 
30
90
  def scope
@@ -36,6 +96,7 @@ module RSpec::Puppet
36
96
  end
37
97
 
38
98
  def rspec_puppet_cleanup
99
+ @subject = nil
39
100
  @catalogue = nil
40
101
  @compiler = nil
41
102
  @scope = nil
@@ -71,7 +132,9 @@ module RSpec::Puppet
71
132
  end
72
133
 
73
134
  def build_scope(compiler, node_name)
74
- if Puppet.version =~ /^2\.[67]/
135
+ if Puppet.version.to_f >= 4.0
136
+ return compiler.context_overrides[:global_scope]
137
+ elsif Puppet.version =~ /^2\.[67]/
75
138
  # loadall should only be necessary prior to 3.x
76
139
  # Please note, loadall needs to happen first when creating a scope, otherwise
77
140
  # you might receive undefined method `function_*' errors
@@ -3,23 +3,11 @@ module RSpec::Puppet
3
3
  class Run
4
4
  def matches?(func_obj)
5
5
  @func_obj = func_obj
6
- if @params
7
- if Puppet.version.to_f >= 4.0 and ! @func_obj.respond_to?(:receiver)
8
- @func = lambda { func_obj.call({}, *@params) }
9
- else
10
- @func = lambda { func_obj.call(@params) }
11
- end
12
- else
13
- if Puppet.version.to_f >= 4.0 and ! @func_obj.respond_to?(:receiver)
14
- @func = lambda { func_obj.call({}) }
15
- else
16
- @func = lambda { func_obj.call }
17
- end
18
- end
19
6
 
20
7
  @has_returned = false
21
8
  begin
22
- @actual_return = @func.call
9
+ # `*nil` does not evaluate to "no params" on ruby 1.8 :-(
10
+ @actual_return = @params.nil? ? @func_obj.execute : @func_obj.execute(*@params)
23
11
  @has_returned = true
24
12
  rescue Exception => e
25
13
  @actual_error = e
@@ -113,11 +101,7 @@ module RSpec::Puppet
113
101
 
114
102
  private
115
103
  def func_name
116
- if Puppet.version.to_f >= 4.0 and ! @func_ob and ! @func_obj.respond_to?(:receiver)
117
- @func_name ||= @func_obj.class.name
118
- else
119
- @func_name ||= @func_obj.name.to_s.gsub(/^function_/, '')
120
- end
104
+ @func_obj.func_name
121
105
  end
122
106
 
123
107
  def func_params
@@ -129,9 +113,9 @@ module RSpec::Puppet
129
113
  ''
130
114
  elsif @actual_error
131
115
  if @has_expected_return
132
- " instead of raising #{@actual_error.class.inspect}(#{@actual_error})"
116
+ " instead of raising #{@actual_error.class.inspect}(#{@actual_error})\n#{@actual_error.backtrace.join("\n")}"
133
117
  else
134
- " instead of #{@actual_error.class.inspect}(#{@actual_error})"
118
+ " instead of #{@actual_error.class.inspect}(#{@actual_error})\n#{@actual_error.backtrace.join("\n")}"
135
119
  end
136
120
  else # function has returned
137
121
  if @has_expected_error
@@ -0,0 +1,16 @@
1
+ module RSpec::Puppet
2
+ # A raw string object, that is used by helpers to allow consumers to return non-quoted strings
3
+ # as part of their params section.
4
+ class RawString
5
+ # Create a new RawString object
6
+ # @param [String] value string to wrap
7
+ def initialize(value)
8
+ @value = value
9
+ end
10
+
11
+ # @return [String] raw string
12
+ def inspect
13
+ @value
14
+ end
15
+ end
16
+ end
@@ -34,7 +34,7 @@ module RSpec::Puppet
34
34
 
35
35
  safe_touch('spec/fixtures/manifests/site.pp')
36
36
 
37
- %w(data manifests lib files templates).each do |dir|
37
+ %w(data manifests lib files templates functions types).each do |dir|
38
38
  if File.exist? dir
39
39
  safe_make_symlink("../../../../#{dir}", "spec/fixtures/modules/#{module_name}/#{dir}")
40
40
  end
@@ -1,5 +1,6 @@
1
1
  require 'rspec-puppet/cache'
2
2
  require 'rspec-puppet/adapters'
3
+ require 'rspec-puppet/raw_string'
3
4
 
4
5
  module RSpec::Puppet
5
6
  module Support
@@ -15,26 +16,25 @@ module RSpec::Puppet
15
16
  end
16
17
 
17
18
  def load_catalogue(type, exported = false)
18
- vardir = setup_puppet
19
-
20
- if Puppet.version.to_f >= 4.0 or Puppet[:parser] == 'future'
21
- code = [pre_cond, test_manifest(type)].compact.join("\n")
22
- else
23
- code = [import_str, pre_cond, test_manifest(type)].compact.join("\n")
24
- end
19
+ with_vardir do
20
+ if Puppet.version.to_f >= 4.0 or Puppet[:parser] == 'future'
21
+ code = [pre_cond, test_manifest(type)].compact.join("\n")
22
+ else
23
+ code = [import_str, pre_cond, test_manifest(type)].compact.join("\n")
24
+ end
25
25
 
26
- node_name = nodename(type)
26
+ node_name = nodename(type)
27
27
 
28
- hiera_config_value = self.respond_to?(:hiera_config) ? hiera_config : nil
28
+ hiera_config_value = self.respond_to?(:hiera_config) ? hiera_config : nil
29
29
 
30
- catalogue = build_catalog(node_name, facts_hash(node_name), hiera_config_value, code, exported)
30
+ catalogue = build_catalog(node_name, facts_hash(node_name), hiera_config_value, code, exported)
31
31
 
32
- test_module = class_name.split('::').first
33
- RSpec::Puppet::Coverage.add_filter(type.to_s, self.class.description)
34
- RSpec::Puppet::Coverage.add_from_catalog(catalogue, test_module)
32
+ test_module = class_name.split('::').first
33
+ RSpec::Puppet::Coverage.add_filter(type.to_s, self.class.description)
34
+ RSpec::Puppet::Coverage.add_from_catalog(catalogue, test_module)
35
35
 
36
- FileUtils.rm_rf(vardir) if File.directory?(vardir)
37
- catalogue
36
+ catalogue
37
+ end
38
38
  end
39
39
 
40
40
  def import_str
@@ -68,6 +68,12 @@ module RSpec::Puppet
68
68
  else
69
69
  "class { '#{class_name}': #{param_str} }"
70
70
  end
71
+ elsif type == :application
72
+ if self.respond_to? :params
73
+ "site { #{class_name} { '#{title}': #{param_str} } }"
74
+ else
75
+ raise ArgumentException, "You need to provide params for an application"
76
+ end
71
77
  elsif type == :define
72
78
  if self.respond_to? :params
73
79
  "#{class_name} { '#{title}': #{param_str} }"
@@ -81,7 +87,7 @@ module RSpec::Puppet
81
87
 
82
88
  def nodename(type)
83
89
  return node if self.respond_to?(:node)
84
- if [:class, :define, :function].include? type
90
+ if [:class, :define, :function, :application].include? type
85
91
  Puppet[:certname]
86
92
  else
87
93
  class_name
@@ -123,14 +129,28 @@ module RSpec::Puppet
123
129
  end
124
130
 
125
131
  def param_str
126
- params.keys.map do |r|
127
- param_val = params[r]
128
- param_val_str = if param_val == :undef
129
- 'undef' # verbatim undef keyword
130
- else
131
- escape_special_chars(param_val.inspect)
132
- end
133
- "#{r.to_s} => #{param_val_str}"
132
+ param_str_from_hash(params)
133
+ end
134
+
135
+ def str_from_value(value)
136
+ case value
137
+ when Hash
138
+ kvs = value.collect do |k,v|
139
+ "#{str_from_value(k)} => #{str_from_value(v)}"
140
+ end.join(", ")
141
+ "{ #{kvs} }"
142
+ when :undef
143
+ 'undef' # verbatim undef keyword
144
+ else
145
+ escape_special_chars(value.inspect)
146
+ end
147
+ end
148
+
149
+ def param_str_from_hash(params_hash)
150
+ # the param_str has special quoting rules, because the top-level keys are the Puppet
151
+ # params, which may not be quoted
152
+ params_hash.collect do |k,v|
153
+ "#{k.to_s} => #{str_from_value(v)}"
134
154
  end.join(', ')
135
155
  end
136
156
 
@@ -138,6 +158,11 @@ module RSpec::Puppet
138
158
  vardir = Dir.mktmpdir
139
159
  Puppet[:vardir] = vardir
140
160
 
161
+ # Enable app_management by default for Puppet versions that support it
162
+ if Puppet.version.to_f >= 4.3
163
+ Puppet[:app_management] = true
164
+ end
165
+
141
166
  adapter.modulepath.map do |d|
142
167
  Dir["#{d}/*/lib"].entries
143
168
  end.flatten.each do |lib|
@@ -147,6 +172,15 @@ module RSpec::Puppet
147
172
  vardir
148
173
  end
149
174
 
175
+ def with_vardir
176
+ begin
177
+ vardir = setup_puppet
178
+ return yield(vardir) if block_given?
179
+ ensure
180
+ FileUtils.rm_rf(vardir) if File.directory?(vardir)
181
+ end
182
+ end
183
+
150
184
  def build_catalog_without_cache(nodename, facts_val, hiera_config_val, code, exported)
151
185
 
152
186
  # If we're going to rebuild the catalog, we should clear the cached instance
@@ -206,6 +240,16 @@ module RSpec::Puppet
206
240
  end
207
241
  end
208
242
 
243
+ # Helper to return a resource/node reference, so it gets translated in params to a raw string
244
+ # without quotes.
245
+ #
246
+ # @param [String] type reference type
247
+ # @param [String] title reference title
248
+ # @return [RSpec::Puppet::RawString] return a new RawString with the type/title populated correctly
249
+ def ref(type, title)
250
+ return RSpec::Puppet::RawString.new("#{type}['#{title}']")
251
+ end
252
+
209
253
  # @!attribute [r] adapter
210
254
  # @api private
211
255
  # @return [Class < RSpec::Puppet::Adapters::Base]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-puppet
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.0
4
+ version: 2.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Sharpe
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-24 00:00:00.000000000 Z
11
+ date: 2016-10-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -40,6 +40,7 @@ files:
40
40
  - lib/rspec-puppet/coverage.rb
41
41
  - lib/rspec-puppet/errors.rb
42
42
  - lib/rspec-puppet/example.rb
43
+ - lib/rspec-puppet/example/application_example_group.rb
43
44
  - lib/rspec-puppet/example/class_example_group.rb
44
45
  - lib/rspec-puppet/example/define_example_group.rb
45
46
  - lib/rspec-puppet/example/function_example_group.rb
@@ -56,6 +57,7 @@ files:
56
57
  - lib/rspec-puppet/matchers/run.rb
57
58
  - lib/rspec-puppet/matchers/type_matchers.rb
58
59
  - lib/rspec-puppet/rake_task.rb
60
+ - lib/rspec-puppet/raw_string.rb
59
61
  - lib/rspec-puppet/setup.rb
60
62
  - lib/rspec-puppet/spec_helper.rb
61
63
  - lib/rspec-puppet/support.rb