puppet 4.8.2-universal-darwin → 4.9.0-universal-darwin

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of puppet might be problematic. Click here for more details.

Files changed (348) hide show
  1. checksums.yaml +15 -0
  2. data/CONTRIBUTING.md +25 -1
  3. data/Gemfile +6 -0
  4. data/Rakefile +1 -0
  5. data/ext/project_data.yaml +5 -1
  6. data/ext/windows/service/daemon.rb +2 -1
  7. data/install.rb +43 -6
  8. data/lib/hiera/puppet_function.rb +15 -17
  9. data/lib/hiera/scope.rb +12 -14
  10. data/lib/puppet/application/face_base.rb +4 -0
  11. data/lib/puppet/application/lookup.rb +4 -2
  12. data/lib/puppet/application/resource.rb +1 -1
  13. data/lib/puppet/data_providers/data_adapter.rb +6 -0
  14. data/lib/puppet/data_providers/data_function_support.rb +7 -0
  15. data/lib/puppet/data_providers/function_env_data_provider.rb +7 -0
  16. data/lib/puppet/data_providers/function_module_data_provider.rb +6 -0
  17. data/lib/puppet/data_providers/hiera_config.rb +31 -10
  18. data/lib/puppet/data_providers/hiera_env_data_provider.rb +6 -0
  19. data/lib/puppet/data_providers/hiera_interpolate.rb +2 -1
  20. data/lib/puppet/data_providers/hiera_module_data_provider.rb +6 -0
  21. data/lib/puppet/data_providers/hiera_support.rb +6 -0
  22. data/lib/puppet/data_providers/json_data_provider_factory.rb +12 -0
  23. data/lib/puppet/data_providers/yaml_data_provider_factory.rb +12 -0
  24. data/lib/puppet/data_providers.rb +6 -3
  25. data/lib/puppet/defaults.rb +25 -4
  26. data/lib/puppet/face/ca.rb +2 -0
  27. data/lib/puppet/face/certificate_request.rb +2 -0
  28. data/lib/puppet/face/certificate_revocation_list.rb +2 -0
  29. data/lib/puppet/face/file.rb +3 -0
  30. data/lib/puppet/face/help/face.erb +3 -0
  31. data/lib/puppet/face/help.rb +19 -17
  32. data/lib/puppet/face/key.rb +1 -0
  33. data/lib/puppet/face/man.rb +4 -2
  34. data/lib/puppet/face/module/generate.rb +1 -1
  35. data/lib/puppet/face/status.rb +2 -0
  36. data/lib/puppet/feature/base.rb +9 -2
  37. data/lib/puppet/feature/hocon.rb +3 -0
  38. data/lib/puppet/file_system/windows.rb +8 -0
  39. data/lib/puppet/file_system.rb +15 -3
  40. data/lib/puppet/forge/repository.rb +1 -2
  41. data/lib/puppet/forge.rb +6 -6
  42. data/lib/puppet/functions/binary_file.rb +4 -10
  43. data/lib/puppet/functions/hiera_array.rb +1 -1
  44. data/lib/puppet/functions/hiera_include.rb +1 -1
  45. data/lib/puppet/functions/hocon_data.rb +24 -0
  46. data/lib/puppet/functions/json_data.rb +18 -0
  47. data/lib/puppet/functions/yaml_data.rb +21 -0
  48. data/lib/puppet/generate/type.rb +1 -1
  49. data/lib/puppet/graph/simple_graph.rb +4 -2
  50. data/lib/puppet/indirector/file_bucket_file/file.rb +10 -2
  51. data/lib/puppet/indirector/request.rb +5 -1
  52. data/lib/puppet/interface/face_collection.rb +1 -1
  53. data/lib/puppet/interface.rb +14 -2
  54. data/lib/puppet/module.rb +14 -2
  55. data/lib/puppet/module_tool/applications/builder.rb +3 -2
  56. data/lib/puppet/module_tool/applications/installer.rb +14 -14
  57. data/lib/puppet/module_tool/applications/upgrader.rb +13 -13
  58. data/lib/puppet/module_tool/installed_modules.rb +7 -7
  59. data/lib/puppet/module_tool/local_tarball.rb +3 -3
  60. data/lib/puppet/module_tool/metadata.rb +1 -1
  61. data/lib/puppet/module_tool.rb +4 -4
  62. data/lib/puppet/network/http/connection.rb +2 -0
  63. data/lib/puppet/network/http/webrick.rb +2 -1
  64. data/lib/puppet/parser/functions/hiera.rb +14 -0
  65. data/lib/puppet/parser/functions/hiera_array.rb +14 -0
  66. data/lib/puppet/parser/functions/hiera_hash.rb +14 -0
  67. data/lib/puppet/parser/functions/hiera_include.rb +14 -0
  68. data/lib/puppet/parser/scope.rb +14 -20
  69. data/lib/puppet/plugins/data_providers/data_provider.rb +108 -17
  70. data/lib/puppet/plugins/data_providers/registry.rb +2 -36
  71. data/lib/puppet/plugins/data_providers.rb +2 -0
  72. data/lib/puppet/pops/adaptable.rb +0 -3
  73. data/lib/puppet/pops/binder/producers.rb +3 -3
  74. data/lib/puppet/pops/evaluator/access_operator.rb +4 -4
  75. data/lib/puppet/pops/evaluator/closure.rb +1 -1
  76. data/lib/puppet/pops/evaluator/compare_operator.rb +4 -4
  77. data/lib/puppet/pops/evaluator/evaluator_impl.rb +1 -1
  78. data/lib/puppet/pops/issues.rb +4 -0
  79. data/lib/puppet/pops/label_provider.rb +14 -0
  80. data/lib/puppet/pops/loader/loader_paths.rb +3 -1
  81. data/lib/puppet/pops/loader/module_loaders.rb +21 -7
  82. data/lib/puppet/pops/loader/typed_name.rb +0 -2
  83. data/lib/puppet/pops/loaders.rb +31 -12
  84. data/lib/puppet/pops/lookup/configured_data_provider.rb +87 -0
  85. data/lib/puppet/pops/lookup/context.rb +121 -71
  86. data/lib/puppet/pops/lookup/data_adapter.rb +27 -0
  87. data/lib/puppet/pops/lookup/data_dig_function_provider.rb +55 -0
  88. data/lib/puppet/pops/lookup/data_hash_function_provider.rb +111 -0
  89. data/lib/puppet/pops/lookup/data_provider.rb +102 -0
  90. data/lib/puppet/pops/lookup/environment_data_provider.rb +27 -0
  91. data/lib/puppet/pops/lookup/explainer.rb +122 -82
  92. data/lib/puppet/pops/lookup/function_provider.rb +82 -0
  93. data/lib/puppet/pops/lookup/global_data_provider.rb +49 -0
  94. data/lib/puppet/pops/lookup/hiera_config.rb +601 -0
  95. data/lib/puppet/pops/lookup/interpolation.rb +56 -35
  96. data/lib/puppet/pops/lookup/invocation.rb +179 -101
  97. data/lib/puppet/pops/lookup/location_resolver.rb +72 -0
  98. data/lib/puppet/pops/lookup/lookup_adapter.rb +451 -0
  99. data/lib/puppet/pops/lookup/lookup_key.rb +99 -0
  100. data/lib/puppet/pops/lookup/lookup_key_function_provider.rb +119 -0
  101. data/lib/puppet/pops/lookup/module_data_provider.rb +58 -0
  102. data/lib/puppet/pops/lookup/sub_lookup.rb +8 -4
  103. data/lib/puppet/pops/lookup.rb +4 -3
  104. data/lib/puppet/pops/merge_strategy.rb +120 -39
  105. data/lib/puppet/pops/parser/egrammar.ra +2 -0
  106. data/lib/puppet/pops/parser/eparser.rb +816 -808
  107. data/lib/puppet/pops/parser/locator.rb +3 -3
  108. data/lib/puppet/pops/parser/slurp_support.rb +4 -3
  109. data/lib/puppet/pops/pcore.rb +21 -12
  110. data/lib/puppet/pops/serialization/abstract_reader.rb +17 -7
  111. data/lib/puppet/pops/serialization/abstract_writer.rb +27 -12
  112. data/lib/puppet/pops/serialization/deserializer.rb +17 -4
  113. data/lib/puppet/pops/serialization/extension.rb +37 -8
  114. data/lib/puppet/pops/serialization/object.rb +14 -6
  115. data/lib/puppet/pops/serialization/rgen.rb +2 -1
  116. data/lib/puppet/pops/serialization/serializer.rb +30 -7
  117. data/lib/puppet/pops/types/implementation_registry.rb +1 -1
  118. data/lib/puppet/pops/types/p_object_type.rb +55 -12
  119. data/lib/puppet/pops/types/p_sem_ver_range_type.rb +27 -27
  120. data/lib/puppet/pops/types/p_sem_ver_type.rb +12 -12
  121. data/lib/puppet/pops/types/p_timespan_type.rb +6 -6
  122. data/lib/puppet/pops/types/p_timestamp_type.rb +2 -2
  123. data/lib/puppet/pops/types/p_type_set_type.rb +7 -16
  124. data/lib/puppet/pops/types/recursion_guard.rb +64 -20
  125. data/lib/puppet/pops/types/ruby_generator.rb +10 -0
  126. data/lib/puppet/pops/types/type_calculator.rb +23 -13
  127. data/lib/puppet/pops/types/type_factory.rb +20 -9
  128. data/lib/puppet/pops/types/type_formatter.rb +37 -17
  129. data/lib/puppet/pops/types/type_mismatch_describer.rb +7 -6
  130. data/lib/puppet/pops/types/type_parser.rb +6 -0
  131. data/lib/puppet/pops/types/types.rb +225 -132
  132. data/lib/puppet/pops/validation/checker4_0.rb +12 -2
  133. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
  134. data/lib/puppet/pops/validation.rb +1 -1
  135. data/lib/puppet/pops/visitor.rb +4 -3
  136. data/lib/puppet/pops.rb +6 -9
  137. data/lib/puppet/provider/mcx/mcxcontent.rb +2 -1
  138. data/lib/puppet/provider/nameservice.rb +15 -0
  139. data/lib/puppet/provider/package/appdmg.rb +1 -1
  140. data/lib/puppet/provider/package/dnf.rb +1 -1
  141. data/lib/puppet/provider/package/pkg.rb +1 -1
  142. data/lib/puppet/provider/package/pkgdmg.rb +1 -1
  143. data/lib/puppet/provider/package/pkgng.rb +1 -1
  144. data/lib/puppet/provider/package/rpm.rb +2 -2
  145. data/lib/puppet/provider/service/smf.rb +3 -3
  146. data/lib/puppet/provider/service/systemd.rb +5 -1
  147. data/lib/puppet/provider/user/directoryservice.rb +1 -0
  148. data/lib/puppet/provider/user/user_role_add.rb +15 -0
  149. data/lib/puppet/provider/yumrepo/inifile.rb +2 -2
  150. data/lib/puppet/provider/zone/solaris.rb +4 -1
  151. data/lib/puppet/reference/indirection.rb +1 -1
  152. data/lib/puppet/resource/catalog.rb +12 -4
  153. data/lib/puppet/resource/type.rb +3 -3
  154. data/lib/puppet/resource.rb +2 -3
  155. data/lib/puppet/settings/config_file.rb +2 -1
  156. data/lib/puppet/settings/directory_setting.rb +6 -0
  157. data/lib/puppet/settings/environment_conf.rb +6 -2
  158. data/lib/puppet/settings/file_or_directory_setting.rb +6 -0
  159. data/lib/puppet/settings/file_setting.rb +10 -0
  160. data/lib/puppet/settings.rb +1 -1
  161. data/lib/puppet/ssl/certificate_authority.rb +13 -2
  162. data/lib/puppet/ssl/host.rb +23 -1
  163. data/lib/puppet/transaction/additional_resource_generator.rb +7 -0
  164. data/lib/puppet/type/user.rb +16 -3
  165. data/lib/puppet/util/execution.rb +3 -3
  166. data/lib/puppet/util/filetype.rb +11 -5
  167. data/lib/puppet/util/logging.rb +2 -1
  168. data/lib/puppet/util/network_device/config.rb +1 -1
  169. data/lib/puppet/util/plist.rb +6 -0
  170. data/lib/puppet/util/profiler/aggregate.rb +1 -1
  171. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +2 -2
  172. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +2 -1
  173. data/lib/puppet/util/windows/adsi.rb +15 -12
  174. data/lib/puppet/util.rb +1 -0
  175. data/lib/puppet/vendor/load_semantic_puppet.rb +1 -0
  176. data/lib/puppet/vendor/pathspec/lib/pathspec.rb +2 -1
  177. data/lib/puppet/vendor/require_vendored.rb +0 -1
  178. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/graph.rb +2 -2
  179. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/graph_node.rb +2 -2
  180. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/module_release.rb +58 -0
  181. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/source.rb +2 -2
  182. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/unsatisfiable_graph.rb +2 -2
  183. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency.rb +7 -7
  184. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/gem_version.rb +3 -0
  185. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/locales/config.yaml +21 -0
  186. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/version.rb +48 -21
  187. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/version_range.rb +15 -17
  188. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet.rb +17 -0
  189. data/lib/puppet/version.rb +1 -1
  190. data/lib/puppet.rb +52 -0
  191. data/lib/semver.rb +19 -12
  192. data/locales/config.yaml +29 -0
  193. data/locales/puppet.pot +79 -0
  194. data/man/man5/puppet.conf.5 +1 -1
  195. data/spec/fixtures/unit/application/environments/puppet_func_provider/functions/{data.pp → environment/data.pp} +0 -0
  196. data/spec/fixtures/unit/data_providers/environments/hiera_misc/data/common.yaml +2 -0
  197. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/data/common.yaml +1 -1
  198. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/hiera.yaml +5 -0
  199. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/lib/puppet/bindings/backend/default.rb +9 -0
  200. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/lib/puppet_x/backend/special_data_provider_factory.rb +23 -0
  201. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/manifests/init.pp +5 -0
  202. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/metadata.json +9 -0
  203. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_env_data.rb +1 -0
  204. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/manifests/init.pp +1 -1
  205. data/spec/fixtures/unit/functions/lookup/data/common.yaml +19 -0
  206. data/spec/fixtures/unit/functions/lookup_fixture/data/common.yaml +19 -0
  207. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/environment.conf +0 -0
  208. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/lib/puppet/functions/environment/data.rb +0 -0
  209. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/lib/puppet/bindings/abc/default.rb +0 -0
  210. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/lib/puppet/functions/abc/data.rb +0 -0
  211. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/manifests/init.pp +0 -0
  212. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/lib/puppet/bindings/bad_data/default.rb +0 -0
  213. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +0 -0
  214. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/manifests/init.pp +0 -0
  215. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/lib/puppet/bindings/bca/default.rb +0 -0
  216. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/lib/puppet/functions/bca/data.rb +0 -0
  217. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/manifests/init.pp +0 -0
  218. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/data/empty.json +0 -0
  219. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/hiera.yaml +0 -0
  220. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/manifests/init.pp +0 -0
  221. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/metadata.json +0 -0
  222. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/data/empty_key.json +0 -0
  223. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/hiera.yaml +0 -0
  224. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/manifests/init.pp +0 -0
  225. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/metadata.json +0 -0
  226. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/data/empty_key.yaml +0 -0
  227. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/hiera.yaml +0 -0
  228. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/manifests/init.pp +0 -0
  229. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/metadata.json +0 -0
  230. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/data/empty.yaml +0 -0
  231. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/hiera.yaml +0 -0
  232. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/manifests/init.pp +0 -0
  233. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/metadata.json +0 -0
  234. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/data/first.json +0 -0
  235. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/hiera.yaml +0 -0
  236. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/manifests/init.pp +0 -0
  237. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/metadata.json +0 -0
  238. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/meta/lib/puppet/functions/meta/data.rb +0 -0
  239. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/meta/manifests/init.pp +0 -0
  240. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/meta/metadata.json +0 -0
  241. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/lib/puppet/bindings/metawcp/default.rb +0 -0
  242. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/lib/puppet_x/thallgren/sample_module_data.rb +0 -0
  243. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/manifests/init.pp +0 -0
  244. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/metadata.json +0 -0
  245. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/no_provider/manifests/init.pp +0 -0
  246. data/spec/integration/application/apply_spec.rb +88 -2
  247. data/spec/integration/application/lookup_spec.rb +155 -0
  248. data/spec/integration/data_binding_spec.rb +5 -5
  249. data/spec/integration/defaults_spec.rb +13 -0
  250. data/spec/integration/environments/default_manifest_spec.rb +16 -16
  251. data/spec/integration/environments/setting_hooks_spec.rb +1 -1
  252. data/spec/integration/test/test_helper_spec.rb +6 -2
  253. data/spec/integration/transaction_spec.rb +74 -0
  254. data/spec/integration/util/execution_spec.rb +8 -0
  255. data/spec/lib/puppet_spec/module_tool/shared_functions.rb +2 -2
  256. data/spec/lib/puppet_spec/module_tool/stub_source.rb +1 -1
  257. data/spec/lib/puppet_spec/unindent.rb +2 -2
  258. data/spec/unit/application/face_base_spec.rb +16 -0
  259. data/spec/unit/application/lookup_spec.rb +262 -227
  260. data/spec/unit/data_providers/{sample_data_provider_spec.rb → custom_data_provider_spec.rb} +14 -16
  261. data/spec/unit/data_providers/function_data_provider_spec.rb +2 -2
  262. data/spec/unit/data_providers/hiera_data_provider_spec.rb +60 -97
  263. data/spec/unit/defaults_spec.rb +1 -1
  264. data/spec/unit/face/ca_spec.rb +10 -0
  265. data/spec/unit/face/certificate_request_spec.rb +10 -0
  266. data/spec/unit/face/certificate_revocation_list_spec.rb +10 -0
  267. data/spec/unit/face/file_spec.rb +4 -0
  268. data/spec/unit/face/help_spec.rb +17 -0
  269. data/spec/unit/face/key_spec.rb +10 -0
  270. data/spec/unit/face/status_spec.rb +10 -0
  271. data/spec/unit/file_system_spec.rb +143 -6
  272. data/spec/unit/functions/binary_file_spec.rb +1 -1
  273. data/spec/unit/functions/hiera_spec.rb +257 -47
  274. data/spec/unit/functions/lookup_fixture_spec.rb +693 -0
  275. data/spec/unit/functions/lookup_spec.rb +1319 -608
  276. data/spec/unit/functions/new_spec.rb +3 -3
  277. data/spec/unit/graph/rb_tree_map_spec.rb +1 -1
  278. data/spec/unit/graph/simple_graph_spec.rb +1 -1
  279. data/spec/unit/hiera/scope_spec.rb +4 -4
  280. data/spec/unit/indirector/request_spec.rb +9 -0
  281. data/spec/unit/interface_spec.rb +27 -0
  282. data/spec/unit/man_spec.rb +1 -1
  283. data/spec/unit/module_spec.rb +1 -1
  284. data/spec/unit/module_tool/applications/builder_spec.rb +16 -1
  285. data/spec/unit/module_tool/applications/installer_spec.rb +1 -1
  286. data/spec/unit/module_tool/applications/upgrader_spec.rb +1 -1
  287. data/spec/unit/module_tool/installed_modules_spec.rb +6 -6
  288. data/spec/unit/module_tool_spec.rb +3 -3
  289. data/spec/unit/network/http/connection_spec.rb +10 -0
  290. data/spec/unit/network/http/webrick_spec.rb +1 -1
  291. data/spec/unit/pops/evaluator/access_ops_spec.rb +2 -2
  292. data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +9 -9
  293. data/spec/unit/pops/loaders/environment_loader_spec.rb +172 -0
  294. data/spec/unit/pops/lookup/context_spec.rb +45 -16
  295. data/spec/unit/pops/lookup/interpolation_spec.rb +28 -20
  296. data/spec/unit/pops/lookup/lookup_spec.rb +197 -0
  297. data/spec/unit/pops/merge_strategy_spec.rb +18 -0
  298. data/spec/unit/pops/parser/lexer2_spec.rb +16 -1
  299. data/spec/unit/pops/parser/parse_site_spec.rb +4 -0
  300. data/spec/unit/pops/serialization/packer_spec.rb +4 -23
  301. data/spec/unit/pops/serialization/serialization_spec.rb +32 -8
  302. data/spec/unit/pops/types/p_object_type_spec.rb +68 -3
  303. data/spec/unit/pops/types/p_sem_ver_type_spec.rb +4 -4
  304. data/spec/unit/pops/types/p_type_set_type_spec.rb +31 -2
  305. data/spec/unit/pops/types/type_acceptor_spec.rb +18 -17
  306. data/spec/unit/pops/types/type_calculator_spec.rb +39 -40
  307. data/spec/unit/pops/types/type_factory_spec.rb +3 -3
  308. data/spec/unit/pops/types/type_formatter_spec.rb +7 -3
  309. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +13 -2
  310. data/spec/unit/pops/types/types_spec.rb +25 -2
  311. data/spec/unit/pops/validator/validator_spec.rb +60 -4
  312. data/spec/unit/provider/nameservice_spec.rb +42 -0
  313. data/spec/unit/provider/package/aptrpm_spec.rb +1 -1
  314. data/spec/unit/provider/package/pkg_spec.rb +22 -0
  315. data/spec/unit/provider/package/pkgng_spec.rb +12 -0
  316. data/spec/unit/provider/package/rpm_spec.rb +8 -8
  317. data/spec/unit/provider/service/smf_spec.rb +13 -11
  318. data/spec/unit/provider/service/systemd_spec.rb +8 -1
  319. data/spec/unit/provider/user/useradd_spec.rb +1 -0
  320. data/spec/unit/puppet_spec.rb +14 -0
  321. data/spec/unit/resource/catalog_spec.rb +15 -9
  322. data/spec/unit/resource_spec.rb +20 -17
  323. data/spec/unit/semver_spec.rb +14 -0
  324. data/spec/unit/ssl/certificate_authority_spec.rb +12 -1
  325. data/spec/unit/transaction/additional_resource_generator_spec.rb +11 -0
  326. data/spec/unit/type/user_spec.rb +32 -6
  327. data/spec/unit/util/filetype_spec.rb +3 -3
  328. data/spec/unit/util/yaml_spec.rb +1 -1
  329. data/spec/unit/util_spec.rb +10 -2
  330. data/tasks/i18n.rake +20 -0
  331. metadata +2661 -2595
  332. data/lib/puppet/data_providers/lookup_adapter.rb +0 -254
  333. data/lib/puppet/vendor/load_semantic.rb +0 -1
  334. data/lib/puppet/vendor/semantic/Gemfile +0 -20
  335. data/lib/puppet/vendor/semantic/PUPPET_README.md +0 -6
  336. data/lib/puppet/vendor/semantic/Rakefile +0 -69
  337. data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +0 -60
  338. data/lib/puppet/vendor/semantic/lib/semantic.rb +0 -7
  339. data/lib/puppet/vendor/semantic/spec/spec_helper.rb +0 -24
  340. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/graph_node_spec.rb +0 -141
  341. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/graph_spec.rb +0 -162
  342. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/module_release_spec.rb +0 -143
  343. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/source_spec.rb +0 -5
  344. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/unsatisfiable_graph_spec.rb +0 -44
  345. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency_spec.rb +0 -383
  346. data/lib/puppet/vendor/semantic/spec/unit/semantic/version_range_spec.rb +0 -307
  347. data/lib/puppet/vendor/semantic/spec/unit/semantic/version_spec.rb +0 -608
  348. data/spec/fixtures/unit/data_providers/environments/sample/manifests/site.pp +0 -6
@@ -1,25 +1,37 @@
1
1
  require 'puppet/pops/lookup/interpolation'
2
2
 
3
+ # TODO: API 5.0, remove this module
4
+ # @api private
5
+ # @deprecated
3
6
  module Puppet::Plugins::DataProviders
4
- # @api private
7
+ # @deprecated
5
8
  module DataProvider
9
+ include Puppet::Pops::Lookup::DataProvider
6
10
  include Puppet::Pops::Lookup::Interpolation
7
11
 
8
- # Performs a lookup with an endless recursion check.
9
- #
10
- # @param key [String] The key to lookup
11
- # @param lookup_invocation [Puppet::Pops::Lookup::Invocation] The current lookup invocation
12
- # @param merge [String|Hash<String,Object>|nil] Merge strategy or hash with strategy and options
13
- def lookup(name, lookup_invocation, merge)
14
- lookup_invocation.check(name) { unchecked_lookup(name, lookup_invocation, merge) }
12
+ def key_lookup(key, lookup_invocation, merge)
13
+ lookup(key.to_s, lookup_invocation, merge)
14
+ end
15
+
16
+ def unchecked_key_lookup(key, lookup_invocation, merge)
17
+ unchecked_lookup(key.to_s, lookup_invocation, merge)
18
+ end
19
+
20
+ # @deprecated
21
+ def lookup(key, lookup_invocation, merge)
22
+ lookup_invocation.check(key) { unchecked_lookup(key, lookup_invocation, merge) }
15
23
  end
16
24
 
17
25
  # Performs a lookup with the assumption that a recursive check has been made.
18
26
  #
19
27
  # @param key [String] The key to lookup
20
28
  # @param lookup_invocation [Puppet::Pops::Lookup::Invocation] The current lookup invocation
21
- # @param merge [String|Hash<String,Object>|nil] Merge strategy or hash with strategy and options
29
+ # @param merge [String|Hash{String => Object}] Merge strategy or hash with strategy and options
22
30
  def unchecked_lookup(key, lookup_invocation, merge)
31
+ unless Puppet[:strict] == :off
32
+ Puppet.warn_once(:deprecation, 'DataProvider#unchecked_lookup',
33
+ 'DataProvider#unchecked_lookup is deprecated and will be removed in the next major version of Puppet')
34
+ end
23
35
  segments = split_key(key)
24
36
  root_key = segments.shift
25
37
  lookup_invocation.with(:data_provider, self) do
@@ -41,6 +53,7 @@ module Puppet::Plugins::DataProviders
41
53
  # @param value [Object] The value to perform post processing on
42
54
  # @param lookup_invocation [Puppet::Pops::Lookup::Invocation] The current lookup invocation
43
55
  # @return [Object] The result of post processing the value.
56
+ # @deprecated
44
57
  def post_process(value, lookup_invocation)
45
58
  interpolate(value, lookup_invocation, true)
46
59
  end
@@ -56,10 +69,15 @@ module Puppet::Plugins::DataProviders
56
69
  # @param lookup_invocation [Puppet::Pops::Lookup::Invocation] The current lookup invocation
57
70
  # @param merge [String|Hash<String,Object>|nil] Merge strategy or hash with strategy and options
58
71
  # @return [Hash] The data hash for the given _key_
72
+ # @deprecated
59
73
  def data(data_key, lookup_invocation)
74
+ unless Puppet[:strict] == :off
75
+ Puppet.warn_once(:deprecation, 'DataProvider#data',
76
+ 'DataProvider#data is deprecated and will be removed in the next major version of Puppet')
77
+ end
60
78
  compiler = lookup_invocation.scope.compiler
61
79
  adapter = Puppet::DataProviders::DataAdapter.get(compiler) || Puppet::DataProviders::DataAdapter.adapt(compiler)
62
- adapter.data[data_key] ||= validate_data(initialize_data(data_key, lookup_invocation), data_key)
80
+ adapter.data[data_key] ||= validate_data(initialize_data(data_key, lookup_invocation))
63
81
  end
64
82
  protected :data
65
83
 
@@ -67,7 +85,12 @@ module Puppet::Plugins::DataProviders
67
85
  #
68
86
  # @param key [String] The key to lookup
69
87
  # @return [String,nil] The data key or nil if not applicable
88
+ # @deprecated
70
89
  def data_key(key, lookup_invocation)
90
+ unless Puppet[:strict] == :off
91
+ Puppet.warn_once(:deprecation, 'DataProvider#data_key',
92
+ 'DataProvider#data_key is deprecated and will be removed in the next major version of Puppet')
93
+ end
71
94
  nil
72
95
  end
73
96
 
@@ -76,7 +99,12 @@ module Puppet::Plugins::DataProviders
76
99
  # @param data_key [String] The data key such as the name of a module or the constant 'environment'
77
100
  # @param lookup_invocation [Puppet::Pops::Lookup::Invocation] The current lookup invocation
78
101
  # @return [Hash] The hash of values
102
+ # @deprecated
79
103
  def initialize_data(data_key, lookup_invocation)
104
+ unless Puppet[:strict] == :off
105
+ Puppet.warn_once(:deprecation, 'DataProvider#initialize_data',
106
+ 'DataProvider#initialize_data is deprecated and will be removed in the next major version of Puppet')
107
+ end
80
108
  {}
81
109
  end
82
110
  protected :initialize_data
@@ -86,23 +114,38 @@ module Puppet::Plugins::DataProviders
86
114
  cname[cname.rindex(':')+1..-1]
87
115
  end
88
116
 
117
+ # @deprecated
89
118
  def validate_data(data, data_key)
90
119
  data
91
120
  end
92
121
  end
93
122
 
123
+ # TODO: API 5.0 Remove this class
124
+ # @deprecated
94
125
  # @api private
95
126
  class ModuleDataProvider
96
- LOOKUP_OPTIONS = Puppet::Pops::Lookup::LOOKUP_OPTIONS
127
+ LOOKUP_OPTIONS = 'lookup_options'.freeze
97
128
  include DataProvider
98
129
 
130
+ attr_reader :module_name
131
+
132
+ def initialize(module_name = nil)
133
+ unless Puppet[:strict] == :off
134
+ Puppet.warn_once(:deprecation, 'Plugins::DataProviders::ModuleDataProvider',
135
+ 'Plugins::DataProviders::ModuleDataProvider is deprecated and will be removed in the next major version of Puppet')
136
+ end
137
+ @module_name = module_name || Puppet::Pops::Lookup::Invocation.current.module_name
138
+ end
139
+
99
140
  # Retrieve the first segment of the qualified name _key_. This method will throw
100
141
  # :no_such_key unless the segment can be extracted.
101
142
  #
102
143
  # @param key [String] The key
103
144
  # @return [String] The first segment of the given key
145
+ # @api private
146
+ # @deprecated
104
147
  def data_key(key, lookup_invocation)
105
- return lookup_invocation.module_name if key == LOOKUP_OPTIONS
148
+ return module_name if key == LOOKUP_OPTIONS
106
149
  qual_index = key.index('::')
107
150
  throw :no_such_key if qual_index.nil?
108
151
  key[0..qual_index-1]
@@ -132,10 +175,21 @@ module Puppet::Plugins::DataProviders
132
175
  end
133
176
  end
134
177
 
178
+ # TODO: API 5.0 Remove this class
179
+ # @deprecated
135
180
  # @api private
136
181
  class EnvironmentDataProvider
137
182
  include DataProvider
138
183
 
184
+ def initialize
185
+ unless Puppet[:strict] == :off
186
+ Puppet.warn_once(:deprecation, 'Plugins::DataProviders::EnvironmentDataProvider',
187
+ 'Plugins::DataProviders::EnvironmentDataProvider is deprecated and will be removed in the next major version of Puppet')
188
+ end
189
+ end
190
+
191
+ # @api private
192
+ # @deprecated
139
193
  def data_key(key, lookup_invocation)
140
194
  'environment'
141
195
  end
@@ -145,11 +199,13 @@ module Puppet::Plugins::DataProviders
145
199
  # the fully resolved path, and whether or the resolved path exists.
146
200
  #
147
201
  # @api private
202
+ # @deprecated
148
203
  class ResolvedPath
149
204
  attr_reader :original_path, :path
150
205
 
151
206
  # @param original_path [String] path as found in declaration. May contain interpolation expressions
152
207
  # @param path [Pathname] the expanded absolute path
208
+ # @deprecated
153
209
  def initialize(original_path, path)
154
210
  @original_path = original_path
155
211
  @path = path
@@ -157,11 +213,12 @@ module Puppet::Plugins::DataProviders
157
213
  end
158
214
 
159
215
  # @return [Boolean] cached info if the path exists or not
160
- # @api public
216
+ # @deprecated
161
217
  def exists?
162
218
  @exists = @path.exist? if @exists.nil?
163
219
  @exists
164
220
  end
221
+ alias exist? exists?
165
222
  end
166
223
 
167
224
  # A data provider that is initialized with a set of _paths_. When performing lookup, each
@@ -170,6 +227,7 @@ module Puppet::Plugins::DataProviders
170
227
  #
171
228
  # @abstract
172
229
  # @api private
230
+ # @deprecated
173
231
  class PathBasedDataProvider
174
232
  include DataProvider
175
233
 
@@ -178,7 +236,12 @@ module Puppet::Plugins::DataProviders
178
236
  # @param name [String] The name of the data provider
179
237
  # @param paths [Array<ResolvedPath>] Paths used by this provider
180
238
  # @param parent_data_provider [DataProvider] The data provider that is the container of this data provider
239
+ # @deprecated
181
240
  def initialize(name, paths, parent_data_provider = nil)
241
+ unless Puppet[:strict] == :off
242
+ Puppet.warn_once(:deprecation, 'PathBasedDataProvider',
243
+ 'PathBasedDataProvider is deprecated and will be removed in the next major version of Puppet')
244
+ end
182
245
  @name = name
183
246
  @paths = paths
184
247
  @parent_data_provider = parent_data_provider
@@ -196,6 +259,7 @@ module Puppet::Plugins::DataProviders
196
259
  # @param lookup_invocation [Puppet::Pops::Lookup::Invocation] The current lookup invocation
197
260
  # @param merge [String|Hash<String,Object>|nil] Merge strategy or hash with strategy and options
198
261
  # @return [Hash] The data hash for the given _key_
262
+ # @deprecated
199
263
  def load_data(path, data_key, lookup_invocation)
200
264
  compiler = lookup_invocation.scope.compiler
201
265
  adapter = Puppet::DataProviders::DataAdapter.get(compiler) || Puppet::DataProviders::DataAdapter.adapt(compiler)
@@ -203,6 +267,7 @@ module Puppet::Plugins::DataProviders
203
267
  end
204
268
  protected :data
205
269
 
270
+ # @deprecated
206
271
  def validate_data(data, module_name)
207
272
  @parent_data_provider.nil? ? data : @parent_data_provider.validate_data(data, module_name)
208
273
  end
@@ -213,6 +278,7 @@ module Puppet::Plugins::DataProviders
213
278
  # @param key [String] The key to lookup
214
279
  # @param lookup_invocation [Puppet::Pops::Lookup::Invocation] The current lookup invocation
215
280
  # @param merge [Puppet::Pops::MergeStrategy,String,Hash<String,Object>,nil] Merge strategy or hash with strategy and options
281
+ # @deprecated
216
282
  def unchecked_lookup(key, lookup_invocation, merge)
217
283
  segments = split_key(key)
218
284
  root_key = segments.shift
@@ -222,7 +288,7 @@ module Puppet::Plugins::DataProviders
222
288
  merge_strategy = Puppet::Pops::MergeStrategy.strategy(merge)
223
289
  lookup_invocation.with(:merge, merge_strategy) do
224
290
  merged_result = merge_strategy.merge_lookup(@paths) do |path|
225
- lookup_invocation.with(:path, path) do
291
+ lookup_invocation.with(:location, path) do
226
292
  if path.exists?
227
293
  hash = load_data(path.path, module_name, lookup_invocation)
228
294
  value = hash[root_key]
@@ -234,7 +300,7 @@ module Puppet::Plugins::DataProviders
234
300
  throw :no_such_key
235
301
  end
236
302
  else
237
- lookup_invocation.report_path_not_found
303
+ lookup_invocation.report_location_not_found
238
304
  throw :no_such_key
239
305
  end
240
306
  end
@@ -245,17 +311,28 @@ module Puppet::Plugins::DataProviders
245
311
  end
246
312
  end
247
313
 
314
+ # TODO: API 5.0 Remove this class
248
315
  # Factory for creating path based data providers
249
316
  #
250
317
  # @abstract
251
318
  # @api private
319
+ # @deprecated
252
320
  class PathBasedDataProviderFactory
321
+ # @deprecated
322
+ def initialize
323
+ unless Puppet[:strict] == :off
324
+ Puppet.warn_once(:deprecation, 'PathBasedDataProviderFactory',
325
+ 'PathBasedDataProviderFactory is deprecated and will be removed in the next major version of Puppet')
326
+ end
327
+ end
328
+
253
329
  # Create a path based data provider with the given _name_ and _paths_
254
330
  #
255
331
  # @param name [String] the name of the created provider (for logging and debugging)
256
332
  # @param paths [Array<String>] array of resolved paths
257
333
  # @param parent_data_provider [DataProvider] The data provider that is the container of this data provider
258
334
  # @return [DataProvider] The created data provider
335
+ # @deprecated
259
336
  def create(name, paths, parent_data_provider)
260
337
  raise NotImplementedError, "Subclass of PathBasedDataProviderFactory must implement 'create' method"
261
338
  end
@@ -271,6 +348,7 @@ module Puppet::Plugins::DataProviders
271
348
  # @param paths [Array<String>] paths that have been preprocessed (interpolations resolved)
272
349
  # @param lookup_invocation [Puppet::Pops::Lookup::Invocation] The current lookup invocation
273
350
  # @return [Array<ResolvedPath>] Array of resolved paths
351
+ # @deprecated
274
352
  def resolve_paths(datadir, declared_paths, paths, lookup_invocation)
275
353
  []
276
354
  end
@@ -283,30 +361,43 @@ module Puppet::Plugins::DataProviders
283
361
  end
284
362
  end
285
363
 
364
+ # TODO: API 5.0 Remove this class
286
365
  # Factory for creating file based data providers. This is an extension of the path based
287
366
  # factory where it is required that each resolved path appoints an existing file in the local
288
367
  # file system.
289
368
  #
290
369
  # @abstract
291
370
  # @api private
371
+ # @deprecated
292
372
  class FileBasedDataProviderFactory < PathBasedDataProviderFactory
373
+ # @deprecated
374
+ def initialize
375
+ unless Puppet[:strict] == :off
376
+ Puppet.warn_once(:deprecation, 'FileBasedDataProviderFactory',
377
+ 'FileBasedDataProviderFactory is deprecated and will be removed in the next major version of Puppet')
378
+ end
379
+ end
380
+
293
381
  # @param datadir [Pathname] The base when creating absolute paths
294
382
  # @param declared_paths [Array<String>] paths as found in declaration. May contain interpolation expressions
295
383
  # @param paths [Array<String>] paths that have been preprocessed (interpolations resolved)
296
384
  # @param lookup_invocation [Puppet::Pops::Lookup::Invocation] The current lookup invocation
297
- # @return [Array<ResolvedPath>] Array of resolved paths
385
+ # @return [Array<Puppet::DataProviders::ResolvedLocation>] Array of resolved paths
386
+ # @deprecated
298
387
  def resolve_paths(datadir, declared_paths, paths, lookup_invocation)
299
388
  resolved_paths = []
300
389
  unless paths.nil? || datadir.nil?
301
390
  ext = path_extension
302
391
  paths.each_with_index do |path, idx|
303
392
  path = path + ext unless path.end_with?(ext)
304
- resolved_paths << ResolvedPath.new(declared_paths[idx], datadir + path)
393
+ path = datadir + path
394
+ resolved_paths << Puppet::Pops::Lookup::ResolvedLocation.new(declared_paths[idx], path, path.exist?)
305
395
  end
306
396
  end
307
397
  resolved_paths
308
398
  end
309
399
 
400
+ # @deprecated
310
401
  def path_extension
311
402
  raise NotImplementedError, "Subclass of FileBasedProviderFactory must implement 'path_extension' method"
312
403
  end
@@ -1,4 +1,6 @@
1
+ # TODO: API 5.0, remove this module
1
2
  # @api private
3
+ # @deprecated
2
4
  module Puppet::Plugins::DataProviders
3
5
  class Registry
4
6
  def self.register_extensions(extensions)
@@ -38,47 +40,11 @@ module Puppet::Plugins::DataProviders
38
40
  to_instance(ENV_DATA_PROVIDERS_TYPE)
39
41
  end
40
42
 
41
- default_bindings.bind do
42
- name('function')
43
- in_multibind(ENV_DATA_PROVIDERS_KEY)
44
- to_instance('Puppet::DataProviders::FunctionEnvDataProvider')
45
- end
46
-
47
- default_bindings.bind do
48
- name('hiera')
49
- in_multibind(ENV_DATA_PROVIDERS_KEY)
50
- to_instance('Puppet::DataProviders::HieraEnvDataProvider')
51
- end
52
-
53
43
  default_bindings.bind do
54
44
  name('none')
55
45
  in_multibind(MODULE_DATA_PROVIDERS_KEY)
56
46
  to_instance(MODULE_DATA_PROVIDERS_TYPE)
57
47
  end
58
-
59
- default_bindings.bind do
60
- name('function')
61
- in_multibind(MODULE_DATA_PROVIDERS_KEY)
62
- to_instance('Puppet::DataProviders::FunctionModuleDataProvider')
63
- end
64
-
65
- default_bindings.bind do
66
- name('hiera')
67
- in_multibind(MODULE_DATA_PROVIDERS_KEY)
68
- to_instance('Puppet::DataProviders::HieraModuleDataProvider')
69
- end
70
-
71
- default_bindings.bind do
72
- name('json')
73
- in_multibind(PATH_BASED_DATA_PROVIDER_FACTORIES_KEY)
74
- to_instance('Puppet::DataProviders::JsonDataProviderFactory')
75
- end
76
-
77
- default_bindings.bind do
78
- name('yaml')
79
- in_multibind(PATH_BASED_DATA_PROVIDER_FACTORIES_KEY)
80
- to_instance('Puppet::DataProviders::YamlDataProviderFactory')
81
- end
82
48
  end
83
49
  end
84
50
  end
@@ -1,6 +1,8 @@
1
1
  module Puppet::Plugins; end
2
2
 
3
+ # TODO: API 5.0, remove this module
3
4
  # @api private
5
+ # @deprecated
4
6
  module Puppet::Plugins::DataProviders
5
7
 
6
8
  # The lookup **key** for the multibind containing data provider name per module
@@ -176,9 +176,6 @@ module Adaptable
176
176
  adapter
177
177
  end
178
178
 
179
- DOUBLE_COLON = '::'
180
- USCORE = '_'
181
-
182
179
  # Returns a suitable instance variable name given a class name.
183
180
  # The returned string is the fully qualified name of a class with '::' replaced by '_' since
184
181
  # '::' is not allowed in an instance variable name.
@@ -722,7 +722,7 @@ module Producers
722
722
  end
723
723
 
724
724
  if uniq || flatten || conflict_resolution.to_s == 'append'
725
- etype = binding.type.element_type
725
+ etype = binding.type.value_type
726
726
  unless etype.class == Types::PDataType || etype.is_a?(Types::PArrayType)
727
727
  detail = []
728
728
  detail << ":uniq" if uniq
@@ -818,10 +818,10 @@ module Producers
818
818
  raise ArgumentError, "Entry contributing to multibind hash with id '#{binding.id}' must have a name."
819
819
  end
820
820
 
821
- unless tc.instance?(binding.type.element_type, value)
821
+ unless tc.instance?(binding.type.value_type, value)
822
822
  raise ArgumentError, ["Type Error: value contribution to #{binding.name}['#{key}'] ",
823
823
  "is incompatible, ",
824
- type_error_detail(binding.type.element_type, value)].join()
824
+ type_error_detail(binding.type.value_type, value)].join()
825
825
  end
826
826
  end
827
827
  end
@@ -158,7 +158,7 @@ class AccessOperator
158
158
 
159
159
  def access_PSemVerType(o, scope, keys)
160
160
  keys.flatten!
161
- assert_keys(keys, o, 1, Float::INFINITY, String, Semantic::VersionRange)
161
+ assert_keys(keys, o, 1, Float::INFINITY, String, SemanticPuppet::VersionRange)
162
162
  Types::TypeFactory.sem_ver(*keys)
163
163
  end
164
164
 
@@ -284,7 +284,7 @@ class AccessOperator
284
284
  type = keys[0]
285
285
  unless type.is_a?(Types::PAnyType)
286
286
  if type.is_a?(String)
287
- type = Types::TypeFactory.string(nil, type)
287
+ type = Types::TypeFactory.string(type)
288
288
  else
289
289
  fail(Issues::BAD_TYPE_SLICE_TYPE, @semantic.keys[0], {:base_type => 'Optional-Type', :actual => type.class})
290
290
  end
@@ -335,7 +335,7 @@ class AccessOperator
335
335
  type = keys[0]
336
336
  case type
337
337
  when String
338
- type = Types::TypeFactory.string(nil, type)
338
+ type = Types::TypeFactory.string(type)
339
339
  when Types::PAnyType
340
340
  type = nil if type.class == Types::PAnyType
341
341
  else
@@ -460,7 +460,7 @@ class AccessOperator
460
460
  fail(Issues::BAD_TYPE_SLICE_ARITY, @semantic,
461
461
  {:base_type => 'Collection-Type', :min => 1, :max => 2, :actual => keys.size})
462
462
  end
463
- Types::PCollectionType.new(nil, size_t)
463
+ Types::PCollectionType.new(size_t)
464
464
  end
465
465
 
466
466
  # An Array can create a new Array type. It is not possible to create a collection of Array types.
@@ -311,7 +311,7 @@ class Closure < CallableSignature
311
311
 
312
312
  parameters.each do |param|
313
313
  arg_type, param_range = create_param_type(param, closure_scope)
314
- key_type = type_factory.string(nil, param.name.to_s)
314
+ key_type = type_factory.string(param.name.to_s)
315
315
  key_type = type_factory.optional(key_type) unless param.value.nil?
316
316
  members[key_type] = arg_type
317
317
  end
@@ -103,7 +103,7 @@ class CompareOperator
103
103
  end
104
104
 
105
105
  def cmp_Version(a, b)
106
- raise ArgumentError.new('Versions not comparable to non Versions') unless b.is_a?(Semantic::Version)
106
+ raise ArgumentError.new('Versions not comparable to non Versions') unless b.is_a?(SemanticPuppet::Version)
107
107
  a <=> b
108
108
  end
109
109
 
@@ -172,7 +172,7 @@ class CompareOperator
172
172
  # Always set match data, a "not found" should not keep old match data visible
173
173
  set_match_data(matched, scope) # creates ephemeral
174
174
  return !!matched
175
- when String, Semantic::Version
175
+ when String, SemanticPuppet::Version
176
176
  a.any? { |element| match(b, element, scope) }
177
177
  when Types::PAnyType
178
178
  a.each {|element| return true if b.instance?(element) }
@@ -206,11 +206,11 @@ class CompareOperator
206
206
 
207
207
  # Matches against semvers and strings
208
208
  def match_Version(version, left, scope)
209
- if left.is_a?(Semantic::Version)
209
+ if left.is_a?(SemanticPuppet::Version)
210
210
  version == left
211
211
  elsif left.is_a? String
212
212
  begin
213
- version == Semantic::Version.parse(left)
213
+ version == SemanticPuppet::Version.parse(left)
214
214
  rescue ArgumentError
215
215
  false
216
216
  end
@@ -570,7 +570,7 @@ class EvaluatorImpl
570
570
  return o.operator == :'=~' ? !!matched : !matched
571
571
  end
572
572
 
573
- if pattern.is_a?(Semantic::VersionRange)
573
+ if pattern.is_a?(SemanticPuppet::VersionRange)
574
574
  # evaluate if range includes version
575
575
  matched = Types::PSemVerRangeType.include?(pattern, left)
576
576
  return o.operator == :'=~' ? matched : !matched
@@ -619,6 +619,10 @@ module Issues
619
619
  "The key '#{key}' is declared more than once"
620
620
  end
621
621
 
622
+ DUPLICATE_DEFAULT = issue :DUPLICATE_DEFAULT, :container do
623
+ "This #{label.label(container)} already has a 'default' entry - this is a duplicate"
624
+ end
625
+
622
626
  RESERVED_PARAMETER = hard_issue :RESERVED_PARAMETER, :container, :param_name do
623
627
  "The parameter $#{param_name} redefines a built in parameter in #{label.the(container)}"
624
628
  end
@@ -40,6 +40,20 @@ module Puppet::Pops::LabelProvider
40
40
  count == 1 ? text : "#{text}s"
41
41
  end
42
42
 
43
+ # Combines several strings using commas and a final conjunction
44
+ def combine_strings(strings, conjunction = 'or')
45
+ case strings.size
46
+ when 0
47
+ ''
48
+ when 1
49
+ strings[0]
50
+ when 2
51
+ "#{strings[0]} #{conjunction} #{strings[1]}"
52
+ else
53
+ "#{strings[0...-1].join(', ')}, #{conjunction} #{strings.last}"
54
+ end
55
+ end
56
+
43
57
  # Produces an *indefinite article* (a/an) for the given text ('a' if
44
58
  # it starts with a vowel) This is obviously flawed in the general
45
59
  # sense as may labels have punctuation at the start and this method
@@ -109,7 +109,9 @@ module Puppet::Pops::Loader::LoaderPaths
109
109
  def effective_path(typed_name, start_index_in_name)
110
110
  # Puppet name to path always skips the name-space as that is part of the generic path
111
111
  # i.e. <module>/mymodule/functions/foo.pp is the function mymodule::foo
112
- "#{File.join(generic_path, typed_name.name_parts[ 1..-1 ])}.pp"
112
+ parts = typed_name.name_parts
113
+ parts = parts[start_index_in_name..-1] if parts.size > 1
114
+ "#{File.join(generic_path, parts)}.pp"
113
115
  end
114
116
  end
115
117
 
@@ -21,6 +21,8 @@ module Loader
21
21
  # @api private
22
22
  #
23
23
  module ModuleLoaders
24
+ ENVIRONMENT = 'environment'.freeze
25
+
24
26
  def self.system_loader_from(parent_loader, loaders)
25
27
  # Puppet system may be installed in a fixed location via RPM, installed as a Gem, via source etc.
26
28
  # The only way to find this across the different ways puppet can be installed is
@@ -37,6 +39,15 @@ module ModuleLoaders
37
39
  )
38
40
  end
39
41
 
42
+ def self.environment_loader_from(parent_loader, loaders, env_path)
43
+ ModuleLoaders::FileBased.new(parent_loader,
44
+ loaders,
45
+ ENVIRONMENT,
46
+ File.join(env_path, 'lib'),
47
+ ENVIRONMENT
48
+ )
49
+ end
50
+
40
51
  def self.module_loader_from(parent_loader, loaders, module_name, module_path)
41
52
  ModuleLoaders::FileBased.new(parent_loader,
42
53
  loaders,
@@ -107,7 +118,6 @@ module ModuleLoaders
107
118
  return nil unless typed_name.name_authority == Pcore::RUNTIME_NAME_AUTHORITY
108
119
 
109
120
  # Assume it is a global name, and that all parts of the name should be used when looking up
110
- name_part_index = 0
111
121
  name_parts = typed_name.name_parts
112
122
 
113
123
  # Certain types and names can be disqualified up front
@@ -119,10 +129,6 @@ module ModuleLoaders
119
129
  # ok since such a "module" cannot have namespaced content).
120
130
  #
121
131
  return nil unless name_parts[0] == module_name
122
-
123
- # Skip the first part of the name when computing the path since the path already contains the name of the
124
- # module
125
- name_part_index = 1
126
132
  else
127
133
  # The name is in the global name space.
128
134
 
@@ -144,7 +150,7 @@ module ModuleLoaders
144
150
  # Find the file to instantiate, and instantiate the entity if file is found
145
151
  origin = nil
146
152
  if (smart_path = smart_paths.effective_paths(typed_name.type).find do |sp|
147
- origin = sp.effective_path(typed_name, name_part_index)
153
+ origin = sp.effective_path(typed_name, global? ? 0 : 1)
148
154
  existing_path(origin)
149
155
  end)
150
156
  value = smart_path.instantiator.create(self, typed_name, origin, get_contents(origin))
@@ -200,12 +206,20 @@ module ModuleLoaders
200
206
  raise NotImplementedError.new
201
207
  end
202
208
 
209
+ # Answers the question if this loader represents a global component (true for resource type loader and environment loader)
210
+ #
211
+ # @return [Boolean] `true` if this loader represents a global component
212
+ #
213
+ def global?
214
+ module_name.nil? || module_name == ENVIRONMENT
215
+ end
216
+
203
217
  # Produces the private loader for the module. If this module is not already resolved, this will trigger resolution
204
218
  #
205
219
  def private_loader
206
220
  # The system loader has a nil module_name and it does not have a private_loader as there are no functions
207
221
  # that can only by called by puppet runtime - if so, it acts as the private loader directly.
208
- @private_loader ||= (module_name.nil? || module_name == 'environment' ? self : @loaders.private_loader_for_module(module_name))
222
+ @private_loader ||= (global? ? self : @loaders.private_loader_for_module(module_name))
209
223
  end
210
224
  end
211
225
 
@@ -4,8 +4,6 @@ module Loader
4
4
  #
5
5
  # @api public
6
6
  class TypedName
7
- DOUBLE_COLON = '::'.freeze
8
-
9
7
  attr_reader :hash
10
8
  attr_reader :type
11
9
  attr_reader :name_authority