r10k 3.14.1 → 5.0.1

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 (246) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +17 -0
  3. data/.github/workflows/docker.yml +9 -4
  4. data/.github/workflows/release.yml +3 -2
  5. data/.github/workflows/rspec_tests.yml +8 -10
  6. data/CHANGELOG.mkd +100 -0
  7. data/CODEOWNERS +1 -2
  8. data/Gemfile +2 -2
  9. data/README.mkd +18 -19
  10. data/doc/common-patterns.mkd +1 -2
  11. data/doc/dynamic-environments/configuration.mkd +91 -12
  12. data/doc/dynamic-environments/usage.mkd +4 -0
  13. data/doc/dynamic-environments/workflow-guide.mkd +3 -3
  14. data/doc/faq.mkd +1 -1
  15. data/doc/puppetfile.mkd +9 -3
  16. data/integration/Gemfile +3 -4
  17. data/integration/Rakefile +58 -23
  18. data/integration/files/pre-suite/git_config.pp.erb +1 -1
  19. data/integration/pre-suite/00_pe_install.rb +3 -0
  20. data/integration/pre-suite/10_git_config.rb +1 -3
  21. data/integration/tests/Puppetfile/HTTP_PROXY_affects_git_source.rb +5 -4
  22. data/integration/tests/basic_functionality/negative/negative_bad_proxy.rb +1 -1
  23. data/integration/tests/basic_functionality/proxy_specified_in_configuration.rb +2 -2
  24. data/integration/tests/basic_functionality/proxy_with_puppetfile.rb +2 -2
  25. data/integration/tests/basic_functionality/rugged_git_provider_with_ssh.rb +3 -3
  26. data/integration/tests/basic_functionality/rugged_git_provider_without_ssh.rb +3 -3
  27. data/integration/tests/command_line/deploy_env_without_mod_update.rb +0 -3
  28. data/integration/tests/command_line/negative/neg_deploy_env_with_module_update.rb +0 -3
  29. data/integration/tests/git_source/HTTP_proxy_and_git_source.rb +5 -10
  30. data/integration/tests/git_source/git_source_git.rb +1 -4
  31. data/integration/tests/git_source/git_source_repeated_remote.rb +2 -5
  32. data/integration/tests/git_source/git_source_submodule.rb +1 -1
  33. data/integration/tests/git_source/negative/neg_git_unauthorized_ssh.rb +1 -1
  34. data/integration/tests/purging/content_not_purged_at_root.rb +2 -5
  35. data/integration/tests/purging/default_purging.rb +0 -3
  36. data/integration/tests/purging/{does_not_purge_files_on_white_list.rb → does_not_purge_files_on_allowlist.rb} +2 -5
  37. data/integration/tests/user_scenario/basic_workflow/multi_env_custom_forge_git_module.rb +1 -4
  38. data/integration/tests/user_scenario/basic_workflow/multi_env_custom_forge_git_module_static.rb +1 -4
  39. data/integration/tests/user_scenario/basic_workflow/multi_source_custom_forge_git_module.rb +1 -4
  40. data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_forge_module.rb +0 -3
  41. data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_git_module.rb +1 -1
  42. data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_git_module_ref.rb +1 -1
  43. data/integration/tests/user_scenario/basic_workflow/negative/neg_disk_full.rb +1 -1
  44. data/integration/tests/user_scenario/basic_workflow/negative/neg_duplicate_module_names.rb +0 -3
  45. data/integration/tests/user_scenario/basic_workflow/negative/neg_inaccessible_forge.rb +3 -2
  46. data/integration/tests/user_scenario/basic_workflow/negative/neg_specify_deleted_forge_module.rb +1 -5
  47. data/integration/tests/user_scenario/basic_workflow/single_env_10000_files.rb +1 -1
  48. data/integration/tests/user_scenario/basic_workflow/single_env_custom_forge_git_module.rb +1 -4
  49. data/integration/tests/user_scenario/basic_workflow/single_env_custom_forge_module.rb +0 -3
  50. data/integration/tests/user_scenario/basic_workflow/single_env_large_files.rb +1 -1
  51. data/integration/tests/user_scenario/basic_workflow/single_env_module_already_installed.rb +0 -3
  52. data/integration/tests/user_scenario/basic_workflow/single_env_purge_unmanaged_modules.rb +0 -3
  53. data/integration/tests/user_scenario/basic_workflow/single_env_switch_forge_git_module.rb +1 -4
  54. data/integration/tests/user_scenario/basic_workflow/single_env_upgrade_forge_mod_revert_change.rb +0 -3
  55. data/integration/tests/user_scenario/complex_workflow/multi_env_add_change_remove.rb +0 -3
  56. data/lib/r10k/action/deploy/environment.rb +2 -19
  57. data/lib/r10k/action/deploy/module.rb +1 -0
  58. data/lib/r10k/action/puppetfile/check.rb +7 -0
  59. data/lib/r10k/action/puppetfile/install.rb +3 -1
  60. data/lib/r10k/cli/deploy.rb +15 -1
  61. data/lib/r10k/cli/puppetfile.rb +1 -0
  62. data/lib/r10k/content_synchronizer.rb +7 -2
  63. data/lib/r10k/environment/with_modules.rb +24 -1
  64. data/lib/r10k/environment.rb +0 -1
  65. data/lib/r10k/git/rugged/bare_repository.rb +5 -4
  66. data/lib/r10k/git/rugged/thin_repository.rb +7 -0
  67. data/lib/r10k/git/rugged/working_repository.rb +13 -7
  68. data/lib/r10k/git/shellgit/thin_repository.rb +5 -1
  69. data/lib/r10k/git/shellgit/working_repository.rb +5 -4
  70. data/lib/r10k/git/stateful_repository.rb +4 -4
  71. data/lib/r10k/module/base.rb +3 -3
  72. data/lib/r10k/module/git.rb +19 -5
  73. data/lib/r10k/module_loader/puppetfile/dsl.rb +4 -0
  74. data/lib/r10k/module_loader/puppetfile.rb +22 -14
  75. data/lib/r10k/puppetfile.rb +1 -1
  76. data/lib/r10k/settings/container.rb +1 -0
  77. data/lib/r10k/settings.rb +6 -7
  78. data/lib/r10k/tarball.rb +1 -1
  79. data/lib/r10k/version.rb +1 -1
  80. data/locales/r10k.pot +34 -82
  81. data/r10k.gemspec +8 -18
  82. metadata +40 -213
  83. data/.github/workflows/stale.yml +0 -21
  84. data/.travis.yml +0 -42
  85. data/docker/.gitignore +0 -1
  86. data/docker/.rspec +0 -4
  87. data/docker/Gemfile +0 -11
  88. data/docker/Makefile +0 -92
  89. data/docker/README.md +0 -28
  90. data/docker/docker-compose.yml +0 -18
  91. data/docker/r10k/Dockerfile +0 -68
  92. data/docker/r10k/adduser.sh +0 -13
  93. data/docker/r10k/docker-entrypoint.d/10-analytics.sh +0 -30
  94. data/docker/r10k/docker-entrypoint.sh +0 -10
  95. data/docker/r10k/release.Dockerfile +0 -55
  96. data/docker/spec/dockerfile_spec.rb +0 -37
  97. data/docker/spec/fixtures/Puppetfile +0 -2
  98. data/integration/tests/basic_functionality/install_pe_only_module_with_puppetfile.rb +0 -83
  99. data/integration/tests/basic_functionality/proxy_with_pe_only_module.rb +0 -128
  100. data/integration/tests/purging/invalid_whitelist_types.rb +0 -63
  101. data/integration/tests/user_scenario/basic_workflow/negative/neg_module_specified_at_deleted_release.rb +0 -49
  102. data/integration/tests/user_scenario/basic_workflow/single_env_module_last_release_deleted.rb +0 -68
  103. data/lib/r10k/environment/bare.rb +0 -13
  104. data/spec/fixtures/empty/.empty +0 -0
  105. data/spec/fixtures/integration/git/puppet-boolean-bare.tar +0 -0
  106. data/spec/fixtures/module/forge/bad_module/metadata.json +0 -1
  107. data/spec/fixtures/module/forge/eight_hundred/Modulefile +0 -8
  108. data/spec/fixtures/module/forge/eight_hundred/metadata.json +0 -19
  109. data/spec/fixtures/tarball/tarball.tar.gz +0 -0
  110. data/spec/fixtures/unit/action/r10k.yaml +0 -5
  111. data/spec/fixtures/unit/action/r10k_cachedir.yaml +0 -2
  112. data/spec/fixtures/unit/action/r10k_creds.yaml +0 -9
  113. data/spec/fixtures/unit/action/r10k_forge_auth.yaml +0 -4
  114. data/spec/fixtures/unit/action/r10k_forge_auth_no_url.yaml +0 -3
  115. data/spec/fixtures/unit/action/r10k_generate_types.yaml +0 -3
  116. data/spec/fixtures/unit/action/r10k_logging.yaml +0 -12
  117. data/spec/fixtures/unit/action/r10k_puppet_path.yaml +0 -3
  118. data/spec/fixtures/unit/puppetfile/argument-error/Puppetfile +0 -1
  119. data/spec/fixtures/unit/puppetfile/default-branch-override/Puppetfile +0 -5
  120. data/spec/fixtures/unit/puppetfile/duplicate-module-error/Puppetfile +0 -10
  121. data/spec/fixtures/unit/puppetfile/forge-override/Puppetfile +0 -8
  122. data/spec/fixtures/unit/puppetfile/invalid-syntax/Puppetfile +0 -1
  123. data/spec/fixtures/unit/puppetfile/load-error/Puppetfile +0 -1
  124. data/spec/fixtures/unit/puppetfile/name-error/Puppetfile +0 -1
  125. data/spec/fixtures/unit/puppetfile/valid-forge-with-version/Puppetfile +0 -1
  126. data/spec/fixtures/unit/puppetfile/valid-forge-without-version/Puppetfile +0 -1
  127. data/spec/fixtures/unit/puppetfile/various-modules/Puppetfile +0 -10
  128. data/spec/fixtures/unit/puppetfile/various-modules/Puppetfile.new +0 -10
  129. data/spec/fixtures/unit/util/purgeable/managed_one/expected_1 +0 -0
  130. data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/managed_symlink_file +0 -1
  131. data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/subdir_allowlisted_2/ignored_1 +0 -0
  132. data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/subdir_expected_1 +0 -0
  133. data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/subdir_unmanaged_1 +0 -0
  134. data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/unmanaged_symlink_dir +0 -1
  135. data/spec/fixtures/unit/util/purgeable/managed_one/managed_symlink_dir +0 -1
  136. data/spec/fixtures/unit/util/purgeable/managed_one/unmanaged_1 +0 -0
  137. data/spec/fixtures/unit/util/purgeable/managed_one/unmanaged_symlink_file +0 -1
  138. data/spec/fixtures/unit/util/purgeable/managed_two/.hidden/unmanaged_3 +0 -0
  139. data/spec/fixtures/unit/util/purgeable/managed_two/expected_2 +0 -0
  140. data/spec/fixtures/unit/util/purgeable/managed_two/unmanaged_2 +0 -0
  141. data/spec/fixtures/unit/util/subprocess/runner/no-execute.sh +0 -3
  142. data/spec/integration/git/rugged/bare_repository_spec.rb +0 -13
  143. data/spec/integration/git/rugged/cache_spec.rb +0 -33
  144. data/spec/integration/git/rugged/thin_repository_spec.rb +0 -14
  145. data/spec/integration/git/rugged/working_repository_spec.rb +0 -48
  146. data/spec/integration/git/shellgit/bare_repository_spec.rb +0 -13
  147. data/spec/integration/git/shellgit/thin_repository_spec.rb +0 -14
  148. data/spec/integration/git/shellgit/working_repository_spec.rb +0 -13
  149. data/spec/integration/git/stateful_repository_spec.rb +0 -159
  150. data/spec/integration/util/purageable_spec.rb +0 -41
  151. data/spec/matchers/exit_with.rb +0 -28
  152. data/spec/matchers/match_realpath.rb +0 -18
  153. data/spec/r10k-mocks/mock_config.rb +0 -33
  154. data/spec/r10k-mocks/mock_env.rb +0 -18
  155. data/spec/r10k-mocks/mock_source.rb +0 -17
  156. data/spec/r10k-mocks.rb +0 -3
  157. data/spec/shared-contexts/git-fixtures.rb +0 -55
  158. data/spec/shared-contexts/tarball.rb +0 -32
  159. data/spec/shared-examples/deploy-actions.rb +0 -69
  160. data/spec/shared-examples/git/bare_repository.rb +0 -132
  161. data/spec/shared-examples/git/thin_repository.rb +0 -26
  162. data/spec/shared-examples/git/working_repository.rb +0 -207
  163. data/spec/shared-examples/git-repository.rb +0 -38
  164. data/spec/shared-examples/puppetfile-action.rb +0 -39
  165. data/spec/shared-examples/settings/ancestry.rb +0 -44
  166. data/spec/shared-examples/subprocess-runner.rb +0 -89
  167. data/spec/spec_helper.rb +0 -41
  168. data/spec/unit/action/cri_runner_spec.rb +0 -72
  169. data/spec/unit/action/deploy/deploy_helpers_spec.rb +0 -38
  170. data/spec/unit/action/deploy/display_spec.rb +0 -61
  171. data/spec/unit/action/deploy/environment_spec.rb +0 -640
  172. data/spec/unit/action/deploy/module_spec.rb +0 -476
  173. data/spec/unit/action/puppetfile/check_spec.rb +0 -53
  174. data/spec/unit/action/puppetfile/cri_runner_spec.rb +0 -47
  175. data/spec/unit/action/puppetfile/install_spec.rb +0 -112
  176. data/spec/unit/action/puppetfile/purge_spec.rb +0 -60
  177. data/spec/unit/action/runner_spec.rb +0 -407
  178. data/spec/unit/action/visitor_spec.rb +0 -39
  179. data/spec/unit/cli_spec.rb +0 -9
  180. data/spec/unit/deployment/config_spec.rb +0 -33
  181. data/spec/unit/deployment_spec.rb +0 -162
  182. data/spec/unit/environment/bare_spec.rb +0 -13
  183. data/spec/unit/environment/base_spec.rb +0 -122
  184. data/spec/unit/environment/git_spec.rb +0 -114
  185. data/spec/unit/environment/name_spec.rb +0 -181
  186. data/spec/unit/environment/plain_spec.rb +0 -8
  187. data/spec/unit/environment/svn_spec.rb +0 -146
  188. data/spec/unit/environment/tarball_spec.rb +0 -45
  189. data/spec/unit/environment/with_modules_spec.rb +0 -75
  190. data/spec/unit/errors/formatting_spec.rb +0 -84
  191. data/spec/unit/feature_spec.rb +0 -50
  192. data/spec/unit/forge/module_release_spec.rb +0 -213
  193. data/spec/unit/git/alternates_spec.rb +0 -116
  194. data/spec/unit/git/cache_spec.rb +0 -66
  195. data/spec/unit/git/rugged/cache_spec.rb +0 -48
  196. data/spec/unit/git/rugged/credentials_spec.rb +0 -215
  197. data/spec/unit/git/shellgit/cache_spec.rb +0 -27
  198. data/spec/unit/git/stateful_repository_spec.rb +0 -45
  199. data/spec/unit/git_spec.rb +0 -102
  200. data/spec/unit/initializers_spec.rb +0 -68
  201. data/spec/unit/instance_cache_spec.rb +0 -78
  202. data/spec/unit/keyed_factory_spec.rb +0 -51
  203. data/spec/unit/logging/terminaloutputter_spec.rb +0 -53
  204. data/spec/unit/logging_spec.rb +0 -68
  205. data/spec/unit/module/base_spec.rb +0 -118
  206. data/spec/unit/module/forge_spec.rb +0 -271
  207. data/spec/unit/module/git_spec.rb +0 -387
  208. data/spec/unit/module/metadata_file_spec.rb +0 -68
  209. data/spec/unit/module/svn_spec.rb +0 -208
  210. data/spec/unit/module/tarball_spec.rb +0 -70
  211. data/spec/unit/module_loader/puppetfile_spec.rb +0 -421
  212. data/spec/unit/module_spec.rb +0 -114
  213. data/spec/unit/puppetfile_spec.rb +0 -304
  214. data/spec/unit/settings/collection_spec.rb +0 -123
  215. data/spec/unit/settings/container_spec.rb +0 -92
  216. data/spec/unit/settings/definition_spec.rb +0 -79
  217. data/spec/unit/settings/enum_definition_spec.rb +0 -20
  218. data/spec/unit/settings/inheritance_spec.rb +0 -38
  219. data/spec/unit/settings/list_spec.rb +0 -88
  220. data/spec/unit/settings/loader_spec.rb +0 -110
  221. data/spec/unit/settings/uri_definition_spec.rb +0 -23
  222. data/spec/unit/settings_spec.rb +0 -303
  223. data/spec/unit/source/base_spec.rb +0 -31
  224. data/spec/unit/source/exec_spec.rb +0 -81
  225. data/spec/unit/source/git_spec.rb +0 -233
  226. data/spec/unit/source/hash_spec.rb +0 -54
  227. data/spec/unit/source/svn_spec.rb +0 -196
  228. data/spec/unit/source/yaml_spec.rb +0 -42
  229. data/spec/unit/source_spec.rb +0 -10
  230. data/spec/unit/svn/remote_spec.rb +0 -21
  231. data/spec/unit/svn/working_dir_spec.rb +0 -56
  232. data/spec/unit/tarball_spec.rb +0 -57
  233. data/spec/unit/util/attempt_spec.rb +0 -82
  234. data/spec/unit/util/cacheable_spec.rb +0 -23
  235. data/spec/unit/util/commands_spec.rb +0 -61
  236. data/spec/unit/util/downloader_spec.rb +0 -98
  237. data/spec/unit/util/exec_env_spec.rb +0 -56
  238. data/spec/unit/util/purgeable_spec.rb +0 -267
  239. data/spec/unit/util/setopts_spec.rb +0 -83
  240. data/spec/unit/util/subprocess/result_spec.rb +0 -36
  241. data/spec/unit/util/subprocess/runner/posix_spec.rb +0 -7
  242. data/spec/unit/util/subprocess/runner/pump_spec.rb +0 -79
  243. data/spec/unit/util/subprocess/runner/windows_spec.rb +0 -7
  244. data/spec/unit/util/subprocess/subprocess_error_spec.rb +0 -26
  245. data/spec/unit/util/subprocess_spec.rb +0 -65
  246. data/spec/unit/util/symbolize_keys_spec.rb +0 -67
@@ -1,68 +0,0 @@
1
- require 'spec_helper'
2
- require 'r10k/initializers'
3
-
4
- describe R10K::Initializers::GitInitializer do
5
- it "configures the Git provider" do
6
- subject = described_class.new({:provider => :rugged})
7
- expect(R10K::Git).to receive(:provider=).with(:rugged)
8
- subject.call
9
- end
10
-
11
- it "configures the Git username" do
12
- subject = described_class.new({:username => 'git'})
13
- expect(R10K::Git.settings).to receive(:[]=).with(:username, 'git')
14
- subject.call
15
- end
16
-
17
- it "configures the Git private key" do
18
- subject = described_class.new({:private_key => '/etc/puppetlabs/r10k/id_rsa'})
19
- expect(R10K::Git.settings).to receive(:[]=).with(:private_key, '/etc/puppetlabs/r10k/id_rsa')
20
- subject.call
21
- end
22
- end
23
-
24
- describe R10K::Initializers::ForgeInitializer do
25
- it "sets the PuppetForge host" do
26
- subject = described_class.new({:baseurl => 'https://my.site.forge'})
27
- expect(PuppetForge).to receive(:host=).with('https://my.site.forge')
28
- subject.call
29
- end
30
-
31
- it "configures PuppetForge connection proxy" do
32
- subject = described_class.new({:proxy => 'http://my.site.proxy:3128'})
33
- expect(PuppetForge::Connection).to receive(:proxy=).with('http://my.site.proxy:3128')
34
- subject.call
35
- end
36
- end
37
-
38
- describe R10K::Initializers::GlobalInitializer do
39
- it "logs a warning if purgedirs was set" do
40
- subject = described_class.new({:purgedirs => 'This setting has been deprecated for over two years :('})
41
- expect(subject.logger).to receive(:warn).with('the purgedirs key in r10k.yaml is deprecated. it is currently ignored.')
42
- subject.call
43
- end
44
-
45
- it "sets the Git cache_root" do
46
- subject = described_class.new({:cachedir => '/var/cache/r10k'})
47
- expect(R10K::Git::Cache.settings).to receive(:[]=).with(:cache_root, '/var/cache/r10k')
48
- subject.call
49
- end
50
-
51
- it "delegates git settings to the Git initializer" do
52
- git = instance_double('R10K::Initializers::GitInitializer')
53
- expect(git).to receive(:call)
54
- expect(R10K::Initializers::GitInitializer).to receive(:new).and_return(git)
55
-
56
- subject = described_class.new({:git => {}})
57
- subject.call
58
- end
59
-
60
- it "delegates forge settings to the Forge initializer" do
61
- forge = instance_double('R10K::Initializers::ForgeInitializer')
62
- expect(forge).to receive(:call)
63
- expect(R10K::Initializers::ForgeInitializer).to receive(:new).and_return(forge)
64
-
65
- subject = described_class.new({:forge => {}})
66
- subject.call
67
- end
68
- end
@@ -1,78 +0,0 @@
1
- require 'spec_helper'
2
-
3
- require 'r10k/instance_cache'
4
-
5
- describe R10K::InstanceCache do
6
-
7
- describe "setting up a new instance cache" do
8
- let(:klass) do
9
- dubs = double('test class')
10
- allow(dubs).to receive(:new) { |*args| args }
11
- dubs
12
- end
13
-
14
- it "can create new objects" do
15
- registry = described_class.new(klass)
16
- expect(registry.generate).to eq []
17
- end
18
-
19
- describe "defining object arity" do
20
-
21
- it "handles unary objects" do
22
- expect(klass).to receive(:new).with(:foo)
23
-
24
- registry = described_class.new(klass)
25
- expect(registry.generate(:foo)).to eq [:foo]
26
- end
27
-
28
- it "handles ternary objects" do
29
- expect(klass).to receive(:new).with(:foo, :bar, :baz)
30
-
31
- registry = described_class.new(klass)
32
- expect(registry.generate(:foo, :bar, :baz)).to eq [:foo, :bar, :baz]
33
- end
34
-
35
- it 'handles n-ary objects' do
36
- args = %w[a bunch of arbitrary objects]
37
- expect(klass).to receive(:new).with(*args)
38
-
39
- registry = described_class.new(klass)
40
- expect(registry.generate(*args)).to eq args
41
- end
42
-
43
- it 'fails when the required arguments are not matched' do
44
- expect(klass).to receive(:new).and_raise ArgumentError, "not enough args"
45
-
46
- registry = described_class.new(klass)
47
- expect { registry.generate('arity is hard') }.to raise_error ArgumentError, "not enough args"
48
- end
49
- end
50
-
51
- it "can specify the constructor method" do
52
- expect(klass).to receive(:from_json).and_return "this is json, right?"
53
-
54
- registry = described_class.new(klass, :from_json)
55
- expect(registry.generate).to eq "this is json, right?"
56
- end
57
- end
58
-
59
-
60
- it "returns a memoized object if it's been created before" do
61
- registry = described_class.new(String)
62
- first = registry.generate "bam!"
63
- second = registry.generate "bam!"
64
-
65
- expect(first.object_id).to eq second.object_id
66
- end
67
-
68
- it 'can clear registered objects' do
69
- registry = described_class.new(String)
70
-
71
- first = registry.generate "bam!"
72
- registry.clear!
73
- second = registry.generate "bam!"
74
-
75
- expect(first.object_id).to_not eq second.object_id
76
-
77
- end
78
- end
@@ -1,51 +0,0 @@
1
- require 'spec_helper'
2
- require 'r10k/keyed_factory'
3
-
4
- describe R10K::KeyedFactory do
5
-
6
- let(:registered) { Class.new }
7
-
8
- describe "registering implementations" do
9
- it "can register new implementations" do
10
- subject.register(:klass, registered)
11
- expect(subject.retrieve(:klass)).to eq registered
12
- end
13
-
14
- it "raises an error when a duplicate implementation is registered" do
15
- subject.register(:klass, registered)
16
-
17
- expect {
18
- subject.register(:klass, registered)
19
- }.to raise_error(R10K::KeyedFactory::DuplicateImplementationError)
20
- end
21
-
22
- it "can register classes with nil as a key" do
23
- subject.register(nil, registered)
24
- expect(subject.retrieve(nil)).to eq registered
25
- end
26
- end
27
-
28
- describe "generating instances" do
29
- before do
30
- subject.register(:klass, registered)
31
- end
32
-
33
- it "generates an instance with the associated class" do
34
- instance = subject.generate(:klass)
35
- expect(instance).to be_a_kind_of registered
36
- end
37
-
38
- it "can generate a class with nil as a key" do
39
- other = Class.new
40
- subject.register(nil, other)
41
- instance = subject.generate(nil)
42
- expect(instance).to be_a_kind_of other
43
- end
44
-
45
- it "raises an error if no implementation was registered with the given key" do
46
- expect {
47
- subject.generate(:foo)
48
- }.to raise_error(R10K::KeyedFactory::UnknownImplementationError)
49
- end
50
- end
51
- end
@@ -1,53 +0,0 @@
1
- require 'spec_helper'
2
- require 'stringio'
3
- require 'r10k/logging/terminaloutputter'
4
-
5
- describe R10K::Logging::TerminalOutputter do
6
-
7
- let(:stream) { StringIO.new }
8
-
9
- let(:formatter) do
10
- Class.new(Log4r::Formatter) do
11
- def format(logevent)
12
- logevent.data
13
- end
14
- end
15
- end
16
-
17
- subject do
18
- described_class.new('test', stream, :level => 0, :formatter => formatter).tap do |o|
19
- o.use_color = true
20
- end
21
- end
22
-
23
- tests = [
24
- [:debug2, :cyan],
25
- [:debug1, :cyan],
26
- [:debug, :green],
27
- [:info, nil],
28
- [:notice, nil],
29
- [:warn, :yellow],
30
- [:error, :red],
31
- [:fatal, :red],
32
- ]
33
-
34
- tests.each_with_index do |(level, color), index|
35
- # Note for the unwary - using a loop in this manner shows strange
36
- # behavior with variable closure. The describe block is needed to retain
37
- # the loop variables for each test; without this the let helpers are
38
- # overwritten and the last set of helpers are used for all tests.
39
- describe "at level #{level}" do
40
- let(:message) { "level #{level}: #{color}" }
41
-
42
- let(:event) do
43
- Log4r::LogEvent.new(index + 1, Log4r::Logger.new('test::logger'), nil, message)
44
- end
45
-
46
- it "logs messages as #{color ? color : "uncolored"}" do
47
- output = color.nil? ? message : message.send(color)
48
- subject.send(level, event)
49
- expect(stream.string).to eq output
50
- end
51
- end
52
- end
53
- end
@@ -1,68 +0,0 @@
1
- require 'spec_helper'
2
- require 'r10k/logging'
3
-
4
- describe R10K::Logging do
5
-
6
- describe "parsing a log level" do
7
- it "parses 'true:TrueClass' as INFO" do
8
- expect(described_class.parse_level(true)).to eq Log4r::INFO
9
- end
10
-
11
- it "parses 'true:String' as nil" do
12
- expect(described_class.parse_level("true")).to be_nil
13
- end
14
-
15
- it "parses a numeric string as an integer" do
16
- expect(described_class.parse_level('2')).to eq 2
17
- end
18
-
19
- it "parses a log level string as a log level" do
20
- expect(described_class.parse_level('debug')).to eq Log4r::DEBUG
21
- end
22
-
23
- it "returns nil when given an invalid log level" do
24
- expect(described_class.parse_level('deblag')).to be_nil
25
- end
26
- end
27
-
28
- describe "setting the log level" do
29
- after(:all) { R10K::Logging.level = 'warn' }
30
-
31
- it "sets the outputter log level" do
32
- expect(described_class.outputter).to receive(:level=).with(Log4r::DEBUG)
33
- described_class.level = 'debug'
34
- end
35
-
36
- it "stores the new log level" do
37
- allow(described_class.outputter).to receive(:level=)
38
- described_class.level = 'debug'
39
- expect(described_class.level).to eq(Log4r::DEBUG)
40
- end
41
-
42
- it "raises an exception when given an invalid log level" do
43
- expect {
44
- described_class.level = 'deblag'
45
- }.to raise_error(ArgumentError, /Invalid log level/)
46
- end
47
-
48
- describe "switching the formatter" do
49
- before do
50
- allow(described_class.outputter).to receive(:level=)
51
- end
52
-
53
- it "switches to the debug formatter if the new log level is debug or greater" do
54
- debug_formatter = double('debug formatter')
55
- expect(described_class).to receive(:debug_formatter).and_return(debug_formatter)
56
- expect(described_class.outputter).to receive(:formatter=).with(debug_formatter)
57
- described_class.level = 'debug'
58
- end
59
-
60
- it "switches to the default formatter if the new log level is info or less" do
61
- default_formatter = double('default formatter')
62
- expect(described_class).to receive(:default_formatter).and_return(default_formatter)
63
- expect(described_class.outputter).to receive(:formatter=).with(default_formatter)
64
- described_class.level = 'info'
65
- end
66
- end
67
- end
68
- end
@@ -1,118 +0,0 @@
1
- require 'spec_helper'
2
- require 'r10k/module/base'
3
-
4
- describe R10K::Module::Base do
5
- describe "parsing the title" do
6
- it "parses titles with no owner" do
7
- m = described_class.new('eight_hundred', '/moduledir', {})
8
- expect(m.name).to eq 'eight_hundred'
9
- expect(m.owner).to be_nil
10
- end
11
-
12
- it "parses forward slash separated titles" do
13
- m = described_class.new('branan/eight_hundred', '/moduledir', {})
14
- expect(m.name).to eq 'eight_hundred'
15
- expect(m.owner).to eq 'branan'
16
- end
17
-
18
- it "parses hyphen separated titles" do
19
- m = described_class.new('branan-eight_hundred', '/moduledir', {})
20
- expect(m.name).to eq 'eight_hundred'
21
- expect(m.owner).to eq 'branan'
22
- end
23
-
24
- it "raises an error when the title is not correctly formatted" do
25
- expect {
26
- described_class.new('branan!eight_hundred', '/moduledir', {})
27
- }.to raise_error(ArgumentError, "Module name (branan!eight_hundred) must match either 'modulename' or 'owner/modulename'")
28
- end
29
- end
30
-
31
- describe 'deleting the spec dir' do
32
- let(:module_org) { "coolorg" }
33
- let(:module_name) { "coolmod" }
34
- let(:title) { "#{module_org}-#{module_name}" }
35
- let(:dirname) { Pathname.new(Dir.mktmpdir) }
36
- let(:spec_path) { dirname + module_name + 'spec' }
37
-
38
- before(:each) do
39
- logger = double("logger")
40
- allow_any_instance_of(described_class).to receive(:logger).and_return(logger)
41
- allow(logger).to receive(:debug2).with(any_args)
42
- allow(logger).to receive(:info).with(any_args)
43
- end
44
-
45
- it 'does not remove the spec directory by default' do
46
- FileUtils.mkdir_p(spec_path)
47
- m = described_class.new(title, dirname, {})
48
- m.maybe_delete_spec_dir
49
- expect(Dir.exist?(spec_path)).to eq true
50
- end
51
-
52
- it 'detects a symlink and deletes the target' do
53
- Dir.mkdir(dirname + module_name)
54
- target_dir = Dir.mktmpdir
55
- FileUtils.ln_s(target_dir, spec_path)
56
- m = described_class.new(title, dirname, {exclude_spec: true})
57
- m.maybe_delete_spec_dir
58
- expect(Dir.exist?(target_dir)).to eq false
59
- end
60
-
61
- it 'removes the spec directory if exclude_spec is set' do
62
- FileUtils.mkdir_p(spec_path)
63
- m = described_class.new(title, dirname, {exclude_spec: true})
64
- m.maybe_delete_spec_dir
65
- expect(Dir.exist?(spec_path)).to eq false
66
- end
67
-
68
- it 'does not remove the spec directory if spec_deletable is false' do
69
- FileUtils.mkdir_p(spec_path)
70
- m = described_class.new(title, dirname, {})
71
- m.spec_deletable = false
72
- m.maybe_delete_spec_dir
73
- expect(Dir.exist?(spec_path)).to eq true
74
- end
75
- end
76
-
77
- describe "path variables" do
78
- it "uses the module name as the name" do
79
- m = described_class.new('eight_hundred', '/moduledir', {})
80
- expect(m.dirname).to eq '/moduledir'
81
- expect(m.path).to eq(Pathname.new('/moduledir/eight_hundred'))
82
- end
83
-
84
- it "does not include the owner in the path" do
85
- m = described_class.new('branan/eight_hundred', '/moduledir', {})
86
- expect(m.dirname).to eq '/moduledir'
87
- expect(m.path).to eq(Pathname.new('/moduledir/eight_hundred'))
88
- end
89
- end
90
-
91
- describe "with alternate variable names" do
92
- subject do
93
- described_class.new('branan/eight_hundred', '/moduledir', {})
94
- end
95
-
96
- it "aliases full_name to title" do
97
- expect(subject.full_name).to eq 'branan-eight_hundred'
98
- end
99
-
100
- it "aliases author to owner" do
101
- expect(subject.author).to eq 'branan'
102
- end
103
-
104
- it "aliases basedir to dirname" do
105
- expect(subject.basedir).to eq '/moduledir'
106
- end
107
- end
108
-
109
- describe "accepting a visitor" do
110
- subject { described_class.new('branan-eight_hundred', '/moduledir', {}) }
111
-
112
- it "passes itself to the visitor" do
113
- visitor = spy('visitor')
114
- expect(visitor).to receive(:visit).with(:module, subject)
115
- subject.accept(visitor)
116
- end
117
- end
118
- end