poise 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.kitchen.travis.yml +9 -0
  4. data/.kitchen.yml +18 -0
  5. data/.rubocop.yml +2 -0
  6. data/.travis.yml +25 -0
  7. data/.yardopts +5 -0
  8. data/Berksfile +26 -0
  9. data/Berksfile.lock +10 -0
  10. data/CHANGELOG.md +58 -0
  11. data/Gemfile +32 -0
  12. data/LICENSE +202 -0
  13. data/README.md +198 -0
  14. data/Rakefile +17 -0
  15. data/lib/poise.rb +71 -0
  16. data/lib/poise/error.rb +24 -0
  17. data/lib/poise/helpers.rb +33 -0
  18. data/lib/poise/helpers/chefspec_matchers.rb +92 -0
  19. data/lib/poise/helpers/defined_in.rb +111 -0
  20. data/lib/poise/helpers/fused.rb +127 -0
  21. data/lib/poise/helpers/include_recipe.rb +62 -0
  22. data/lib/poise/helpers/inversion.rb +374 -0
  23. data/lib/poise/helpers/inversion/options_provider.rb +41 -0
  24. data/lib/poise/helpers/inversion/options_resource.rb +101 -0
  25. data/lib/poise/helpers/lazy_default.rb +62 -0
  26. data/lib/poise/helpers/lwrp_polyfill.rb +96 -0
  27. data/lib/poise/helpers/notifying_block.rb +78 -0
  28. data/lib/poise/helpers/option_collector.rb +117 -0
  29. data/lib/poise/helpers/resource_name.rb +99 -0
  30. data/lib/poise/helpers/subcontext_block.rb +58 -0
  31. data/lib/poise/helpers/subresources.rb +29 -0
  32. data/lib/poise/helpers/subresources/child.rb +217 -0
  33. data/lib/poise/helpers/subresources/container.rb +165 -0
  34. data/lib/poise/helpers/subresources/default_containers.rb +73 -0
  35. data/lib/poise/helpers/template_content.rb +165 -0
  36. data/lib/poise/provider.rb +55 -0
  37. data/lib/poise/resource.rb +75 -0
  38. data/lib/poise/subcontext.rb +27 -0
  39. data/lib/poise/subcontext/resource_collection.rb +56 -0
  40. data/lib/poise/subcontext/runner.rb +50 -0
  41. data/lib/poise/utils.rb +60 -0
  42. data/lib/poise/utils/resource_provider_mixin.rb +53 -0
  43. data/lib/poise/version.rb +20 -0
  44. data/poise.gemspec +38 -0
  45. data/test/cookbooks/poise_test/attributes/default.rb +17 -0
  46. data/test/cookbooks/poise_test/libraries/app.rb +43 -0
  47. data/test/cookbooks/poise_test/libraries/app_config.rb +46 -0
  48. data/test/cookbooks/poise_test/libraries/inversion.rb +67 -0
  49. data/test/cookbooks/poise_test/metadata.rb +18 -0
  50. data/test/cookbooks/poise_test/recipes/default.rb +25 -0
  51. data/test/cookbooks/poise_test/recipes/inversion.rb +42 -0
  52. data/test/gemfiles/chef-12.0.gemfile +18 -0
  53. data/test/gemfiles/chef-12.1.gemfile +18 -0
  54. data/test/gemfiles/chef-12.2.gemfile +18 -0
  55. data/test/gemfiles/chef-12.gemfile +18 -0
  56. data/test/gemfiles/master.gemfile +20 -0
  57. data/test/integration/default/serverspec/default_spec.rb +35 -0
  58. data/test/integration/default/serverspec/inversion_spec.rb +43 -0
  59. data/test/spec/helpers/chefspec_matchers_spec.rb +45 -0
  60. data/test/spec/helpers/defined_in_spec.rb +62 -0
  61. data/test/spec/helpers/fused_spec.rb +92 -0
  62. data/test/spec/helpers/include_recipe_spec.rb +34 -0
  63. data/test/spec/helpers/inversion/options_resource_spec.rb +212 -0
  64. data/test/spec/helpers/inversion_spec.rb +273 -0
  65. data/test/spec/helpers/lazy_default_spec.rb +74 -0
  66. data/test/spec/helpers/lwrp_polyfill_spec.rb +128 -0
  67. data/test/spec/helpers/notifying_block_spec.rb +87 -0
  68. data/test/spec/helpers/option_collector_spec.rb +82 -0
  69. data/test/spec/helpers/resource_name_spec.rb +39 -0
  70. data/test/spec/helpers/subcontext_block_spec.rb +94 -0
  71. data/test/spec/helpers/subresources/child_spec.rb +339 -0
  72. data/test/spec/helpers/subresources/container_spec.rb +175 -0
  73. data/test/spec/helpers/template_context_spec.rb +147 -0
  74. data/test/spec/poise_spec.rb +185 -0
  75. data/test/spec/provider_spec.rb +28 -0
  76. data/test/spec/resource_spec.rb +85 -0
  77. data/test/spec/spec_helper.rb +18 -0
  78. data/test/spec/utils/resource_provider_mixin_spec.rb +52 -0
  79. data/test/spec/utils_spec.rb +110 -0
  80. metadata +190 -0
@@ -0,0 +1,52 @@
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
+ require 'chef/resource'
19
+ require 'chef/provider'
20
+
21
+
22
+ module ResourceProviderMixinTest
23
+ module Test
24
+ include Poise::Utils::ResourceProviderMixin
25
+
26
+ module Resource
27
+ end
28
+
29
+ module Provider
30
+ end
31
+ end
32
+
33
+ class Resource < Chef::Resource
34
+ include Test
35
+ end
36
+
37
+ class Provider < Chef::Provider
38
+ include Test
39
+ end
40
+ end
41
+
42
+ describe Poise::Utils::ResourceProviderMixin do
43
+ context 'in a resource' do
44
+ subject { ResourceProviderMixinTest::Resource }
45
+ it { is_expected.to be < ResourceProviderMixinTest::Test::Resource }
46
+ end
47
+
48
+ context 'in a provider' do
49
+ subject { ResourceProviderMixinTest::Provider }
50
+ it { is_expected.to be < ResourceProviderMixinTest::Test::Provider }
51
+ end
52
+ end
@@ -0,0 +1,110 @@
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
+ require 'chef/cookbook_version'
19
+
20
+ describe Poise::Utils do
21
+ describe '.find_cookbook_name' do
22
+ let(:cookbooks) { [] }
23
+ let(:run_context) { instance_double('Chef::RunContext', cookbook_collection: cookbooks.inject({}) {|memo, ver| memo[ver.name] = ver; memo })}
24
+ let(:filename) { '/test/my_cookbook/libraries/default.rb' }
25
+ subject { described_class.find_cookbook_name(run_context, filename) }
26
+
27
+ context 'with no cookbooks' do
28
+ it { expect { subject }.to raise_error Poise::Error }
29
+ end # /context with no cookbooks
30
+
31
+ context 'with one cookbook' do
32
+ before do
33
+ cookbooks << Chef::CookbookVersion.new('my_cookbook', '/test/my_cookbook').tap do |ver|
34
+ ver.library_filenames << '/test/my_cookbook/libraries/default.rb'
35
+ end
36
+ end
37
+ it { is_expected.to eq 'my_cookbook' }
38
+ end # /context with one cookbook
39
+
40
+ context 'with many cookbooks' do
41
+ before do
42
+ cookbooks << Chef::CookbookVersion.new('other_cookbook', '/test/other_cookbook').tap do |ver|
43
+ ver.library_filenames << '/test/other_cookbook/libraries/default.rb'
44
+ ver.recipe_filenames << '/test/other_cookbook/recipe/default.rb'
45
+ end
46
+ cookbooks << Chef::CookbookVersion.new('my_cookbook', '/test/my_cookbook').tap do |ver|
47
+ ver.library_filenames << '/test/my_cookbook/libraries/default.rb'
48
+ ver.recipe_filenames << '/test/my_cookbook/recipe/default.rb'
49
+ end
50
+ end
51
+ it { is_expected.to eq 'my_cookbook' }
52
+ end # /context with many cookbooks
53
+
54
+ context 'with many non-matching cookbooks' do
55
+ before do
56
+ cookbooks << Chef::CookbookVersion.new('other_cookbook', '/test/other_cookbook').tap do |ver|
57
+ ver.library_filenames << '/test/other_cookbook/libraries/default.rb'
58
+ ver.recipe_filenames << '/test/other_cookbook/recipe/default.rb'
59
+ end
60
+ cookbooks << Chef::CookbookVersion.new('my_cookbook', '/test/my_cookbook').tap do |ver|
61
+ ver.recipe_filenames << '/test/my_cookbook/recipe/default.rb'
62
+ end
63
+ end
64
+ it { expect { subject }.to raise_error Poise::Error }
65
+ end # /context with many non-matching cookbooks
66
+
67
+ context 'with a Halite cookbook' do
68
+ let(:filename) { '/source/halite_cookbook/lib/something.rb' }
69
+ before do
70
+ cookbooks << Chef::CookbookVersion.new('other_cookbook', '/test/other_cookbook').tap do |ver|
71
+ ver.library_filenames << '/test/other_cookbook/libraries/default.rb'
72
+ ver.recipe_filenames << '/test/other_cookbook/recipe/default.rb'
73
+ end
74
+ cookbooks << Chef::CookbookVersion.new('halite_cookbook', '/test/halite_cookbook').tap do |ver|
75
+ def ver.halite_root
76
+ '/source/halite_cookbook'
77
+ end
78
+ end
79
+ cookbooks << Chef::CookbookVersion.new('my_cookbook', '/test/my_cookbook').tap do |ver|
80
+ ver.recipe_filenames << '/test/my_cookbook/recipe/default.rb'
81
+ end
82
+ end
83
+ it { is_expected.to eq 'halite_cookbook' }
84
+ end # /context with a Halite cookbook
85
+
86
+ context 'with a Halite cookbook on a shared prefix' do
87
+ let(:filename) { '/source/halite_cookbook_other/lib/something.rb' }
88
+ before do
89
+ cookbooks << Chef::CookbookVersion.new('other_cookbook', '/test/other_cookbook').tap do |ver|
90
+ ver.library_filenames << '/test/other_cookbook/libraries/default.rb'
91
+ ver.recipe_filenames << '/test/other_cookbook/recipe/default.rb'
92
+ end
93
+ cookbooks << Chef::CookbookVersion.new('halite_cookbook', '/test/halite_cookbook').tap do |ver|
94
+ def ver.halite_root
95
+ '/source/halite_cookbook'
96
+ end
97
+ end
98
+ cookbooks << Chef::CookbookVersion.new('halite_cookbook_other', '/test/halite_cookbook_other').tap do |ver|
99
+ def ver.halite_root
100
+ '/source/halite_cookbook_other'
101
+ end
102
+ end
103
+ cookbooks << Chef::CookbookVersion.new('my_cookbook', '/test/my_cookbook').tap do |ver|
104
+ ver.recipe_filenames << '/test/my_cookbook/recipe/default.rb'
105
+ end
106
+ end
107
+ it { is_expected.to eq 'halite_cookbook_other' }
108
+ end # /context with a Halite cookbook on a shared prefix
109
+ end # /describe .find_cookbook_name
110
+ end
metadata ADDED
@@ -0,0 +1,190 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: poise
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Noah Kantrowitz
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-05-20 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: halite
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: poise-boiler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.0'
41
+ description: Helpers for writing extensible Chef cookbooks.
42
+ email:
43
+ - noah@coderanger.net
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - ".gitignore"
49
+ - ".kitchen.travis.yml"
50
+ - ".kitchen.yml"
51
+ - ".rubocop.yml"
52
+ - ".travis.yml"
53
+ - ".yardopts"
54
+ - Berksfile
55
+ - Berksfile.lock
56
+ - CHANGELOG.md
57
+ - Gemfile
58
+ - LICENSE
59
+ - README.md
60
+ - Rakefile
61
+ - lib/poise.rb
62
+ - lib/poise/error.rb
63
+ - lib/poise/helpers.rb
64
+ - lib/poise/helpers/chefspec_matchers.rb
65
+ - lib/poise/helpers/defined_in.rb
66
+ - lib/poise/helpers/fused.rb
67
+ - lib/poise/helpers/include_recipe.rb
68
+ - lib/poise/helpers/inversion.rb
69
+ - lib/poise/helpers/inversion/options_provider.rb
70
+ - lib/poise/helpers/inversion/options_resource.rb
71
+ - lib/poise/helpers/lazy_default.rb
72
+ - lib/poise/helpers/lwrp_polyfill.rb
73
+ - lib/poise/helpers/notifying_block.rb
74
+ - lib/poise/helpers/option_collector.rb
75
+ - lib/poise/helpers/resource_name.rb
76
+ - lib/poise/helpers/subcontext_block.rb
77
+ - lib/poise/helpers/subresources.rb
78
+ - lib/poise/helpers/subresources/child.rb
79
+ - lib/poise/helpers/subresources/container.rb
80
+ - lib/poise/helpers/subresources/default_containers.rb
81
+ - lib/poise/helpers/template_content.rb
82
+ - lib/poise/provider.rb
83
+ - lib/poise/resource.rb
84
+ - lib/poise/subcontext.rb
85
+ - lib/poise/subcontext/resource_collection.rb
86
+ - lib/poise/subcontext/runner.rb
87
+ - lib/poise/utils.rb
88
+ - lib/poise/utils/resource_provider_mixin.rb
89
+ - lib/poise/version.rb
90
+ - poise.gemspec
91
+ - test/cookbooks/poise_test/attributes/default.rb
92
+ - test/cookbooks/poise_test/libraries/app.rb
93
+ - test/cookbooks/poise_test/libraries/app_config.rb
94
+ - test/cookbooks/poise_test/libraries/inversion.rb
95
+ - test/cookbooks/poise_test/metadata.rb
96
+ - test/cookbooks/poise_test/recipes/default.rb
97
+ - test/cookbooks/poise_test/recipes/inversion.rb
98
+ - test/docker/docker.ca
99
+ - test/docker/docker.pem
100
+ - test/gemfiles/chef-12.0.gemfile
101
+ - test/gemfiles/chef-12.1.gemfile
102
+ - test/gemfiles/chef-12.2.gemfile
103
+ - test/gemfiles/chef-12.gemfile
104
+ - test/gemfiles/master.gemfile
105
+ - test/integration/default/serverspec/default_spec.rb
106
+ - test/integration/default/serverspec/inversion_spec.rb
107
+ - test/spec/helpers/chefspec_matchers_spec.rb
108
+ - test/spec/helpers/defined_in_spec.rb
109
+ - test/spec/helpers/fused_spec.rb
110
+ - test/spec/helpers/include_recipe_spec.rb
111
+ - test/spec/helpers/inversion/options_resource_spec.rb
112
+ - test/spec/helpers/inversion_spec.rb
113
+ - test/spec/helpers/lazy_default_spec.rb
114
+ - test/spec/helpers/lwrp_polyfill_spec.rb
115
+ - test/spec/helpers/notifying_block_spec.rb
116
+ - test/spec/helpers/option_collector_spec.rb
117
+ - test/spec/helpers/resource_name_spec.rb
118
+ - test/spec/helpers/subcontext_block_spec.rb
119
+ - test/spec/helpers/subresources/child_spec.rb
120
+ - test/spec/helpers/subresources/container_spec.rb
121
+ - test/spec/helpers/template_context_spec.rb
122
+ - test/spec/poise_spec.rb
123
+ - test/spec/provider_spec.rb
124
+ - test/spec/resource_spec.rb
125
+ - test/spec/spec_helper.rb
126
+ - test/spec/utils/resource_provider_mixin_spec.rb
127
+ - test/spec/utils_spec.rb
128
+ homepage: https://github.com/poise/poise
129
+ licenses:
130
+ - Apache 2.0
131
+ metadata: {}
132
+ post_install_message:
133
+ rdoc_options: []
134
+ require_paths:
135
+ - lib
136
+ required_ruby_version: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ version: '0'
141
+ required_rubygems_version: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ requirements: []
147
+ rubyforge_project:
148
+ rubygems_version: 2.4.5
149
+ signing_key:
150
+ specification_version: 4
151
+ summary: Helpers for writing extensible Chef cookbooks.
152
+ test_files:
153
+ - test/cookbooks/poise_test/attributes/default.rb
154
+ - test/cookbooks/poise_test/libraries/app.rb
155
+ - test/cookbooks/poise_test/libraries/app_config.rb
156
+ - test/cookbooks/poise_test/libraries/inversion.rb
157
+ - test/cookbooks/poise_test/metadata.rb
158
+ - test/cookbooks/poise_test/recipes/default.rb
159
+ - test/cookbooks/poise_test/recipes/inversion.rb
160
+ - test/docker/docker.ca
161
+ - test/docker/docker.pem
162
+ - test/gemfiles/chef-12.0.gemfile
163
+ - test/gemfiles/chef-12.1.gemfile
164
+ - test/gemfiles/chef-12.2.gemfile
165
+ - test/gemfiles/chef-12.gemfile
166
+ - test/gemfiles/master.gemfile
167
+ - test/integration/default/serverspec/default_spec.rb
168
+ - test/integration/default/serverspec/inversion_spec.rb
169
+ - test/spec/helpers/chefspec_matchers_spec.rb
170
+ - test/spec/helpers/defined_in_spec.rb
171
+ - test/spec/helpers/fused_spec.rb
172
+ - test/spec/helpers/include_recipe_spec.rb
173
+ - test/spec/helpers/inversion/options_resource_spec.rb
174
+ - test/spec/helpers/inversion_spec.rb
175
+ - test/spec/helpers/lazy_default_spec.rb
176
+ - test/spec/helpers/lwrp_polyfill_spec.rb
177
+ - test/spec/helpers/notifying_block_spec.rb
178
+ - test/spec/helpers/option_collector_spec.rb
179
+ - test/spec/helpers/resource_name_spec.rb
180
+ - test/spec/helpers/subcontext_block_spec.rb
181
+ - test/spec/helpers/subresources/child_spec.rb
182
+ - test/spec/helpers/subresources/container_spec.rb
183
+ - test/spec/helpers/template_context_spec.rb
184
+ - test/spec/poise_spec.rb
185
+ - test/spec/provider_spec.rb
186
+ - test/spec/resource_spec.rb
187
+ - test/spec/spec_helper.rb
188
+ - test/spec/utils/resource_provider_mixin_spec.rb
189
+ - test/spec/utils_spec.rb
190
+ has_rdoc: