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,42 @@
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
+ directory '/inversion'
18
+
19
+ poise_test_inversion '/inversion/a'
20
+
21
+ poise_test_inversion '/inversion/b' do
22
+ provider :one
23
+ end
24
+
25
+ poise_test_inversion 'c' do
26
+ path '/inversion/c'
27
+ end
28
+
29
+ poise_test_inversion 'd' do
30
+ path '/inversion/d'
31
+ provider :three
32
+ options :three, msg: 'd-three'
33
+ end
34
+
35
+ poise_test_inversion 'e' do
36
+ path '/inversion/e'
37
+ provider :three
38
+ end
39
+
40
+ poise_test_inversion_options 'e' do
41
+ msg 'e-three'
42
+ end
@@ -0,0 +1,18 @@
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
+ eval_gemfile File.expand_path('../../../Gemfile', __FILE__)
18
+ gem 'chef', '~> 12.0.0'
@@ -0,0 +1,18 @@
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
+ eval_gemfile File.expand_path('../../../Gemfile', __FILE__)
18
+ gem 'chef', '~> 12.1.0'
@@ -0,0 +1,18 @@
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
+ eval_gemfile File.expand_path('../../../Gemfile', __FILE__)
18
+ gem 'chef', '~> 12.2.0'
@@ -0,0 +1,18 @@
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
+ eval_gemfile File.expand_path('../../../Gemfile', __FILE__)
18
+ gem 'chef', '~> 12.0'
@@ -0,0 +1,20 @@
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
+ eval_gemfile File.expand_path('../../../Gemfile', __FILE__)
18
+ gem 'chef', github: 'chef/chef'
19
+ # gem 'halite', github: 'poise/halite'
20
+ # gem 'poise-boiler', github: 'poise/poise-boiler'
@@ -0,0 +1,35 @@
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
+ require 'serverspec'
18
+ set :backend, :exec
19
+
20
+ describe file('/srv/app') do
21
+ it { is_expected.to be_a_directory }
22
+ it { is_expected.to be_owned_by 'root' }
23
+ end
24
+
25
+ describe file('/srv/app/defaults.conf') do
26
+ it { is_expected.to be_a_file }
27
+ it { is_expected.to be_owned_by 'root' }
28
+ its(:content) { is_expected.to eq 'some defaults' }
29
+ end
30
+
31
+ describe file('/srv/app/user.conf') do
32
+ it { is_expected.to be_a_file }
33
+ it { is_expected.to be_owned_by 'root' }
34
+ its(:content) { is_expected.to eq 'user config' }
35
+ end
@@ -0,0 +1,43 @@
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 'serverspec'
18
+ set :backend, :exec
19
+
20
+ describe file('/inversion/a') do
21
+ it { is_expected.to be_a_file }
22
+ end
23
+
24
+ describe file('/inversion/b') do
25
+ it { is_expected.to be_a_file }
26
+ its(:content) { is_expected.to eq 'one' }
27
+ end
28
+
29
+ describe file('/inversion/c') do
30
+ it { is_expected.to be_a_file }
31
+ its(:content) { is_expected.to eq 'two' }
32
+ end
33
+
34
+ describe file('/inversion/d') do
35
+ it { is_expected.to be_a_file }
36
+ its(:content) { is_expected.to eq 'd-three' }
37
+ end
38
+
39
+ describe file('/inversion/e') do
40
+ it { is_expected.to be_a_file }
41
+ its(:content) { is_expected.to eq 'e-three' }
42
+ end
43
+
@@ -0,0 +1,45 @@
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::ChefspecMatchers do
20
+ context 'with an implicit name' do
21
+ resource(:poise_test, auto: false, step_into: false) do
22
+ include described_class
23
+ actions(:run)
24
+ end
25
+ recipe do
26
+ poise_test 'test'
27
+ end
28
+
29
+ it { is_expected.to run_poise_test('test') }
30
+ end # /context with an implicit name
31
+
32
+ context 'with an explicit name' do
33
+ resource(:poise_test, auto: false, step_into: false) do
34
+ include described_class
35
+ provides(:poise_other)
36
+ actions(:run)
37
+ end
38
+ recipe do
39
+ poise_other 'test'
40
+ end
41
+
42
+ it { is_expected.to run_poise_other('test') }
43
+ it { expect(chef_run.poise_other('test')).to be_a Chef::Resource }
44
+ end # /context with an explicit name
45
+ end
@@ -0,0 +1,62 @@
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::DefinedIn do
20
+ let(:run_context) { double('run context') }
21
+ subject { resource(:poise_test) }
22
+ resource(:poise_test) do
23
+ include described_class
24
+ end
25
+
26
+ describe '.included' do
27
+ its(:poise_defined_in) { is_expected.to eq __FILE__ }
28
+ end # /describe .included
29
+
30
+ describe '.inherited' do
31
+ subject { resource(:poise_test_inner) }
32
+ resource(:poise_test_inner, parent: :poise_test)
33
+
34
+ # The actual class creation happens up in the Halite spec helper.
35
+ its(:poise_defined_in) { is_expected.to end_with '/lib/halite/spec_helper.rb' }
36
+ end # /describe .inherited
37
+
38
+ describe '.poise_defined_in_cookbook' do
39
+ context 'with the default file' do
40
+ it do
41
+ expect(subject).to receive(:poise_defined_in).and_return('/src.rb')
42
+ expect(Poise::Utils).to receive(:find_cookbook_name).with(run_context, '/src.rb').and_return('cookbook')
43
+ expect(subject.poise_defined_in_cookbook(run_context)).to eq 'cookbook'
44
+ end
45
+ end # /context with the default file
46
+
47
+ context 'with a specific file' do
48
+ it do
49
+ expect(Poise::Utils).to receive(:find_cookbook_name).with(run_context, '/other.rb').and_return('cookbook')
50
+ expect(subject.poise_defined_in_cookbook(run_context, '/other.rb')).to eq 'cookbook'
51
+ end
52
+ end # /context with a specific file
53
+ end # /describe .poise_defined_in_cookbook
54
+
55
+ describe '#poise_defined_in_cookbook' do
56
+ subject { resource(:poise_test).new('test', run_context) }
57
+ it do
58
+ expect(subject.class).to receive(:poise_defined_in_cookbook).with(run_context, '/other.rb').and_return('cookbook')
59
+ expect(subject.poise_defined_in_cookbook('/other.rb')).to eq 'cookbook'
60
+ end
61
+ end # /describe #poise_defined_in_cookbook
62
+ end
@@ -0,0 +1,92 @@
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::Fused do
20
+ resource(:poise_test) do
21
+ include described_class
22
+
23
+ action(:run) do
24
+ ruby_block 'inner'
25
+ end
26
+ end
27
+ recipe do
28
+ poise_test 'test'
29
+ end
30
+
31
+ it { is_expected.to run_ruby_block('inner') }
32
+
33
+ context 'with a nested provider' do
34
+ resource(:poise_test) do
35
+ include described_class
36
+
37
+ action(:run) do
38
+ file 'inner' do
39
+ content new_resource.name
40
+ end
41
+ end
42
+ end
43
+
44
+ it { is_expected.to create_file('inner').with(content: 'test') }
45
+ end # /context with a nested provider
46
+
47
+ context 'with a subclass' do
48
+ resource(:poise_test2, parent: :poise_test) do
49
+ action(:run) do
50
+ super()
51
+ ruby_block 'inner2'
52
+ end
53
+ end
54
+ recipe do
55
+ poise_test2 'test'
56
+ end
57
+
58
+ it { is_expected.to run_ruby_block('inner') }
59
+ it { is_expected.to run_ruby_block('inner2') }
60
+ end # /context with a subclass
61
+
62
+ context 'with setting a default action' do
63
+ resource(:poise_test) do
64
+ include described_class
65
+ include Poise::Helpers::LWRPPolyfill
66
+
67
+ action(:install) do
68
+ ruby_block 'inner'
69
+ end
70
+ end
71
+
72
+ it { is_expected.to install_poise_test('test') }
73
+ it { is_expected.to run_ruby_block('inner') }
74
+ end # /context with setting a default action
75
+
76
+ context 'with an explicit provider' do
77
+ provider(:poise_test2) do
78
+ include Poise
79
+ def action_run
80
+ ruby_block 'explicit'
81
+ end
82
+ end
83
+ recipe do
84
+ poise_test 'test' do
85
+ provider :poise_test2
86
+ end
87
+ end
88
+
89
+ it { is_expected.to run_ruby_block('explicit') }
90
+ it { is_expected.to_not run_ruby_block('inner') }
91
+ end # /context with an explicit provider
92
+ end
@@ -0,0 +1,34 @@
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::IncludeRecipe do
20
+ resource(:poise_test)
21
+ provider(:poise_test) do
22
+ include described_class
23
+
24
+ def action_run
25
+ expect_any_instance_of(Chef::RunContext).to receive(:include_recipe).with('other').and_return(['other::default'])
26
+ include_recipe 'other'
27
+ end
28
+ end
29
+ recipe do
30
+ poise_test 'test'
31
+ end
32
+
33
+ it { run_chef }
34
+ end