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
@@ -10,21 +10,21 @@ class PSemVerRangeType < PScalarType
10
10
  end
11
11
 
12
12
  # Check if a version is included in a version range. The version can be a string or
13
- # a `Semantic::SemVer`
13
+ # a `SemanticPuppet::SemVer`
14
14
  #
15
- # @param range [Semantic::VersionRange] the range to match against
16
- # @param version [Semantic::Version,String] the version to match
15
+ # @param range [SemanticPuppet::VersionRange] the range to match against
16
+ # @param version [SemanticPuppet::Version,String] the version to match
17
17
  # @return [Boolean] `true` if the range includes the given version
18
18
  #
19
19
  # @api public
20
20
  def self.include?(range, version)
21
21
  case version
22
- when Semantic::Version
22
+ when SemanticPuppet::Version
23
23
  range.include?(version)
24
24
  when String
25
25
  begin
26
- range.include?(Semantic::Version.parse(version))
27
- rescue Semantic::Version::ValidationFailure
26
+ range.include?(SemanticPuppet::Version.parse(version))
27
+ rescue SemanticPuppet::Version::ValidationFailure
28
28
  false
29
29
  end
30
30
  else
@@ -32,28 +32,28 @@ class PSemVerRangeType < PScalarType
32
32
  end
33
33
  end
34
34
 
35
- # Creates a {Semantic::VersionRange} from the given _version_range_ argument. If the argument is `nil` or
36
- # a {Semantic::VersionRange}, it is returned. If it is a {String}, it will be parsed into a
37
- # {Semantic::VersionRange}. Any other class will raise an {ArgumentError}.
35
+ # Creates a {SemanticPuppet::VersionRange} from the given _version_range_ argument. If the argument is `nil` or
36
+ # a {SemanticPuppet::VersionRange}, it is returned. If it is a {String}, it will be parsed into a
37
+ # {SemanticPuppet::VersionRange}. Any other class will raise an {ArgumentError}.
38
38
  #
39
- # @param version_range [Semantic::VersionRange,String,nil] the version range to convert
40
- # @return [Semantic::VersionRange] the converted version range
39
+ # @param version_range [SemanticPuppet::VersionRange,String,nil] the version range to convert
40
+ # @return [SemanticPuppet::VersionRange] the converted version range
41
41
  # @raise [ArgumentError] when the argument cannot be converted into a version range
42
42
  #
43
43
  def self.convert(version_range)
44
44
  case version_range
45
- when nil, Semantic::VersionRange
45
+ when nil, SemanticPuppet::VersionRange
46
46
  version_range
47
47
  when String
48
- Semantic::VersionRange.parse(version_range)
48
+ SemanticPuppet::VersionRange.parse(version_range)
49
49
  else
50
50
  raise ArgumentError, "Unable to convert a #{version_range.class.name} to a SemVerRange"
51
51
  end
52
52
  end
53
53
 
54
54
  # Checks if range _a_ is a sub-range of (i.e. completely covered by) range _b_
55
- # @param a [Semantic::VersionRange] the first range
56
- # @param b [Semantic::VersionRange] the second range
55
+ # @param a [SemanticPuppet::VersionRange] the first range
56
+ # @param b [SemanticPuppet::VersionRange] the second range
57
57
  #
58
58
  # @return [Boolean] `true` if _a_ is completely covered by _b_
59
59
  def self.covered_by?(a, b)
@@ -63,9 +63,9 @@ class PSemVerRangeType < PScalarType
63
63
  # Merge two ranges so that the result matches all versions matched by both. A merge
64
64
  # is only possible when the ranges are either adjacent or have an overlap.
65
65
  #
66
- # @param a [Semantic::VersionRange] the first range
67
- # @param b [Semantic::VersionRange] the second range
68
- # @return [Semantic::VersionRange,nil] the result of the merge
66
+ # @param a [SemanticPuppet::VersionRange] the first range
67
+ # @param b [SemanticPuppet::VersionRange] the second range
68
+ # @return [SemanticPuppet::VersionRange,nil] the result of the merge
69
69
  #
70
70
  # @api public
71
71
  def self.merge(a, b)
@@ -77,13 +77,13 @@ class PSemVerRangeType < PScalarType
77
77
  elsif b.exclude_end?
78
78
  exclude_end = max == b.end && (max > a.end || a.exclude_end?)
79
79
  end
80
- Semantic::VersionRange.new([a.begin, b.begin].min, max, exclude_end)
80
+ SemanticPuppet::VersionRange.new([a.begin, b.begin].min, max, exclude_end)
81
81
  elsif a.exclude_end? && a.end == b.begin
82
82
  # Adjacent, a before b
83
- Semantic::VersionRange.new(a.begin, b.end, b.exclude_end?)
83
+ SemanticPuppet::VersionRange.new(a.begin, b.end, b.exclude_end?)
84
84
  elsif b.exclude_end? && b.end == a.begin
85
85
  # Adjacent, b before a
86
- Semantic::VersionRange.new(b.begin, a.end, a.exclude_end?)
86
+ SemanticPuppet::VersionRange.new(b.begin, a.end, a.exclude_end?)
87
87
  else
88
88
  # No overlap
89
89
  nil
@@ -91,7 +91,7 @@ class PSemVerRangeType < PScalarType
91
91
  end
92
92
 
93
93
  def instance?(o, guard = nil)
94
- o.is_a?(Semantic::VersionRange)
94
+ o.is_a?(SemanticPuppet::VersionRange)
95
95
  end
96
96
 
97
97
  def eql?(o)
@@ -115,7 +115,7 @@ class PSemVerRangeType < PScalarType
115
115
  # https://github.com/npm/node-semver#range-grammar
116
116
  #
117
117
  # The logical or || operator is not implemented since it effectively builds
118
- # an array of ranges that may be disparate. The {{Semantic::VersionRange}} inherits
118
+ # an array of ranges that may be disparate. The {{SemanticPuppet::VersionRange}} inherits
119
119
  # from the standard ruby range. It must be possible to describe that range in terms
120
120
  # of min, max, and exclude max.
121
121
  #
@@ -144,13 +144,13 @@ class PSemVerRangeType < PScalarType
144
144
  end
145
145
 
146
146
  def from_string(str)
147
- Semantic::VersionRange.parse(str)
147
+ SemanticPuppet::VersionRange.parse(str)
148
148
  end
149
149
 
150
150
  def from_versions(min, max = :default, exclude_max = false)
151
- min = Semantic::Version::MIN if min == :default
152
- max = Semantic::Version::MAX if max == :default
153
- Semantic::VersionRange.new(min, max, exclude_max)
151
+ min = SemanticPuppet::Version::MIN if min == :default
152
+ max = SemanticPuppet::Version::MAX if max == :default
153
+ SemanticPuppet::VersionRange.new(min, max, exclude_max)
154
154
  end
155
155
 
156
156
  def from_hash(hash)
@@ -1,7 +1,7 @@
1
1
  module Puppet::Pops
2
2
  module Types
3
3
 
4
- # A Puppet Language Type that exposes the {{Semantic::Version}} and {{Semantic::VersionRange}}.
4
+ # A Puppet Language Type that exposes the {{SemanticPuppet::Version}} and {{SemanticPuppet::VersionRange}}.
5
5
  # The version type is parameterized with version ranges.
6
6
  #
7
7
  # @api public
@@ -18,13 +18,13 @@ class PSemVerType < PScalarType
18
18
  attr_reader :ranges
19
19
 
20
20
  def initialize(ranges)
21
- ranges = ranges.map { |range| range.is_a?(Semantic::VersionRange) ? range : Semantic::VersionRange.parse(range) }
21
+ ranges = ranges.map { |range| range.is_a?(SemanticPuppet::VersionRange) ? range : SemanticPuppet::VersionRange.parse(range) }
22
22
  ranges = merge_ranges(ranges) if ranges.size > 1
23
23
  @ranges = ranges
24
24
  end
25
25
 
26
26
  def instance?(o, guard = nil)
27
- o.is_a?(Semantic::Version) && (@ranges.empty? || @ranges.any? {|range| range.include?(o) })
27
+ o.is_a?(SemanticPuppet::Version) && (@ranges.empty? || @ranges.any? {|range| range.include?(o) })
28
28
  end
29
29
 
30
30
  def eql?(o)
@@ -36,19 +36,19 @@ class PSemVerType < PScalarType
36
36
  end
37
37
 
38
38
  # Creates a SemVer version from the given _version_ argument. If the argument is `nil` or
39
- # a {Semantic::Version}, it is returned. If it is a {String}, it will be parsed into a
40
- # {Semantic::Version}. Any other class will raise an {ArgumentError}.
39
+ # a {SemanticPuppet::Version}, it is returned. If it is a {String}, it will be parsed into a
40
+ # {SemanticPuppet::Version}. Any other class will raise an {ArgumentError}.
41
41
  #
42
- # @param version [Semantic::Version,String,nil] the version to convert
43
- # @return [Semantic::Version] the converted version
42
+ # @param version [SemanticPuppet::Version,String,nil] the version to convert
43
+ # @return [SemanticPuppet::Version] the converted version
44
44
  # @raise [ArgumentError] when the argument cannot be converted into a version
45
45
  #
46
46
  def self.convert(version)
47
47
  case version
48
- when nil, Semantic::Version
48
+ when nil, SemanticPuppet::Version
49
49
  version
50
50
  when String
51
- Semantic::Version.parse(version)
51
+ SemanticPuppet::Version.parse(version)
52
52
  else
53
53
  raise ArgumentError, "Unable to convert a #{version.class.name} to a SemVer"
54
54
  end
@@ -87,15 +87,15 @@ class PSemVerType < PScalarType
87
87
  end
88
88
 
89
89
  def from_string(str)
90
- Semantic::Version.parse(str)
90
+ SemanticPuppet::Version.parse(str)
91
91
  end
92
92
 
93
93
  def from_args(major, minor, patch, prerelease = nil, build = nil)
94
- Semantic::Version.new(major, minor, patch, prerelease, build)
94
+ SemanticPuppet::Version.new(major, minor, patch, prerelease, build)
95
95
  end
96
96
 
97
97
  def from_hash(hash)
98
- Semantic::Version.new(hash['major'], hash['minor'], hash['patch'], hash['prerelease'], hash['build'])
98
+ SemanticPuppet::Version.new(hash['major'], hash['minor'], hash['patch'], hash['prerelease'], hash['build'])
99
99
  end
100
100
  end
101
101
  end
@@ -1,10 +1,10 @@
1
1
  module Puppet::Pops
2
2
  module Types
3
3
  class PAbstractTimeDataType < PAbstractRangeType
4
- # @param [AbstractTime] min lower bound for this type. Nil or :default means unbounded
5
- # @param [AbstractTime] max upper bound for this type. Nil or :default means unbounded
6
- def initialize(min = nil, max = nil)
7
- super(convert_arg(min, true), convert_arg(max, false))
4
+ # @param from [AbstractTime] lower bound for this type. Nil or :default means unbounded
5
+ # @param to [AbstractTime] upper bound for this type. Nil or :default means unbounded
6
+ def initialize(from = nil, to = nil)
7
+ super(convert_arg(from, true), convert_arg(to, false))
8
8
  end
9
9
 
10
10
  def convert_arg(arg, min)
@@ -51,8 +51,8 @@ module Types
51
51
  class PTimespanType < PAbstractTimeDataType
52
52
  def self.register_ptype(loader, ir)
53
53
  create_ptype(loader, ir, 'ScalarType',
54
- 'from' => { KEY_TYPE => PTimespanType::DEFAULT, KEY_VALUE => :default },
55
- 'to' => { KEY_TYPE => PTimespanType::DEFAULT, KEY_VALUE => :default }
54
+ 'from' => { KEY_TYPE => POptionalType.new(PTimespanType::DEFAULT), KEY_VALUE => nil },
55
+ 'to' => { KEY_TYPE => POptionalType.new(PTimespanType::DEFAULT), KEY_VALUE => nil }
56
56
  )
57
57
  end
58
58
 
@@ -3,8 +3,8 @@ module Types
3
3
  class PTimestampType < PAbstractTimeDataType
4
4
  def self.register_ptype(loader, ir)
5
5
  create_ptype(loader, ir, 'ScalarType',
6
- 'from' => { KEY_TYPE => PTimestampType::DEFAULT, KEY_VALUE => :default },
7
- 'to' => { KEY_TYPE => PTimestampType::DEFAULT, KEY_VALUE => :default }
6
+ 'from' => { KEY_TYPE => POptionalType.new(PTimestampType::DEFAULT), KEY_VALUE => nil },
7
+ 'to' => { KEY_TYPE => POptionalType.new(PTimestampType::DEFAULT), KEY_VALUE => nil }
8
8
  )
9
9
  end
10
10
 
@@ -216,27 +216,18 @@ class PTypeSetType < PMetaType
216
216
  # @return [String] the name by which the type is referenced within this type set
217
217
  #
218
218
  # @api private
219
- def name_for(t)
219
+ def name_for(t, default_name)
220
220
  key = @types.key(t)
221
221
  if key.nil?
222
222
  qname = t.name
223
223
  if @references.empty?
224
- qname
224
+ default_name
225
225
  else
226
- segments = qname.split(TypeFormatter::NAME_SEGMENT_SEPARATOR)
227
- first = segments[0]
228
- type_set = @references[first]
229
- if type_set.nil?
230
- qname
231
- else
232
- if segments.size == 1
233
- qname
234
- else
235
- sub_name = type_set.name_for(t)
236
- sub_name = "#{first}::#{sub_name}" unless sub_name == qname
237
- sub_name
238
- end
226
+ @references.each_pair do |ref_key, ref|
227
+ ref_name = ref.type_set.name_for(t, nil)
228
+ return "#{ref_key}::#{ref_name}" unless ref_name.nil?
239
229
  end
230
+ default_name
240
231
  end
241
232
  else
242
233
  key
@@ -332,7 +323,7 @@ class PTypeSetType < PMetaType
332
323
  KEY_NAME_AUTHORITY => Pcore::RUNTIME_NAME_AUTHORITY,
333
324
  Pcore::KEY_PCORE_URI => Pcore::PCORE_URI,
334
325
  Pcore::KEY_PCORE_VERSION => Pcore::PCORE_VERSION,
335
- KEY_VERSION => Semantic::Version.new(0,0,0)
326
+ KEY_VERSION => SemanticPuppet::Version.new(0,0,0)
336
327
  })
337
328
 
338
329
  protected
@@ -24,14 +24,54 @@ class RecursionGuard
24
24
  # @param instance [Object] the instance to check
25
25
  # @return [Integer] the resulting state
26
26
  def recursive_this?(instance)
27
- this_map[instance.object_id] == true
27
+ instance_variable_defined?(:@recursive_this_map) && @recursive_this_map.has_key?(instance.object_id)
28
28
  end
29
29
 
30
30
  # Checks if recursion was detected for the given argument in the 'that' context
31
31
  # @param instance [Object] the instance to check
32
32
  # @return [Integer] the resulting state
33
33
  def recursive_that?(instance)
34
- that_map[instance.object_id] == true
34
+ instance_variable_defined?(:@recursive_that_map) && @recursive_that_map.has_key?(instance.object_id)
35
+ end
36
+
37
+ # Add the given argument as 'this' invoke the given block with the resulting state
38
+ # @param instance [Object] the instance to add
39
+ # @return [Object] the result of yielding
40
+ def with_this(instance)
41
+ if (@state & SELF_RECURSION_IN_THIS) == 0
42
+ tc = this_count
43
+ @state = @state | SELF_RECURSION_IN_THIS if this_put(instance)
44
+ if tc < this_count
45
+ # recursive state detected
46
+ result = yield(@state)
47
+
48
+ # pop state
49
+ @state &= ~SELF_RECURSION_IN_THIS
50
+ @this_map.delete(instance.object_id)
51
+ return result
52
+ end
53
+ end
54
+ yield(@state)
55
+ end
56
+
57
+ # Add the given argument as 'that' invoke the given block with the resulting state
58
+ # @param instance [Object] the instance to add
59
+ # @return [Object] the result of yielding
60
+ def with_that(instance)
61
+ if (@state & SELF_RECURSION_IN_THAT) == 0
62
+ tc = that_count
63
+ @state = @state | SELF_RECURSION_IN_THAT if that_put(instance)
64
+ if tc < that_count
65
+ # recursive state detected
66
+ result = yield(@state)
67
+
68
+ # pop state
69
+ @state &= ~SELF_RECURSION_IN_THAT
70
+ @that_map.delete(instance.object_id)
71
+ return result
72
+ end
73
+ end
74
+ yield(@state)
35
75
  end
36
76
 
37
77
  # Add the given argument as 'this' and return the resulting state
@@ -39,7 +79,7 @@ class RecursionGuard
39
79
  # @return [Integer] the resulting state
40
80
  def add_this(instance)
41
81
  if (@state & SELF_RECURSION_IN_THIS) == 0
42
- @state = @state | SELF_RECURSION_IN_THIS if map_put(this_map, instance)
82
+ @state = @state | SELF_RECURSION_IN_THIS if this_put(instance)
43
83
  end
44
84
  @state
45
85
  end
@@ -49,43 +89,47 @@ class RecursionGuard
49
89
  # @return [Integer] the resulting state
50
90
  def add_that(instance)
51
91
  if (@state & SELF_RECURSION_IN_THAT) == 0
52
- @state = @state | SELF_RECURSION_IN_THAT if map_put(that_map, instance)
92
+ @state = @state | SELF_RECURSION_IN_THAT if that_put(instance)
53
93
  end
54
94
  @state
55
95
  end
56
96
 
57
97
  # @return the number of objects added to the `this` map
58
98
  def this_count
59
- this_map.size
99
+ instance_variable_defined?(:@this_map) ? @this_map.size : 0
60
100
  end
61
101
 
62
102
  # @return the number of objects added to the `that` map
63
103
  def that_count
64
- that_map.size
104
+ instance_variable_defined?(:@that_map) ? @that_map.size : 0
65
105
  end
66
106
 
67
107
  private
68
108
 
69
- def map_put(map, o)
109
+ def this_put(o)
70
110
  id = o.object_id
71
- case map[id]
72
- when true
73
- true # Recursion already detected
74
- when false
75
- map[id] = true
76
- true # Recursion occured. This was the second time this entry was added
111
+ @this_map ||= {}
112
+ if @this_map.has_key?(id)
113
+ @recursive_this_map ||= {}
114
+ @recursive_this_map[id] = true
115
+ true
77
116
  else
78
- map[id] = false
79
- false # First time add. No recursion
117
+ @this_map[id] = true
118
+ false
80
119
  end
81
120
  end
82
121
 
83
- def this_map
84
- @this_map ||= {}
85
- end
86
-
87
- def that_map
122
+ def that_put(o)
123
+ id = o.object_id
88
124
  @that_map ||= {}
125
+ if @that_map.has_key?(id)
126
+ @recursive_that_map ||= {}
127
+ @recursive_that_map[id] = true
128
+ true
129
+ else
130
+ @that_map[id] = true
131
+ false
132
+ end
89
133
  end
90
134
  end
91
135
  end
@@ -210,6 +210,16 @@ class RubyGenerator < TypeFormatter
210
210
  init_params.each { |a| bld << ' @' << a.name << ' = ' << a.name << "\n" if a.container.equal?(obj) }
211
211
  bld << " end\n\n"
212
212
 
213
+ bld << " def i12n_hash\n result = "
214
+ bld << (obj.parent.nil? ? '{}' : 'super')
215
+ bld << "\n"
216
+ init_params.each { |a| bld << " result['" << a.name << "'] = @" << a.name << "\n" if a.container.equal?(obj) }
217
+ bld << " result\n end\n\n"
218
+
219
+ bld << " def to_s\n"
220
+ bld << " " << namespace_relative(segments, TypeFormatter.name) << ".string(self)\n"
221
+ bld << " end\n\n"
222
+
213
223
  # Output attr_readers
214
224
  others.each do |a|
215
225
  next unless a.container.equal?(obj)
@@ -312,7 +312,7 @@ class TypeCalculator
312
312
  infer_set_Array(o)
313
313
  when Hash
314
314
  infer_set_Hash(o)
315
- when Semantic::Version
315
+ when SemanticPuppet::Version
316
316
  infer_set_Version(o)
317
317
  else
318
318
  infer_set_Object(o)
@@ -389,8 +389,8 @@ class TypeCalculator
389
389
  # when both are hashes, return a hash with common key- and element type
390
390
  if t1.is_a?(PHashType) && t2.is_a?(PHashType)
391
391
  key_type = common_type(t1.key_type, t2.key_type)
392
- element_type = common_type(t1.element_type, t2.element_type)
393
- return PHashType.new(key_type, element_type)
392
+ value_type = common_type(t1.value_type, t2.value_type)
393
+ return PHashType.new(key_type, value_type)
394
394
  end
395
395
 
396
396
  # when both are host-classes, reduce to PHostClass[] (since one was not assignable to the other)
@@ -414,19 +414,29 @@ class TypeCalculator
414
414
  return PFloatType.new([t1.numeric_from, t2.numeric_from].min, [t1.numeric_to, t2.numeric_to].max)
415
415
  end
416
416
 
417
- if t1.is_a?(PStringType) && t2.is_a?(PStringType)
418
- common_size_type = common_type(t1.size_type, t2.size_type) unless t1.size_type.nil? || t2.size_type.nil?
419
- common_strings = t1.values.empty? || t2.values.empty? ? [] : t1.values | t2.values
420
- return PStringType.new(common_size_type, common_strings)
417
+ if t1.is_a?(PStringType) && (t2.is_a?(PStringType) || t2.is_a?(PEnumType))
418
+ if(t2.is_a?(PEnumType))
419
+ return t1.value.nil? ? PEnumType::DEFAULT : PEnumType.new(t2.values | [t1.value])
420
+ end
421
+
422
+ if t1.size_type.nil? || t2.size_type.nil?
423
+ return t1.value.nil? || t2.value.nil? ? PStringType::DEFAULT : PEnumType.new([t1.value, t2.value])
424
+ end
425
+
426
+ return PStringType.new(common_type(t1.size_type, t2.size_type))
421
427
  end
422
428
 
423
429
  if t1.is_a?(PPatternType) && t2.is_a?(PPatternType)
424
430
  return PPatternType.new(t1.patterns | t2.patterns)
425
431
  end
426
432
 
427
- if t1.is_a?(PEnumType) && t2.is_a?(PEnumType)
433
+ if t1.is_a?(PEnumType) && (t2.is_a?(PStringType) || t2.is_a?(PEnumType))
428
434
  # The common type is one that complies with either set
429
- return PEnumType.new(t1.values | t2.values)
435
+ if t2.is_a?(PEnumType)
436
+ return PEnumType.new(t1.values | t2.values)
437
+ end
438
+
439
+ return t2.value.nil? ? PEnumType::DEFAULT : PEnumType.new(t1.values | [t2.value])
430
440
  end
431
441
 
432
442
  if t1.is_a?(PVariantType) && t2.is_a?(PVariantType)
@@ -437,7 +447,7 @@ class TypeCalculator
437
447
  if t1.is_a?(PRegexpType) && t2.is_a?(PRegexpType)
438
448
  # if they were identical, the general rule would return a parameterized regexp
439
449
  # since they were not, the result is a generic regexp type
440
- return PPatternType::DEFAULT
450
+ return PRegexpType::DEFAULT
441
451
  end
442
452
 
443
453
  if t1.is_a?(PCallableType) && t2.is_a?(PCallableType)
@@ -581,7 +591,7 @@ class TypeCalculator
581
591
 
582
592
  # @api private
583
593
  def infer_String(o)
584
- PStringType.new(size_as_type(o), [o])
594
+ PStringType.new(o)
585
595
  end
586
596
 
587
597
  # @api private
@@ -735,7 +745,7 @@ class TypeCalculator
735
745
  if o.empty?
736
746
  PHashType::EMPTY
737
747
  elsif o.keys.all? {|k| PStringType::NON_EMPTY.instance?(k) }
738
- PStructType.new(o.each_pair.map { |k,v| PStructElement.new(PStringType.new(size_as_type(k), [k]), infer_set(v)) })
748
+ PStructType.new(o.each_pair.map { |k,v| PStructElement.new(PStringType.new(k), infer_set(v)) })
739
749
  else
740
750
  ktype = PVariantType.maybe_create(o.keys.map {|k| infer_set(k) })
741
751
  etype = PVariantType.maybe_create(o.values.map {|e| infer_set(e) })
@@ -745,7 +755,7 @@ class TypeCalculator
745
755
 
746
756
  # @api private
747
757
  def infer_set_Version(o)
748
- PSemVerType.new([Semantic::VersionRange.new(o, o)])
758
+ PSemVerType.new([SemanticPuppet::VersionRange.new(o, o)])
749
759
  end
750
760
 
751
761
  def unwrap_single_variant(possible_variant)
@@ -75,11 +75,20 @@ module TypeFactory
75
75
  @type_calculator.string(t)
76
76
  end
77
77
 
78
- # Produces the String type, optionally with specific string values
78
+ # Produces the String type based on nothing, a string value that becomes an exact match constraint, or a parameterized
79
+ # Integer type that constraints the size.
80
+ #
79
81
  # @api public
80
82
  #
81
- def self.string(size_type = nil, *values)
82
- PStringType.new(size_type, values)
83
+ def self.string(size_type_or_value = nil, *deprecated_second_argument)
84
+ if deprecated_second_argument.empty?
85
+ size_type_or_value.nil? ? PStringType::DEFAULT : PStringType.new(size_type_or_value)
86
+ else
87
+ if Puppet[:strict] != :off
88
+ Puppet.warn_once(:deprecatation, "TypeFactory#string_multi_args", "Passing more than one argument to TypeFactory#string is deprecated")
89
+ end
90
+ deprecated_second_argument.size == 1 ? PStringType.new(deprecated_second_argument[0]) : PEnumType.new(*deprecated_second_argument)
91
+ end
83
92
  end
84
93
 
85
94
  # Produces the Optional type, i.e. a short hand for Variant[T, Undef]
@@ -92,7 +101,7 @@ module TypeFactory
92
101
  # @api public
93
102
  #
94
103
  def self.optional(optional_type = nil)
95
- POptionalType.new(type_of(optional_type.is_a?(String) ? string(nil, optional_type) : type_of(optional_type)))
104
+ POptionalType.new(type_of(optional_type.is_a?(String) ? string(optional_type) : type_of(optional_type)))
96
105
  end
97
106
 
98
107
  # Produces the Enum type, optionally with specific string values
@@ -129,7 +138,7 @@ module TypeFactory
129
138
  # TODO: Should have stricter name rule
130
139
  if key_type.is_a?(String)
131
140
  raise ArgumentError, 'Struct element key cannot be an empty String' if key_type.empty?
132
- key_type = string(nil, key_type)
141
+ key_type = string(key_type)
133
142
  # Must make key optional if the value can be Undef
134
143
  key_type = optional(key_type) if tc.assignable?(value_type, PUndefType::DEFAULT)
135
144
  else
@@ -141,12 +150,14 @@ module TypeFactory
141
150
  s = key_type
142
151
  when POptionalType
143
152
  s = key_type.optional_type
144
- when PStringType, PEnumType
153
+ when PStringType
145
154
  s = key_type
155
+ when PEnumType
156
+ s = key_type.values.size == 1 ? PStringType.new(key_type.values[0]) : nil
146
157
  else
147
158
  raise ArgumentError, "Illegal Struct member key type. Expected NotUndef, Optional, String, or Enum. Got: #{key_type.class.name}"
148
159
  end
149
- unless (s.is_a?(PStringType) || s.is_a?(PEnumType)) && s.values.size == 1 && !s.values[0].empty?
160
+ unless s.is_a?(PStringType) && !s.value.nil?
150
161
  raise ArgumentError, "Unable to extract a non-empty literal string from Struct member key type #{tc.string(key_type)}"
151
162
  end
152
163
  end
@@ -307,7 +318,7 @@ module TypeFactory
307
318
  # @api public
308
319
  #
309
320
  def self.collection(size_type = nil)
310
- size_type.nil? ? PCollectionType::DEFAULT : PCollectionType.new(nil, size_type)
321
+ size_type.nil? ? PCollectionType::DEFAULT : PCollectionType.new(size_type)
311
322
  end
312
323
 
313
324
  # Produces the Data type
@@ -435,7 +446,7 @@ module TypeFactory
435
446
  # @api public
436
447
  #
437
448
  def self.not_undef(inst_type = nil)
438
- inst_type = string(nil, inst_type) if inst_type.is_a?(String)
449
+ inst_type = string(inst_type) if inst_type.is_a?(String)
439
450
  PNotUndefType.new(inst_type)
440
451
  end
441
452