from-scratch 0.1.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 (174) hide show
  1. checksums.yaml +7 -0
  2. data/.chef/knife.rb +6 -0
  3. data/.gitignore +9 -0
  4. data/.rspec +2 -0
  5. data/.travis.yml +4 -0
  6. data/Berksfile +17 -0
  7. data/Berksfile.lock +19 -0
  8. data/Gemfile +4 -0
  9. data/LICENSE.txt +21 -0
  10. data/README.md +58 -0
  11. data/Rakefile +6 -0
  12. data/Thorfile +5 -0
  13. data/bin/scratchify +6 -0
  14. data/chefignore +101 -0
  15. data/cookbooks/chef_gem/CHANGELOG.md +24 -0
  16. data/cookbooks/chef_gem/README.md +38 -0
  17. data/cookbooks/chef_gem/libraries/chef_gem.rb +72 -0
  18. data/cookbooks/chef_gem/metadata.json +29 -0
  19. data/cookbooks/chef_gem/recipes/default.rb +0 -0
  20. data/cookbooks/java/.gitignore +21 -0
  21. data/cookbooks/java/.kitchen.docker.yml +15 -0
  22. data/cookbooks/java/.kitchen.yml +126 -0
  23. data/cookbooks/java/.travis.yml +6 -0
  24. data/cookbooks/java/Berksfile +10 -0
  25. data/cookbooks/java/CHANGELOG.md +398 -0
  26. data/cookbooks/java/CONTRIBUTING.md +12 -0
  27. data/cookbooks/java/Gemfile +15 -0
  28. data/cookbooks/java/ISSUES.md +43 -0
  29. data/cookbooks/java/LICENSE +201 -0
  30. data/cookbooks/java/README.md +402 -0
  31. data/cookbooks/java/Rakefile +60 -0
  32. data/cookbooks/java/TESTING.md +41 -0
  33. data/cookbooks/java/attributes/default.rb +146 -0
  34. data/cookbooks/java/libraries/helpers.rb +120 -0
  35. data/cookbooks/java/libraries/matchers.rb +5 -0
  36. data/cookbooks/java/metadata.json +69 -0
  37. data/cookbooks/java/providers/alternatives.rb +94 -0
  38. data/cookbooks/java/providers/ark.rb +255 -0
  39. data/cookbooks/java/recipes/default.rb +22 -0
  40. data/cookbooks/java/recipes/default_java_symlink.rb +19 -0
  41. data/cookbooks/java/recipes/homebrew.rb +3 -0
  42. data/cookbooks/java/recipes/ibm.rb +76 -0
  43. data/cookbooks/java/recipes/ibm_tar.rb +70 -0
  44. data/cookbooks/java/recipes/openjdk.rb +74 -0
  45. data/cookbooks/java/recipes/oracle.rb +74 -0
  46. data/cookbooks/java/recipes/oracle_i386.rb +73 -0
  47. data/cookbooks/java/recipes/oracle_jce.rb +75 -0
  48. data/cookbooks/java/recipes/oracle_rpm.rb +60 -0
  49. data/cookbooks/java/recipes/purge_packages.rb +20 -0
  50. data/cookbooks/java/recipes/set_attributes_from_version.rb +55 -0
  51. data/cookbooks/java/recipes/set_java_home.rb +44 -0
  52. data/cookbooks/java/recipes/windows.rb +82 -0
  53. data/cookbooks/java/resources/alternatives.rb +30 -0
  54. data/cookbooks/java/resources/ark.rb +58 -0
  55. data/cookbooks/java/templates/default/ibm_jdk.installer.properties.erb +3 -0
  56. data/cookbooks/java/templates/default/oracle.jinfo.erb +6 -0
  57. data/cookbooks/rvm/.foodcritic +1 -0
  58. data/cookbooks/rvm/.gitignore +7 -0
  59. data/cookbooks/rvm/.kitchen.yml +66 -0
  60. data/cookbooks/rvm/.travis.yml +9 -0
  61. data/cookbooks/rvm/Berksfile +10 -0
  62. data/cookbooks/rvm/CHANGELOG.md +253 -0
  63. data/cookbooks/rvm/CODE_OF_CONDUCT.md +12 -0
  64. data/cookbooks/rvm/CONTRIBUTING.md +26 -0
  65. data/cookbooks/rvm/Gemfile +20 -0
  66. data/cookbooks/rvm/Guardfile +12 -0
  67. data/cookbooks/rvm/README.md +1459 -0
  68. data/cookbooks/rvm/Rakefile +18 -0
  69. data/cookbooks/rvm/attributes/.gitkeep +0 -0
  70. data/cookbooks/rvm/attributes/default.rb +68 -0
  71. data/cookbooks/rvm/attributes/gem_package.rb +23 -0
  72. data/cookbooks/rvm/attributes/vagrant.rb +23 -0
  73. data/cookbooks/rvm/libraries/chef_rvm_environment_helpers.rb +55 -0
  74. data/cookbooks/rvm/libraries/chef_rvm_gemset_helpers.rb +67 -0
  75. data/cookbooks/rvm/libraries/chef_rvm_recipe_helpers.rb +80 -0
  76. data/cookbooks/rvm/libraries/chef_rvm_ruby_helpers.rb +95 -0
  77. data/cookbooks/rvm/libraries/chef_rvm_set_helpers.rb +16 -0
  78. data/cookbooks/rvm/libraries/chef_rvm_shell_helpers.rb +57 -0
  79. data/cookbooks/rvm/libraries/chef_rvm_string_cache.rb +104 -0
  80. data/cookbooks/rvm/libraries/chef_rvm_string_helpers.rb +61 -0
  81. data/cookbooks/rvm/libraries/chef_rvm_version_helpers.rb +45 -0
  82. data/cookbooks/rvm/libraries/gem_package_monkeypatch.rb +34 -0
  83. data/cookbooks/rvm/libraries/provider_rvm_installation.rb +185 -0
  84. data/cookbooks/rvm/libraries/resource_rvm_installation.rb +103 -0
  85. data/cookbooks/rvm/libraries/rvm_chef_user_environment.rb +55 -0
  86. data/cookbooks/rvm/libraries/rvm_rubygems_package.rb +189 -0
  87. data/cookbooks/rvm/libraries/rvm_shell_chef_wrapper.rb +99 -0
  88. data/cookbooks/rvm/metadata.json +51 -0
  89. data/cookbooks/rvm/providers/default_ruby.rb +63 -0
  90. data/cookbooks/rvm/providers/environment.rb +78 -0
  91. data/cookbooks/rvm/providers/gemset.rb +118 -0
  92. data/cookbooks/rvm/providers/global_gem.rb +97 -0
  93. data/cookbooks/rvm/providers/ruby.rb +178 -0
  94. data/cookbooks/rvm/providers/shell.rb +121 -0
  95. data/cookbooks/rvm/providers/wrapper.rb +73 -0
  96. data/cookbooks/rvm/recipes/.gitkeep +0 -0
  97. data/cookbooks/rvm/recipes/default.rb +40 -0
  98. data/cookbooks/rvm/recipes/gem_package.rb +33 -0
  99. data/cookbooks/rvm/recipes/system.rb +37 -0
  100. data/cookbooks/rvm/recipes/system_install.rb +42 -0
  101. data/cookbooks/rvm/recipes/user.rb +43 -0
  102. data/cookbooks/rvm/recipes/user_install.rb +58 -0
  103. data/cookbooks/rvm/recipes/vagrant.rb +37 -0
  104. data/cookbooks/rvm/resources/default_ruby.rb +31 -0
  105. data/cookbooks/rvm/resources/environment.rb +31 -0
  106. data/cookbooks/rvm/resources/gem.rb +37 -0
  107. data/cookbooks/rvm/resources/gemset.rb +32 -0
  108. data/cookbooks/rvm/resources/global_gem.rb +34 -0
  109. data/cookbooks/rvm/resources/ruby.rb +32 -0
  110. data/cookbooks/rvm/resources/shell.rb +41 -0
  111. data/cookbooks/rvm/resources/wrapper.rb +34 -0
  112. data/cookbooks/rvm/templates/default/rvmrc.erb +14 -0
  113. data/cookbooks/rvm/templates/default/vagrant-chef-client-wrapper.erb +23 -0
  114. data/cookbooks/rvm/templates/default/vagrant-chef-solo-wrapper.erb +23 -0
  115. data/cookbooks/rvm/test/integration/data_bags/users/virgil1.json +4 -0
  116. data/cookbooks/rvm/test/integration/data_bags/users/virgil2.json +4 -0
  117. data/cookbooks/rvm/test/integration/data_bags/users/wigglebottom.json +3 -0
  118. data/cookbooks/rvm/test/integration/installs/bats/version_pinning.bats +13 -0
  119. data/cookbooks/rvm/test/integration/rubies/bats/_common.bash +16 -0
  120. data/cookbooks/rvm/test/integration/rubies/bats/verify_1.9.3.bats +9 -0
  121. data/cookbooks/rvm/test/integration/rubies/bats/verify_jruby.bats +12 -0
  122. data/cookbooks/rvm/test/integration/rubies/bats/verify_patch_support.bats +19 -0
  123. data/cookbooks/rvm/test/integration/rubies/bats/verify_ree.bats +9 -0
  124. data/cookbooks/rvm/test/integration/rubies/bats/verify_rubygems_version_support.bats +15 -0
  125. data/cookbooks/rvm/test/integration/stock_system_and_user/bats/system.bats +45 -0
  126. data/cookbooks/rvm/test/unit/libraries/provider_rvm_installation_spec.rb +220 -0
  127. data/cookbooks/rvm/test/unit/libraries/resource_rvm_installation_spec.rb +139 -0
  128. data/cookbooks/rvm/test/unit/spec_helper.rb +23 -0
  129. data/cookbooks/scratchify/.chef/knife.rb +9 -0
  130. data/cookbooks/scratchify/Berksfile +16 -0
  131. data/cookbooks/scratchify/Berksfile.lock +19 -0
  132. data/cookbooks/scratchify/LICENSE.txt +21 -0
  133. data/cookbooks/scratchify/README.md +41 -0
  134. data/cookbooks/scratchify/Thorfile +5 -0
  135. data/cookbooks/scratchify/bin/console +14 -0
  136. data/cookbooks/scratchify/bin/scratchify +6 -0
  137. data/cookbooks/scratchify/bin/setup +7 -0
  138. data/cookbooks/scratchify/chefignore +101 -0
  139. data/cookbooks/scratchify/data_bags/users/deploy.json +6 -0
  140. data/cookbooks/scratchify/environments/.gitkeep +0 -0
  141. data/cookbooks/scratchify/from-scratch.gemspec +36 -0
  142. data/cookbooks/scratchify/lib/from/scratch.rb +31 -0
  143. data/cookbooks/scratchify/lib/from/scratch/interviewer.rb +35 -0
  144. data/cookbooks/scratchify/lib/from/scratch/version.rb +3 -0
  145. data/cookbooks/scratchify/metadata.json +36 -0
  146. data/cookbooks/scratchify/nodes/normfood.ru.json +75 -0
  147. data/cookbooks/scratchify/recipes/default.rb +0 -0
  148. data/cookbooks/scratchify/roles/.gitkeep +0 -0
  149. data/cookbooks/scratchify/spec/from/scratch_spec.rb +11 -0
  150. data/cookbooks/scratchify/spec/spec_helper.rb +2 -0
  151. data/cookbooks/user/.gitignore +5 -0
  152. data/cookbooks/user/.kitchen.yml +46 -0
  153. data/cookbooks/user/.travis.yml +4 -0
  154. data/cookbooks/user/Berksfile +7 -0
  155. data/cookbooks/user/CHANGELOG.md +101 -0
  156. data/cookbooks/user/Gemfile +14 -0
  157. data/cookbooks/user/README.md +447 -0
  158. data/cookbooks/user/Rakefile +21 -0
  159. data/cookbooks/user/attributes/default.rb +50 -0
  160. data/cookbooks/user/libraries/matchers.rb +26 -0
  161. data/cookbooks/user/metadata.json +46 -0
  162. data/cookbooks/user/providers/account.rb +212 -0
  163. data/cookbooks/user/recipes/data_bag.rb +59 -0
  164. data/cookbooks/user/recipes/default.rb +18 -0
  165. data/cookbooks/user/resources/account.rb +41 -0
  166. data/cookbooks/user/templates/default/authorized_keys.erb +7 -0
  167. data/from-scratch.gemspec +33 -0
  168. data/lib/from-scratch.rb +25 -0
  169. data/lib/from-scratch/version.rb +3 -0
  170. data/metadata.rb +15 -0
  171. data/recipes/default.rb +0 -0
  172. data/templates/node.json.erb +31 -0
  173. data/templates/user.json.erb +6 -0
  174. metadata +330 -0
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env bats
2
+
3
+ rubie="jruby"
4
+
5
+ load _common
6
+
7
+ @test "RVM $rubie can use nokogiri with openssl" {
8
+ run rvm $rubie do gem install jruby-openssl --no-ri --no-rdoc
9
+ [ $status -eq 0 ]
10
+
11
+ run_nokogiri_openssl_test $rubie
12
+ }
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env bats
2
+
3
+ rubie="1.9.3-p327-railsexpress"
4
+
5
+ load _common
6
+
7
+ @test "RVM $rubie can use nokogiri with openssl" {
8
+ run_nokogiri_openssl_test $rubie
9
+ }
10
+
11
+ # For more details, please see:
12
+ # https://github.com/fnichol/chef-rvm/pull/137#issuecomment-12258247
13
+ @test "RVM $rubie can use patched functionality" {
14
+ script="puts Thread.current.thread_variable_set :foo, 'bar'"
15
+
16
+ run rvm $rubie do ruby -e "$script"
17
+ [ "$status" -eq 0 ]
18
+ [ "$output" = "bar" ]
19
+ }
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env bats
2
+
3
+ export rubie="ree"
4
+
5
+ load _common
6
+
7
+ @test "RVM $rubie can use nokogiri with openssl" {
8
+ run_nokogiri_openssl_test $rubie
9
+ }
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env bats
2
+
3
+ rubie="1.8.7"
4
+
5
+ load _common
6
+
7
+ @test "RVM $rubie can use nokogiri with openssl" {
8
+ run_nokogiri_openssl_test $rubie
9
+ }
10
+
11
+ @test "Installs RubyGems 1.6.0 in RVM $rubie" {
12
+ run rvm 1.8.7 do gem --version
13
+ [ "$status" -eq 0 ]
14
+ [ "$output" = "1.6.0" ]
15
+ }
@@ -0,0 +1,45 @@
1
+ #!/usr/bin/env bats
2
+
3
+ default_ruby="ruby-1.9.3-p484"
4
+ https_url="https://google.com"
5
+
6
+ setup() {
7
+ source /etc/profile.d/rvm.sh
8
+ }
9
+
10
+ @test "creates system install RVM directory" {
11
+ [ -d "/usr/local/rvm" ]
12
+ }
13
+
14
+ @test "sources into environment" {
15
+ [ "$(type rvm | head -1)" = "rvm is a function" ]
16
+ }
17
+
18
+ @test "installs $default_ruby" {
19
+ run sudo -u wigglebottom -i rvm list strings
20
+ [ "$status" -eq 0 ]
21
+ [ "$output" = "$default_ruby" ]
22
+ }
23
+
24
+ @test "sets $default_ruby as the default" {
25
+ run sudo -u wigglebottom -i rvm list default string
26
+ [ "$status" -eq 0 ]
27
+ [ "${lines[0]}" = "$default_ruby" ]
28
+ }
29
+
30
+ @test "default Ruby can use openssl from stdlib" {
31
+ expr="puts OpenSSL::PKey::RSA.new(32).to_pem"
32
+ run sudo -u wigglebottom -i rvm $default_ruby do ruby -ropenssl -e "$expr"
33
+ [ "$status" -eq 0 ]
34
+ }
35
+
36
+ @test "default Ruby can install nokogiri gem" {
37
+ run sudo -u wigglebottom -i rvm $default_ruby do gem install nokogiri --no-ri --no-rdoc
38
+ [ "$status" -eq 0 ]
39
+ }
40
+
41
+ @test "default Ruby can use nokogiri with openssl" {
42
+ expr="puts Nokogiri::HTML(open('$https_url')).css('input')"
43
+ run sudo -u wigglebottom -i rvm $default_ruby do ruby -ropen-uri -rnokogiri -e "$expr"
44
+ [ "$status" -eq 0 ]
45
+ }
@@ -0,0 +1,220 @@
1
+ #
2
+ # Cookbook Name:: rvm
3
+ #
4
+ # Author:: Fletcher Nichol <fnichol@nichol.ca>
5
+ #
6
+ # Copyright 2013, Fletcher Nichol
7
+ #
8
+ # Licensed under the Apache License, Version 2.0 (the "License");
9
+ # you may not use this file except in compliance with the License.
10
+ # You may obtain a copy of the License at
11
+ #
12
+ # http://www.apache.org/licenses/LICENSE-2.0
13
+ #
14
+ # Unless required by applicable law or agreed to in writing, software
15
+ # distributed under the License is distributed on an "AS IS" BASIS,
16
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ # See the License for the specific language governing permissions and
18
+ # limitations under the License.
19
+ #
20
+
21
+ require_relative "../spec_helper"
22
+ require "resource_rvm_installation"
23
+ require "provider_rvm_installation"
24
+
25
+ describe Chef::Provider::RvmInstallation do
26
+
27
+ let(:node) do
28
+ n = Chef::Node.new
29
+ n.set["rvm"]["installer_url"] = "http://rvm.me"
30
+ n.set["rvm"]["installer_flags"] = "stable"
31
+ n.set["rvm"]["install_pkgs"] = ["cake", "pie"]
32
+ n.set["rvm"]["rvmrc_env"] = {"RVM_ENABLE" => "alittle"}
33
+ n
34
+ end
35
+
36
+ let(:new_resource) do
37
+ r = Chef::Resource::RvmInstallation.new("franky", run_context)
38
+ r.rvmrc_template_cookbook("nadda")
39
+ r
40
+ end
41
+
42
+ let(:current_resource) do
43
+ Chef::Resource::RvmInstallation.new("franky", run_context)
44
+ end
45
+
46
+ let(:nutered_resources) do
47
+ [Chef::Resource::Package, Chef::Resource::RemoteFile,
48
+ Chef::Resource::Template]
49
+ end
50
+
51
+ subject(:provider) do
52
+ Chef::Provider::RvmInstallation.new(new_resource, run_context)
53
+ end
54
+
55
+ before do
56
+ nutered_resources.each do |klass|
57
+ klass.any_instance.stub(:run_action).and_return(true)
58
+ end
59
+ provider.stub(:load_current_resource).and_return(current_resource)
60
+ provider.stub(:version).and_return("6.7.8")
61
+ provider.new_resource = new_resource
62
+ provider.current_resource = current_resource
63
+
64
+ Etc.stub(:getpwnam).with("franky").and_return(
65
+ double("user", :dir => "/fake/home/franky", :uid => 101, :gid => 601)
66
+ )
67
+ end
68
+
69
+ describe "#load_current_resource" do
70
+
71
+ before do
72
+ provider.unstub(:load_current_resource)
73
+ provider.unstub(:version)
74
+
75
+ provider.stub(:shell_out).
76
+ with(/type rvm/, hash_including(:user => "franky")).
77
+ and_return(installed_cmd)
78
+ provider.stub(:shell_out).
79
+ with(/rvm version/, hash_including(:user => "franky")).
80
+ and_return(version_cmd)
81
+ end
82
+
83
+ context "rvm is installed" do
84
+
85
+ let(:installed_cmd) do
86
+ double("output",
87
+ :stdout => ["rvm is a function", "rvm ()", "{", "eh", "}"].join("\n"),
88
+ :exitstatus => 0
89
+ )
90
+ end
91
+
92
+ let(:version_cmd) do
93
+ double("output",
94
+ :stdout => "\nrvm 400.23.9 () yadda yadda\n\n",
95
+ :exitstatus => 0
96
+ )
97
+ end
98
+
99
+ it "sets installed state to true" do
100
+ provider.load_current_resource
101
+
102
+ expect(provider.current_resource.installed).to be_truthy
103
+ end
104
+
105
+ it "sets version state" do
106
+ provider.load_current_resource
107
+
108
+ expect(provider.current_resource.version).to eq("400.23.9")
109
+ end
110
+
111
+ context "with a mangled version string" do
112
+
113
+ let(:version_cmd) do
114
+ double("output",
115
+ :stdout => "\nuh oh rvm cake () yadda yadda\n\n",
116
+ :exitstatus => 0
117
+ )
118
+ end
119
+
120
+ it "raises an exception" do
121
+ expect{ provider.load_current_resource }.to raise_error
122
+ end
123
+ end
124
+
125
+ context "with a non-zero version command" do
126
+
127
+ let(:version_cmd) do
128
+ double("output",
129
+ :stdout => "\nrvm 1.2.3 () yadda yadda\n\n",
130
+ :exitstatus => 6
131
+ )
132
+ end
133
+
134
+ it "raises an exception" do
135
+ expect{ provider.load_current_resource }.to raise_error
136
+ end
137
+ end
138
+ end
139
+
140
+ context "rvm is not installed" do
141
+
142
+ let(:installed_cmd) do
143
+ double("output", :stdout => "who cares, it failed\n", :exitstatus => 1)
144
+ end
145
+
146
+ let(:version_cmd) do
147
+ double("output", :stdout => "not what you expected?", :exitstatus => 1)
148
+ end
149
+
150
+ it "sets installed state to false" do
151
+ provider.load_current_resource
152
+
153
+ expect(provider.current_resource.installed).to be false
154
+ end
155
+ end
156
+ end
157
+
158
+ describe "actions" do
159
+
160
+ describe "install" do
161
+
162
+ before do
163
+ provider.current_resource.installed(true)
164
+ provider.stub(:rvm_shell_out!).with(/^bash/)
165
+ end
166
+
167
+ let(:cache_path) { Chef::Config[:file_cache_path] }
168
+
169
+ it "creates a collection of packages to install" do
170
+ expect(provider.install_packages.map { |pkg| pkg.name }).to eq(%w(cake pie))
171
+ end
172
+
173
+ it "calls the package resources" do
174
+ expect(provider).to receive(:install_packages)
175
+
176
+ provider.install_rvm
177
+ end
178
+
179
+ it "creates a template to manage rvmrc" do
180
+ template = provider.send(:write_rvmrc)
181
+
182
+ expect(template.class).to be(Chef::Resource::Template)
183
+ expect(template.name).to eq("/fake/home/franky/.rvmrc")
184
+ expect(template.owner).to eq("franky")
185
+ expect(template.group).to eq(601)
186
+ expect(template.mode).to eq("0644")
187
+ expect(template.source).to eq("rvmrc.erb")
188
+ expect(template.cookbook).to eq("nadda")
189
+ expect(template.variables).to eq(
190
+ :user => "franky",
191
+ :rvm_path => "/fake/home/franky/.rvm",
192
+ :rvmrc_env => {"RVM_ENABLE" => "alittle"}
193
+ )
194
+ end
195
+
196
+ it "creates a remote_file to download the installer script" do
197
+ remote_script = provider.send(:download_installer)
198
+
199
+ expect(remote_script.class).to be(Chef::Resource::RemoteFile)
200
+ expect(remote_script.name).to eq("#{cache_path}/rvm-installer-franky")
201
+ expect(Array(remote_script.source)).to include("http://rvm.me")
202
+ end
203
+
204
+ it "calls the remote_file" do
205
+ expect(provider).to receive(:download_installer)
206
+
207
+ provider.install_rvm
208
+ end
209
+
210
+ it "runs the installer" do
211
+ provider.stub(:rvm_shell_out!)
212
+ expect(provider).to receive(:rvm_shell_out!).with(
213
+ "bash #{cache_path}/rvm-installer-franky stable"
214
+ )
215
+
216
+ provider.install_rvm
217
+ end
218
+ end
219
+ end
220
+ end
@@ -0,0 +1,139 @@
1
+ #
2
+ # Cookbook Name:: rvm
3
+ #
4
+ # Author:: Fletcher Nichol <fnichol@nichol.ca>
5
+ #
6
+ # Copyright 2013, Fletcher Nichol
7
+ #
8
+ # Licensed under the Apache License, Version 2.0 (the "License");
9
+ # you may not use this file except in compliance with the License.
10
+ # You may obtain a copy of the License at
11
+ #
12
+ # http://www.apache.org/licenses/LICENSE-2.0
13
+ #
14
+ # Unless required by applicable law or agreed to in writing, software
15
+ # distributed under the License is distributed on an "AS IS" BASIS,
16
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ # See the License for the specific language governing permissions and
18
+ # limitations under the License.
19
+ #
20
+
21
+ require_relative "../spec_helper"
22
+ require "resource_rvm_installation"
23
+ require "provider_rvm_installation"
24
+
25
+ describe Chef::Resource::RvmInstallation do
26
+
27
+ let(:node) do
28
+ node = Chef::Node.new
29
+ node.set["rvm"]["installer_url"] = "http://example.com/rvm.me"
30
+ node.set["rvm"]["installer_flags"] = "--buy-me beer"
31
+ node.set["rvm"]["install_pkgs"] = ["cake", "pie"]
32
+ node.set["rvm"]["gem_options"] = "--gem-all-the-things"
33
+ node.set["rvm"]["rvmrc_env"] = { "RVM_EVERYTHING" => "maybe" }
34
+ node
35
+ end
36
+
37
+ let(:resource_name) { "franky" }
38
+
39
+ subject(:resource) do
40
+ Chef::Resource::RvmInstallation.new(resource_name, run_context)
41
+ end
42
+
43
+ it "sets resource_name" do
44
+ expect(resource.resource_name).to eq(:rvm_installation)
45
+ end
46
+
47
+ it "sets the provider class" do
48
+ expect(resource.provider).to be(Chef::Provider::RvmInstallation)
49
+ end
50
+
51
+ it "sets the resource name" do
52
+ expect(resource.name).to eq("franky")
53
+ end
54
+
55
+ context "attribute" do
56
+
57
+ it "user can be set" do
58
+ resource.user("root")
59
+ expect(resource.user).to eq("root")
60
+ end
61
+
62
+ it "installer_url defaults to node.rvm.installer_url" do
63
+ expect(resource.installer_url).to eq("http://example.com/rvm.me")
64
+ end
65
+
66
+ it "installer_url can be set" do
67
+ resource.installer_url("https://www.google.ca/#q=rvm")
68
+ expect(resource.installer_url).to eq("https://www.google.ca/#q=rvm")
69
+ end
70
+
71
+ it "installer_flags defaults to node.rvm.installer_flags" do
72
+ expect(resource.installer_flags).to eq("--buy-me beer")
73
+ end
74
+
75
+ it "installer_flags can be set" do
76
+ resource.installer_flags("--send pizza")
77
+ expect(resource.installer_flags).to eq("--send pizza")
78
+ end
79
+
80
+ it "rvmrc_template_source defaults rvmrc.erb" do
81
+ expect(resource.rvmrc_template_source).to eq("rvmrc.erb")
82
+ end
83
+
84
+ it "rvmrc_template_source can be set" do
85
+ resource.rvmrc_template_source("that_other_one.erb")
86
+ expect(resource.rvmrc_template_source).to eq("that_other_one.erb")
87
+ end
88
+
89
+ it "rvmrc_template_cookbook defaults to rvm" do
90
+ expect(resource.rvmrc_template_cookbook).to eq("rvm")
91
+ end
92
+
93
+ it "rvmrc_template_cookbook can be set" do
94
+ resource.rvmrc_template_cookbook("my_rvm_wrapper")
95
+ expect(resource.rvmrc_template_cookbook).to eq("my_rvm_wrapper")
96
+ end
97
+
98
+ it "rvmrc_gem_options defaults to node.rvm.gem_options" do
99
+ expect(resource.rvmrc_gem_options).to eq("--gem-all-the-things")
100
+ end
101
+
102
+ it "rvmrc_gem_options can be set" do
103
+ resource.rvmrc_gem_options("--nope")
104
+ expect(resource.rvmrc_gem_options).to eq("--nope")
105
+ end
106
+
107
+ it "rvmrc_env defaults to node.rvm.rvmrc_env" do
108
+ expect(resource.rvmrc_env).to eq({"RVM_EVERYTHING" => "maybe"})
109
+ end
110
+
111
+ it "rvmrc_env can be set to merge with defaults" do
112
+ resource.rvmrc_env({"FOO" => "is_bar", "this" => "too"})
113
+ expect(resource.rvmrc_env).to eq({
114
+ "RVM_EVERYTHING" => "maybe",
115
+ "FOO" => "is_bar",
116
+ "this" => "too"
117
+ })
118
+ end
119
+
120
+ it "install_pkgs defaults to node.rvm.install_pkgs" do
121
+ expect(resource.install_pkgs).to eq(["cake", "pie"])
122
+ end
123
+
124
+ it "installed can be set" do
125
+ resource.installed(true)
126
+ expect(resource.installed).to be_truthy
127
+ end
128
+
129
+ it "version can be set" do
130
+ resource.version("x.y.z")
131
+ expect(resource.version).to eq("x.y.z")
132
+ end
133
+ end
134
+
135
+ it "action defaults to :install" do
136
+ expect(resource.action).to eq(:install)
137
+ expect(resource.allowed_actions).to include(:install)
138
+ end
139
+ end