poise 2.1.0 → 2.2.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: a493c9d1d4c7f307cfa38c39d5e9de3d7242c3b6
4
- data.tar.gz: 6b700222a7634a9e301b55dc3be8a41d61a15e04
3
+ metadata.gz: 805b189d8f29b6d7fcdcd5e189a24e525a755f96
4
+ data.tar.gz: ae33e8ec60d4d947811f35211ce3eecc69712dd8
5
5
  SHA512:
6
- metadata.gz: 3d90977a6a46d00298dddf93479023d27364aa73049e89ef97c4671af27847b695de39ac5af04e962d449818f5fd556ec4cbf168ac5f275c88d35e91c711f722
7
- data.tar.gz: 81c4de3bb755d2d8c5c2f7e6837eea4f16fab1c942b6d60d6ac611fb8f0867c3ec07153c58156402f00331b4b38e0e3671d9fce3207ec408f737b6a5efa25ff6
6
+ metadata.gz: eb2351eab975e312a23c039dd12c3b18dd4fc76307cb08c92d10702e317d935fa515d7928e0733188b03be2157779d1be8adf74c62f7f13f766927e96db726c8
7
+ data.tar.gz: dedd4fe5fdb0f15f0eb50402309ad51513b9663fd38c13dddbdb4891cbb62396d0d04c25201571769531aa638dc87ab7527dbd7a13e05bc2acc6f68f1601dd48
data/Berksfile.lock CHANGED
@@ -5,6 +5,6 @@ DEPENDENCIES
5
5
  path: test/cookbooks/poise_test
6
6
 
7
7
  GRAPH
8
- poise (2.0.2)
8
+ poise (2.2.0)
9
9
  poise_test (0.0.0)
10
10
  poise (>= 0.0.0)
data/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## v2.2.0
4
+
5
+ * Compatibility with Chef 12.4.1 and Chefspec 4.3.0.
6
+ * New helper `ResourceCloning`: Disables resource cloning between Poise-based
7
+ resources. This is enabled by default.
8
+ * Subresource parent references can be set to nil.
9
+
3
10
  ## v2.1.0
4
11
 
5
12
  * Compatibility with Chef 12.4.
data/Gemfile CHANGED
@@ -18,12 +18,16 @@ source 'https://rubygems.org/'
18
18
 
19
19
  gemspec path: File.expand_path('..', __FILE__)
20
20
 
21
- def dev_gem(name, path: File.join('..', name))
21
+ def dev_gem(name, path: File.join('..', name), github: nil)
22
22
  path = File.expand_path(File.join('..', path), __FILE__)
23
23
  if File.exist?(path)
24
24
  gem name, path: path
25
+ elsif github
26
+ gem name, github: github
25
27
  end
26
28
  end
27
29
 
28
30
  dev_gem 'halite'
29
31
  dev_gem 'poise-boiler'
32
+
33
+ gem 'kitchen-docker', github: 'portertech/kitchen-docker'
data/lib/poise/helpers.rb CHANGED
@@ -26,6 +26,7 @@ module Poise
26
26
  autoload :LWRPPolyfill, 'poise/helpers/lwrp_polyfill'
27
27
  autoload :NotifyingBlock, 'poise/helpers/notifying_block'
28
28
  autoload :OptionCollector, 'poise/helpers/option_collector'
29
+ autoload :ResourceCloning, 'poise/helpers/resource_cloning'
29
30
  autoload :ResourceName, 'poise/helpers/resource_name'
30
31
  autoload :Subresources, 'poise/helpers/subresources'
31
32
  autoload :TemplateContent, 'poise/helpers/template_content'
@@ -60,9 +60,9 @@ module Poise
60
60
  # Create a resource-level matcher for this resource.
61
61
  #
62
62
  # @see Resource::ResourceName.provides
63
- def provides(name)
63
+ def provides(name, *args, &block)
64
64
  ChefSpec.define_matcher(name) if defined?(ChefSpec)
65
- super
65
+ super(name, *args, &block)
66
66
  end
67
67
 
68
68
  # Create matchers for all declared actions.
@@ -134,9 +134,9 @@ module Poise
134
134
  #
135
135
  # @param name [Symbol] Resource name
136
136
  # return [void]
137
- def provides(name)
137
+ def provides(name, *args, &block)
138
138
  create_inversion_options_resource!(name) if inversion_options_resource
139
- super if defined?(super)
139
+ super(name, *args, &block) if defined?(super)
140
140
  end
141
141
 
142
142
  def included(klass)
@@ -32,8 +32,9 @@ module Poise
32
32
  module Resource
33
33
  def initialize(*args)
34
34
  super
35
- # Try to not stomp on stuff if already set in a parent.
36
- @action = self.class.default_action if @action == :nothing
35
+ # Try to not stomp on stuff if already set in a parent. Coerce @action
36
+ # to an array because this behavior may change in the future in Chef.
37
+ @action = self.class.default_action if Array(@action) == [:nothing]
37
38
  (@allowed_actions << self.class.actions).flatten!.uniq!
38
39
  end
39
40
 
@@ -42,14 +43,14 @@ module Poise
42
43
  # Get the default action for this resource class. If no explicit
43
44
  # default is set, the first action in the list will be used.
44
45
  # @see #actions
45
- # @return [Symbol]
46
+ # @return [Array<Symbol>]
46
47
  # @overload default_action(name)
47
48
  # Set the default action for this resource class. If this action is
48
49
  # not already allowed, it will be added.
49
50
  # @note It is idiomatic to use {#actions} instead, with the first
50
51
  # action specified being the default.
51
- # @param name [Symbol] Name of the action.
52
- # @return [Symbol]
52
+ # @param name [Symbol, Array<Symbol>] Name of the action(s).
53
+ # @return [Array<Symbol>]
53
54
  # @example
54
55
  # class MyApp < Chef::Resource
55
56
  # include Poise
@@ -57,10 +58,11 @@ module Poise
57
58
  # end
58
59
  def default_action(name=nil)
59
60
  if name
61
+ name = Array(name).flatten.map(&:to_sym)
60
62
  @default_action = name
61
- actions(name)
63
+ actions(*name)
62
64
  end
63
- @default_action || ( respond_to?(:superclass) && superclass != Chef::Resource && superclass.respond_to?(:default_action) && superclass.default_action ) || actions.first || :nothing
65
+ @default_action || ( respond_to?(:superclass) && superclass != Chef::Resource && superclass.respond_to?(:default_action) && superclass.default_action ) || (actions.first && [actions.first]) || [:nothing]
64
66
  end
65
67
 
66
68
  # @overload actions()
@@ -79,8 +81,7 @@ module Poise
79
81
  # end
80
82
  def actions(*names)
81
83
  @actions ||= ( respond_to?(:superclass) && superclass.respond_to?(:actions) && superclass.actions.dup ) || ( respond_to?(:superclass) && superclass != Chef::Resource && superclass.respond_to?(:allowed_actions) && superclass.allowed_actions.dup ) || []
82
- (@actions << names).flatten!.uniq!
83
- @actions
84
+ (@actions << names).tap {|actions| actions.flatten!; actions.uniq! }
84
85
  end
85
86
 
86
87
  # Create a resource property (née attribute) on this resource class.
@@ -130,6 +131,12 @@ module Poise
130
131
  if klass.is_a?(Class) && klass.superclass == Chef::Provider
131
132
  klass.class_exec do
132
133
  def load_current_resource
134
+ @current_resource = if new_resource
135
+ new_resource.class.new(new_resource.name, run_context)
136
+ else
137
+ # Better than nothing, subclass can overwrite anyway.
138
+ Chef::Resource.new(nil, run_context)
139
+ end
133
140
  end
134
141
  end
135
142
  end
@@ -0,0 +1,72 @@
1
+ #
2
+ # Copyright 2013-2015, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+
18
+ module Poise
19
+ module Helpers
20
+ # A resource mixin to disable resource cloning.
21
+ #
22
+ # @since 2.2.0
23
+ # @example
24
+ # class MyResource < Chef::Resource
25
+ # include Poise::Helpers::ResourceCloning
26
+ # end
27
+ module ResourceCloning
28
+ # Override to disable resource cloning on Chef 12.0.
29
+ #
30
+ # @api private
31
+ def load_prior_resource(*args)
32
+ # Do nothing.
33
+ end
34
+
35
+ # Override to disable resource cloning on Chef 12.1+.
36
+ #
37
+ # @api private
38
+ def load_from(*args)
39
+ # Do nothing.
40
+ end
41
+
42
+ # Monkeypatch for Chef::ResourceBuilder to silence the warning if needed.
43
+ #
44
+ # @api private
45
+ module ResourceBuilderPatch
46
+ # @api private
47
+ def self.install!
48
+ begin
49
+ require 'chef/resource_builder'
50
+ Chef::ResourceBuilder.send(:prepend, ResourceBuilderPatch)
51
+ rescue LoadError
52
+ # For 12.0, this is already taken care of.
53
+ end
54
+ end
55
+
56
+ # @api private
57
+ def emit_cloned_resource_warning
58
+ super unless resource.is_a?(ResourceCloning)
59
+ end
60
+
61
+ # @api private
62
+ def emit_harmless_cloning_debug
63
+ super unless resource.is_a?(ResourceCloning)
64
+ end
65
+ end
66
+
67
+ # Install the patch.
68
+ ResourceBuilderPatch.install!
69
+
70
+ end
71
+ end
72
+ end
@@ -51,7 +51,7 @@ module Poise
51
51
  # include Poise::Resource::ResourceName
52
52
  # provides(:my_resource)
53
53
  # end
54
- def provides(name)
54
+ def provides(name, *args, &block)
55
55
  # Patch self.constantize so this can cope with anonymous classes.
56
56
  # This does require that the anonymous class define self.name though.
57
57
  if self.name && respond_to?(:constantize)
@@ -63,7 +63,7 @@ module Poise
63
63
  # Store the name for later.
64
64
  @provides_name = name
65
65
  # Call the original if present. The defined? is for old Chef.
66
- super if defined?(super)
66
+ super(name, *args, &block) if defined?(super)
67
67
  end
68
68
 
69
69
  # Retreive the DSL name for the resource class. If not set explicitly
@@ -75,10 +75,16 @@ module Poise
75
75
  # In 12.4+ we need to proxy through the super class for setting.
76
76
  return super(auto) if defined?(super) && (auto.is_a?(Symbol) || auto.is_a?(String))
77
77
  return @provides_name unless auto
78
- @provides_name || if name && name.start_with?('Chef::Resource')
79
- Chef::Mixin::ConvertToClassName.convert_to_snake_case(name, 'Chef::Resource').to_sym
80
- elsif name
81
- Chef::Mixin::ConvertToClassName.convert_to_snake_case(name.split('::').last).to_sym
78
+ @provides_name || if name
79
+ mode = if name.start_with?('Chef::Resource')
80
+ [name, 'Chef::Resource']
81
+ else
82
+ [name.split('::').last]
83
+ end
84
+ Chef::Mixin::ConvertToClassName.convert_to_snake_case(*mode).to_sym
85
+ elsif defined?(super)
86
+ # No name on 12.4+ probably means this is an LWRP, use super().
87
+ super()
82
88
  end
83
89
  end
84
90
 
@@ -27,9 +27,21 @@ module Poise
27
27
  private
28
28
 
29
29
  def subcontext_block(parent_context=nil, &block)
30
- # Setup a sub-run-context.
30
+ # Setup a subcontext.
31
31
  parent_context ||= @run_context
32
32
  sub_run_context = parent_context.dup
33
+ # Reset state for the subcontext. In 12.4+ this uses the built-in
34
+ # support, otherwise do it manually.
35
+ if defined?(sub_run_context.initialize_child_state)
36
+ sub_run_context.initialize_child_state
37
+ else
38
+ # Audits was added in 12.1 I thin.
39
+ sub_run_context.audits = {} if defined?(sub_run_context.audits)
40
+ # Dup and clear to preserve the default behavior without copy-pasta.
41
+ sub_run_context.immediate_notification_collection = parent_context.immediate_notification_collection.dup.clear
42
+ sub_run_context.delayed_notification_collection = parent_context.delayed_notification_collection.dup.clear
43
+ end
44
+ # Create the subcollection.
33
45
  sub_run_context.resource_collection = Poise::Subcontext::ResourceCollection.new(parent_context.resource_collection)
34
46
 
35
47
  # Declare sub-resources within the sub-run-context. Since they
@@ -56,8 +56,8 @@ module Poise
56
56
  # string), or a type:name hash.
57
57
  # @param val [String, Hash, Chef::Resource] Parent resource to set.
58
58
  # @return [Chef::Resource, nil]
59
- def parent(val=nil)
60
- _parent(:parent, self.class.parent_type, self.class.parent_optional, self.class.parent_auto, val)
59
+ def parent(*args)
60
+ _parent(:parent, self.class.parent_type, self.class.parent_optional, self.class.parent_auto, *args)
61
61
  end
62
62
 
63
63
  # Register ourself with parents in case this is not a nested resource.
@@ -77,28 +77,34 @@ module Poise
77
77
  #
78
78
  # @since 2.0.0
79
79
  # @see #parent
80
- def _parent(name, parent_type, parent_optional, parent_auto, val=nil)
80
+ def _parent(name, parent_type, parent_optional, parent_auto, *args)
81
81
  # Allow using a DSL symbol as the parent type.
82
82
  if parent_type.is_a?(Symbol)
83
83
  parent_type = Chef::Resource.resource_for_node(parent_type, node)
84
84
  end
85
85
  # Grab the ivar for local use.
86
86
  parent_ref = instance_variable_get(:"@#{name}")
87
- if val
88
- if val.is_a?(String) && !val.include?('[')
89
- raise Poise::Error.new('Cannot use a string parent without defining a parent type') if parent_type == Chef::Resource
90
- val = "#{parent_type.resource_name}[#{val}]"
91
- end
92
- if val.is_a?(String) || val.is_a?(Hash)
93
- parent = @run_context.resource_collection.find(val)
87
+ if !args.empty?
88
+ val = args.first
89
+ if val.nil?
90
+ # Unsetting the parent.
91
+ parent = nil
94
92
  else
95
- parent = val
96
- end
97
- if !parent.is_a?(parent_type)
98
- raise Poise::Error.new("Parent resource is not an instance of #{parent_type.name}: #{val.inspect}")
93
+ if val.is_a?(String) && !val.include?('[')
94
+ raise Poise::Error.new('Cannot use a string parent without defining a parent type') if parent_type == Chef::Resource
95
+ val = "#{parent_type.resource_name}[#{val}]"
96
+ end
97
+ if val.is_a?(String) || val.is_a?(Hash)
98
+ parent = @run_context.resource_collection.find(val)
99
+ else
100
+ parent = val
101
+ end
102
+ if !parent.is_a?(parent_type)
103
+ raise Poise::Error.new("Parent resource is not an instance of #{parent_type.name}: #{val.inspect}")
104
+ end
99
105
  end
100
106
  parent_ref = ParentRef.new(parent)
101
- elsif !parent_ref
107
+ elsif !parent_ref || !parent_ref.resource
102
108
  if parent_auto
103
109
  # Automatic sibling lookup for sequential composition.
104
110
  # Find the last instance of the parent class as the default parent.
@@ -181,8 +187,8 @@ module Poise
181
187
  def parent_attribute(name, type: Chef::Resource, optional: false, auto: true)
182
188
  name = :"parent_#{name}"
183
189
  (@parent_attributes ||= {})[name] = type
184
- define_method(name) do |val=nil|
185
- _parent(name, type, optional, auto, val)
190
+ define_method(name) do |*args|
191
+ _parent(name, type, optional, auto, *args)
186
192
  end
187
193
  end
188
194
 
@@ -56,7 +56,9 @@ module Poise
56
56
  # we need to jump through some hoops to get it swapped into place.
57
57
  self_ = self
58
58
  order_fixer = Chef::Resource::RubyBlock.new('subresource_order_fixer', @run_context)
59
+ order_fixer.declared_type = 'ruby_block'
59
60
  order_fixer.block do
61
+ Chef::Log.debug("[#{self_}] Running order fixer")
60
62
  collection = self_.run_context.resource_collection
61
63
  # Delete the current container resource from its current position.
62
64
  collection.all_resources.delete(self_)
@@ -37,6 +37,7 @@ module Poise
37
37
  include Poise::Helpers::LazyDefault if Poise::Helpers::LazyDefault.needs_polyfill?
38
38
  include Poise::Helpers::LWRPPolyfill
39
39
  include Poise::Helpers::OptionCollector
40
+ include Poise::Helpers::ResourceCloning
40
41
  include Poise::Helpers::ResourceName
41
42
  include Poise::Helpers::TemplateContent
42
43
 
data/lib/poise/version.rb CHANGED
@@ -16,5 +16,5 @@
16
16
 
17
17
 
18
18
  module Poise
19
- VERSION = '2.1.0'
19
+ VERSION = '2.2.0'
20
20
  end
@@ -48,7 +48,7 @@ describe Poise::Helpers::LazyDefault do
48
48
  poise_sub 'test'
49
49
  end
50
50
 
51
- it { is_expected.to run_poise_test('test').with(value: 'test_lazy') }
51
+ it { is_expected.to run_poise_sub('test').with(value: 'test_lazy') }
52
52
  end # /context in a subclass
53
53
 
54
54
  context 'with an external global' do
@@ -107,25 +107,29 @@ describe Poise::Helpers::LWRPPolyfill do
107
107
  end
108
108
 
109
109
  it { is_expected.to one_poise_test('test') }
110
+ it { expect(resource(:poise_test).default_action).to eq [:one] }
110
111
  end # /describe #default_action
111
112
  end # /describe Poise::Helpers::LWRPPolyfill::Resource
112
113
 
113
114
  describe Poise::Helpers::LWRPPolyfill::Provider do
114
115
  describe 'load_current_resource override' do
115
- subject { provider(:poise_test).new(nil, nil).load_current_resource }
116
+ resource(:poise_test)
117
+ let(:test_resource) { resource(:poise_test).new('test', nil) }
118
+ subject { provider(:poise_test).new(test_resource, nil).load_current_resource }
116
119
 
117
120
  context 'with a direct Provider subclass' do
118
121
  provider(:poise_test, auto: false) do
119
122
  include described_class
120
123
  end
121
124
 
122
- it { is_expected.to be_nil }
125
+ it { is_expected.to be_a resource(:poise_test) }
126
+ its(:name) { is_expected.to eq 'test' }
123
127
  end # /context with a direct Provider subclass
124
128
 
125
129
  context 'with an intermediary class' do
126
130
  provider(:poise_parent, auto: false) do
127
131
  def load_current_resource
128
- 'helper'
132
+ @current_resource = 'helper'
129
133
  end
130
134
  end
131
135
  provider(:poise_test, auto: false, parent: :poise_parent) do
@@ -84,4 +84,43 @@ describe Poise::Helpers::NotifyingBlock do
84
84
 
85
85
  it { expect { subject }.to raise_error(RuntimeError) }
86
86
  end # /context with an exception raised inside the block
87
+
88
+ describe 'regression test for picking up sibling notifications outside the subcontext for resources with matching name' do
89
+ resource(:poise_inner) do
90
+ include Poise::Helpers::ResourceCloning
91
+ attr_accessor :mark_updated
92
+ end
93
+ provider(:poise_inner) do
94
+ def action_run
95
+ new_resource.updated_by_last_action(new_resource.mark_updated)
96
+ end
97
+ end
98
+ provider(:poise_test) do
99
+ include Poise::Helpers::LWRPPolyfill
100
+ include described_class
101
+
102
+ def action_run
103
+ notifying_block do
104
+ poise_inner 'test' do
105
+ self.mark_updated = true
106
+ end
107
+ end
108
+ end
109
+ end
110
+ recipe do
111
+ ruby_block 'test' do
112
+ block { }
113
+ action :nothing
114
+ end
115
+
116
+ poise_inner 'test' do
117
+ self.mark_updated = false
118
+ notifies :run, 'ruby_block[test]', :immediately
119
+ end
120
+
121
+ poise_test 'test'
122
+ end
123
+
124
+ it { is_expected.to_not run_ruby_block('test') }
125
+ end # /describe regression test for picking up sibling notifications outside the subcontext for resources with matching name
87
126
  end
@@ -0,0 +1,56 @@
1
+ #
2
+ # Copyright 2015, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require 'spec_helper'
18
+
19
+ describe Poise::Helpers::ResourceCloning do
20
+ resource(:poise_test) do
21
+ def value(*args)
22
+ set_or_return(:value, *args, {})
23
+ end
24
+ end
25
+ provider(:poise_test)
26
+ recipe do
27
+ poise_test 'test' do
28
+ value 1
29
+ end
30
+
31
+ poise_test 'test' do
32
+ value 2
33
+ end
34
+ end
35
+
36
+ context 'with a resource that should be cloned' do
37
+ # Baseline to make sure my test harness works.
38
+ it do
39
+ expect(Chef::Log).to receive(:warn).exactly(3).times
40
+ run_chef
41
+ end
42
+ end # /context with a resource that should be cloned
43
+
44
+ context 'a resource using the helper' do
45
+ resource(:poise_test) do
46
+ include described_class
47
+ def value(*args)
48
+ set_or_return(:value, *args, {})
49
+ end
50
+ end
51
+ it do
52
+ expect(Chef::Log).to_not receive(:warn)
53
+ run_chef
54
+ end
55
+ end # /context a resource using the helper
56
+ end
@@ -169,6 +169,37 @@ describe Poise::Helpers::Subresources::Child do
169
169
 
170
170
  it { is_expected.to run_poise_test('test').with(parent: be_nil) }
171
171
  end # /context with no automatic parent but optional
172
+
173
+ context 'with a parent but then unset' do
174
+ recipe do
175
+ poise_container 'test2'
176
+ poise_container 'test'
177
+ poise_test 'test' do
178
+ parent 'test2'
179
+ parent nil
180
+ end
181
+ end
182
+
183
+ it { is_expected.to run_poise_test('test').with(parent: container) }
184
+ end # context with a parent but then unset
185
+
186
+ context 'with an optional parent but then unset' do
187
+ resource(:poise_test) do
188
+ include described_class
189
+ parent_type :poise_container
190
+ parent_optional true
191
+ parent_auto false
192
+ end
193
+ recipe do
194
+ poise_container 'test'
195
+ poise_test 'test' do
196
+ parent 'test'
197
+ parent nil
198
+ end
199
+ end
200
+
201
+ it { is_expected.to run_poise_test('test').with(parent: nil) }
202
+ end # context with an optional parent but then unset
172
203
  end # /describe #parent
173
204
 
174
205
  describe '.parent_type' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: poise
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Noah Kantrowitz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-26 00:00:00.000000000 Z
11
+ date: 2015-07-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: halite
@@ -72,6 +72,7 @@ files:
72
72
  - lib/poise/helpers/lwrp_polyfill.rb
73
73
  - lib/poise/helpers/notifying_block.rb
74
74
  - lib/poise/helpers/option_collector.rb
75
+ - lib/poise/helpers/resource_cloning.rb
75
76
  - lib/poise/helpers/resource_name.rb
76
77
  - lib/poise/helpers/subcontext_block.rb
77
78
  - lib/poise/helpers/subresources.rb
@@ -115,11 +116,12 @@ files:
115
116
  - test/spec/helpers/lwrp_polyfill_spec.rb
116
117
  - test/spec/helpers/notifying_block_spec.rb
117
118
  - test/spec/helpers/option_collector_spec.rb
119
+ - test/spec/helpers/resource_cloning_spec.rb
118
120
  - test/spec/helpers/resource_name_spec.rb
119
121
  - test/spec/helpers/subcontext_block_spec.rb
120
122
  - test/spec/helpers/subresources/child_spec.rb
121
123
  - test/spec/helpers/subresources/container_spec.rb
122
- - test/spec/helpers/template_context_spec.rb
124
+ - test/spec/helpers/template_content_spec.rb
123
125
  - test/spec/poise_spec.rb
124
126
  - test/spec/provider_spec.rb
125
127
  - test/spec/resource_spec.rb
@@ -178,11 +180,12 @@ test_files:
178
180
  - test/spec/helpers/lwrp_polyfill_spec.rb
179
181
  - test/spec/helpers/notifying_block_spec.rb
180
182
  - test/spec/helpers/option_collector_spec.rb
183
+ - test/spec/helpers/resource_cloning_spec.rb
181
184
  - test/spec/helpers/resource_name_spec.rb
182
185
  - test/spec/helpers/subcontext_block_spec.rb
183
186
  - test/spec/helpers/subresources/child_spec.rb
184
187
  - test/spec/helpers/subresources/container_spec.rb
185
- - test/spec/helpers/template_context_spec.rb
188
+ - test/spec/helpers/template_content_spec.rb
186
189
  - test/spec/poise_spec.rb
187
190
  - test/spec/provider_spec.rb
188
191
  - test/spec/resource_spec.rb