puppet 8.2.0 → 8.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (1063) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/Gemfile.lock +45 -43
  4. data/README.md +4 -4
  5. data/Rakefile +0 -27
  6. data/examples/enc/regexp_nodes/regexp_nodes.rb +1 -1
  7. data/ext/project_data.yaml +2 -2
  8. data/ext/windows/service/daemon.rb +4 -5
  9. data/lib/hiera/puppet_function.rb +3 -2
  10. data/lib/hiera/scope.rb +2 -2
  11. data/lib/hiera_puppet.rb +1 -3
  12. data/lib/puppet/agent/disabler.rb +2 -1
  13. data/lib/puppet/agent/locker.rb +1 -2
  14. data/lib/puppet/agent.rb +2 -1
  15. data/lib/puppet/application/agent.rb +292 -291
  16. data/lib/puppet/application/apply.rb +143 -139
  17. data/lib/puppet/application/catalog.rb +1 -0
  18. data/lib/puppet/application/config.rb +1 -0
  19. data/lib/puppet/application/describe.rb +53 -55
  20. data/lib/puppet/application/device.rb +150 -150
  21. data/lib/puppet/application/doc.rb +61 -60
  22. data/lib/puppet/application/epp.rb +1 -0
  23. data/lib/puppet/application/face_base.rb +8 -7
  24. data/lib/puppet/application/facts.rb +1 -0
  25. data/lib/puppet/application/filebucket.rb +186 -184
  26. data/lib/puppet/application/generate.rb +1 -0
  27. data/lib/puppet/application/help.rb +1 -0
  28. data/lib/puppet/application/indirection_base.rb +1 -0
  29. data/lib/puppet/application/lookup.rb +168 -171
  30. data/lib/puppet/application/module.rb +1 -0
  31. data/lib/puppet/application/node.rb +1 -0
  32. data/lib/puppet/application/parser.rb +1 -0
  33. data/lib/puppet/application/plugin.rb +1 -0
  34. data/lib/puppet/application/report.rb +1 -0
  35. data/lib/puppet/application/resource.rb +111 -108
  36. data/lib/puppet/application/script.rb +92 -93
  37. data/lib/puppet/application/ssl.rb +119 -83
  38. data/lib/puppet/application.rb +13 -8
  39. data/lib/puppet/application_support.rb +1 -1
  40. data/lib/puppet/coercion.rb +3 -2
  41. data/lib/puppet/compilable_resource_type.rb +1 -0
  42. data/lib/puppet/concurrent/lock.rb +1 -2
  43. data/lib/puppet/concurrent/synchronized.rb +1 -2
  44. data/lib/puppet/concurrent/thread_local_singleton.rb +1 -0
  45. data/lib/puppet/concurrent.rb +1 -0
  46. data/lib/puppet/configurer/downloader.rb +1 -1
  47. data/lib/puppet/configurer/fact_handler.rb +2 -1
  48. data/lib/puppet/configurer/plugin_handler.rb +1 -0
  49. data/lib/puppet/configurer.rb +17 -13
  50. data/lib/puppet/confine/any.rb +1 -0
  51. data/lib/puppet/confine/boolean.rb +1 -0
  52. data/lib/puppet/confine/exists.rb +1 -0
  53. data/lib/puppet/confine/false.rb +1 -0
  54. data/lib/puppet/confine/feature.rb +1 -0
  55. data/lib/puppet/confine/true.rb +1 -0
  56. data/lib/puppet/confine/variable.rb +1 -0
  57. data/lib/puppet/confine.rb +2 -0
  58. data/lib/puppet/confine_collection.rb +3 -1
  59. data/lib/puppet/confiner.rb +1 -0
  60. data/lib/puppet/context/trusted_information.rb +1 -0
  61. data/lib/puppet/context.rb +1 -0
  62. data/lib/puppet/daemon.rb +4 -1
  63. data/lib/puppet/data_binding.rb +2 -1
  64. data/lib/puppet/datatypes/error.rb +2 -1
  65. data/lib/puppet/datatypes/impl/error.rb +1 -0
  66. data/lib/puppet/datatypes.rb +5 -1
  67. data/lib/puppet/defaults.rb +24 -23
  68. data/lib/puppet/environments.rb +3 -2
  69. data/lib/puppet/error.rb +9 -7
  70. data/lib/puppet/etc.rb +6 -3
  71. data/lib/puppet/external/dot.rb +12 -31
  72. data/lib/puppet/face/catalog/select.rb +2 -1
  73. data/lib/puppet/face/catalog.rb +3 -2
  74. data/lib/puppet/face/config.rb +19 -21
  75. data/lib/puppet/face/epp.rb +8 -8
  76. data/lib/puppet/face/facts.rb +4 -3
  77. data/lib/puppet/face/generate.rb +2 -0
  78. data/lib/puppet/face/help.rb +8 -7
  79. data/lib/puppet/face/module/changes.rb +2 -0
  80. data/lib/puppet/face/module/install.rb +2 -1
  81. data/lib/puppet/face/module/list.rb +9 -10
  82. data/lib/puppet/face/module/uninstall.rb +1 -0
  83. data/lib/puppet/face/module.rb +1 -0
  84. data/lib/puppet/face/node/clean.rb +2 -1
  85. data/lib/puppet/face/node.rb +2 -1
  86. data/lib/puppet/face/parser.rb +3 -3
  87. data/lib/puppet/face/plugin.rb +2 -1
  88. data/lib/puppet/face/report.rb +2 -1
  89. data/lib/puppet/face/resource.rb +1 -0
  90. data/lib/puppet/face.rb +1 -0
  91. data/lib/puppet/feature/base.rb +2 -1
  92. data/lib/puppet/feature/bolt.rb +1 -0
  93. data/lib/puppet/feature/cfpropertylist.rb +1 -0
  94. data/lib/puppet/feature/eventlog.rb +1 -0
  95. data/lib/puppet/feature/hiera_eyaml.rb +1 -0
  96. data/lib/puppet/feature/hocon.rb +1 -0
  97. data/lib/puppet/feature/libuser.rb +4 -3
  98. data/lib/puppet/feature/msgpack.rb +1 -0
  99. data/lib/puppet/feature/pe_license.rb +2 -1
  100. data/lib/puppet/feature/pson.rb +1 -0
  101. data/lib/puppet/feature/selinux.rb +1 -0
  102. data/lib/puppet/feature/ssh.rb +1 -0
  103. data/lib/puppet/feature/telnet.rb +1 -0
  104. data/lib/puppet/feature/zlib.rb +1 -0
  105. data/lib/puppet/ffi/posix/constants.rb +1 -0
  106. data/lib/puppet/ffi/posix/functions.rb +1 -1
  107. data/lib/puppet/ffi/posix.rb +1 -0
  108. data/lib/puppet/ffi/windows/api_types.rb +1 -0
  109. data/lib/puppet/ffi/windows/constants.rb +78 -77
  110. data/lib/puppet/ffi/windows/functions.rb +73 -73
  111. data/lib/puppet/ffi/windows/structs.rb +3 -3
  112. data/lib/puppet/ffi/windows.rb +1 -0
  113. data/lib/puppet/file_bucket/dipper.rb +7 -1
  114. data/lib/puppet/file_bucket/file.rb +1 -0
  115. data/lib/puppet/file_bucket.rb +1 -0
  116. data/lib/puppet/file_serving/base.rb +13 -6
  117. data/lib/puppet/file_serving/configuration/parser.rb +3 -1
  118. data/lib/puppet/file_serving/configuration.rb +5 -3
  119. data/lib/puppet/file_serving/content.rb +1 -0
  120. data/lib/puppet/file_serving/fileset.rb +9 -6
  121. data/lib/puppet/file_serving/http_metadata.rb +1 -3
  122. data/lib/puppet/file_serving/metadata.rb +9 -10
  123. data/lib/puppet/file_serving/mount/file.rb +6 -3
  124. data/lib/puppet/file_serving/mount/locales.rb +2 -1
  125. data/lib/puppet/file_serving/mount/modules.rb +2 -0
  126. data/lib/puppet/file_serving/mount/pluginfacts.rb +2 -1
  127. data/lib/puppet/file_serving/mount/plugins.rb +2 -1
  128. data/lib/puppet/file_serving/mount/scripts.rb +2 -0
  129. data/lib/puppet/file_serving/mount/tasks.rb +2 -0
  130. data/lib/puppet/file_serving/mount.rb +2 -0
  131. data/lib/puppet/file_serving/terminus_helper.rb +1 -0
  132. data/lib/puppet/file_serving/terminus_selector.rb +1 -0
  133. data/lib/puppet/file_serving.rb +1 -0
  134. data/lib/puppet/file_system/file_impl.rb +2 -2
  135. data/lib/puppet/file_system/jruby.rb +1 -0
  136. data/lib/puppet/file_system/memory_file.rb +2 -0
  137. data/lib/puppet/file_system/memory_impl.rb +3 -0
  138. data/lib/puppet/file_system/path_pattern.rb +1 -0
  139. data/lib/puppet/file_system/posix.rb +5 -1
  140. data/lib/puppet/file_system/uniquefile.rb +11 -11
  141. data/lib/puppet/file_system/windows.rb +4 -2
  142. data/lib/puppet/file_system.rb +3 -2
  143. data/lib/puppet/forge/cache.rb +1 -1
  144. data/lib/puppet/forge/errors.rb +1 -3
  145. data/lib/puppet/forge/repository.rb +2 -0
  146. data/lib/puppet/forge.rb +3 -0
  147. data/lib/puppet/functions/abs.rb +2 -1
  148. data/lib/puppet/functions/alert.rb +1 -0
  149. data/lib/puppet/functions/all.rb +1 -0
  150. data/lib/puppet/functions/annotate.rb +1 -0
  151. data/lib/puppet/functions/any.rb +1 -0
  152. data/lib/puppet/functions/assert_type.rb +1 -0
  153. data/lib/puppet/functions/binary_file.rb +3 -1
  154. data/lib/puppet/functions/break.rb +2 -1
  155. data/lib/puppet/functions/call.rb +1 -1
  156. data/lib/puppet/functions/camelcase.rb +1 -1
  157. data/lib/puppet/functions/capitalize.rb +1 -1
  158. data/lib/puppet/functions/ceiling.rb +2 -2
  159. data/lib/puppet/functions/chomp.rb +1 -1
  160. data/lib/puppet/functions/chop.rb +1 -1
  161. data/lib/puppet/functions/compare.rb +1 -0
  162. data/lib/puppet/functions/contain.rb +1 -0
  163. data/lib/puppet/functions/convert_to.rb +1 -0
  164. data/lib/puppet/functions/crit.rb +1 -0
  165. data/lib/puppet/functions/debug.rb +1 -0
  166. data/lib/puppet/functions/defined.rb +7 -4
  167. data/lib/puppet/functions/dig.rb +10 -8
  168. data/lib/puppet/functions/downcase.rb +1 -0
  169. data/lib/puppet/functions/each.rb +1 -0
  170. data/lib/puppet/functions/emerg.rb +1 -0
  171. data/lib/puppet/functions/empty.rb +1 -0
  172. data/lib/puppet/functions/epp.rb +1 -1
  173. data/lib/puppet/functions/err.rb +1 -0
  174. data/lib/puppet/functions/eyaml_lookup_key.rb +6 -4
  175. data/lib/puppet/functions/filter.rb +1 -0
  176. data/lib/puppet/functions/find_file.rb +1 -0
  177. data/lib/puppet/functions/find_template.rb +1 -0
  178. data/lib/puppet/functions/flatten.rb +1 -0
  179. data/lib/puppet/functions/floor.rb +2 -2
  180. data/lib/puppet/functions/get.rb +2 -1
  181. data/lib/puppet/functions/getvar.rb +2 -1
  182. data/lib/puppet/functions/hiera.rb +1 -0
  183. data/lib/puppet/functions/hiera_array.rb +1 -0
  184. data/lib/puppet/functions/hiera_hash.rb +1 -0
  185. data/lib/puppet/functions/hiera_include.rb +2 -0
  186. data/lib/puppet/functions/hocon_data.rb +1 -0
  187. data/lib/puppet/functions/import.rb +1 -0
  188. data/lib/puppet/functions/include.rb +1 -0
  189. data/lib/puppet/functions/index.rb +2 -2
  190. data/lib/puppet/functions/info.rb +1 -0
  191. data/lib/puppet/functions/inline_epp.rb +1 -1
  192. data/lib/puppet/functions/join.rb +2 -1
  193. data/lib/puppet/functions/json_data.rb +1 -0
  194. data/lib/puppet/functions/keys.rb +1 -0
  195. data/lib/puppet/functions/length.rb +1 -1
  196. data/lib/puppet/functions/lest.rb +1 -0
  197. data/lib/puppet/functions/lookup.rb +8 -9
  198. data/lib/puppet/functions/lstrip.rb +1 -1
  199. data/lib/puppet/functions/map.rb +1 -0
  200. data/lib/puppet/functions/match.rb +3 -1
  201. data/lib/puppet/functions/max.rb +4 -4
  202. data/lib/puppet/functions/min.rb +4 -4
  203. data/lib/puppet/functions/module_directory.rb +1 -0
  204. data/lib/puppet/functions/new.rb +2 -1
  205. data/lib/puppet/functions/next.rb +1 -0
  206. data/lib/puppet/functions/notice.rb +1 -0
  207. data/lib/puppet/functions/reduce.rb +1 -1
  208. data/lib/puppet/functions/regsubst.rb +1 -0
  209. data/lib/puppet/functions/require.rb +2 -0
  210. data/lib/puppet/functions/return.rb +1 -0
  211. data/lib/puppet/functions/reverse_each.rb +1 -0
  212. data/lib/puppet/functions/round.rb +1 -0
  213. data/lib/puppet/functions/rstrip.rb +1 -1
  214. data/lib/puppet/functions/scanf.rb +1 -0
  215. data/lib/puppet/functions/size.rb +1 -2
  216. data/lib/puppet/functions/slice.rb +2 -0
  217. data/lib/puppet/functions/sort.rb +1 -0
  218. data/lib/puppet/functions/split.rb +29 -1
  219. data/lib/puppet/functions/step.rb +1 -0
  220. data/lib/puppet/functions/strftime.rb +3 -2
  221. data/lib/puppet/functions/strip.rb +1 -1
  222. data/lib/puppet/functions/then.rb +2 -0
  223. data/lib/puppet/functions/tree_each.rb +1 -1
  224. data/lib/puppet/functions/type.rb +1 -0
  225. data/lib/puppet/functions/unique.rb +2 -1
  226. data/lib/puppet/functions/unwrap.rb +1 -0
  227. data/lib/puppet/functions/upcase.rb +1 -0
  228. data/lib/puppet/functions/values.rb +1 -0
  229. data/lib/puppet/functions/versioncmp.rb +2 -2
  230. data/lib/puppet/functions/warning.rb +1 -0
  231. data/lib/puppet/functions/with.rb +1 -0
  232. data/lib/puppet/functions/yaml_data.rb +1 -0
  233. data/lib/puppet/functions.rb +9 -9
  234. data/lib/puppet/generate/models/type/property.rb +2 -0
  235. data/lib/puppet/generate/models/type/type.rb +2 -0
  236. data/lib/puppet/generate/type.rb +6 -1
  237. data/lib/puppet/gettext/config.rb +6 -0
  238. data/lib/puppet/gettext/module_translations.rb +1 -1
  239. data/lib/puppet/gettext/stubs.rb +1 -0
  240. data/lib/puppet/graph/key.rb +1 -0
  241. data/lib/puppet/graph/prioritizer.rb +1 -0
  242. data/lib/puppet/graph/rb_tree_map.rb +12 -2
  243. data/lib/puppet/graph/relationship_graph.rb +3 -2
  244. data/lib/puppet/graph/sequential_prioritizer.rb +1 -0
  245. data/lib/puppet/graph/simple_graph.rb +38 -31
  246. data/lib/puppet/graph.rb +1 -0
  247. data/lib/puppet/http/client.rb +4 -1
  248. data/lib/puppet/http/dns.rb +5 -5
  249. data/lib/puppet/http/errors.rb +1 -0
  250. data/lib/puppet/http/external_client.rb +2 -2
  251. data/lib/puppet/http/factory.rb +1 -0
  252. data/lib/puppet/http/pool.rb +2 -1
  253. data/lib/puppet/http/pool_entry.rb +1 -0
  254. data/lib/puppet/http/proxy.rb +3 -2
  255. data/lib/puppet/http/redirector.rb +1 -0
  256. data/lib/puppet/http/resolver/server_list.rb +1 -1
  257. data/lib/puppet/http/resolver/settings.rb +1 -1
  258. data/lib/puppet/http/resolver/srv.rb +1 -1
  259. data/lib/puppet/http/resolver.rb +1 -0
  260. data/lib/puppet/http/response.rb +1 -0
  261. data/lib/puppet/http/response_converter.rb +1 -0
  262. data/lib/puppet/http/response_net_http.rb +1 -1
  263. data/lib/puppet/http/retry_after_handler.rb +1 -1
  264. data/lib/puppet/http/service/ca.rb +1 -0
  265. data/lib/puppet/http/service/compiler.rb +9 -3
  266. data/lib/puppet/http/service/file_server.rb +2 -1
  267. data/lib/puppet/http/service/puppetserver.rb +1 -1
  268. data/lib/puppet/http/service/report.rb +1 -1
  269. data/lib/puppet/http/service.rb +1 -0
  270. data/lib/puppet/http/session.rb +2 -1
  271. data/lib/puppet/http/site.rb +1 -0
  272. data/lib/puppet/http.rb +1 -0
  273. data/lib/puppet/indirector/catalog/compiler.rb +50 -40
  274. data/lib/puppet/indirector/catalog/json.rb +1 -0
  275. data/lib/puppet/indirector/catalog/msgpack.rb +1 -0
  276. data/lib/puppet/indirector/catalog/rest.rb +9 -0
  277. data/lib/puppet/indirector/catalog/store_configs.rb +1 -2
  278. data/lib/puppet/indirector/catalog/yaml.rb +1 -0
  279. data/lib/puppet/indirector/code.rb +1 -0
  280. data/lib/puppet/indirector/data_binding/hiera.rb +1 -0
  281. data/lib/puppet/indirector/data_binding/none.rb +1 -0
  282. data/lib/puppet/indirector/direct_file_server.rb +3 -1
  283. data/lib/puppet/indirector/envelope.rb +1 -0
  284. data/lib/puppet/indirector/errors.rb +1 -0
  285. data/lib/puppet/indirector/exec.rb +1 -0
  286. data/lib/puppet/indirector/face.rb +7 -6
  287. data/lib/puppet/indirector/fact_search.rb +1 -0
  288. data/lib/puppet/indirector/facts/facter.rb +3 -1
  289. data/lib/puppet/indirector/facts/json.rb +1 -0
  290. data/lib/puppet/indirector/facts/memory.rb +1 -0
  291. data/lib/puppet/indirector/facts/network_device.rb +1 -0
  292. data/lib/puppet/indirector/facts/rest.rb +1 -0
  293. data/lib/puppet/indirector/facts/store_configs.rb +1 -1
  294. data/lib/puppet/indirector/facts/yaml.rb +1 -0
  295. data/lib/puppet/indirector/file_bucket_file/file.rb +11 -6
  296. data/lib/puppet/indirector/file_bucket_file/rest.rb +2 -0
  297. data/lib/puppet/indirector/file_bucket_file/selector.rb +1 -0
  298. data/lib/puppet/indirector/file_content/file.rb +1 -0
  299. data/lib/puppet/indirector/file_content/file_server.rb +1 -0
  300. data/lib/puppet/indirector/file_content/rest.rb +1 -0
  301. data/lib/puppet/indirector/file_content/selector.rb +1 -0
  302. data/lib/puppet/indirector/file_content.rb +1 -0
  303. data/lib/puppet/indirector/file_metadata/file.rb +1 -0
  304. data/lib/puppet/indirector/file_metadata/file_server.rb +1 -0
  305. data/lib/puppet/indirector/file_metadata/http.rb +1 -0
  306. data/lib/puppet/indirector/file_metadata/rest.rb +1 -0
  307. data/lib/puppet/indirector/file_metadata/selector.rb +1 -0
  308. data/lib/puppet/indirector/file_metadata.rb +1 -0
  309. data/lib/puppet/indirector/file_server.rb +2 -0
  310. data/lib/puppet/indirector/generic_http.rb +1 -0
  311. data/lib/puppet/indirector/hiera.rb +5 -4
  312. data/lib/puppet/indirector/indirection.rb +12 -2
  313. data/lib/puppet/indirector/json.rb +3 -1
  314. data/lib/puppet/indirector/memory.rb +2 -0
  315. data/lib/puppet/indirector/msgpack.rb +5 -2
  316. data/lib/puppet/indirector/node/exec.rb +3 -2
  317. data/lib/puppet/indirector/node/json.rb +1 -1
  318. data/lib/puppet/indirector/node/memory.rb +1 -0
  319. data/lib/puppet/indirector/node/msgpack.rb +1 -0
  320. data/lib/puppet/indirector/node/plain.rb +1 -0
  321. data/lib/puppet/indirector/node/rest.rb +1 -0
  322. data/lib/puppet/indirector/node/store_configs.rb +1 -2
  323. data/lib/puppet/indirector/node/yaml.rb +1 -0
  324. data/lib/puppet/indirector/none.rb +1 -0
  325. data/lib/puppet/indirector/plain.rb +1 -0
  326. data/lib/puppet/indirector/report/json.rb +1 -0
  327. data/lib/puppet/indirector/report/msgpack.rb +1 -0
  328. data/lib/puppet/indirector/report/processor.rb +2 -0
  329. data/lib/puppet/indirector/report/rest.rb +1 -0
  330. data/lib/puppet/indirector/report/yaml.rb +1 -0
  331. data/lib/puppet/indirector/request.rb +7 -5
  332. data/lib/puppet/indirector/resource/ral.rb +1 -0
  333. data/lib/puppet/indirector/resource/store_configs.rb +1 -0
  334. data/lib/puppet/indirector/resource/validator.rb +1 -0
  335. data/lib/puppet/indirector/rest.rb +1 -0
  336. data/lib/puppet/indirector/store_configs.rb +1 -0
  337. data/lib/puppet/indirector/terminus.rb +4 -1
  338. data/lib/puppet/indirector/yaml.rb +1 -0
  339. data/lib/puppet/indirector.rb +2 -0
  340. data/lib/puppet/info_service/class_information_service.rb +5 -3
  341. data/lib/puppet/info_service/plan_information_service.rb +1 -0
  342. data/lib/puppet/info_service/task_information_service.rb +2 -1
  343. data/lib/puppet/interface/action.rb +32 -27
  344. data/lib/puppet/interface/action_builder.rb +14 -14
  345. data/lib/puppet/interface/action_manager.rb +2 -0
  346. data/lib/puppet/interface/documentation.rb +21 -15
  347. data/lib/puppet/interface/face_collection.rb +5 -2
  348. data/lib/puppet/interface/option.rb +15 -4
  349. data/lib/puppet/interface/option_builder.rb +13 -9
  350. data/lib/puppet/interface/option_manager.rb +3 -2
  351. data/lib/puppet/interface.rb +3 -3
  352. data/lib/puppet/loaders.rb +1 -1
  353. data/lib/puppet/metatype/manager.rb +9 -8
  354. data/lib/puppet/module/plan.rb +10 -4
  355. data/lib/puppet/module/task.rb +8 -2
  356. data/lib/puppet/module.rb +13 -3
  357. data/lib/puppet/module_tool/applications/application.rb +6 -4
  358. data/lib/puppet/module_tool/applications/checksummer.rb +1 -2
  359. data/lib/puppet/module_tool/applications/installer.rb +32 -45
  360. data/lib/puppet/module_tool/applications/uninstaller.rb +22 -21
  361. data/lib/puppet/module_tool/applications/unpacker.rb +3 -0
  362. data/lib/puppet/module_tool/applications/upgrader.rb +28 -26
  363. data/lib/puppet/module_tool/applications.rb +1 -0
  364. data/lib/puppet/module_tool/checksums.rb +1 -1
  365. data/lib/puppet/module_tool/contents_description.rb +1 -2
  366. data/lib/puppet/module_tool/dependency.rb +1 -1
  367. data/lib/puppet/module_tool/errors/base.rb +1 -0
  368. data/lib/puppet/module_tool/errors/installer.rb +4 -4
  369. data/lib/puppet/module_tool/errors/shared.rb +12 -12
  370. data/lib/puppet/module_tool/errors/uninstaller.rb +2 -2
  371. data/lib/puppet/module_tool/errors/upgrader.rb +3 -3
  372. data/lib/puppet/module_tool/errors.rb +1 -0
  373. data/lib/puppet/module_tool/install_directory.rb +6 -4
  374. data/lib/puppet/module_tool/installed_modules.rb +2 -0
  375. data/lib/puppet/module_tool/local_tarball.rb +3 -0
  376. data/lib/puppet/module_tool/metadata.rb +21 -20
  377. data/lib/puppet/module_tool/shared_behaviors.rb +23 -21
  378. data/lib/puppet/module_tool/tar/gnu.rb +1 -0
  379. data/lib/puppet/module_tool/tar/mini.rb +1 -0
  380. data/lib/puppet/module_tool/tar.rb +2 -1
  381. data/lib/puppet/module_tool.rb +2 -2
  382. data/lib/puppet/network/authconfig.rb +1 -0
  383. data/lib/puppet/network/authorization.rb +1 -0
  384. data/lib/puppet/network/client_request.rb +1 -0
  385. data/lib/puppet/network/format.rb +5 -0
  386. data/lib/puppet/network/format_handler.rb +2 -1
  387. data/lib/puppet/network/format_support.rb +6 -5
  388. data/lib/puppet/network/formats.rb +18 -14
  389. data/lib/puppet/network/http/api/indirected_routes.rb +8 -8
  390. data/lib/puppet/network/http/api/indirection_type.rb +1 -1
  391. data/lib/puppet/network/http/api/master/v3/environments.rb +1 -0
  392. data/lib/puppet/network/http/api/master/v3.rb +1 -0
  393. data/lib/puppet/network/http/api/master.rb +1 -0
  394. data/lib/puppet/network/http/api/server/v3/environments.rb +20 -14
  395. data/lib/puppet/network/http/api/server/v3.rb +13 -13
  396. data/lib/puppet/network/http/api/server.rb +1 -0
  397. data/lib/puppet/network/http/api.rb +11 -10
  398. data/lib/puppet/network/http/connection.rb +1 -0
  399. data/lib/puppet/network/http/error.rb +2 -1
  400. data/lib/puppet/network/http/handler.rb +3 -2
  401. data/lib/puppet/network/http/issues.rb +1 -0
  402. data/lib/puppet/network/http/memory_response.rb +2 -1
  403. data/lib/puppet/network/http/request.rb +13 -6
  404. data/lib/puppet/network/http/response.rb +1 -0
  405. data/lib/puppet/network/http/route.rb +4 -2
  406. data/lib/puppet/network/http.rb +1 -0
  407. data/lib/puppet/network/http_pool.rb +2 -1
  408. data/lib/puppet/network/uri.rb +1 -0
  409. data/lib/puppet/network.rb +1 -0
  410. data/lib/puppet/node/environment.rb +12 -9
  411. data/lib/puppet/node/facts.rb +2 -1
  412. data/lib/puppet/node.rb +3 -2
  413. data/lib/puppet/pal/catalog_compiler.rb +1 -3
  414. data/lib/puppet/pal/compiler.rb +6 -2
  415. data/lib/puppet/pal/function_signature.rb +2 -1
  416. data/lib/puppet/pal/json_catalog_encoder.rb +5 -1
  417. data/lib/puppet/pal/pal_api.rb +1 -0
  418. data/lib/puppet/pal/pal_impl.rb +20 -19
  419. data/lib/puppet/pal/plan_signature.rb +2 -1
  420. data/lib/puppet/pal/script_compiler.rb +3 -2
  421. data/lib/puppet/pal/task_signature.rb +14 -9
  422. data/lib/puppet/parameter/boolean.rb +1 -0
  423. data/lib/puppet/parameter/package_options.rb +1 -0
  424. data/lib/puppet/parameter/path.rb +3 -0
  425. data/lib/puppet/parameter/value.rb +1 -0
  426. data/lib/puppet/parameter/value_collection.rb +6 -6
  427. data/lib/puppet/parameter.rb +4 -3
  428. data/lib/puppet/parser/abstract_compiler.rb +0 -2
  429. data/lib/puppet/parser/ast/block_expression.rb +1 -0
  430. data/lib/puppet/parser/ast/branch.rb +1 -0
  431. data/lib/puppet/parser/ast/hostclass.rb +1 -0
  432. data/lib/puppet/parser/ast/leaf.rb +2 -0
  433. data/lib/puppet/parser/ast/node.rb +1 -0
  434. data/lib/puppet/parser/ast/pops_bridge.rb +6 -6
  435. data/lib/puppet/parser/ast/resource.rb +2 -3
  436. data/lib/puppet/parser/ast/resource_instance.rb +2 -0
  437. data/lib/puppet/parser/ast/resourceparam.rb +6 -5
  438. data/lib/puppet/parser/ast/top_level_construct.rb +1 -0
  439. data/lib/puppet/parser/ast.rb +4 -3
  440. data/lib/puppet/parser/catalog_compiler.rb +1 -2
  441. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +3 -0
  442. data/lib/puppet/parser/compiler/catalog_validator.rb +1 -0
  443. data/lib/puppet/parser/compiler.rb +10 -8
  444. data/lib/puppet/parser/e4_parser_adapter.rb +15 -15
  445. data/lib/puppet/parser/files.rb +5 -4
  446. data/lib/puppet/parser/functions/assert_type.rb +55 -54
  447. data/lib/puppet/parser/functions/binary_file.rb +19 -18
  448. data/lib/puppet/parser/functions/break.rb +35 -34
  449. data/lib/puppet/parser/functions/contain.rb +1 -0
  450. data/lib/puppet/parser/functions/create_resources.rb +8 -6
  451. data/lib/puppet/parser/functions/defined.rb +102 -101
  452. data/lib/puppet/parser/functions/dig.rb +33 -32
  453. data/lib/puppet/parser/functions/digest.rb +1 -0
  454. data/lib/puppet/parser/functions/each.rb +99 -98
  455. data/lib/puppet/parser/functions/epp.rb +2 -2
  456. data/lib/puppet/parser/functions/fail.rb +9 -8
  457. data/lib/puppet/parser/functions/file.rb +14 -13
  458. data/lib/puppet/parser/functions/filter.rb +74 -73
  459. data/lib/puppet/parser/functions/find_file.rb +22 -21
  460. data/lib/puppet/parser/functions/fqdn_rand.rb +23 -22
  461. data/lib/puppet/parser/functions/generate.rb +20 -20
  462. data/lib/puppet/parser/functions/hiera.rb +94 -93
  463. data/lib/puppet/parser/functions/hiera_array.rb +82 -81
  464. data/lib/puppet/parser/functions/hiera_hash.rb +92 -91
  465. data/lib/puppet/parser/functions/hiera_include.rb +92 -91
  466. data/lib/puppet/parser/functions/include.rb +2 -1
  467. data/lib/puppet/parser/functions/inline_epp.rb +2 -2
  468. data/lib/puppet/parser/functions/inline_template.rb +11 -11
  469. data/lib/puppet/parser/functions/lest.rb +44 -43
  470. data/lib/puppet/parser/functions/lookup.rb +131 -130
  471. data/lib/puppet/parser/functions/map.rb +71 -70
  472. data/lib/puppet/parser/functions/match.rb +39 -38
  473. data/lib/puppet/parser/functions/md5.rb +2 -1
  474. data/lib/puppet/parser/functions/new.rb +985 -984
  475. data/lib/puppet/parser/functions/next.rb +34 -33
  476. data/lib/puppet/parser/functions/realize.rb +9 -9
  477. data/lib/puppet/parser/functions/reduce.rb +132 -131
  478. data/lib/puppet/parser/functions/regsubst.rb +6 -5
  479. data/lib/puppet/parser/functions/require.rb +5 -4
  480. data/lib/puppet/parser/functions/return.rb +88 -87
  481. data/lib/puppet/parser/functions/reverse_each.rb +78 -77
  482. data/lib/puppet/parser/functions/scanf.rb +28 -27
  483. data/lib/puppet/parser/functions/sha1.rb +2 -1
  484. data/lib/puppet/parser/functions/sha256.rb +1 -0
  485. data/lib/puppet/parser/functions/shellquote.rb +1 -0
  486. data/lib/puppet/parser/functions/slice.rb +34 -33
  487. data/lib/puppet/parser/functions/split.rb +5 -6
  488. data/lib/puppet/parser/functions/sprintf.rb +3 -3
  489. data/lib/puppet/parser/functions/step.rb +79 -78
  490. data/lib/puppet/parser/functions/strftime.rb +180 -179
  491. data/lib/puppet/parser/functions/tag.rb +7 -6
  492. data/lib/puppet/parser/functions/tagged.rb +13 -12
  493. data/lib/puppet/parser/functions/template.rb +24 -23
  494. data/lib/puppet/parser/functions/then.rb +68 -67
  495. data/lib/puppet/parser/functions/type.rb +48 -47
  496. data/lib/puppet/parser/functions/versioncmp.rb +1 -1
  497. data/lib/puppet/parser/functions/with.rb +23 -22
  498. data/lib/puppet/parser/functions.rb +3 -1
  499. data/lib/puppet/parser/parser_factory.rb +1 -0
  500. data/lib/puppet/parser/relationship.rb +3 -0
  501. data/lib/puppet/parser/resource/param.rb +1 -0
  502. data/lib/puppet/parser/resource.rb +10 -4
  503. data/lib/puppet/parser/scope.rb +40 -32
  504. data/lib/puppet/parser/script_compiler.rb +5 -6
  505. data/lib/puppet/parser/templatewrapper.rb +1 -0
  506. data/lib/puppet/parser/type_loader.rb +19 -17
  507. data/lib/puppet/parser.rb +1 -0
  508. data/lib/puppet/plugins/configuration.rb +1 -0
  509. data/lib/puppet/plugins/syntax_checkers.rb +1 -1
  510. data/lib/puppet/plugins.rb +1 -0
  511. data/lib/puppet/pops/adaptable.rb +3 -1
  512. data/lib/puppet/pops/adapters.rb +3 -1
  513. data/lib/puppet/pops/evaluator/access_operator.rb +79 -65
  514. data/lib/puppet/pops/evaluator/callable_signature.rb +1 -1
  515. data/lib/puppet/pops/evaluator/closure.rb +273 -277
  516. data/lib/puppet/pops/evaluator/collector_transformer.rb +11 -9
  517. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -0
  518. data/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +2 -2
  519. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +4 -4
  520. data/lib/puppet/pops/evaluator/collectors/fixed_set_collector.rb +1 -1
  521. data/lib/puppet/pops/evaluator/compare_operator.rb +15 -3
  522. data/lib/puppet/pops/evaluator/deferred_resolver.rb +2 -2
  523. data/lib/puppet/pops/evaluator/epp_evaluator.rb +10 -10
  524. data/lib/puppet/pops/evaluator/evaluator_impl.rb +140 -138
  525. data/lib/puppet/pops/evaluator/external_syntax_support.rb +1 -1
  526. data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +2 -1
  527. data/lib/puppet/pops/evaluator/literal_evaluator.rb +1 -1
  528. data/lib/puppet/pops/evaluator/puppet_proc.rb +2 -0
  529. data/lib/puppet/pops/evaluator/relationship_operator.rb +5 -3
  530. data/lib/puppet/pops/evaluator/runtime3_converter.rb +21 -19
  531. data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +31 -33
  532. data/lib/puppet/pops/evaluator/runtime3_support.rb +16 -19
  533. data/lib/puppet/pops/functions/dispatch.rb +1 -0
  534. data/lib/puppet/pops/functions/dispatcher.rb +1 -1
  535. data/lib/puppet/pops/functions/function.rb +1 -2
  536. data/lib/puppet/pops/issue_reporter.rb +19 -17
  537. data/lib/puppet/pops/issues.rb +8 -4
  538. data/lib/puppet/pops/label_provider.rb +1 -0
  539. data/lib/puppet/pops/loader/base_loader.rb +2 -2
  540. data/lib/puppet/pops/loader/dependency_loader.rb +3 -0
  541. data/lib/puppet/pops/loader/gem_support.rb +3 -1
  542. data/lib/puppet/pops/loader/generic_plan_instantiator.rb +1 -0
  543. data/lib/puppet/pops/loader/loader.rb +1 -2
  544. data/lib/puppet/pops/loader/loader_paths.rb +24 -23
  545. data/lib/puppet/pops/loader/module_loaders.rb +28 -28
  546. data/lib/puppet/pops/loader/predefined_loader.rb +1 -2
  547. data/lib/puppet/pops/loader/puppet_function_instantiator.rb +4 -2
  548. data/lib/puppet/pops/loader/puppet_plan_instantiator.rb +4 -2
  549. data/lib/puppet/pops/loader/puppet_resource_type_impl_instantiator.rb +1 -1
  550. data/lib/puppet/pops/loader/ruby_data_type_instantiator.rb +4 -1
  551. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +4 -1
  552. data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +6 -2
  553. data/lib/puppet/pops/loader/runtime3_type_loader.rb +2 -2
  554. data/lib/puppet/pops/loader/simple_environment_loader.rb +1 -2
  555. data/lib/puppet/pops/loader/static_loader.rb +22 -21
  556. data/lib/puppet/pops/loader/task_instantiator.rb +1 -0
  557. data/lib/puppet/pops/loader/type_definition_instantiator.rb +6 -4
  558. data/lib/puppet/pops/loader/typed_name.rb +1 -0
  559. data/lib/puppet/pops/loader/uri_helper.rb +1 -0
  560. data/lib/puppet/pops/loaders.rb +21 -18
  561. data/lib/puppet/pops/lookup/configured_data_provider.rb +1 -0
  562. data/lib/puppet/pops/lookup/context.rb +24 -23
  563. data/lib/puppet/pops/lookup/data_adapter.rb +1 -0
  564. data/lib/puppet/pops/lookup/data_dig_function_provider.rb +2 -2
  565. data/lib/puppet/pops/lookup/data_hash_function_provider.rb +1 -0
  566. data/lib/puppet/pops/lookup/data_provider.rb +1 -0
  567. data/lib/puppet/pops/lookup/environment_data_provider.rb +1 -0
  568. data/lib/puppet/pops/lookup/explainer.rb +35 -34
  569. data/lib/puppet/pops/lookup/function_provider.rb +7 -6
  570. data/lib/puppet/pops/lookup/global_data_provider.rb +1 -1
  571. data/lib/puppet/pops/lookup/hiera_config.rb +137 -101
  572. data/lib/puppet/pops/lookup/interpolation.rb +5 -1
  573. data/lib/puppet/pops/lookup/invocation.rb +3 -0
  574. data/lib/puppet/pops/lookup/key_recorder.rb +3 -1
  575. data/lib/puppet/pops/lookup/location_resolver.rb +2 -1
  576. data/lib/puppet/pops/lookup/lookup_adapter.rb +22 -20
  577. data/lib/puppet/pops/lookup/lookup_key.rb +1 -0
  578. data/lib/puppet/pops/lookup/lookup_key_function_provider.rb +1 -0
  579. data/lib/puppet/pops/lookup/module_data_provider.rb +3 -1
  580. data/lib/puppet/pops/lookup/sub_lookup.rb +5 -2
  581. data/lib/puppet/pops/lookup.rb +13 -8
  582. data/lib/puppet/pops/merge_strategy.rb +5 -2
  583. data/lib/puppet/pops/migration/migration_checker.rb +3 -1
  584. data/lib/puppet/pops/model/ast.rb +786 -685
  585. data/lib/puppet/pops/model/ast_transformer.rb +4 -3
  586. data/lib/puppet/pops/model/factory.rb +18 -14
  587. data/lib/puppet/pops/model/model_label_provider.rb +1 -1
  588. data/lib/puppet/pops/model/model_tree_dumper.rb +10 -9
  589. data/lib/puppet/pops/model/pn_transformer.rb +4 -6
  590. data/lib/puppet/pops/model/tree_dumper.rb +3 -1
  591. data/lib/puppet/pops/parser/code_merger.rb +0 -1
  592. data/lib/puppet/pops/parser/epp_parser.rb +1 -1
  593. data/lib/puppet/pops/parser/epp_support.rb +3 -3
  594. data/lib/puppet/pops/parser/evaluating_parser.rb +6 -3
  595. data/lib/puppet/pops/parser/heredoc_support.rb +6 -7
  596. data/lib/puppet/pops/parser/interpolation_support.rb +2 -3
  597. data/lib/puppet/pops/parser/lexer2.rb +32 -29
  598. data/lib/puppet/pops/parser/lexer_support.rb +38 -41
  599. data/lib/puppet/pops/parser/locatable.rb +1 -2
  600. data/lib/puppet/pops/parser/locator.rb +31 -28
  601. data/lib/puppet/pops/parser/parser_support.rb +2 -0
  602. data/lib/puppet/pops/parser/pn_parser.rb +2 -2
  603. data/lib/puppet/pops/parser/slurp_support.rb +33 -32
  604. data/lib/puppet/pops/patterns.rb +2 -3
  605. data/lib/puppet/pops/pcore.rb +2 -2
  606. data/lib/puppet/pops/pn.rb +4 -1
  607. data/lib/puppet/pops/puppet_stack.rb +1 -0
  608. data/lib/puppet/pops/resource/param.rb +11 -10
  609. data/lib/puppet/pops/resource/resource_type_impl.rb +37 -36
  610. data/lib/puppet/pops/semantic_error.rb +1 -0
  611. data/lib/puppet/pops/serialization/abstract_reader.rb +3 -2
  612. data/lib/puppet/pops/serialization/abstract_writer.rb +5 -4
  613. data/lib/puppet/pops/serialization/deserializer.rb +2 -0
  614. data/lib/puppet/pops/serialization/extension.rb +7 -0
  615. data/lib/puppet/pops/serialization/from_data_converter.rb +3 -0
  616. data/lib/puppet/pops/serialization/instance_reader.rb +1 -0
  617. data/lib/puppet/pops/serialization/instance_writer.rb +1 -0
  618. data/lib/puppet/pops/serialization/json.rb +6 -3
  619. data/lib/puppet/pops/serialization/json_path.rb +2 -1
  620. data/lib/puppet/pops/serialization/object.rb +4 -1
  621. data/lib/puppet/pops/serialization/serializer.rb +6 -2
  622. data/lib/puppet/pops/serialization/time_factory.rb +1 -1
  623. data/lib/puppet/pops/serialization/to_data_converter.rb +4 -2
  624. data/lib/puppet/pops/serialization/to_stringified_converter.rb +2 -2
  625. data/lib/puppet/pops/serialization.rb +1 -0
  626. data/lib/puppet/pops/time/timespan.rb +16 -6
  627. data/lib/puppet/pops/time/timestamp.rb +4 -0
  628. data/lib/puppet/pops/types/annotatable.rb +1 -1
  629. data/lib/puppet/pops/types/annotation.rb +1 -0
  630. data/lib/puppet/pops/types/class_loader.rb +8 -6
  631. data/lib/puppet/pops/types/implementation_registry.rb +1 -0
  632. data/lib/puppet/pops/types/iterable.rb +18 -9
  633. data/lib/puppet/pops/types/p_binary_type.rb +2 -3
  634. data/lib/puppet/pops/types/p_init_type.rb +12 -9
  635. data/lib/puppet/pops/types/p_meta_type.rb +1 -1
  636. data/lib/puppet/pops/types/p_object_type.rb +65 -42
  637. data/lib/puppet/pops/types/p_object_type_extension.rb +10 -7
  638. data/lib/puppet/pops/types/p_runtime_type.rb +11 -9
  639. data/lib/puppet/pops/types/p_sem_ver_range_type.rb +1 -1
  640. data/lib/puppet/pops/types/p_sem_ver_type.rb +5 -5
  641. data/lib/puppet/pops/types/p_sensitive_type.rb +1 -4
  642. data/lib/puppet/pops/types/p_timespan_type.rb +4 -2
  643. data/lib/puppet/pops/types/p_timestamp_type.rb +3 -2
  644. data/lib/puppet/pops/types/p_type_set_type.rb +36 -28
  645. data/lib/puppet/pops/types/p_uri_type.rb +25 -18
  646. data/lib/puppet/pops/types/puppet_object.rb +1 -1
  647. data/lib/puppet/pops/types/recursion_guard.rb +7 -2
  648. data/lib/puppet/pops/types/ruby_generator.rb +9 -6
  649. data/lib/puppet/pops/types/ruby_method.rb +6 -5
  650. data/lib/puppet/pops/types/string_converter.rb +71 -63
  651. data/lib/puppet/pops/types/tree_iterators.rb +6 -7
  652. data/lib/puppet/pops/types/type_acceptor.rb +1 -0
  653. data/lib/puppet/pops/types/type_asserter.rb +1 -0
  654. data/lib/puppet/pops/types/type_assertion_error.rb +0 -1
  655. data/lib/puppet/pops/types/type_calculator.rb +10 -4
  656. data/lib/puppet/pops/types/type_conversion_error.rb +1 -10
  657. data/lib/puppet/pops/types/type_factory.rb +7 -4
  658. data/lib/puppet/pops/types/type_formatter.rb +14 -13
  659. data/lib/puppet/pops/types/type_mismatch_describer.rb +13 -8
  660. data/lib/puppet/pops/types/type_parser.rb +111 -107
  661. data/lib/puppet/pops/types/type_set_reference.rb +2 -0
  662. data/lib/puppet/pops/types/type_with_members.rb +1 -1
  663. data/lib/puppet/pops/types/types.rb +178 -153
  664. data/lib/puppet/pops/utils.rb +1 -0
  665. data/lib/puppet/pops/validation/checker4_0.rb +17 -11
  666. data/lib/puppet/pops/validation/tasks_checker.rb +2 -1
  667. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -2
  668. data/lib/puppet/pops/validation.rb +8 -6
  669. data/lib/puppet/pops/visitable.rb +1 -0
  670. data/lib/puppet/pops/visitor.rb +14 -1
  671. data/lib/puppet/pops.rb +2 -0
  672. data/lib/puppet/property/boolean.rb +1 -0
  673. data/lib/puppet/property/ensure.rb +4 -1
  674. data/lib/puppet/property/keyvalue.rb +5 -4
  675. data/lib/puppet/property/list.rb +5 -5
  676. data/lib/puppet/property/ordered_list.rb +4 -4
  677. data/lib/puppet/property.rb +13 -11
  678. data/lib/puppet/provider/aix_object.rb +5 -0
  679. data/lib/puppet/provider/command.rb +1 -0
  680. data/lib/puppet/provider/confine.rb +1 -0
  681. data/lib/puppet/provider/exec/posix.rb +2 -0
  682. data/lib/puppet/provider/exec/shell.rb +1 -0
  683. data/lib/puppet/provider/exec/windows.rb +2 -1
  684. data/lib/puppet/provider/exec.rb +1 -0
  685. data/lib/puppet/provider/file/posix.rb +1 -0
  686. data/lib/puppet/provider/file/windows.rb +10 -6
  687. data/lib/puppet/provider/group/aix.rb +1 -0
  688. data/lib/puppet/provider/group/directoryservice.rb +1 -1
  689. data/lib/puppet/provider/group/groupadd.rb +9 -4
  690. data/lib/puppet/provider/group/ldap.rb +2 -0
  691. data/lib/puppet/provider/group/pw.rb +1 -0
  692. data/lib/puppet/provider/group/windows_adsi.rb +2 -0
  693. data/lib/puppet/provider/ldap.rb +2 -0
  694. data/lib/puppet/provider/nameservice/directoryservice.rb +30 -21
  695. data/lib/puppet/provider/nameservice/objectadd.rb +1 -0
  696. data/lib/puppet/provider/nameservice/pw.rb +6 -5
  697. data/lib/puppet/provider/nameservice.rb +8 -4
  698. data/lib/puppet/provider/network_device.rb +1 -2
  699. data/lib/puppet/provider/package/aix.rb +5 -4
  700. data/lib/puppet/provider/package/appdmg.rb +20 -19
  701. data/lib/puppet/provider/package/apple.rb +3 -2
  702. data/lib/puppet/provider/package/apt.rb +5 -5
  703. data/lib/puppet/provider/package/aptitude.rb +1 -0
  704. data/lib/puppet/provider/package/aptrpm.rb +2 -1
  705. data/lib/puppet/provider/package/blastwave.rb +6 -6
  706. data/lib/puppet/provider/package/dnf.rb +3 -1
  707. data/lib/puppet/provider/package/dnfmodule.rb +8 -7
  708. data/lib/puppet/provider/package/dpkg.rb +4 -4
  709. data/lib/puppet/provider/package/fink.rb +2 -1
  710. data/lib/puppet/provider/package/freebsd.rb +3 -2
  711. data/lib/puppet/provider/package/gem.rb +9 -5
  712. data/lib/puppet/provider/package/hpux.rb +4 -3
  713. data/lib/puppet/provider/package/macports.rb +2 -1
  714. data/lib/puppet/provider/package/nim.rb +13 -15
  715. data/lib/puppet/provider/package/openbsd.rb +6 -4
  716. data/lib/puppet/provider/package/opkg.rb +2 -0
  717. data/lib/puppet/provider/package/pacman.rb +12 -12
  718. data/lib/puppet/provider/package/pip.rb +3 -1
  719. data/lib/puppet/provider/package/pip2.rb +2 -2
  720. data/lib/puppet/provider/package/pip3.rb +2 -2
  721. data/lib/puppet/provider/package/pkg.rb +17 -13
  722. data/lib/puppet/provider/package/pkgdmg.rb +7 -2
  723. data/lib/puppet/provider/package/pkgin.rb +5 -5
  724. data/lib/puppet/provider/package/pkgng.rb +11 -7
  725. data/lib/puppet/provider/package/pkgutil.rb +7 -6
  726. data/lib/puppet/provider/package/portage.rb +11 -6
  727. data/lib/puppet/provider/package/ports.rb +6 -5
  728. data/lib/puppet/provider/package/portupgrade.rb +6 -12
  729. data/lib/puppet/provider/package/puppet_gem.rb +1 -0
  730. data/lib/puppet/provider/package/puppetserver_gem.rb +1 -0
  731. data/lib/puppet/provider/package/rpm.rb +10 -6
  732. data/lib/puppet/provider/package/rug.rb +2 -1
  733. data/lib/puppet/provider/package/sun.rb +20 -17
  734. data/lib/puppet/provider/package/sunfreeware.rb +1 -0
  735. data/lib/puppet/provider/package/tdnf.rb +1 -0
  736. data/lib/puppet/provider/package/up2date.rb +2 -1
  737. data/lib/puppet/provider/package/urpmi.rb +1 -0
  738. data/lib/puppet/provider/package/windows/exe_package.rb +1 -0
  739. data/lib/puppet/provider/package/windows/msi_package.rb +1 -0
  740. data/lib/puppet/provider/package/windows/package.rb +5 -3
  741. data/lib/puppet/provider/package/windows.rb +4 -2
  742. data/lib/puppet/provider/package/yum.rb +17 -14
  743. data/lib/puppet/provider/package/zypper.rb +15 -14
  744. data/lib/puppet/provider/package.rb +7 -6
  745. data/lib/puppet/provider/package_targetable.rb +1 -0
  746. data/lib/puppet/provider/parsedfile.rb +7 -2
  747. data/lib/puppet/provider/service/base.rb +2 -1
  748. data/lib/puppet/provider/service/bsd.rb +1 -0
  749. data/lib/puppet/provider/service/daemontools.rb +9 -7
  750. data/lib/puppet/provider/service/debian.rb +4 -3
  751. data/lib/puppet/provider/service/freebsd.rb +5 -6
  752. data/lib/puppet/provider/service/gentoo.rb +5 -4
  753. data/lib/puppet/provider/service/init.rb +10 -11
  754. data/lib/puppet/provider/service/launchd.rb +10 -4
  755. data/lib/puppet/provider/service/openbsd.rb +4 -4
  756. data/lib/puppet/provider/service/openrc.rb +1 -1
  757. data/lib/puppet/provider/service/openwrt.rb +1 -1
  758. data/lib/puppet/provider/service/rcng.rb +1 -0
  759. data/lib/puppet/provider/service/redhat.rb +3 -2
  760. data/lib/puppet/provider/service/runit.rb +8 -7
  761. data/lib/puppet/provider/service/service.rb +1 -0
  762. data/lib/puppet/provider/service/smf.rb +5 -2
  763. data/lib/puppet/provider/service/src.rb +16 -16
  764. data/lib/puppet/provider/service/systemd.rb +8 -4
  765. data/lib/puppet/provider/service/upstart.rb +8 -7
  766. data/lib/puppet/provider/service/windows.rb +22 -26
  767. data/lib/puppet/provider/user/aix.rb +3 -2
  768. data/lib/puppet/provider/user/directoryservice.rb +53 -45
  769. data/lib/puppet/provider/user/hpux.rb +15 -14
  770. data/lib/puppet/provider/user/ldap.rb +8 -6
  771. data/lib/puppet/provider/user/openbsd.rb +21 -20
  772. data/lib/puppet/provider/user/pw.rb +3 -2
  773. data/lib/puppet/provider/user/user_role_add.rb +19 -14
  774. data/lib/puppet/provider/user/useradd.rb +51 -41
  775. data/lib/puppet/provider/user/windows_adsi.rb +4 -1
  776. data/lib/puppet/provider.rb +9 -9
  777. data/lib/puppet/reference/configuration.rb +44 -43
  778. data/lib/puppet/reference/function.rb +1 -0
  779. data/lib/puppet/reference/indirection.rb +43 -42
  780. data/lib/puppet/reference/metaparameter.rb +1 -0
  781. data/lib/puppet/reference/providers.rb +2 -0
  782. data/lib/puppet/reference/report.rb +1 -0
  783. data/lib/puppet/reference/type.rb +4 -3
  784. data/lib/puppet/relationship.rb +3 -2
  785. data/lib/puppet/reports/http.rb +1 -1
  786. data/lib/puppet/reports/log.rb +1 -0
  787. data/lib/puppet/reports/store.rb +3 -1
  788. data/lib/puppet/reports.rb +5 -4
  789. data/lib/puppet/resource/catalog.rb +14 -10
  790. data/lib/puppet/resource/status.rb +1 -1
  791. data/lib/puppet/resource/type.rb +28 -18
  792. data/lib/puppet/resource/type_collection.rb +4 -0
  793. data/lib/puppet/resource.rb +24 -16
  794. data/lib/puppet/runtime.rb +1 -0
  795. data/lib/puppet/scheduler/job.rb +1 -0
  796. data/lib/puppet/scheduler/scheduler.rb +1 -0
  797. data/lib/puppet/scheduler/splay_job.rb +1 -0
  798. data/lib/puppet/scheduler/timer.rb +1 -0
  799. data/lib/puppet/scheduler.rb +1 -0
  800. data/lib/puppet/settings/alias_setting.rb +1 -0
  801. data/lib/puppet/settings/array_setting.rb +1 -1
  802. data/lib/puppet/settings/autosign_setting.rb +1 -1
  803. data/lib/puppet/settings/base_setting.rb +9 -5
  804. data/lib/puppet/settings/boolean_setting.rb +1 -0
  805. data/lib/puppet/settings/certificate_revocation_setting.rb +1 -1
  806. data/lib/puppet/settings/config_file.rb +3 -3
  807. data/lib/puppet/settings/directory_setting.rb +1 -0
  808. data/lib/puppet/settings/duration_setting.rb +1 -0
  809. data/lib/puppet/settings/enum_setting.rb +2 -1
  810. data/lib/puppet/settings/environment_conf.rb +9 -8
  811. data/lib/puppet/settings/errors.rb +2 -0
  812. data/lib/puppet/settings/file_or_directory_setting.rb +1 -5
  813. data/lib/puppet/settings/file_setting.rb +3 -13
  814. data/lib/puppet/settings/http_extra_headers_setting.rb +1 -1
  815. data/lib/puppet/settings/ini_file.rb +1 -0
  816. data/lib/puppet/settings/integer_setting.rb +1 -0
  817. data/lib/puppet/settings/path_setting.rb +1 -0
  818. data/lib/puppet/settings/port_setting.rb +2 -1
  819. data/lib/puppet/settings/priority_setting.rb +9 -8
  820. data/lib/puppet/settings/server_list_setting.rb +2 -2
  821. data/lib/puppet/settings/string_setting.rb +1 -0
  822. data/lib/puppet/settings/symbolic_enum_setting.rb +2 -1
  823. data/lib/puppet/settings/terminus_setting.rb +1 -0
  824. data/lib/puppet/settings/ttl_setting.rb +2 -0
  825. data/lib/puppet/settings/value_translator.rb +8 -7
  826. data/lib/puppet/settings.rb +89 -66
  827. data/lib/puppet/ssl/base.rb +4 -0
  828. data/lib/puppet/ssl/certificate.rb +3 -2
  829. data/lib/puppet/ssl/certificate_request.rb +9 -7
  830. data/lib/puppet/ssl/certificate_request_attributes.rb +3 -1
  831. data/lib/puppet/ssl/certificate_signer.rb +2 -3
  832. data/lib/puppet/ssl/digest.rb +1 -0
  833. data/lib/puppet/ssl/error.rb +2 -0
  834. data/lib/puppet/ssl/oids.rb +3 -3
  835. data/lib/puppet/ssl/openssl_loader.rb +1 -0
  836. data/lib/puppet/ssl/ssl_context.rb +11 -15
  837. data/lib/puppet/ssl/ssl_provider.rb +2 -1
  838. data/lib/puppet/ssl/state_machine.rb +1 -0
  839. data/lib/puppet/ssl/verifier.rb +2 -2
  840. data/lib/puppet/ssl.rb +1 -0
  841. data/lib/puppet/syntax_checkers/base64.rb +2 -1
  842. data/lib/puppet/syntax_checkers/epp.rb +1 -1
  843. data/lib/puppet/syntax_checkers/json.rb +1 -2
  844. data/lib/puppet/syntax_checkers/pp.rb +1 -1
  845. data/lib/puppet/syntax_checkers.rb +1 -0
  846. data/lib/puppet/test/test_helper.rb +16 -14
  847. data/lib/puppet/thread_local.rb +1 -0
  848. data/lib/puppet/transaction/additional_resource_generator.rb +5 -1
  849. data/lib/puppet/transaction/event.rb +5 -3
  850. data/lib/puppet/transaction/event_manager.rb +4 -3
  851. data/lib/puppet/transaction/persistence.rb +2 -1
  852. data/lib/puppet/transaction/report.rb +24 -16
  853. data/lib/puppet/transaction/resource_harness.rb +6 -3
  854. data/lib/puppet/transaction.rb +11 -6
  855. data/lib/puppet/trusted_external.rb +8 -4
  856. data/lib/puppet/type/component.rb +11 -5
  857. data/lib/puppet/type/exec.rb +26 -10
  858. data/lib/puppet/type/file/checksum.rb +1 -0
  859. data/lib/puppet/type/file/checksum_value.rb +3 -2
  860. data/lib/puppet/type/file/content.rb +16 -13
  861. data/lib/puppet/type/file/ctime.rb +2 -1
  862. data/lib/puppet/type/file/data_sync.rb +4 -2
  863. data/lib/puppet/type/file/ensure.rb +5 -5
  864. data/lib/puppet/type/file/group.rb +2 -1
  865. data/lib/puppet/type/file/mode.rb +4 -2
  866. data/lib/puppet/type/file/mtime.rb +2 -1
  867. data/lib/puppet/type/file/owner.rb +2 -1
  868. data/lib/puppet/type/file/selcontext.rb +2 -2
  869. data/lib/puppet/type/file/source.rb +12 -10
  870. data/lib/puppet/type/file/target.rb +2 -2
  871. data/lib/puppet/type/file/type.rb +2 -1
  872. data/lib/puppet/type/file.rb +22 -13
  873. data/lib/puppet/type/filebucket.rb +2 -1
  874. data/lib/puppet/type/group.rb +8 -8
  875. data/lib/puppet/type/notify.rb +1 -1
  876. data/lib/puppet/type/package.rb +21 -21
  877. data/lib/puppet/type/resources.rb +30 -25
  878. data/lib/puppet/type/schedule.rb +9 -10
  879. data/lib/puppet/type/service.rb +9 -7
  880. data/lib/puppet/type/stage.rb +1 -0
  881. data/lib/puppet/type/tidy.rb +9 -4
  882. data/lib/puppet/type/user.rb +28 -24
  883. data/lib/puppet/type/whit.rb +1 -1
  884. data/lib/puppet/type.rb +71 -61
  885. data/lib/puppet/util/at_fork/noop.rb +1 -0
  886. data/lib/puppet/util/at_fork/solaris.rb +2 -1
  887. data/lib/puppet/util/at_fork.rb +2 -1
  888. data/lib/puppet/util/autoload.rb +5 -0
  889. data/lib/puppet/util/backups.rb +3 -2
  890. data/lib/puppet/util/character_encoding.rb +1 -0
  891. data/lib/puppet/util/checksums.rb +11 -9
  892. data/lib/puppet/util/classgen.rb +8 -13
  893. data/lib/puppet/util/colors.rb +32 -31
  894. data/lib/puppet/util/command_line/puppet_option_parser.rb +12 -12
  895. data/lib/puppet/util/command_line/trollop.rb +693 -690
  896. data/lib/puppet/util/command_line.rb +1 -0
  897. data/lib/puppet/util/constant_inflector.rb +3 -3
  898. data/lib/puppet/util/diff.rb +14 -14
  899. data/lib/puppet/util/docs.rb +3 -0
  900. data/lib/puppet/util/errors.rb +1 -0
  901. data/lib/puppet/util/execution.rb +24 -21
  902. data/lib/puppet/util/execution_stub.rb +1 -0
  903. data/lib/puppet/util/feature.rb +1 -0
  904. data/lib/puppet/util/file_watcher.rb +2 -0
  905. data/lib/puppet/util/fileparsing.rb +2 -0
  906. data/lib/puppet/util/filetype.rb +3 -0
  907. data/lib/puppet/util/http_proxy.rb +1 -0
  908. data/lib/puppet/util/inifile.rb +5 -5
  909. data/lib/puppet/util/instance_loader.rb +2 -0
  910. data/lib/puppet/util/json.rb +1 -0
  911. data/lib/puppet/util/json_lockfile.rb +3 -1
  912. data/lib/puppet/util/ldap/connection.rb +19 -18
  913. data/lib/puppet/util/ldap/generator.rb +1 -0
  914. data/lib/puppet/util/ldap/manager.rb +3 -2
  915. data/lib/puppet/util/ldap.rb +1 -0
  916. data/lib/puppet/util/libuser.rb +1 -1
  917. data/lib/puppet/util/limits.rb +1 -0
  918. data/lib/puppet/util/lockfile.rb +1 -0
  919. data/lib/puppet/util/log/destination.rb +1 -0
  920. data/lib/puppet/util/log/destinations.rb +14 -13
  921. data/lib/puppet/util/log.rb +21 -17
  922. data/lib/puppet/util/logging.rb +18 -14
  923. data/lib/puppet/util/metaid.rb +1 -0
  924. data/lib/puppet/util/metric.rb +2 -0
  925. data/lib/puppet/util/monkey_patches.rb +19 -0
  926. data/lib/puppet/util/multi_match.rb +4 -1
  927. data/lib/puppet/util/network_device/base.rb +1 -1
  928. data/lib/puppet/util/network_device/config.rb +3 -4
  929. data/lib/puppet/util/network_device/transport/base.rb +0 -1
  930. data/lib/puppet/util/network_device/transport.rb +1 -0
  931. data/lib/puppet/util/network_device.rb +1 -0
  932. data/lib/puppet/util/package/version/debian.rb +5 -3
  933. data/lib/puppet/util/package/version/gem.rb +2 -0
  934. data/lib/puppet/util/package/version/pip.rb +7 -2
  935. data/lib/puppet/util/package/version/range/eq.rb +2 -0
  936. data/lib/puppet/util/package/version/range/gt.rb +2 -0
  937. data/lib/puppet/util/package/version/range/gt_eq.rb +2 -0
  938. data/lib/puppet/util/package/version/range/lt.rb +2 -0
  939. data/lib/puppet/util/package/version/range/lt_eq.rb +2 -0
  940. data/lib/puppet/util/package/version/range/min_max.rb +4 -0
  941. data/lib/puppet/util/package/version/range/simple.rb +1 -0
  942. data/lib/puppet/util/package/version/range.rb +3 -0
  943. data/lib/puppet/util/package/version/rpm.rb +7 -5
  944. data/lib/puppet/util/package.rb +3 -0
  945. data/lib/puppet/util/pidlock.rb +7 -7
  946. data/lib/puppet/util/platform.rb +1 -0
  947. data/lib/puppet/util/plist.rb +1 -1
  948. data/lib/puppet/util/posix.rb +8 -5
  949. data/lib/puppet/util/profiler/aggregate.rb +2 -5
  950. data/lib/puppet/util/profiler/around_profiler.rb +1 -1
  951. data/lib/puppet/util/profiler/logging.rb +1 -0
  952. data/lib/puppet/util/profiler/object_counts.rb +1 -0
  953. data/lib/puppet/util/profiler/wall_clock.rb +1 -0
  954. data/lib/puppet/util/profiler.rb +1 -0
  955. data/lib/puppet/util/provider_features.rb +5 -1
  956. data/lib/puppet/util/psych_support.rb +1 -0
  957. data/lib/puppet/util/rdoc/code_objects.rb +3 -7
  958. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +37 -50
  959. data/lib/puppet/util/rdoc/generators/template/puppet/puppet.rb +50 -68
  960. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +5 -5
  961. data/lib/puppet/util/rdoc/parser/puppet_parser_rdoc2.rb +1 -0
  962. data/lib/puppet/util/rdoc/parser.rb +1 -0
  963. data/lib/puppet/util/rdoc.rb +1 -1
  964. data/lib/puppet/util/reference.rb +1 -1
  965. data/lib/puppet/util/resource_template.rb +2 -0
  966. data/lib/puppet/util/retry_action.rb +3 -3
  967. data/lib/puppet/util/rpm_compare.rb +6 -3
  968. data/lib/puppet/util/rubygems.rb +1 -1
  969. data/lib/puppet/util/run_mode.rb +2 -1
  970. data/lib/puppet/util/selinux.rb +23 -12
  971. data/lib/puppet/util/skip_tags.rb +1 -0
  972. data/lib/puppet/util/splayer.rb +1 -0
  973. data/lib/puppet/util/storage.rb +2 -1
  974. data/lib/puppet/util/suidmanager.rb +8 -5
  975. data/lib/puppet/util/symbolic_file_mode.rb +3 -1
  976. data/lib/puppet/util/tag_set.rb +1 -0
  977. data/lib/puppet/util/tagging.rb +2 -1
  978. data/lib/puppet/util/terminal.rb +1 -0
  979. data/lib/puppet/util/user_attr.rb +1 -0
  980. data/lib/puppet/util/warnings.rb +3 -0
  981. data/lib/puppet/util/watched_file.rb +1 -0
  982. data/lib/puppet/util/watcher/change_watcher.rb +1 -0
  983. data/lib/puppet/util/watcher/periodic_watcher.rb +1 -0
  984. data/lib/puppet/util/watcher/timer.rb +1 -0
  985. data/lib/puppet/util/watcher.rb +1 -0
  986. data/lib/puppet/util/windows/access_control_entry.rb +2 -1
  987. data/lib/puppet/util/windows/access_control_list.rb +4 -3
  988. data/lib/puppet/util/windows/adsi.rb +41 -27
  989. data/lib/puppet/util/windows/com.rb +5 -3
  990. data/lib/puppet/util/windows/daemon.rb +33 -33
  991. data/lib/puppet/util/windows/error.rb +4 -3
  992. data/lib/puppet/util/windows/eventlog.rb +8 -5
  993. data/lib/puppet/util/windows/file.rb +32 -26
  994. data/lib/puppet/util/windows/monkey_patches/process.rb +0 -1
  995. data/lib/puppet/util/windows/principal.rb +27 -27
  996. data/lib/puppet/util/windows/process.rb +8 -7
  997. data/lib/puppet/util/windows/registry.rb +43 -41
  998. data/lib/puppet/util/windows/root_certs.rb +1 -0
  999. data/lib/puppet/util/windows/security.rb +43 -44
  1000. data/lib/puppet/util/windows/security_descriptor.rb +1 -0
  1001. data/lib/puppet/util/windows/service.rb +12 -1
  1002. data/lib/puppet/util/windows/sid.rb +10 -8
  1003. data/lib/puppet/util/windows/string.rb +1 -0
  1004. data/lib/puppet/util/windows/user.rb +33 -33
  1005. data/lib/puppet/util/windows.rb +6 -0
  1006. data/lib/puppet/util/yaml.rb +1 -0
  1007. data/lib/puppet/util.rb +20 -23
  1008. data/lib/puppet/vendor.rb +2 -1
  1009. data/lib/puppet/version.rb +3 -1
  1010. data/lib/puppet/x509/cert_provider.rb +13 -3
  1011. data/lib/puppet/x509/pem_store.rb +1 -0
  1012. data/lib/puppet/x509.rb +1 -0
  1013. data/lib/puppet.rb +1 -0
  1014. data/lib/puppet_pal.rb +1 -0
  1015. data/lib/puppet_x.rb +1 -0
  1016. data/locales/puppet.pot +214 -210
  1017. data/man/man5/puppet.conf.5 +3 -3
  1018. data/man/man8/puppet-agent.8 +1 -1
  1019. data/man/man8/puppet-apply.8 +1 -1
  1020. data/man/man8/puppet-catalog.8 +1 -1
  1021. data/man/man8/puppet-config.8 +1 -1
  1022. data/man/man8/puppet-describe.8 +1 -1
  1023. data/man/man8/puppet-device.8 +1 -1
  1024. data/man/man8/puppet-doc.8 +1 -1
  1025. data/man/man8/puppet-epp.8 +1 -1
  1026. data/man/man8/puppet-facts.8 +1 -1
  1027. data/man/man8/puppet-filebucket.8 +1 -1
  1028. data/man/man8/puppet-generate.8 +1 -1
  1029. data/man/man8/puppet-help.8 +1 -1
  1030. data/man/man8/puppet-lookup.8 +1 -1
  1031. data/man/man8/puppet-module.8 +1 -1
  1032. data/man/man8/puppet-node.8 +1 -1
  1033. data/man/man8/puppet-parser.8 +1 -1
  1034. data/man/man8/puppet-plugin.8 +1 -1
  1035. data/man/man8/puppet-report.8 +1 -1
  1036. data/man/man8/puppet-resource.8 +1 -1
  1037. data/man/man8/puppet-script.8 +1 -1
  1038. data/man/man8/puppet-ssl.8 +5 -1
  1039. data/man/man8/puppet.8 +2 -2
  1040. data/spec/integration/application/agent_spec.rb +13 -0
  1041. data/spec/integration/type/exec_spec.rb +13 -0
  1042. data/spec/lib/puppet_spec/puppetserver.rb +1 -0
  1043. data/spec/lib/puppet_spec/verbose.rb +15 -4
  1044. data/spec/unit/agent_spec.rb +2 -14
  1045. data/spec/unit/application/ssl_spec.rb +49 -0
  1046. data/spec/unit/daemon_spec.rb +3 -20
  1047. data/spec/unit/functions/split_spec.rb +6 -0
  1048. data/spec/unit/indirector/catalog/compiler_spec.rb +17 -0
  1049. data/spec/unit/indirector/catalog/rest_spec.rb +17 -0
  1050. data/spec/unit/info_service_spec.rb +1 -1
  1051. data/spec/unit/provider/package/appdmg_spec.rb +1 -1
  1052. data/spec/unit/provider/package/dnf_spec.rb +7 -0
  1053. data/spec/unit/provider/package/dnfmodule_spec.rb +22 -2
  1054. data/spec/unit/provider/service/systemd_spec.rb +8 -6
  1055. data/spec/unit/ssl/certificate_signer_spec.rb +17 -0
  1056. data/spec/unit/ssl/ssl_provider_spec.rb +1 -1
  1057. data/spec/unit/type/exec_spec.rb +14 -9
  1058. data/spec/unit/util/execution_spec.rb +1 -0
  1059. data/spec/unit/util/monkey_patches_spec.rb +42 -0
  1060. data/spec/unit/util/rpm_compare_spec.rb +8 -8
  1061. data/spec/unit/util/windows/adsi_spec.rb +25 -0
  1062. metadata +5 -4
  1063. data/CONTRIBUTING.md +0 -161
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative 'iterable'
3
4
  require_relative 'recursion_guard'
4
5
  require_relative 'type_acceptor'
@@ -15,7 +16,6 @@ require_relative 'puppet_object'
15
16
 
16
17
  module Puppet::Pops
17
18
  module Types
18
-
19
19
  # The EMPTY_xxx declarations is for backward compatibility. They should not be explicitly referenced
20
20
 
21
21
  # @api private
@@ -61,8 +61,10 @@ class TypedModelObject < Object
61
61
  ]
62
62
  Types.constants.each do |c|
63
63
  next if c == :PType || c == :PHostClassType
64
+
64
65
  cls = Types.const_get(c)
65
66
  next unless cls.is_a?(Class) && cls < self
67
+
66
68
  type = cls.register_ptype(loader, ir)
67
69
  types << type unless type.nil?
68
70
  end
@@ -74,7 +76,6 @@ end
74
76
  # @api public
75
77
  #
76
78
  class PAnyType < TypedModelObject
77
-
78
79
  def self.register_ptype(loader, ir)
79
80
  @type = Pcore::create_object_type(loader, ir, self, 'Pcore::AnyType', 'Any', EMPTY_HASH)
80
81
  end
@@ -133,6 +134,7 @@ class PAnyType < TypedModelObject
133
134
  return true if self.class == PAnyType
134
135
  # An empty variant may be assignable to NotUndef[T] if T is assignable to empty variant
135
136
  return _assignable?(o, guard) if is_a?(PNotUndefType) && o.types.empty?
137
+
136
138
  !o.types.empty? && o.types.all? { |vt| assignable?(vt, guard) }
137
139
  when POptionalType
138
140
  # Assignable if undef and contained type is assignable
@@ -162,7 +164,7 @@ class PAnyType < TypedModelObject
162
164
  # @param args [Array] the arguments to test
163
165
  # @param block [Proc] block, or nil if not called with a block
164
166
  # @return [Boolean] `true` if this instance is a callable that accepts the given _args_
165
- def callable_with?(args, block = nil)
167
+ def callable_with?(args, block = nil)
166
168
  false
167
169
  end
168
170
 
@@ -464,13 +466,12 @@ end
464
466
  # @api public
465
467
  #
466
468
  class PTypeType < PTypeWithContainedType
467
-
468
469
  def self.register_ptype(loader, ir)
469
470
  create_ptype(loader, ir, 'AnyType',
470
- 'type' => {
471
- KEY_TYPE => POptionalType.new(PTypeType::DEFAULT),
472
- KEY_VALUE => nil
473
- }
471
+ 'type' => {
472
+ KEY_TYPE => POptionalType.new(PTypeType::DEFAULT),
473
+ KEY_VALUE => nil
474
+ }
474
475
  )
475
476
  end
476
477
 
@@ -538,6 +539,7 @@ class PTypeType < PTypeWithContainedType
538
539
  return false unless o.is_a?(PTypeType)
539
540
  return true if @type.nil? # wide enough to handle all types
540
541
  return false if o.type.nil? # wider than t
542
+
541
543
  @type.assignable?(o.type, guard)
542
544
  end
543
545
  end
@@ -548,10 +550,10 @@ PType = PTypeType
548
550
  class PNotUndefType < PTypeWithContainedType
549
551
  def self.register_ptype(loader, ir)
550
552
  create_ptype(loader, ir, 'AnyType',
551
- 'type' => {
552
- KEY_TYPE => POptionalType.new(PTypeType::DEFAULT),
553
- KEY_VALUE => nil
554
- }
553
+ 'type' => {
554
+ KEY_TYPE => POptionalType.new(PTypeType::DEFAULT),
555
+ KEY_VALUE => nil
556
+ }
555
557
  )
556
558
  end
557
559
 
@@ -619,6 +621,7 @@ class PUndefType < PAnyType
619
621
  DEFAULT = PUndefType.new
620
622
 
621
623
  protected
624
+
622
625
  # @api private
623
626
  def _assignable?(o, guard)
624
627
  o.is_a?(PUndefType)
@@ -641,7 +644,7 @@ class PUnitType < PAnyType
641
644
  def self.new_function(type)
642
645
  @new_function ||= Puppet::Functions.create_loaded_function(:new_unit, type.loader) do
643
646
  dispatch :from_args do
644
- param 'Any', :from
647
+ param 'Any', :from
645
648
  end
646
649
 
647
650
  def from_args(from)
@@ -680,6 +683,7 @@ class PDefaultType < PAnyType
680
683
  DEFAULT = PDefaultType.new
681
684
 
682
685
  protected
686
+
683
687
  # @api private
684
688
  def _assignable?(o, guard)
685
689
  o.is_a?(PDefaultType)
@@ -759,8 +763,8 @@ end
759
763
  class PEnumType < PScalarDataType
760
764
  def self.register_ptype(loader, ir)
761
765
  create_ptype(loader, ir, 'ScalarDataType',
762
- 'values' => PArrayType.new(PStringType::NON_EMPTY),
763
- 'case_insensitive' => { 'type' => PBooleanType::DEFAULT, 'value' => false })
766
+ 'values' => PArrayType.new(PStringType::NON_EMPTY),
767
+ 'case_insensitive' => { 'type' => PBooleanType::DEFAULT, 'value' => false })
764
768
  end
765
769
 
766
770
  attr_reader :values, :case_insensitive
@@ -823,18 +827,19 @@ class PEnumType < PScalarDataType
823
827
  # @api private
824
828
  def _assignable?(o, guard)
825
829
  return true if self == o
830
+
826
831
  svalues = values
827
832
  if svalues.empty?
828
833
  return true if o.is_a?(PStringType) || o.is_a?(PEnumType) || o.is_a?(PPatternType)
829
834
  end
830
835
  case o
831
- when PStringType
832
- # if the contained string is found in the set of enums
833
- instance?(o.value, guard)
834
- when PEnumType
835
- !o.values.empty? && (case_insensitive? || !o.case_insensitive?) && o.values.all? { |s| instance?(s, guard) }
836
- else
837
- false
836
+ when PStringType
837
+ # if the contained string is found in the set of enums
838
+ instance?(o.value, guard)
839
+ when PEnumType
840
+ !o.values.empty? && (case_insensitive? || !o.case_insensitive?) && o.values.all? { |s| instance?(s, guard) }
841
+ else
842
+ false
838
843
  end
839
844
  end
840
845
  end
@@ -850,17 +855,17 @@ OPTIONAL_FRACTION = '(?:\.\d+)?'
850
855
  OPTIONAL_EXPONENT = '(?:[eE]-?\d+)?'
851
856
  FLOAT_DEC = '(?:' + INTEGER_DEC + OPTIONAL_FRACTION + OPTIONAL_EXPONENT + ')'
852
857
 
853
- INTEGER_PATTERN = '\A' + SIGN_PREFIX + '(?:' + INTEGER_DEC + '|' + INTEGER_HEX + '|' + INTEGER_OCT + '|' + INTEGER_BIN + ')\z'
858
+ INTEGER_PATTERN = '\A' + SIGN_PREFIX + '(?:' + INTEGER_DEC + '|' + INTEGER_HEX + '|' + INTEGER_OCT + '|' + INTEGER_BIN + ')\z'
854
859
  INTEGER_PATTERN_LENIENT = '\A' + SIGN_PREFIX + '(?:' + INTEGER_DEC_OR_OCT + '|' + INTEGER_HEX + '|' + INTEGER_BIN + ')\z'
855
- FLOAT_PATTERN = '\A' + SIGN_PREFIX + '(?:' + FLOAT_DEC + '|' + INTEGER_HEX + '|' + INTEGER_OCT + '|' + INTEGER_BIN + ')\z'
860
+ FLOAT_PATTERN = '\A' + SIGN_PREFIX + '(?:' + FLOAT_DEC + '|' + INTEGER_HEX + '|' + INTEGER_OCT + '|' + INTEGER_BIN + ')\z'
856
861
 
857
862
  # @api public
858
863
  #
859
864
  class PNumericType < PScalarDataType
860
865
  def self.register_ptype(loader, ir)
861
866
  create_ptype(loader, ir, 'ScalarDataType',
862
- 'from' => { KEY_TYPE => POptionalType.new(PNumericType::DEFAULT), KEY_VALUE => nil },
863
- 'to' => { KEY_TYPE => POptionalType.new(PNumericType::DEFAULT), KEY_VALUE => nil }
867
+ 'from' => { KEY_TYPE => POptionalType.new(PNumericType::DEFAULT), KEY_VALUE => nil },
868
+ 'to' => { KEY_TYPE => POptionalType.new(PNumericType::DEFAULT), KEY_VALUE => nil }
864
869
  )
865
870
  end
866
871
 
@@ -877,7 +882,7 @@ class PNumericType < PScalarDataType
877
882
  end
878
883
 
879
884
  dispatch :from_hash do
880
- param 'NamedArgs', :hash_args
885
+ param 'NamedArgs', :hash_args
881
886
  end
882
887
 
883
888
  argument_mismatch :on_error do
@@ -940,6 +945,7 @@ class PNumericType < PScalarDataType
940
945
  from = -Float::INFINITY if from.nil? || from == :default
941
946
  to = Float::INFINITY if to.nil? || to == :default
942
947
  raise ArgumentError, "'from' must be less or equal to 'to'. Got (#{from}, #{to}" if from > to
948
+
943
949
  @from = from
944
950
  @to = to
945
951
  end
@@ -998,6 +1004,7 @@ class PNumericType < PScalarDataType
998
1004
  # @api_private
999
1005
  def _assignable?(o, guard)
1000
1006
  return false unless o.is_a?(self.class)
1007
+
1001
1008
  # If o min and max are within the range of t
1002
1009
  @from <= o.numeric_from && @to >= o.numeric_to
1003
1010
  end
@@ -1033,7 +1040,7 @@ class PIntegerType < PNumericType
1033
1040
  # @return [Boolean] `true` if this range is adjacent to the other range
1034
1041
  # @api public
1035
1042
  def adjacent?(o)
1036
- o.is_a?(PIntegerType) && (@to + 1 == o.from || o.to + 1 == @from)
1043
+ o.is_a?(PIntegerType) && (@to + 1 == o.from || o.to + 1 == @from)
1037
1044
  end
1038
1045
 
1039
1046
  # Concatenates this range with another range provided that the ranges intersect or
@@ -1064,6 +1071,7 @@ class PIntegerType < PNumericType
1064
1071
  # Returns Float.Infinity if one end of the range is unbound
1065
1072
  def size
1066
1073
  return Float::INFINITY if @from == -Float::INFINITY || @to == Float::INFINITY
1074
+
1067
1075
  1+(to-from).abs
1068
1076
  end
1069
1077
 
@@ -1096,17 +1104,17 @@ class PIntegerType < PNumericType
1096
1104
  end
1097
1105
 
1098
1106
  dispatch :from_args do
1099
- param 'Convertible', :from
1107
+ param 'Convertible', :from
1100
1108
  optional_param 'Radix', :radix
1101
1109
  optional_param 'Boolean', :abs
1102
1110
  end
1103
1111
 
1104
1112
  dispatch :from_hash do
1105
- param 'NamedArgs', :hash_args
1113
+ param 'NamedArgs', :hash_args
1106
1114
  end
1107
1115
 
1108
1116
  argument_mismatch :on_error_hash do
1109
- param 'Hash', :hash_args
1117
+ param 'Hash', :hash_args
1110
1118
  end
1111
1119
 
1112
1120
  argument_mismatch :on_error do
@@ -1178,12 +1186,12 @@ class PIntegerType < PNumericType
1178
1186
  def assert_radix(radix)
1179
1187
  case radix
1180
1188
  when 2, 8, 10, 16
1189
+ # do nothing
1181
1190
  else
1182
1191
  raise ArgumentError.new(_("Illegal radix: %{radix}, expected 2, 8, 10, 16, or default") % { radix: radix })
1183
1192
  end
1184
1193
  radix
1185
1194
  end
1186
-
1187
1195
  end
1188
1196
  end
1189
1197
 
@@ -1236,7 +1244,7 @@ class PFloatType < PNumericType
1236
1244
  end
1237
1245
 
1238
1246
  dispatch :from_hash do
1239
- param 'NamedArgs', :hash_args
1247
+ param 'NamedArgs', :hash_args
1240
1248
  end
1241
1249
 
1242
1250
  argument_mismatch :on_error do
@@ -1309,10 +1317,10 @@ end
1309
1317
  class PCollectionType < PAnyType
1310
1318
  def self.register_ptype(loader, ir)
1311
1319
  create_ptype(loader, ir, 'AnyType',
1312
- 'size_type' => {
1313
- KEY_TYPE => POptionalType.new(PTypeType.new(PIntegerType::DEFAULT)),
1314
- KEY_VALUE => nil
1315
- }
1320
+ 'size_type' => {
1321
+ KEY_TYPE => POptionalType.new(PTypeType.new(PIntegerType::DEFAULT)),
1322
+ KEY_VALUE => nil
1323
+ }
1316
1324
  )
1317
1325
  end
1318
1326
 
@@ -1366,7 +1374,6 @@ class PCollectionType < PAnyType
1366
1374
  self.class == o.class && @size_type == o.size_type
1367
1375
  end
1368
1376
 
1369
-
1370
1377
  DEFAULT_SIZE = PIntegerType.new(0)
1371
1378
  ZERO_SIZE = PIntegerType.new(0, 0)
1372
1379
  NOT_EMPTY_SIZE = PIntegerType.new(1)
@@ -1378,22 +1385,22 @@ class PCollectionType < PAnyType
1378
1385
  #
1379
1386
  def _assignable?(o, guard)
1380
1387
  case o
1381
- when PCollectionType
1382
- (@size_type || DEFAULT_SIZE).assignable?(o.size_type || DEFAULT_SIZE, guard)
1383
- when PTupleType
1384
- # compute the tuple's min/max size, and check if that size matches
1385
- size_s = size_type || DEFAULT_SIZE
1386
- size_o = o.size_type
1387
- if size_o.nil?
1388
- type_count = o.types.size
1389
- size_o = PIntegerType.new(type_count, type_count)
1390
- end
1391
- size_s.assignable?(size_o)
1392
- when PStructType
1393
- from = to = o.elements.size
1394
- (@size_type || DEFAULT_SIZE).assignable?(PIntegerType.new(from, to), guard)
1395
- else
1396
- false
1388
+ when PCollectionType
1389
+ (@size_type || DEFAULT_SIZE).assignable?(o.size_type || DEFAULT_SIZE, guard)
1390
+ when PTupleType
1391
+ # compute the tuple's min/max size, and check if that size matches
1392
+ size_s = size_type || DEFAULT_SIZE
1393
+ size_o = o.size_type
1394
+ if size_o.nil?
1395
+ type_count = o.types.size
1396
+ size_o = PIntegerType.new(type_count, type_count)
1397
+ end
1398
+ size_s.assignable?(size_o)
1399
+ when PStructType
1400
+ from = to = o.elements.size
1401
+ (@size_type || DEFAULT_SIZE).assignable?(PIntegerType.new(from, to), guard)
1402
+ else
1403
+ false
1397
1404
  end
1398
1405
  end
1399
1406
  end
@@ -1401,10 +1408,10 @@ end
1401
1408
  class PIterableType < PTypeWithContainedType
1402
1409
  def self.register_ptype(loader, ir)
1403
1410
  create_ptype(loader, ir, 'AnyType',
1404
- 'type' => {
1405
- KEY_TYPE => POptionalType.new(PTypeType::DEFAULT),
1406
- KEY_VALUE => nil
1407
- }
1411
+ 'type' => {
1412
+ KEY_TYPE => POptionalType.new(PTypeType::DEFAULT),
1413
+ KEY_VALUE => nil
1414
+ }
1408
1415
  )
1409
1416
  end
1410
1417
 
@@ -1461,10 +1468,10 @@ end
1461
1468
  class PIteratorType < PTypeWithContainedType
1462
1469
  def self.register_ptype(loader, ir)
1463
1470
  create_ptype(loader, ir, 'AnyType',
1464
- 'type' => {
1465
- KEY_TYPE => POptionalType.new(PTypeType::DEFAULT),
1466
- KEY_VALUE => nil
1467
- }
1471
+ 'type' => {
1472
+ KEY_TYPE => POptionalType.new(PTypeType::DEFAULT),
1473
+ KEY_VALUE => nil
1474
+ }
1468
1475
  )
1469
1476
  end
1470
1477
 
@@ -1499,10 +1506,10 @@ end
1499
1506
  class PStringType < PScalarDataType
1500
1507
  def self.register_ptype(loader, ir)
1501
1508
  create_ptype(loader, ir, 'ScalarDataType',
1502
- 'size_type_or_value' => {
1503
- KEY_TYPE => POptionalType.new(PVariantType.new([PStringType::DEFAULT, PTypeType.new(PIntegerType::DEFAULT)])),
1504
- KEY_VALUE => nil
1505
- })
1509
+ 'size_type_or_value' => {
1510
+ KEY_TYPE => POptionalType.new(PVariantType.new([PStringType::DEFAULT, PTypeType.new(PIntegerType::DEFAULT)])),
1511
+ KEY_VALUE => nil
1512
+ })
1506
1513
  end
1507
1514
 
1508
1515
  attr_reader :size_type_or_value
@@ -1510,7 +1517,7 @@ class PStringType < PScalarDataType
1510
1517
  def initialize(size_type_or_value, deprecated_multi_args = EMPTY_ARRAY)
1511
1518
  unless deprecated_multi_args.empty?
1512
1519
  if Puppet[:strict] != :off
1513
- #TRANSLATORS 'PStringType#initialize' is a class and method name and should not be translated
1520
+ # TRANSLATORS 'PStringType#initialize' is a class and method name and should not be translated
1514
1521
  Puppet.warn_once('deprecations', "PStringType#initialize_multi_args",
1515
1522
  _("Passing more than one argument to PStringType#initialize is deprecated"))
1516
1523
  end
@@ -1565,7 +1572,7 @@ class PStringType < PScalarDataType
1565
1572
  # @api private
1566
1573
  def values
1567
1574
  if Puppet[:strict] != :off
1568
- #TRANSLATORS 'PStringType#values' and '#value' are classes and method names and should not be translated
1575
+ # TRANSLATORS 'PStringType#values' and '#value' are classes and method names and should not be translated
1569
1576
  Puppet.warn_once('deprecations', "PStringType#values", _("Method PStringType#values is deprecated. Use #value instead"))
1570
1577
  end
1571
1578
  @value.is_a?(String) ? [@value] : EMPTY_ARRAY
@@ -1673,13 +1680,12 @@ end
1673
1680
  class PRegexpType < PScalarType
1674
1681
  def self.register_ptype(loader, ir)
1675
1682
  create_ptype(loader, ir, 'ScalarType',
1676
- 'pattern' => {
1677
- KEY_TYPE => PVariantType.new([PUndefType::DEFAULT, PStringType::DEFAULT, PRegexpType::DEFAULT]),
1678
- KEY_VALUE => nil
1679
- })
1683
+ 'pattern' => {
1684
+ KEY_TYPE => PVariantType.new([PUndefType::DEFAULT, PStringType::DEFAULT, PRegexpType::DEFAULT]),
1685
+ KEY_VALUE => nil
1686
+ })
1680
1687
  end
1681
1688
 
1682
-
1683
1689
  # Returns a new function that produces a Regexp instance
1684
1690
  #
1685
1691
  def self.new_function(type)
@@ -1713,7 +1719,7 @@ class PRegexpType < PScalarType
1713
1719
  if options == 0
1714
1720
  rx_string
1715
1721
  else
1716
- bld = String.new('(?')
1722
+ bld = '(?'.dup
1717
1723
  bld << 'i' if (options & Regexp::IGNORECASE) != 0
1718
1724
  bld << 'm' if (options & Regexp::MULTILINE) != 0
1719
1725
  bld << 'x' if (options & Regexp::EXTENDED) != 0
@@ -1805,6 +1811,7 @@ class PPatternType < PScalarDataType
1805
1811
  #
1806
1812
  def _assignable?(o, guard)
1807
1813
  return true if self == o
1814
+
1808
1815
  case o
1809
1816
  when PStringType
1810
1817
  v = o.value
@@ -1869,7 +1876,7 @@ class PBooleanType < PScalarDataType
1869
1876
  def self.new_function(type)
1870
1877
  @new_function ||= Puppet::Functions.create_loaded_function(:new_boolean, type.loader) do
1871
1878
  dispatch :from_args do
1872
- param "Variant[Integer, Float, Boolean, Enum['false','true','yes','no','y','n',true]]", :from
1879
+ param "Variant[Integer, Float, Boolean, Enum['false','true','yes','no','y','n',true]]", :from
1873
1880
  end
1874
1881
 
1875
1882
  argument_mismatch :on_error do
@@ -1879,10 +1886,8 @@ class PBooleanType < PScalarDataType
1879
1886
  def from_args(from)
1880
1887
  from = from.downcase if from.is_a?(String)
1881
1888
  case from
1882
- when Float
1883
- from != 0.0
1884
- when Integer
1885
- from != 0
1889
+ when Float, Integer
1890
+ !from.zero?
1886
1891
  when false, 'false', 'no', 'n'
1887
1892
  false
1888
1893
  else
@@ -1921,8 +1926,8 @@ end
1921
1926
  class PStructElement < TypedModelObject
1922
1927
  def self.register_ptype(loader, ir)
1923
1928
  @type = Pcore::create_object_type(loader, ir, self, 'Pcore::StructElement', nil,
1924
- 'key_type' => PTypeType::DEFAULT,
1925
- 'value_type' => PTypeType::DEFAULT)
1929
+ 'key_type' => PTypeType::DEFAULT,
1930
+ 'value_type' => PTypeType::DEFAULT)
1926
1931
  end
1927
1932
 
1928
1933
  attr_accessor :key_type, :value_type
@@ -2026,9 +2031,11 @@ class PStructType < PAnyType
2026
2031
  end
2027
2032
  end
2028
2033
 
2034
+ # rubocop:disable Naming/MemoizedInstanceVariableName
2029
2035
  def hashed_elements
2030
2036
  @hashed ||= @elements.reduce({}) {|memo, e| memo[e.name] = e; memo }
2031
2037
  end
2038
+ # rubocop:enable Naming/MemoizedInstanceVariableName
2032
2039
 
2033
2040
  def hash
2034
2041
  @elements.hash
@@ -2044,9 +2051,9 @@ class PStructType < PAnyType
2044
2051
  else
2045
2052
  PIterableType.new(
2046
2053
  PTupleType.new([
2047
- PVariantType.maybe_create(@elements.map {|se| se.key_type }),
2048
- PVariantType.maybe_create(@elements.map {|se| se.value_type })],
2049
- PHashType::KEY_PAIR_TUPLE_SIZE))
2054
+ PVariantType.maybe_create(@elements.map {|se| se.key_type }),
2055
+ PVariantType.maybe_create(@elements.map {|se| se.value_type })],
2056
+ PHashType::KEY_PAIR_TUPLE_SIZE))
2050
2057
  end
2051
2058
  end
2052
2059
 
@@ -2071,6 +2078,7 @@ class PStructType < PAnyType
2071
2078
  def instance?(o, guard = nil)
2072
2079
  # The inferred type of a class derived from Hash is either Runtime or Object. It's not assignable to the Struct type.
2073
2080
  return false unless o.instance_of?(Hash)
2081
+
2074
2082
  matched = 0
2075
2083
  @elements.all? do |e|
2076
2084
  key = e.name
@@ -2146,11 +2154,11 @@ class PTupleType < PAnyType
2146
2154
 
2147
2155
  def self.register_ptype(loader, ir)
2148
2156
  create_ptype(loader, ir, 'AnyType',
2149
- 'types' => PArrayType.new(PTypeType::DEFAULT),
2150
- 'size_type' => {
2151
- KEY_TYPE => POptionalType.new(PTypeType.new(PIntegerType::DEFAULT)),
2152
- KEY_VALUE => nil
2153
- }
2157
+ 'types' => PArrayType.new(PTypeType::DEFAULT),
2158
+ 'size_type' => {
2159
+ KEY_TYPE => POptionalType.new(PTypeType.new(PIntegerType::DEFAULT)),
2160
+ KEY_VALUE => nil
2161
+ }
2154
2162
  )
2155
2163
  end
2156
2164
 
@@ -2244,6 +2252,7 @@ class PTupleType < PAnyType
2244
2252
  def instance?(o, guard = nil)
2245
2253
  # The inferred type of a class derived from Array is either Runtime or Object. It's not assignable to the Tuple type.
2246
2254
  return false unless o.instance_of?(Array)
2255
+
2247
2256
  if @size_type
2248
2257
  return false unless @size_type.instance?(o.size, guard)
2249
2258
  else
@@ -2280,6 +2289,7 @@ class PTupleType < PAnyType
2280
2289
  if @size_type.nil?
2281
2290
  return [1, 1]
2282
2291
  end
2292
+
2283
2293
  types_size = @types.size
2284
2294
  from, to = @size_type.range
2285
2295
  min = from - (types_size-1)
@@ -2310,15 +2320,18 @@ class PTupleType < PAnyType
2310
2320
  def _assignable?(o, guard)
2311
2321
  return true if self == o
2312
2322
  return false unless o.is_a?(PTupleType) || o.is_a?(PArrayType)
2323
+
2313
2324
  s_types = types
2314
2325
  size_s = size_type || PIntegerType.new(*size_range)
2315
2326
 
2316
2327
  if o.is_a?(PTupleType)
2317
2328
  size_o = o.size_type || PIntegerType.new(*o.size_range)
2318
2329
  return false unless size_s.assignable?(size_o, guard)
2330
+
2319
2331
  unless s_types.empty?
2320
2332
  o_types = o.types
2321
2333
  return size_s.numeric_from == 0 if o_types.empty?
2334
+
2322
2335
  o_types.size.times do |index|
2323
2336
  return false unless (s_types[index] || s_types[-1]).assignable?(o_types[index], guard)
2324
2337
  end
@@ -2326,12 +2339,14 @@ class PTupleType < PAnyType
2326
2339
  else
2327
2340
  size_o = o.size_type || PCollectionType::DEFAULT_SIZE
2328
2341
  return false unless size_s.assignable?(size_o, guard)
2342
+
2329
2343
  unless s_types.empty?
2330
2344
  o_entry = o.element_type
2331
2345
  # Array of anything can not be assigned (unless tuple is tuple of anything) - this case
2332
2346
  # was handled at the top of this method.
2333
2347
  #
2334
2348
  return false if o_entry.nil?
2349
+
2335
2350
  [s_types.size, size_o.range[1]].min.times { |index| return false unless (s_types[index] || s_types[-1]).assignable?(o_entry, guard) }
2336
2351
  end
2337
2352
  end
@@ -2344,18 +2359,18 @@ end
2344
2359
  class PCallableType < PAnyType
2345
2360
  def self.register_ptype(loader, ir)
2346
2361
  create_ptype(loader, ir, 'AnyType',
2347
- 'param_types' => {
2348
- KEY_TYPE => POptionalType.new(PTypeType.new(PTupleType::DEFAULT)),
2349
- KEY_VALUE => nil
2350
- },
2351
- 'block_type' => {
2352
- KEY_TYPE => POptionalType.new(PTypeType.new(PCallableType::DEFAULT)),
2353
- KEY_VALUE => nil
2354
- },
2355
- 'return_type' => {
2356
- KEY_TYPE => POptionalType.new(PTypeType::DEFAULT),
2357
- KEY_VALUE => PAnyType::DEFAULT
2358
- }
2362
+ 'param_types' => {
2363
+ KEY_TYPE => POptionalType.new(PTypeType.new(PTupleType::DEFAULT)),
2364
+ KEY_VALUE => nil
2365
+ },
2366
+ 'block_type' => {
2367
+ KEY_TYPE => POptionalType.new(PTypeType.new(PCallableType::DEFAULT)),
2368
+ KEY_VALUE => nil
2369
+ },
2370
+ 'return_type' => {
2371
+ KEY_TYPE => POptionalType.new(PTypeType::DEFAULT),
2372
+ KEY_VALUE => PAnyType::DEFAULT
2373
+ }
2359
2374
  )
2360
2375
  end
2361
2376
 
@@ -2422,6 +2437,7 @@ class PCallableType < PAnyType
2422
2437
  # nil param_types and compatible return type means other Callable is assignable
2423
2438
  return true if @param_types.nil?
2424
2439
  return false unless @param_types.instance?(args)
2440
+
2425
2441
  if @block_type.nil?
2426
2442
  block == nil
2427
2443
  else
@@ -2494,7 +2510,8 @@ class PCallableType < PAnyType
2494
2510
  # (it's lower bound), not its upper bound
2495
2511
  other_param_types = o.param_types
2496
2512
 
2497
- return false if other_param_types.nil? || !other_param_types.assignable?(@param_types, guard)
2513
+ return false if other_param_types.nil? || !other_param_types.assignable?(@param_types, guard)
2514
+
2498
2515
  # names are ignored, they are just information
2499
2516
  # Blocks must be compatible
2500
2517
  this_block_t = @block_type || PUndefType::DEFAULT
@@ -2506,13 +2523,12 @@ end
2506
2523
  # @api public
2507
2524
  #
2508
2525
  class PArrayType < PCollectionType
2509
-
2510
2526
  def self.register_ptype(loader, ir)
2511
2527
  create_ptype(loader, ir, 'CollectionType',
2512
- 'element_type' => {
2513
- KEY_TYPE => POptionalType.new(PTypeType::DEFAULT),
2514
- KEY_VALUE => PAnyType::DEFAULT
2515
- }
2528
+ 'element_type' => {
2529
+ KEY_TYPE => POptionalType.new(PTypeType::DEFAULT),
2530
+ KEY_VALUE => PAnyType::DEFAULT
2531
+ }
2516
2532
  )
2517
2533
  end
2518
2534
 
@@ -2575,6 +2591,7 @@ class PArrayType < PCollectionType
2575
2591
  # The inferred type of a class derived from Array is either Runtime or Object. It's not assignable to the Array type.
2576
2592
  return false unless o.instance_of?(Array)
2577
2593
  return false unless o.all? {|element| @element_type.instance?(element, guard) }
2594
+
2578
2595
  size_t = size_type
2579
2596
  size_t.nil? || size_t.instance?(o.size, guard)
2580
2597
  end
@@ -2587,7 +2604,6 @@ class PArrayType < PCollectionType
2587
2604
  #
2588
2605
  def self.new_function(type)
2589
2606
  @new_function ||= Puppet::Functions.create_loaded_function(:new_array, type.loader) do
2590
-
2591
2607
  dispatch :to_array do
2592
2608
  param 'Variant[Array,Hash,Binary,Iterable]', :from
2593
2609
  optional_param 'Boolean[false]', :wrap
@@ -2656,17 +2672,16 @@ end
2656
2672
  # @api public
2657
2673
  #
2658
2674
  class PHashType < PCollectionType
2659
-
2660
2675
  def self.register_ptype(loader, ir)
2661
2676
  create_ptype(loader, ir, 'CollectionType',
2662
- 'key_type' => {
2663
- KEY_TYPE => POptionalType.new(PTypeType::DEFAULT),
2664
- KEY_VALUE => PAnyType::DEFAULT
2665
- },
2666
- 'value_type' => {
2667
- KEY_TYPE => POptionalType.new(PTypeType::DEFAULT),
2668
- KEY_VALUE => PAnyType::DEFAULT
2669
- }
2677
+ 'key_type' => {
2678
+ KEY_TYPE => POptionalType.new(PTypeType::DEFAULT),
2679
+ KEY_VALUE => PAnyType::DEFAULT
2680
+ },
2681
+ 'value_type' => {
2682
+ KEY_TYPE => POptionalType.new(PTypeType::DEFAULT),
2683
+ KEY_VALUE => PAnyType::DEFAULT
2684
+ }
2670
2685
  )
2671
2686
  end
2672
2687
 
@@ -2691,9 +2706,9 @@ class PHashType < PCollectionType
2691
2706
 
2692
2707
  def element_type
2693
2708
  if Puppet[:strict] != :off
2694
- #TRANSLATOR 'Puppet::Pops::Types::PHashType#element_type' and '#value_type' are class and method names and should not be translated
2709
+ # TRANSLATOR 'Puppet::Pops::Types::PHashType#element_type' and '#value_type' are class and method names and should not be translated
2695
2710
  Puppet.warn_once('deprecations', 'Puppet::Pops::Types::PHashType#element_type',
2696
- _('Puppet::Pops::Types::PHashType#element_type is deprecated, use #value_type instead'))
2711
+ _('Puppet::Pops::Types::PHashType#element_type is deprecated, use #value_type instead'))
2697
2712
  end
2698
2713
  @value_type
2699
2714
  end
@@ -2727,6 +2742,7 @@ class PHashType < PCollectionType
2727
2742
  def instance?(o, guard = nil)
2728
2743
  # The inferred type of a class derived from Hash is either Runtime or Object. It's not assignable to the Hash type.
2729
2744
  return false unless o.instance_of?(Hash)
2745
+
2730
2746
  if o.keys.all? {|key| @key_type.instance?(key, guard) } && o.values.all? {|value| @value_type.instance?(value, guard) }
2731
2747
  size_t = size_type
2732
2748
  size_t.nil? || size_t.instance?(o.size, guard)
@@ -2763,6 +2779,7 @@ class PHashType < PCollectionType
2763
2779
 
2764
2780
  def self.array_as_hash(value)
2765
2781
  return value unless value.is_a?(Array)
2782
+
2766
2783
  result = {}
2767
2784
  value.each_with_index {|v, idx| result[idx] = array_as_hash(v) }
2768
2785
  result
@@ -2784,11 +2801,11 @@ class PHashType < PCollectionType
2784
2801
  end
2785
2802
 
2786
2803
  dispatch :from_tuples do
2787
- param 'KeyValueArray', :from
2804
+ param 'KeyValueArray', :from
2788
2805
  end
2789
2806
 
2790
2807
  dispatch :from_array do
2791
- param 'Any', :from
2808
+ param 'Any', :from
2792
2809
  end
2793
2810
 
2794
2811
  def from_tuples(tuple_array)
@@ -2799,6 +2816,7 @@ class PHashType < PCollectionType
2799
2816
  if build_option.nil?
2800
2817
  return from_tuples(tuple_array)
2801
2818
  end
2819
+
2802
2820
  # only remaining possible options is 'tree' or 'hash_tree'
2803
2821
 
2804
2822
  all_hashes = build_option == 'hash_tree'
@@ -2832,6 +2850,7 @@ class PHashType < PCollectionType
2832
2850
  unless from.size % 2 == 0
2833
2851
  raise TypeConversionError.new(_('odd number of arguments for Hash'))
2834
2852
  end
2853
+
2835
2854
  Hash[*from]
2836
2855
  end
2837
2856
  when Hash
@@ -2863,6 +2882,7 @@ class PHashType < PCollectionType
2863
2882
  size_s = size_type
2864
2883
  return true if (size_s.nil? || size_s.from == 0) && o.is_the_empty_hash?
2865
2884
  return false unless @key_type.assignable?(o.key_type, guard) && @value_type.assignable?(o.value_type, guard)
2885
+
2866
2886
  super
2867
2887
  when PStructType
2868
2888
  # hash must accept String as key type
@@ -2995,6 +3015,7 @@ class PVariantType < PAnyType
2995
3015
  @types.reduce(-1) do |memo, type|
2996
3016
  ri = type.really_instance?(o, guard)
2997
3017
  break ri if ri > 0
3018
+
2998
3019
  ri > memo ? ri : memo
2999
3020
  end
3000
3021
  end
@@ -3018,6 +3039,7 @@ class PVariantType < PAnyType
3018
3039
  return super unless o.is_a?(PVariantType)
3019
3040
  # If empty, all Variant types match irrespective of the types they hold (including being empty)
3020
3041
  return true if types.empty?
3042
+
3021
3043
  # Since this variant is not empty, an empty Variant cannot match, because it matches nothing
3022
3044
  # otherwise all types in o must be assignable to this
3023
3045
  !o.types.empty? && o.types.all? { |vt| super(vt, guard) }
@@ -3038,7 +3060,7 @@ class PVariantType < PAnyType
3038
3060
  not_undefs = parts[0]
3039
3061
  if not_undefs.size > 1
3040
3062
  others = parts[1]
3041
- others << PNotUndefType.new(PVariantType.maybe_create(not_undefs.map { |not_undef| not_undef.type }).normalize)
3063
+ others << PNotUndefType.new(PVariantType.maybe_create(not_undefs.map { |not_undef| not_undef.type }).normalize)
3042
3064
  array = others
3043
3065
  end
3044
3066
  end
@@ -3053,7 +3075,7 @@ class PVariantType < PAnyType
3053
3075
  enums = parts[0]
3054
3076
  if enums.size > 1
3055
3077
  others = parts[1]
3056
- others << PEnumType.new(enums.map { |enum| enum.is_a?(PStringType) ? enum.value : enum.values }.flatten.uniq)
3078
+ others << PEnumType.new(enums.map { |enum| enum.is_a?(PStringType) ? enum.value : enum.values }.flatten.uniq)
3057
3079
  array = others
3058
3080
  end
3059
3081
  end
@@ -3067,7 +3089,7 @@ class PVariantType < PAnyType
3067
3089
  values = []
3068
3090
  enums.each { |enum| enum.values.each { |value| values << value.downcase }}
3069
3091
  values.uniq!
3070
- others << PEnumType.new(values, true)
3092
+ others << PEnumType.new(values, true)
3071
3093
  array = others
3072
3094
  end
3073
3095
  end
@@ -3081,7 +3103,7 @@ class PVariantType < PAnyType
3081
3103
  patterns = parts[0]
3082
3104
  if patterns.size > 1
3083
3105
  others = parts[1]
3084
- others << PPatternType.new(patterns.map { |pattern| pattern.patterns }.flatten.uniq)
3106
+ others << PPatternType.new(patterns.map { |pattern| pattern.patterns }.flatten.uniq)
3085
3107
  array = others
3086
3108
  end
3087
3109
  end
@@ -3143,6 +3165,7 @@ class PCatalogEntryType < PAnyType
3143
3165
  end
3144
3166
 
3145
3167
  protected
3168
+
3146
3169
  # @api private
3147
3170
  def _assignable?(o, guard)
3148
3171
  o.is_a?(PCatalogEntryType)
@@ -3157,10 +3180,10 @@ class PClassType < PCatalogEntryType
3157
3180
 
3158
3181
  def self.register_ptype(loader, ir)
3159
3182
  create_ptype(loader, ir, 'CatalogEntryType',
3160
- 'class_name' => {
3161
- KEY_TYPE => POptionalType.new(PStringType::NON_EMPTY),
3162
- KEY_VALUE => nil
3163
- }
3183
+ 'class_name' => {
3184
+ KEY_TYPE => POptionalType.new(PStringType::NON_EMPTY),
3185
+ KEY_VALUE => nil
3186
+ }
3164
3187
  )
3165
3188
  end
3166
3189
 
@@ -3171,6 +3194,7 @@ class PClassType < PCatalogEntryType
3171
3194
  def hash
3172
3195
  11 ^ @class_name.hash
3173
3196
  end
3197
+
3174
3198
  def eql?(o)
3175
3199
  self.class == o.class && @class_name == o.class_name
3176
3200
  end
@@ -3184,6 +3208,7 @@ class PClassType < PCatalogEntryType
3184
3208
  return false unless o.is_a?(PClassType)
3185
3209
  # Class = Class[name}, Class[name] != Class
3186
3210
  return true if @class_name.nil?
3211
+
3187
3212
  # Class[name] = Class[name]
3188
3213
  @class_name == o.class_name
3189
3214
  end
@@ -3192,22 +3217,20 @@ end
3192
3217
  # For backward compatibility
3193
3218
  PHostClassType = PClassType
3194
3219
 
3195
-
3196
3220
  # Represents a Resource Type in the Puppet Language
3197
3221
  # @api public
3198
3222
  #
3199
3223
  class PResourceType < PCatalogEntryType
3200
-
3201
3224
  def self.register_ptype(loader, ir)
3202
3225
  create_ptype(loader, ir, 'CatalogEntryType',
3203
- 'type_name' => {
3204
- KEY_TYPE => POptionalType.new(PStringType::NON_EMPTY),
3205
- KEY_VALUE => nil
3206
- },
3207
- 'title' => {
3208
- KEY_TYPE => POptionalType.new(PStringType::NON_EMPTY),
3209
- KEY_VALUE => nil
3210
- }
3226
+ 'type_name' => {
3227
+ KEY_TYPE => POptionalType.new(PStringType::NON_EMPTY),
3228
+ KEY_VALUE => nil
3229
+ },
3230
+ 'title' => {
3231
+ KEY_TYPE => POptionalType.new(PStringType::NON_EMPTY),
3232
+ KEY_VALUE => nil
3233
+ }
3211
3234
  )
3212
3235
  end
3213
3236
 
@@ -3242,13 +3265,12 @@ end
3242
3265
  # @api public
3243
3266
  #
3244
3267
  class POptionalType < PTypeWithContainedType
3245
-
3246
3268
  def self.register_ptype(loader, ir)
3247
3269
  create_ptype(loader, ir, 'AnyType',
3248
- 'type' => {
3249
- KEY_TYPE => POptionalType.new(PTypeType::DEFAULT),
3250
- KEY_VALUE => nil
3251
- }
3270
+ 'type' => {
3271
+ KEY_TYPE => POptionalType.new(PTypeType::DEFAULT),
3272
+ KEY_VALUE => nil
3273
+ }
3252
3274
  )
3253
3275
  end
3254
3276
 
@@ -3257,7 +3279,7 @@ class POptionalType < PTypeWithContainedType
3257
3279
  end
3258
3280
 
3259
3281
  def kind_of_callable?(optional=true, guard = nil)
3260
- optional && !@type.nil? && @type.kind_of_callable?(optional, guard)
3282
+ optional && !@type.nil? && @type.kind_of_callable?(optional, guard)
3261
3283
  end
3262
3284
 
3263
3285
  def instance?(o, guard = nil)
@@ -3293,6 +3315,7 @@ class POptionalType < PTypeWithContainedType
3293
3315
  def _assignable?(o, guard)
3294
3316
  return true if o.is_a?(PUndefType)
3295
3317
  return true if @type.nil?
3318
+
3296
3319
  if o.is_a?(POptionalType)
3297
3320
  @type.assignable?(o.optional_type, guard)
3298
3321
  else
@@ -3302,7 +3325,6 @@ class POptionalType < PTypeWithContainedType
3302
3325
  end
3303
3326
 
3304
3327
  class PTypeReferenceType < PAnyType
3305
-
3306
3328
  def self.register_ptype(loader, ir)
3307
3329
  create_ptype(loader, ir, 'AnyType', 'type_string' => PStringType::NON_EMPTY)
3308
3330
  end
@@ -3351,15 +3373,14 @@ end
3351
3373
  #
3352
3374
  # @api public
3353
3375
  class PTypeAliasType < PAnyType
3354
-
3355
3376
  def self.register_ptype(loader, ir)
3356
3377
  create_ptype(loader, ir, 'AnyType',
3357
- 'name' => PStringType::NON_EMPTY,
3358
- 'type_expr' => PAnyType::DEFAULT,
3359
- 'resolved_type' => {
3360
- KEY_TYPE => POptionalType.new(PTypeType::DEFAULT),
3361
- KEY_VALUE => nil
3362
- }
3378
+ 'name' => PStringType::NON_EMPTY,
3379
+ 'type_expr' => PAnyType::DEFAULT,
3380
+ 'resolved_type' => {
3381
+ KEY_TYPE => POptionalType.new(PTypeType::DEFAULT),
3382
+ KEY_VALUE => nil
3383
+ }
3363
3384
  )
3364
3385
  end
3365
3386
 
@@ -3391,6 +3412,7 @@ class PTypeAliasType < PAnyType
3391
3412
  # @raise [Puppet::Error] unless the type has been resolved prior to calling this method
3392
3413
  def resolved_type
3393
3414
  raise Puppet::Error, "Reference to unresolved type #{@name}" unless @resolved_type
3415
+
3394
3416
  @resolved_type
3395
3417
  end
3396
3418
 
@@ -3453,6 +3475,7 @@ class PTypeAliasType < PAnyType
3453
3475
 
3454
3476
  def set_self_recursion_status
3455
3477
  return if @self_recursion || @resolved_type.is_a?(PTypeReferenceType)
3478
+
3456
3479
  @self_recursion = true
3457
3480
  guard = RecursionGuard.new
3458
3481
  accept(NoopTypeAcceptor::INSTANCE, guard)
@@ -3490,6 +3513,7 @@ class PTypeAliasType < PAnyType
3490
3513
  unless real_type_asserter.other_type_detected?
3491
3514
  raise ArgumentError, "Type alias '#{name}' cannot be resolved to a real type"
3492
3515
  end
3516
+
3493
3517
  @self_recursion = guard.recursive_this?(self)
3494
3518
  # All aliases involved must re-check status since this alias is now resolved
3495
3519
  if @self_recursion
@@ -3587,6 +3611,7 @@ class PTypeAliasType < PAnyType
3587
3611
  resolved_types = @resolved_type.types
3588
3612
  real_types = resolved_types.select do |type|
3589
3613
  next false if type == self
3614
+
3590
3615
  real_type_asserter = AssertOtherTypeAcceptor.new
3591
3616
  type.accept(real_type_asserter, RecursionGuard.new)
3592
3617
  real_type_asserter.other_type_detected?