puppet 8.3.1-x86-mingw32 → 8.4.0-x86-mingw32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1052) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +51 -43
  3. data/README.md +4 -4
  4. data/Rakefile +0 -27
  5. data/examples/enc/regexp_nodes/regexp_nodes.rb +1 -1
  6. data/ext/windows/service/daemon.rb +4 -5
  7. data/lib/hiera/puppet_function.rb +3 -2
  8. data/lib/hiera/scope.rb +2 -2
  9. data/lib/hiera_puppet.rb +1 -3
  10. data/lib/puppet/agent/disabler.rb +2 -1
  11. data/lib/puppet/agent/locker.rb +1 -2
  12. data/lib/puppet/agent.rb +2 -1
  13. data/lib/puppet/application/agent.rb +292 -291
  14. data/lib/puppet/application/apply.rb +143 -139
  15. data/lib/puppet/application/catalog.rb +1 -0
  16. data/lib/puppet/application/config.rb +1 -0
  17. data/lib/puppet/application/describe.rb +53 -55
  18. data/lib/puppet/application/device.rb +150 -150
  19. data/lib/puppet/application/doc.rb +60 -59
  20. data/lib/puppet/application/epp.rb +1 -0
  21. data/lib/puppet/application/face_base.rb +8 -7
  22. data/lib/puppet/application/facts.rb +1 -0
  23. data/lib/puppet/application/filebucket.rb +186 -184
  24. data/lib/puppet/application/generate.rb +1 -0
  25. data/lib/puppet/application/help.rb +1 -0
  26. data/lib/puppet/application/indirection_base.rb +1 -0
  27. data/lib/puppet/application/lookup.rb +168 -171
  28. data/lib/puppet/application/module.rb +1 -0
  29. data/lib/puppet/application/node.rb +1 -0
  30. data/lib/puppet/application/parser.rb +1 -0
  31. data/lib/puppet/application/plugin.rb +1 -0
  32. data/lib/puppet/application/report.rb +1 -0
  33. data/lib/puppet/application/resource.rb +111 -108
  34. data/lib/puppet/application/script.rb +92 -93
  35. data/lib/puppet/application/ssl.rb +89 -88
  36. data/lib/puppet/application.rb +9 -8
  37. data/lib/puppet/application_support.rb +1 -1
  38. data/lib/puppet/coercion.rb +3 -2
  39. data/lib/puppet/compilable_resource_type.rb +1 -0
  40. data/lib/puppet/concurrent/lock.rb +1 -2
  41. data/lib/puppet/concurrent/synchronized.rb +1 -2
  42. data/lib/puppet/concurrent/thread_local_singleton.rb +1 -0
  43. data/lib/puppet/concurrent.rb +1 -0
  44. data/lib/puppet/configurer/downloader.rb +1 -1
  45. data/lib/puppet/configurer/fact_handler.rb +2 -1
  46. data/lib/puppet/configurer/plugin_handler.rb +1 -0
  47. data/lib/puppet/configurer.rb +17 -13
  48. data/lib/puppet/confine/any.rb +1 -0
  49. data/lib/puppet/confine/boolean.rb +1 -0
  50. data/lib/puppet/confine/exists.rb +1 -0
  51. data/lib/puppet/confine/false.rb +1 -0
  52. data/lib/puppet/confine/feature.rb +1 -0
  53. data/lib/puppet/confine/true.rb +1 -0
  54. data/lib/puppet/confine/variable.rb +1 -0
  55. data/lib/puppet/confine.rb +2 -0
  56. data/lib/puppet/confine_collection.rb +3 -1
  57. data/lib/puppet/confiner.rb +1 -0
  58. data/lib/puppet/context/trusted_information.rb +1 -0
  59. data/lib/puppet/context.rb +1 -0
  60. data/lib/puppet/daemon.rb +4 -1
  61. data/lib/puppet/data_binding.rb +2 -1
  62. data/lib/puppet/datatypes/error.rb +2 -1
  63. data/lib/puppet/datatypes/impl/error.rb +1 -0
  64. data/lib/puppet/datatypes.rb +5 -1
  65. data/lib/puppet/defaults.rb +19 -18
  66. data/lib/puppet/environments.rb +3 -2
  67. data/lib/puppet/error.rb +9 -7
  68. data/lib/puppet/etc.rb +6 -3
  69. data/lib/puppet/external/dot.rb +12 -31
  70. data/lib/puppet/face/catalog/select.rb +2 -1
  71. data/lib/puppet/face/catalog.rb +3 -2
  72. data/lib/puppet/face/config.rb +18 -20
  73. data/lib/puppet/face/epp.rb +6 -6
  74. data/lib/puppet/face/facts.rb +4 -3
  75. data/lib/puppet/face/generate.rb +2 -0
  76. data/lib/puppet/face/help.rb +8 -7
  77. data/lib/puppet/face/module/changes.rb +2 -0
  78. data/lib/puppet/face/module/install.rb +2 -1
  79. data/lib/puppet/face/module/list.rb +7 -8
  80. data/lib/puppet/face/module/uninstall.rb +1 -0
  81. data/lib/puppet/face/module.rb +1 -0
  82. data/lib/puppet/face/node/clean.rb +2 -1
  83. data/lib/puppet/face/node.rb +2 -1
  84. data/lib/puppet/face/parser.rb +2 -2
  85. data/lib/puppet/face/plugin.rb +2 -1
  86. data/lib/puppet/face/report.rb +2 -1
  87. data/lib/puppet/face/resource.rb +1 -0
  88. data/lib/puppet/face.rb +1 -0
  89. data/lib/puppet/feature/base.rb +2 -1
  90. data/lib/puppet/feature/bolt.rb +1 -0
  91. data/lib/puppet/feature/cfpropertylist.rb +1 -0
  92. data/lib/puppet/feature/eventlog.rb +1 -0
  93. data/lib/puppet/feature/hiera_eyaml.rb +1 -0
  94. data/lib/puppet/feature/hocon.rb +1 -0
  95. data/lib/puppet/feature/libuser.rb +4 -3
  96. data/lib/puppet/feature/msgpack.rb +1 -0
  97. data/lib/puppet/feature/pe_license.rb +2 -1
  98. data/lib/puppet/feature/pson.rb +1 -0
  99. data/lib/puppet/feature/selinux.rb +1 -0
  100. data/lib/puppet/feature/ssh.rb +1 -0
  101. data/lib/puppet/feature/telnet.rb +1 -0
  102. data/lib/puppet/feature/zlib.rb +1 -0
  103. data/lib/puppet/ffi/posix/constants.rb +1 -0
  104. data/lib/puppet/ffi/posix/functions.rb +1 -1
  105. data/lib/puppet/ffi/posix.rb +1 -0
  106. data/lib/puppet/ffi/windows/api_types.rb +1 -0
  107. data/lib/puppet/ffi/windows/constants.rb +78 -77
  108. data/lib/puppet/ffi/windows/functions.rb +73 -73
  109. data/lib/puppet/ffi/windows/structs.rb +3 -3
  110. data/lib/puppet/ffi/windows.rb +1 -0
  111. data/lib/puppet/file_bucket/dipper.rb +7 -1
  112. data/lib/puppet/file_bucket/file.rb +1 -0
  113. data/lib/puppet/file_bucket.rb +1 -0
  114. data/lib/puppet/file_serving/base.rb +13 -6
  115. data/lib/puppet/file_serving/configuration/parser.rb +3 -1
  116. data/lib/puppet/file_serving/configuration.rb +5 -3
  117. data/lib/puppet/file_serving/content.rb +1 -0
  118. data/lib/puppet/file_serving/fileset.rb +9 -6
  119. data/lib/puppet/file_serving/http_metadata.rb +1 -3
  120. data/lib/puppet/file_serving/metadata.rb +9 -10
  121. data/lib/puppet/file_serving/mount/file.rb +6 -3
  122. data/lib/puppet/file_serving/mount/locales.rb +2 -1
  123. data/lib/puppet/file_serving/mount/modules.rb +2 -0
  124. data/lib/puppet/file_serving/mount/pluginfacts.rb +2 -1
  125. data/lib/puppet/file_serving/mount/plugins.rb +2 -1
  126. data/lib/puppet/file_serving/mount/scripts.rb +2 -0
  127. data/lib/puppet/file_serving/mount/tasks.rb +2 -0
  128. data/lib/puppet/file_serving/mount.rb +2 -0
  129. data/lib/puppet/file_serving/terminus_helper.rb +1 -0
  130. data/lib/puppet/file_serving/terminus_selector.rb +1 -0
  131. data/lib/puppet/file_serving.rb +1 -0
  132. data/lib/puppet/file_system/file_impl.rb +2 -2
  133. data/lib/puppet/file_system/jruby.rb +1 -0
  134. data/lib/puppet/file_system/memory_file.rb +2 -0
  135. data/lib/puppet/file_system/memory_impl.rb +3 -0
  136. data/lib/puppet/file_system/path_pattern.rb +1 -0
  137. data/lib/puppet/file_system/posix.rb +5 -1
  138. data/lib/puppet/file_system/uniquefile.rb +11 -11
  139. data/lib/puppet/file_system/windows.rb +4 -2
  140. data/lib/puppet/file_system.rb +3 -2
  141. data/lib/puppet/forge/cache.rb +1 -1
  142. data/lib/puppet/forge/errors.rb +1 -3
  143. data/lib/puppet/forge/repository.rb +2 -0
  144. data/lib/puppet/forge.rb +3 -0
  145. data/lib/puppet/functions/abs.rb +2 -1
  146. data/lib/puppet/functions/alert.rb +1 -0
  147. data/lib/puppet/functions/all.rb +1 -0
  148. data/lib/puppet/functions/annotate.rb +1 -0
  149. data/lib/puppet/functions/any.rb +1 -0
  150. data/lib/puppet/functions/assert_type.rb +1 -0
  151. data/lib/puppet/functions/binary_file.rb +3 -1
  152. data/lib/puppet/functions/break.rb +2 -1
  153. data/lib/puppet/functions/call.rb +1 -1
  154. data/lib/puppet/functions/camelcase.rb +1 -1
  155. data/lib/puppet/functions/capitalize.rb +1 -1
  156. data/lib/puppet/functions/ceiling.rb +2 -2
  157. data/lib/puppet/functions/chomp.rb +1 -1
  158. data/lib/puppet/functions/chop.rb +1 -1
  159. data/lib/puppet/functions/compare.rb +1 -0
  160. data/lib/puppet/functions/contain.rb +1 -0
  161. data/lib/puppet/functions/convert_to.rb +1 -0
  162. data/lib/puppet/functions/crit.rb +1 -0
  163. data/lib/puppet/functions/debug.rb +1 -0
  164. data/lib/puppet/functions/defined.rb +7 -4
  165. data/lib/puppet/functions/dig.rb +10 -8
  166. data/lib/puppet/functions/downcase.rb +1 -0
  167. data/lib/puppet/functions/each.rb +1 -0
  168. data/lib/puppet/functions/emerg.rb +1 -0
  169. data/lib/puppet/functions/empty.rb +1 -0
  170. data/lib/puppet/functions/epp.rb +1 -1
  171. data/lib/puppet/functions/err.rb +1 -0
  172. data/lib/puppet/functions/eyaml_lookup_key.rb +6 -4
  173. data/lib/puppet/functions/filter.rb +1 -0
  174. data/lib/puppet/functions/find_file.rb +1 -0
  175. data/lib/puppet/functions/find_template.rb +1 -0
  176. data/lib/puppet/functions/flatten.rb +1 -0
  177. data/lib/puppet/functions/floor.rb +2 -2
  178. data/lib/puppet/functions/get.rb +2 -1
  179. data/lib/puppet/functions/getvar.rb +2 -1
  180. data/lib/puppet/functions/hiera.rb +1 -0
  181. data/lib/puppet/functions/hiera_array.rb +1 -0
  182. data/lib/puppet/functions/hiera_hash.rb +1 -0
  183. data/lib/puppet/functions/hiera_include.rb +2 -0
  184. data/lib/puppet/functions/hocon_data.rb +1 -0
  185. data/lib/puppet/functions/import.rb +1 -0
  186. data/lib/puppet/functions/include.rb +1 -0
  187. data/lib/puppet/functions/index.rb +2 -2
  188. data/lib/puppet/functions/info.rb +1 -0
  189. data/lib/puppet/functions/inline_epp.rb +1 -1
  190. data/lib/puppet/functions/join.rb +2 -1
  191. data/lib/puppet/functions/json_data.rb +1 -0
  192. data/lib/puppet/functions/keys.rb +1 -0
  193. data/lib/puppet/functions/length.rb +1 -1
  194. data/lib/puppet/functions/lest.rb +1 -0
  195. data/lib/puppet/functions/lookup.rb +8 -9
  196. data/lib/puppet/functions/lstrip.rb +1 -1
  197. data/lib/puppet/functions/map.rb +1 -0
  198. data/lib/puppet/functions/match.rb +3 -1
  199. data/lib/puppet/functions/max.rb +4 -4
  200. data/lib/puppet/functions/min.rb +4 -4
  201. data/lib/puppet/functions/module_directory.rb +1 -0
  202. data/lib/puppet/functions/new.rb +2 -1
  203. data/lib/puppet/functions/next.rb +1 -0
  204. data/lib/puppet/functions/notice.rb +1 -0
  205. data/lib/puppet/functions/reduce.rb +1 -1
  206. data/lib/puppet/functions/regsubst.rb +1 -0
  207. data/lib/puppet/functions/require.rb +2 -0
  208. data/lib/puppet/functions/return.rb +1 -0
  209. data/lib/puppet/functions/reverse_each.rb +1 -0
  210. data/lib/puppet/functions/round.rb +1 -0
  211. data/lib/puppet/functions/rstrip.rb +1 -1
  212. data/lib/puppet/functions/scanf.rb +1 -0
  213. data/lib/puppet/functions/size.rb +1 -2
  214. data/lib/puppet/functions/slice.rb +2 -0
  215. data/lib/puppet/functions/sort.rb +1 -0
  216. data/lib/puppet/functions/split.rb +1 -0
  217. data/lib/puppet/functions/step.rb +1 -0
  218. data/lib/puppet/functions/strftime.rb +3 -2
  219. data/lib/puppet/functions/strip.rb +1 -1
  220. data/lib/puppet/functions/then.rb +2 -0
  221. data/lib/puppet/functions/tree_each.rb +1 -1
  222. data/lib/puppet/functions/type.rb +1 -0
  223. data/lib/puppet/functions/unique.rb +2 -1
  224. data/lib/puppet/functions/unwrap.rb +1 -0
  225. data/lib/puppet/functions/upcase.rb +1 -0
  226. data/lib/puppet/functions/values.rb +1 -0
  227. data/lib/puppet/functions/versioncmp.rb +2 -2
  228. data/lib/puppet/functions/warning.rb +1 -0
  229. data/lib/puppet/functions/with.rb +1 -0
  230. data/lib/puppet/functions/yaml_data.rb +1 -0
  231. data/lib/puppet/functions.rb +9 -9
  232. data/lib/puppet/generate/models/type/property.rb +2 -0
  233. data/lib/puppet/generate/models/type/type.rb +2 -0
  234. data/lib/puppet/generate/type.rb +6 -1
  235. data/lib/puppet/gettext/config.rb +6 -0
  236. data/lib/puppet/gettext/module_translations.rb +1 -1
  237. data/lib/puppet/gettext/stubs.rb +1 -0
  238. data/lib/puppet/graph/key.rb +1 -0
  239. data/lib/puppet/graph/prioritizer.rb +1 -0
  240. data/lib/puppet/graph/rb_tree_map.rb +12 -2
  241. data/lib/puppet/graph/relationship_graph.rb +3 -2
  242. data/lib/puppet/graph/sequential_prioritizer.rb +1 -0
  243. data/lib/puppet/graph/simple_graph.rb +38 -31
  244. data/lib/puppet/graph.rb +1 -0
  245. data/lib/puppet/http/client.rb +4 -1
  246. data/lib/puppet/http/dns.rb +5 -5
  247. data/lib/puppet/http/errors.rb +1 -0
  248. data/lib/puppet/http/external_client.rb +2 -2
  249. data/lib/puppet/http/factory.rb +1 -0
  250. data/lib/puppet/http/pool.rb +2 -1
  251. data/lib/puppet/http/pool_entry.rb +1 -0
  252. data/lib/puppet/http/proxy.rb +3 -2
  253. data/lib/puppet/http/redirector.rb +1 -0
  254. data/lib/puppet/http/resolver/server_list.rb +1 -1
  255. data/lib/puppet/http/resolver/settings.rb +1 -1
  256. data/lib/puppet/http/resolver/srv.rb +1 -1
  257. data/lib/puppet/http/resolver.rb +1 -0
  258. data/lib/puppet/http/response.rb +1 -0
  259. data/lib/puppet/http/response_converter.rb +1 -0
  260. data/lib/puppet/http/response_net_http.rb +1 -1
  261. data/lib/puppet/http/retry_after_handler.rb +1 -1
  262. data/lib/puppet/http/service/ca.rb +1 -0
  263. data/lib/puppet/http/service/compiler.rb +9 -3
  264. data/lib/puppet/http/service/file_server.rb +2 -1
  265. data/lib/puppet/http/service/puppetserver.rb +1 -1
  266. data/lib/puppet/http/service/report.rb +1 -1
  267. data/lib/puppet/http/service.rb +1 -0
  268. data/lib/puppet/http/session.rb +2 -1
  269. data/lib/puppet/http/site.rb +1 -0
  270. data/lib/puppet/http.rb +1 -0
  271. data/lib/puppet/indirector/catalog/compiler.rb +50 -40
  272. data/lib/puppet/indirector/catalog/json.rb +1 -0
  273. data/lib/puppet/indirector/catalog/msgpack.rb +1 -0
  274. data/lib/puppet/indirector/catalog/rest.rb +9 -0
  275. data/lib/puppet/indirector/catalog/store_configs.rb +1 -2
  276. data/lib/puppet/indirector/catalog/yaml.rb +1 -0
  277. data/lib/puppet/indirector/code.rb +1 -0
  278. data/lib/puppet/indirector/data_binding/hiera.rb +1 -0
  279. data/lib/puppet/indirector/data_binding/none.rb +1 -0
  280. data/lib/puppet/indirector/direct_file_server.rb +3 -1
  281. data/lib/puppet/indirector/envelope.rb +1 -0
  282. data/lib/puppet/indirector/errors.rb +1 -0
  283. data/lib/puppet/indirector/exec.rb +1 -0
  284. data/lib/puppet/indirector/face.rb +7 -6
  285. data/lib/puppet/indirector/fact_search.rb +1 -0
  286. data/lib/puppet/indirector/facts/facter.rb +2 -0
  287. data/lib/puppet/indirector/facts/json.rb +1 -0
  288. data/lib/puppet/indirector/facts/memory.rb +1 -0
  289. data/lib/puppet/indirector/facts/network_device.rb +1 -0
  290. data/lib/puppet/indirector/facts/rest.rb +1 -0
  291. data/lib/puppet/indirector/facts/store_configs.rb +1 -1
  292. data/lib/puppet/indirector/facts/yaml.rb +1 -0
  293. data/lib/puppet/indirector/file_bucket_file/file.rb +10 -5
  294. data/lib/puppet/indirector/file_bucket_file/rest.rb +2 -0
  295. data/lib/puppet/indirector/file_bucket_file/selector.rb +1 -0
  296. data/lib/puppet/indirector/file_content/file.rb +1 -0
  297. data/lib/puppet/indirector/file_content/file_server.rb +1 -0
  298. data/lib/puppet/indirector/file_content/rest.rb +1 -0
  299. data/lib/puppet/indirector/file_content/selector.rb +1 -0
  300. data/lib/puppet/indirector/file_content.rb +1 -0
  301. data/lib/puppet/indirector/file_metadata/file.rb +1 -0
  302. data/lib/puppet/indirector/file_metadata/file_server.rb +1 -0
  303. data/lib/puppet/indirector/file_metadata/http.rb +1 -0
  304. data/lib/puppet/indirector/file_metadata/rest.rb +1 -0
  305. data/lib/puppet/indirector/file_metadata/selector.rb +1 -0
  306. data/lib/puppet/indirector/file_metadata.rb +1 -0
  307. data/lib/puppet/indirector/file_server.rb +2 -0
  308. data/lib/puppet/indirector/generic_http.rb +1 -0
  309. data/lib/puppet/indirector/hiera.rb +5 -4
  310. data/lib/puppet/indirector/indirection.rb +11 -1
  311. data/lib/puppet/indirector/json.rb +3 -1
  312. data/lib/puppet/indirector/memory.rb +2 -0
  313. data/lib/puppet/indirector/msgpack.rb +5 -2
  314. data/lib/puppet/indirector/node/exec.rb +3 -2
  315. data/lib/puppet/indirector/node/json.rb +1 -1
  316. data/lib/puppet/indirector/node/memory.rb +1 -0
  317. data/lib/puppet/indirector/node/msgpack.rb +1 -0
  318. data/lib/puppet/indirector/node/plain.rb +1 -0
  319. data/lib/puppet/indirector/node/rest.rb +1 -0
  320. data/lib/puppet/indirector/node/store_configs.rb +1 -2
  321. data/lib/puppet/indirector/node/yaml.rb +1 -0
  322. data/lib/puppet/indirector/none.rb +1 -0
  323. data/lib/puppet/indirector/plain.rb +1 -0
  324. data/lib/puppet/indirector/report/json.rb +1 -0
  325. data/lib/puppet/indirector/report/msgpack.rb +1 -0
  326. data/lib/puppet/indirector/report/processor.rb +2 -0
  327. data/lib/puppet/indirector/report/rest.rb +1 -0
  328. data/lib/puppet/indirector/report/yaml.rb +1 -0
  329. data/lib/puppet/indirector/request.rb +7 -5
  330. data/lib/puppet/indirector/resource/ral.rb +1 -0
  331. data/lib/puppet/indirector/resource/store_configs.rb +1 -0
  332. data/lib/puppet/indirector/resource/validator.rb +1 -0
  333. data/lib/puppet/indirector/rest.rb +1 -0
  334. data/lib/puppet/indirector/store_configs.rb +1 -0
  335. data/lib/puppet/indirector/terminus.rb +4 -1
  336. data/lib/puppet/indirector/yaml.rb +1 -0
  337. data/lib/puppet/indirector.rb +2 -0
  338. data/lib/puppet/info_service/class_information_service.rb +5 -3
  339. data/lib/puppet/info_service/plan_information_service.rb +1 -0
  340. data/lib/puppet/info_service/task_information_service.rb +1 -0
  341. data/lib/puppet/interface/action.rb +32 -27
  342. data/lib/puppet/interface/action_builder.rb +14 -14
  343. data/lib/puppet/interface/action_manager.rb +2 -0
  344. data/lib/puppet/interface/documentation.rb +21 -15
  345. data/lib/puppet/interface/face_collection.rb +5 -2
  346. data/lib/puppet/interface/option.rb +15 -4
  347. data/lib/puppet/interface/option_builder.rb +13 -9
  348. data/lib/puppet/interface/option_manager.rb +3 -2
  349. data/lib/puppet/interface.rb +3 -3
  350. data/lib/puppet/loaders.rb +1 -1
  351. data/lib/puppet/metatype/manager.rb +9 -8
  352. data/lib/puppet/module/plan.rb +10 -4
  353. data/lib/puppet/module/task.rb +8 -2
  354. data/lib/puppet/module.rb +13 -3
  355. data/lib/puppet/module_tool/applications/application.rb +6 -4
  356. data/lib/puppet/module_tool/applications/checksummer.rb +1 -2
  357. data/lib/puppet/module_tool/applications/installer.rb +32 -45
  358. data/lib/puppet/module_tool/applications/uninstaller.rb +22 -21
  359. data/lib/puppet/module_tool/applications/unpacker.rb +3 -0
  360. data/lib/puppet/module_tool/applications/upgrader.rb +28 -26
  361. data/lib/puppet/module_tool/applications.rb +1 -0
  362. data/lib/puppet/module_tool/checksums.rb +1 -1
  363. data/lib/puppet/module_tool/contents_description.rb +1 -2
  364. data/lib/puppet/module_tool/dependency.rb +1 -1
  365. data/lib/puppet/module_tool/errors/base.rb +1 -0
  366. data/lib/puppet/module_tool/errors/installer.rb +4 -4
  367. data/lib/puppet/module_tool/errors/shared.rb +12 -12
  368. data/lib/puppet/module_tool/errors/uninstaller.rb +2 -2
  369. data/lib/puppet/module_tool/errors/upgrader.rb +3 -3
  370. data/lib/puppet/module_tool/errors.rb +1 -0
  371. data/lib/puppet/module_tool/install_directory.rb +6 -4
  372. data/lib/puppet/module_tool/installed_modules.rb +2 -0
  373. data/lib/puppet/module_tool/local_tarball.rb +3 -0
  374. data/lib/puppet/module_tool/metadata.rb +21 -20
  375. data/lib/puppet/module_tool/shared_behaviors.rb +23 -21
  376. data/lib/puppet/module_tool/tar/gnu.rb +1 -0
  377. data/lib/puppet/module_tool/tar/mini.rb +1 -0
  378. data/lib/puppet/module_tool/tar.rb +2 -1
  379. data/lib/puppet/module_tool.rb +1 -1
  380. data/lib/puppet/network/authconfig.rb +1 -0
  381. data/lib/puppet/network/authorization.rb +1 -0
  382. data/lib/puppet/network/client_request.rb +1 -0
  383. data/lib/puppet/network/format.rb +5 -0
  384. data/lib/puppet/network/format_handler.rb +2 -1
  385. data/lib/puppet/network/format_support.rb +6 -5
  386. data/lib/puppet/network/formats.rb +15 -11
  387. data/lib/puppet/network/http/api/indirected_routes.rb +8 -8
  388. data/lib/puppet/network/http/api/indirection_type.rb +1 -1
  389. data/lib/puppet/network/http/api/master/v3/environments.rb +1 -0
  390. data/lib/puppet/network/http/api/master/v3.rb +1 -0
  391. data/lib/puppet/network/http/api/master.rb +1 -0
  392. data/lib/puppet/network/http/api/server/v3/environments.rb +20 -14
  393. data/lib/puppet/network/http/api/server/v3.rb +13 -13
  394. data/lib/puppet/network/http/api/server.rb +1 -0
  395. data/lib/puppet/network/http/api.rb +11 -10
  396. data/lib/puppet/network/http/connection.rb +1 -0
  397. data/lib/puppet/network/http/error.rb +2 -1
  398. data/lib/puppet/network/http/handler.rb +3 -2
  399. data/lib/puppet/network/http/issues.rb +1 -0
  400. data/lib/puppet/network/http/memory_response.rb +1 -0
  401. data/lib/puppet/network/http/request.rb +13 -6
  402. data/lib/puppet/network/http/response.rb +1 -0
  403. data/lib/puppet/network/http/route.rb +4 -2
  404. data/lib/puppet/network/http.rb +1 -0
  405. data/lib/puppet/network/http_pool.rb +2 -1
  406. data/lib/puppet/network/uri.rb +1 -0
  407. data/lib/puppet/network.rb +1 -0
  408. data/lib/puppet/node/environment.rb +12 -9
  409. data/lib/puppet/node/facts.rb +2 -1
  410. data/lib/puppet/node.rb +3 -2
  411. data/lib/puppet/pal/catalog_compiler.rb +1 -3
  412. data/lib/puppet/pal/compiler.rb +6 -2
  413. data/lib/puppet/pal/function_signature.rb +2 -1
  414. data/lib/puppet/pal/json_catalog_encoder.rb +5 -1
  415. data/lib/puppet/pal/pal_api.rb +1 -0
  416. data/lib/puppet/pal/pal_impl.rb +20 -19
  417. data/lib/puppet/pal/plan_signature.rb +2 -1
  418. data/lib/puppet/pal/script_compiler.rb +3 -2
  419. data/lib/puppet/pal/task_signature.rb +14 -9
  420. data/lib/puppet/parameter/boolean.rb +1 -0
  421. data/lib/puppet/parameter/package_options.rb +1 -0
  422. data/lib/puppet/parameter/path.rb +3 -0
  423. data/lib/puppet/parameter/value.rb +1 -0
  424. data/lib/puppet/parameter/value_collection.rb +5 -5
  425. data/lib/puppet/parameter.rb +4 -3
  426. data/lib/puppet/parser/abstract_compiler.rb +0 -2
  427. data/lib/puppet/parser/ast/block_expression.rb +1 -0
  428. data/lib/puppet/parser/ast/branch.rb +1 -0
  429. data/lib/puppet/parser/ast/hostclass.rb +1 -0
  430. data/lib/puppet/parser/ast/leaf.rb +2 -0
  431. data/lib/puppet/parser/ast/node.rb +1 -0
  432. data/lib/puppet/parser/ast/pops_bridge.rb +6 -6
  433. data/lib/puppet/parser/ast/resource.rb +2 -3
  434. data/lib/puppet/parser/ast/resource_instance.rb +2 -0
  435. data/lib/puppet/parser/ast/resourceparam.rb +6 -5
  436. data/lib/puppet/parser/ast/top_level_construct.rb +1 -0
  437. data/lib/puppet/parser/ast.rb +4 -3
  438. data/lib/puppet/parser/catalog_compiler.rb +1 -2
  439. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +3 -0
  440. data/lib/puppet/parser/compiler/catalog_validator.rb +1 -0
  441. data/lib/puppet/parser/compiler.rb +10 -8
  442. data/lib/puppet/parser/e4_parser_adapter.rb +15 -15
  443. data/lib/puppet/parser/files.rb +1 -1
  444. data/lib/puppet/parser/functions/assert_type.rb +55 -54
  445. data/lib/puppet/parser/functions/binary_file.rb +19 -18
  446. data/lib/puppet/parser/functions/break.rb +35 -34
  447. data/lib/puppet/parser/functions/contain.rb +1 -0
  448. data/lib/puppet/parser/functions/create_resources.rb +8 -6
  449. data/lib/puppet/parser/functions/defined.rb +102 -101
  450. data/lib/puppet/parser/functions/dig.rb +33 -32
  451. data/lib/puppet/parser/functions/digest.rb +1 -0
  452. data/lib/puppet/parser/functions/each.rb +99 -98
  453. data/lib/puppet/parser/functions/epp.rb +2 -2
  454. data/lib/puppet/parser/functions/fail.rb +9 -8
  455. data/lib/puppet/parser/functions/file.rb +14 -13
  456. data/lib/puppet/parser/functions/filter.rb +74 -73
  457. data/lib/puppet/parser/functions/find_file.rb +22 -21
  458. data/lib/puppet/parser/functions/fqdn_rand.rb +23 -22
  459. data/lib/puppet/parser/functions/generate.rb +20 -20
  460. data/lib/puppet/parser/functions/hiera.rb +94 -93
  461. data/lib/puppet/parser/functions/hiera_array.rb +82 -81
  462. data/lib/puppet/parser/functions/hiera_hash.rb +92 -91
  463. data/lib/puppet/parser/functions/hiera_include.rb +92 -91
  464. data/lib/puppet/parser/functions/include.rb +2 -1
  465. data/lib/puppet/parser/functions/inline_epp.rb +2 -2
  466. data/lib/puppet/parser/functions/inline_template.rb +11 -11
  467. data/lib/puppet/parser/functions/lest.rb +44 -43
  468. data/lib/puppet/parser/functions/lookup.rb +131 -130
  469. data/lib/puppet/parser/functions/map.rb +71 -70
  470. data/lib/puppet/parser/functions/match.rb +39 -38
  471. data/lib/puppet/parser/functions/md5.rb +2 -1
  472. data/lib/puppet/parser/functions/new.rb +985 -984
  473. data/lib/puppet/parser/functions/next.rb +34 -33
  474. data/lib/puppet/parser/functions/realize.rb +9 -9
  475. data/lib/puppet/parser/functions/reduce.rb +132 -131
  476. data/lib/puppet/parser/functions/regsubst.rb +6 -5
  477. data/lib/puppet/parser/functions/require.rb +5 -4
  478. data/lib/puppet/parser/functions/return.rb +88 -87
  479. data/lib/puppet/parser/functions/reverse_each.rb +78 -77
  480. data/lib/puppet/parser/functions/scanf.rb +28 -27
  481. data/lib/puppet/parser/functions/sha1.rb +2 -1
  482. data/lib/puppet/parser/functions/sha256.rb +1 -0
  483. data/lib/puppet/parser/functions/shellquote.rb +1 -0
  484. data/lib/puppet/parser/functions/slice.rb +34 -33
  485. data/lib/puppet/parser/functions/split.rb +5 -6
  486. data/lib/puppet/parser/functions/sprintf.rb +3 -3
  487. data/lib/puppet/parser/functions/step.rb +79 -78
  488. data/lib/puppet/parser/functions/strftime.rb +180 -179
  489. data/lib/puppet/parser/functions/tag.rb +7 -6
  490. data/lib/puppet/parser/functions/tagged.rb +13 -12
  491. data/lib/puppet/parser/functions/template.rb +24 -23
  492. data/lib/puppet/parser/functions/then.rb +68 -67
  493. data/lib/puppet/parser/functions/type.rb +48 -47
  494. data/lib/puppet/parser/functions/versioncmp.rb +1 -1
  495. data/lib/puppet/parser/functions/with.rb +23 -22
  496. data/lib/puppet/parser/functions.rb +2 -0
  497. data/lib/puppet/parser/parser_factory.rb +1 -0
  498. data/lib/puppet/parser/relationship.rb +3 -0
  499. data/lib/puppet/parser/resource/param.rb +1 -0
  500. data/lib/puppet/parser/resource.rb +10 -4
  501. data/lib/puppet/parser/scope.rb +40 -32
  502. data/lib/puppet/parser/script_compiler.rb +5 -6
  503. data/lib/puppet/parser/templatewrapper.rb +1 -0
  504. data/lib/puppet/parser/type_loader.rb +19 -17
  505. data/lib/puppet/parser.rb +1 -0
  506. data/lib/puppet/plugins/configuration.rb +1 -0
  507. data/lib/puppet/plugins/syntax_checkers.rb +1 -1
  508. data/lib/puppet/plugins.rb +1 -0
  509. data/lib/puppet/pops/adaptable.rb +3 -1
  510. data/lib/puppet/pops/adapters.rb +3 -1
  511. data/lib/puppet/pops/evaluator/access_operator.rb +79 -65
  512. data/lib/puppet/pops/evaluator/callable_signature.rb +1 -1
  513. data/lib/puppet/pops/evaluator/closure.rb +273 -277
  514. data/lib/puppet/pops/evaluator/collector_transformer.rb +11 -9
  515. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -0
  516. data/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +2 -2
  517. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +4 -4
  518. data/lib/puppet/pops/evaluator/collectors/fixed_set_collector.rb +1 -1
  519. data/lib/puppet/pops/evaluator/compare_operator.rb +15 -3
  520. data/lib/puppet/pops/evaluator/deferred_resolver.rb +2 -2
  521. data/lib/puppet/pops/evaluator/epp_evaluator.rb +10 -10
  522. data/lib/puppet/pops/evaluator/evaluator_impl.rb +140 -138
  523. data/lib/puppet/pops/evaluator/external_syntax_support.rb +1 -1
  524. data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +2 -1
  525. data/lib/puppet/pops/evaluator/literal_evaluator.rb +1 -1
  526. data/lib/puppet/pops/evaluator/puppet_proc.rb +2 -0
  527. data/lib/puppet/pops/evaluator/relationship_operator.rb +5 -3
  528. data/lib/puppet/pops/evaluator/runtime3_converter.rb +21 -19
  529. data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +31 -33
  530. data/lib/puppet/pops/evaluator/runtime3_support.rb +16 -19
  531. data/lib/puppet/pops/functions/dispatch.rb +1 -0
  532. data/lib/puppet/pops/functions/dispatcher.rb +1 -1
  533. data/lib/puppet/pops/functions/function.rb +1 -2
  534. data/lib/puppet/pops/issue_reporter.rb +19 -17
  535. data/lib/puppet/pops/issues.rb +8 -4
  536. data/lib/puppet/pops/label_provider.rb +1 -0
  537. data/lib/puppet/pops/loader/base_loader.rb +2 -2
  538. data/lib/puppet/pops/loader/dependency_loader.rb +3 -0
  539. data/lib/puppet/pops/loader/gem_support.rb +3 -1
  540. data/lib/puppet/pops/loader/generic_plan_instantiator.rb +1 -0
  541. data/lib/puppet/pops/loader/loader.rb +1 -2
  542. data/lib/puppet/pops/loader/loader_paths.rb +20 -19
  543. data/lib/puppet/pops/loader/module_loaders.rb +28 -28
  544. data/lib/puppet/pops/loader/predefined_loader.rb +1 -2
  545. data/lib/puppet/pops/loader/puppet_function_instantiator.rb +4 -2
  546. data/lib/puppet/pops/loader/puppet_plan_instantiator.rb +4 -2
  547. data/lib/puppet/pops/loader/puppet_resource_type_impl_instantiator.rb +1 -1
  548. data/lib/puppet/pops/loader/ruby_data_type_instantiator.rb +4 -1
  549. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +4 -1
  550. data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +6 -2
  551. data/lib/puppet/pops/loader/runtime3_type_loader.rb +2 -2
  552. data/lib/puppet/pops/loader/simple_environment_loader.rb +1 -2
  553. data/lib/puppet/pops/loader/static_loader.rb +22 -21
  554. data/lib/puppet/pops/loader/task_instantiator.rb +1 -0
  555. data/lib/puppet/pops/loader/type_definition_instantiator.rb +6 -4
  556. data/lib/puppet/pops/loader/typed_name.rb +1 -0
  557. data/lib/puppet/pops/loader/uri_helper.rb +1 -0
  558. data/lib/puppet/pops/loaders.rb +21 -18
  559. data/lib/puppet/pops/lookup/configured_data_provider.rb +1 -0
  560. data/lib/puppet/pops/lookup/context.rb +24 -23
  561. data/lib/puppet/pops/lookup/data_adapter.rb +1 -0
  562. data/lib/puppet/pops/lookup/data_dig_function_provider.rb +2 -2
  563. data/lib/puppet/pops/lookup/data_hash_function_provider.rb +1 -0
  564. data/lib/puppet/pops/lookup/data_provider.rb +1 -0
  565. data/lib/puppet/pops/lookup/environment_data_provider.rb +1 -0
  566. data/lib/puppet/pops/lookup/explainer.rb +34 -33
  567. data/lib/puppet/pops/lookup/function_provider.rb +7 -6
  568. data/lib/puppet/pops/lookup/global_data_provider.rb +1 -1
  569. data/lib/puppet/pops/lookup/hiera_config.rb +136 -100
  570. data/lib/puppet/pops/lookup/interpolation.rb +5 -1
  571. data/lib/puppet/pops/lookup/invocation.rb +3 -0
  572. data/lib/puppet/pops/lookup/key_recorder.rb +3 -1
  573. data/lib/puppet/pops/lookup/location_resolver.rb +2 -1
  574. data/lib/puppet/pops/lookup/lookup_adapter.rb +22 -20
  575. data/lib/puppet/pops/lookup/lookup_key.rb +1 -0
  576. data/lib/puppet/pops/lookup/lookup_key_function_provider.rb +1 -0
  577. data/lib/puppet/pops/lookup/module_data_provider.rb +3 -1
  578. data/lib/puppet/pops/lookup/sub_lookup.rb +5 -2
  579. data/lib/puppet/pops/lookup.rb +13 -8
  580. data/lib/puppet/pops/merge_strategy.rb +5 -2
  581. data/lib/puppet/pops/migration/migration_checker.rb +3 -1
  582. data/lib/puppet/pops/model/ast.rb +786 -685
  583. data/lib/puppet/pops/model/ast_transformer.rb +4 -3
  584. data/lib/puppet/pops/model/factory.rb +17 -13
  585. data/lib/puppet/pops/model/model_label_provider.rb +1 -1
  586. data/lib/puppet/pops/model/model_tree_dumper.rb +10 -9
  587. data/lib/puppet/pops/model/pn_transformer.rb +4 -6
  588. data/lib/puppet/pops/model/tree_dumper.rb +2 -0
  589. data/lib/puppet/pops/parser/code_merger.rb +0 -1
  590. data/lib/puppet/pops/parser/epp_parser.rb +1 -1
  591. data/lib/puppet/pops/parser/epp_support.rb +2 -2
  592. data/lib/puppet/pops/parser/evaluating_parser.rb +5 -2
  593. data/lib/puppet/pops/parser/heredoc_support.rb +6 -7
  594. data/lib/puppet/pops/parser/interpolation_support.rb +2 -3
  595. data/lib/puppet/pops/parser/lexer2.rb +32 -29
  596. data/lib/puppet/pops/parser/lexer_support.rb +38 -41
  597. data/lib/puppet/pops/parser/locatable.rb +1 -2
  598. data/lib/puppet/pops/parser/locator.rb +31 -28
  599. data/lib/puppet/pops/parser/parser_support.rb +2 -0
  600. data/lib/puppet/pops/parser/pn_parser.rb +1 -1
  601. data/lib/puppet/pops/parser/slurp_support.rb +33 -32
  602. data/lib/puppet/pops/patterns.rb +2 -3
  603. data/lib/puppet/pops/pcore.rb +2 -2
  604. data/lib/puppet/pops/pn.rb +3 -0
  605. data/lib/puppet/pops/puppet_stack.rb +1 -0
  606. data/lib/puppet/pops/resource/param.rb +11 -10
  607. data/lib/puppet/pops/resource/resource_type_impl.rb +37 -36
  608. data/lib/puppet/pops/semantic_error.rb +1 -0
  609. data/lib/puppet/pops/serialization/abstract_reader.rb +3 -2
  610. data/lib/puppet/pops/serialization/abstract_writer.rb +5 -4
  611. data/lib/puppet/pops/serialization/deserializer.rb +2 -0
  612. data/lib/puppet/pops/serialization/extension.rb +7 -0
  613. data/lib/puppet/pops/serialization/from_data_converter.rb +3 -0
  614. data/lib/puppet/pops/serialization/instance_reader.rb +1 -0
  615. data/lib/puppet/pops/serialization/instance_writer.rb +1 -0
  616. data/lib/puppet/pops/serialization/json.rb +6 -3
  617. data/lib/puppet/pops/serialization/json_path.rb +1 -0
  618. data/lib/puppet/pops/serialization/object.rb +4 -1
  619. data/lib/puppet/pops/serialization/serializer.rb +6 -2
  620. data/lib/puppet/pops/serialization/time_factory.rb +1 -1
  621. data/lib/puppet/pops/serialization/to_data_converter.rb +4 -2
  622. data/lib/puppet/pops/serialization/to_stringified_converter.rb +2 -2
  623. data/lib/puppet/pops/serialization.rb +1 -0
  624. data/lib/puppet/pops/time/timespan.rb +12 -2
  625. data/lib/puppet/pops/time/timestamp.rb +4 -0
  626. data/lib/puppet/pops/types/annotatable.rb +1 -1
  627. data/lib/puppet/pops/types/annotation.rb +1 -0
  628. data/lib/puppet/pops/types/class_loader.rb +8 -6
  629. data/lib/puppet/pops/types/implementation_registry.rb +1 -0
  630. data/lib/puppet/pops/types/iterable.rb +18 -9
  631. data/lib/puppet/pops/types/p_binary_type.rb +2 -3
  632. data/lib/puppet/pops/types/p_init_type.rb +12 -9
  633. data/lib/puppet/pops/types/p_meta_type.rb +1 -1
  634. data/lib/puppet/pops/types/p_object_type.rb +65 -42
  635. data/lib/puppet/pops/types/p_object_type_extension.rb +10 -7
  636. data/lib/puppet/pops/types/p_runtime_type.rb +11 -9
  637. data/lib/puppet/pops/types/p_sem_ver_range_type.rb +1 -1
  638. data/lib/puppet/pops/types/p_sem_ver_type.rb +5 -5
  639. data/lib/puppet/pops/types/p_sensitive_type.rb +1 -4
  640. data/lib/puppet/pops/types/p_timespan_type.rb +4 -2
  641. data/lib/puppet/pops/types/p_timestamp_type.rb +3 -2
  642. data/lib/puppet/pops/types/p_type_set_type.rb +36 -28
  643. data/lib/puppet/pops/types/p_uri_type.rb +25 -18
  644. data/lib/puppet/pops/types/puppet_object.rb +1 -1
  645. data/lib/puppet/pops/types/recursion_guard.rb +7 -2
  646. data/lib/puppet/pops/types/ruby_generator.rb +7 -4
  647. data/lib/puppet/pops/types/ruby_method.rb +6 -5
  648. data/lib/puppet/pops/types/string_converter.rb +65 -57
  649. data/lib/puppet/pops/types/tree_iterators.rb +6 -7
  650. data/lib/puppet/pops/types/type_acceptor.rb +1 -0
  651. data/lib/puppet/pops/types/type_asserter.rb +1 -0
  652. data/lib/puppet/pops/types/type_assertion_error.rb +0 -1
  653. data/lib/puppet/pops/types/type_calculator.rb +10 -4
  654. data/lib/puppet/pops/types/type_conversion_error.rb +1 -10
  655. data/lib/puppet/pops/types/type_factory.rb +7 -4
  656. data/lib/puppet/pops/types/type_formatter.rb +12 -11
  657. data/lib/puppet/pops/types/type_mismatch_describer.rb +13 -8
  658. data/lib/puppet/pops/types/type_parser.rb +111 -107
  659. data/lib/puppet/pops/types/type_set_reference.rb +2 -0
  660. data/lib/puppet/pops/types/type_with_members.rb +1 -1
  661. data/lib/puppet/pops/types/types.rb +177 -152
  662. data/lib/puppet/pops/utils.rb +1 -0
  663. data/lib/puppet/pops/validation/checker4_0.rb +17 -11
  664. data/lib/puppet/pops/validation/tasks_checker.rb +2 -1
  665. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -2
  666. data/lib/puppet/pops/validation.rb +8 -6
  667. data/lib/puppet/pops/visitable.rb +1 -0
  668. data/lib/puppet/pops/visitor.rb +14 -1
  669. data/lib/puppet/pops.rb +2 -0
  670. data/lib/puppet/property/boolean.rb +1 -0
  671. data/lib/puppet/property/ensure.rb +4 -1
  672. data/lib/puppet/property/keyvalue.rb +5 -4
  673. data/lib/puppet/property/list.rb +5 -5
  674. data/lib/puppet/property/ordered_list.rb +4 -4
  675. data/lib/puppet/property.rb +13 -11
  676. data/lib/puppet/provider/aix_object.rb +5 -0
  677. data/lib/puppet/provider/command.rb +1 -0
  678. data/lib/puppet/provider/confine.rb +1 -0
  679. data/lib/puppet/provider/exec/posix.rb +2 -0
  680. data/lib/puppet/provider/exec/shell.rb +1 -0
  681. data/lib/puppet/provider/exec/windows.rb +2 -1
  682. data/lib/puppet/provider/exec.rb +1 -0
  683. data/lib/puppet/provider/file/posix.rb +1 -0
  684. data/lib/puppet/provider/file/windows.rb +10 -6
  685. data/lib/puppet/provider/group/aix.rb +1 -0
  686. data/lib/puppet/provider/group/directoryservice.rb +1 -1
  687. data/lib/puppet/provider/group/groupadd.rb +9 -4
  688. data/lib/puppet/provider/group/ldap.rb +2 -0
  689. data/lib/puppet/provider/group/pw.rb +1 -0
  690. data/lib/puppet/provider/group/windows_adsi.rb +2 -0
  691. data/lib/puppet/provider/ldap.rb +2 -0
  692. data/lib/puppet/provider/nameservice/directoryservice.rb +28 -19
  693. data/lib/puppet/provider/nameservice/objectadd.rb +1 -0
  694. data/lib/puppet/provider/nameservice/pw.rb +6 -5
  695. data/lib/puppet/provider/nameservice.rb +8 -4
  696. data/lib/puppet/provider/network_device.rb +1 -2
  697. data/lib/puppet/provider/package/aix.rb +5 -4
  698. data/lib/puppet/provider/package/appdmg.rb +20 -19
  699. data/lib/puppet/provider/package/apple.rb +3 -2
  700. data/lib/puppet/provider/package/apt.rb +4 -4
  701. data/lib/puppet/provider/package/aptitude.rb +1 -0
  702. data/lib/puppet/provider/package/aptrpm.rb +2 -1
  703. data/lib/puppet/provider/package/blastwave.rb +6 -6
  704. data/lib/puppet/provider/package/dnf.rb +2 -0
  705. data/lib/puppet/provider/package/dnfmodule.rb +8 -7
  706. data/lib/puppet/provider/package/dpkg.rb +4 -4
  707. data/lib/puppet/provider/package/fink.rb +2 -1
  708. data/lib/puppet/provider/package/freebsd.rb +3 -2
  709. data/lib/puppet/provider/package/gem.rb +9 -5
  710. data/lib/puppet/provider/package/hpux.rb +4 -3
  711. data/lib/puppet/provider/package/macports.rb +2 -1
  712. data/lib/puppet/provider/package/nim.rb +13 -15
  713. data/lib/puppet/provider/package/openbsd.rb +6 -4
  714. data/lib/puppet/provider/package/opkg.rb +2 -0
  715. data/lib/puppet/provider/package/pacman.rb +12 -12
  716. data/lib/puppet/provider/package/pip.rb +3 -1
  717. data/lib/puppet/provider/package/pip2.rb +2 -2
  718. data/lib/puppet/provider/package/pip3.rb +2 -2
  719. data/lib/puppet/provider/package/pkg.rb +17 -13
  720. data/lib/puppet/provider/package/pkgdmg.rb +7 -2
  721. data/lib/puppet/provider/package/pkgin.rb +5 -5
  722. data/lib/puppet/provider/package/pkgng.rb +11 -7
  723. data/lib/puppet/provider/package/pkgutil.rb +7 -6
  724. data/lib/puppet/provider/package/portage.rb +11 -6
  725. data/lib/puppet/provider/package/ports.rb +6 -5
  726. data/lib/puppet/provider/package/portupgrade.rb +6 -12
  727. data/lib/puppet/provider/package/puppet_gem.rb +1 -0
  728. data/lib/puppet/provider/package/puppetserver_gem.rb +1 -0
  729. data/lib/puppet/provider/package/rpm.rb +10 -6
  730. data/lib/puppet/provider/package/rug.rb +2 -1
  731. data/lib/puppet/provider/package/sun.rb +20 -17
  732. data/lib/puppet/provider/package/sunfreeware.rb +1 -0
  733. data/lib/puppet/provider/package/tdnf.rb +1 -0
  734. data/lib/puppet/provider/package/up2date.rb +2 -1
  735. data/lib/puppet/provider/package/urpmi.rb +1 -0
  736. data/lib/puppet/provider/package/windows/exe_package.rb +1 -0
  737. data/lib/puppet/provider/package/windows/msi_package.rb +1 -0
  738. data/lib/puppet/provider/package/windows/package.rb +5 -3
  739. data/lib/puppet/provider/package/windows.rb +4 -2
  740. data/lib/puppet/provider/package/yum.rb +16 -13
  741. data/lib/puppet/provider/package/zypper.rb +15 -14
  742. data/lib/puppet/provider/package.rb +7 -6
  743. data/lib/puppet/provider/package_targetable.rb +1 -0
  744. data/lib/puppet/provider/parsedfile.rb +7 -2
  745. data/lib/puppet/provider/service/base.rb +2 -1
  746. data/lib/puppet/provider/service/bsd.rb +1 -0
  747. data/lib/puppet/provider/service/daemontools.rb +9 -7
  748. data/lib/puppet/provider/service/debian.rb +4 -3
  749. data/lib/puppet/provider/service/freebsd.rb +5 -6
  750. data/lib/puppet/provider/service/gentoo.rb +5 -4
  751. data/lib/puppet/provider/service/init.rb +10 -11
  752. data/lib/puppet/provider/service/launchd.rb +10 -4
  753. data/lib/puppet/provider/service/openbsd.rb +4 -4
  754. data/lib/puppet/provider/service/openrc.rb +1 -1
  755. data/lib/puppet/provider/service/openwrt.rb +1 -1
  756. data/lib/puppet/provider/service/rcng.rb +1 -0
  757. data/lib/puppet/provider/service/redhat.rb +3 -2
  758. data/lib/puppet/provider/service/runit.rb +8 -7
  759. data/lib/puppet/provider/service/service.rb +1 -0
  760. data/lib/puppet/provider/service/smf.rb +5 -2
  761. data/lib/puppet/provider/service/src.rb +16 -16
  762. data/lib/puppet/provider/service/systemd.rb +8 -4
  763. data/lib/puppet/provider/service/upstart.rb +8 -7
  764. data/lib/puppet/provider/service/windows.rb +22 -26
  765. data/lib/puppet/provider/user/aix.rb +3 -2
  766. data/lib/puppet/provider/user/directoryservice.rb +52 -44
  767. data/lib/puppet/provider/user/hpux.rb +15 -14
  768. data/lib/puppet/provider/user/ldap.rb +8 -6
  769. data/lib/puppet/provider/user/openbsd.rb +21 -20
  770. data/lib/puppet/provider/user/pw.rb +3 -2
  771. data/lib/puppet/provider/user/user_role_add.rb +19 -14
  772. data/lib/puppet/provider/user/useradd.rb +51 -41
  773. data/lib/puppet/provider/user/windows_adsi.rb +4 -1
  774. data/lib/puppet/provider.rb +9 -9
  775. data/lib/puppet/reference/configuration.rb +43 -42
  776. data/lib/puppet/reference/function.rb +1 -0
  777. data/lib/puppet/reference/indirection.rb +42 -41
  778. data/lib/puppet/reference/metaparameter.rb +1 -0
  779. data/lib/puppet/reference/providers.rb +2 -0
  780. data/lib/puppet/reference/report.rb +1 -0
  781. data/lib/puppet/reference/type.rb +4 -3
  782. data/lib/puppet/relationship.rb +3 -2
  783. data/lib/puppet/reports/http.rb +1 -1
  784. data/lib/puppet/reports/log.rb +1 -0
  785. data/lib/puppet/reports/store.rb +3 -1
  786. data/lib/puppet/reports.rb +4 -3
  787. data/lib/puppet/resource/catalog.rb +14 -10
  788. data/lib/puppet/resource/status.rb +1 -1
  789. data/lib/puppet/resource/type.rb +28 -18
  790. data/lib/puppet/resource/type_collection.rb +4 -0
  791. data/lib/puppet/resource.rb +24 -16
  792. data/lib/puppet/runtime.rb +1 -0
  793. data/lib/puppet/scheduler/job.rb +1 -0
  794. data/lib/puppet/scheduler/scheduler.rb +1 -0
  795. data/lib/puppet/scheduler/splay_job.rb +1 -0
  796. data/lib/puppet/scheduler/timer.rb +1 -0
  797. data/lib/puppet/scheduler.rb +1 -0
  798. data/lib/puppet/settings/alias_setting.rb +1 -0
  799. data/lib/puppet/settings/array_setting.rb +1 -1
  800. data/lib/puppet/settings/autosign_setting.rb +1 -1
  801. data/lib/puppet/settings/base_setting.rb +9 -5
  802. data/lib/puppet/settings/boolean_setting.rb +1 -0
  803. data/lib/puppet/settings/certificate_revocation_setting.rb +1 -1
  804. data/lib/puppet/settings/config_file.rb +3 -3
  805. data/lib/puppet/settings/directory_setting.rb +1 -0
  806. data/lib/puppet/settings/duration_setting.rb +1 -0
  807. data/lib/puppet/settings/enum_setting.rb +2 -1
  808. data/lib/puppet/settings/environment_conf.rb +9 -8
  809. data/lib/puppet/settings/errors.rb +2 -0
  810. data/lib/puppet/settings/file_or_directory_setting.rb +1 -5
  811. data/lib/puppet/settings/file_setting.rb +3 -13
  812. data/lib/puppet/settings/http_extra_headers_setting.rb +1 -1
  813. data/lib/puppet/settings/ini_file.rb +1 -0
  814. data/lib/puppet/settings/integer_setting.rb +1 -0
  815. data/lib/puppet/settings/path_setting.rb +1 -0
  816. data/lib/puppet/settings/port_setting.rb +2 -1
  817. data/lib/puppet/settings/priority_setting.rb +9 -8
  818. data/lib/puppet/settings/server_list_setting.rb +2 -2
  819. data/lib/puppet/settings/string_setting.rb +1 -0
  820. data/lib/puppet/settings/symbolic_enum_setting.rb +2 -1
  821. data/lib/puppet/settings/terminus_setting.rb +1 -0
  822. data/lib/puppet/settings/ttl_setting.rb +2 -0
  823. data/lib/puppet/settings/value_translator.rb +8 -7
  824. data/lib/puppet/settings.rb +89 -66
  825. data/lib/puppet/ssl/base.rb +4 -0
  826. data/lib/puppet/ssl/certificate.rb +3 -2
  827. data/lib/puppet/ssl/certificate_request.rb +9 -7
  828. data/lib/puppet/ssl/certificate_request_attributes.rb +3 -1
  829. data/lib/puppet/ssl/certificate_signer.rb +2 -3
  830. data/lib/puppet/ssl/digest.rb +1 -0
  831. data/lib/puppet/ssl/error.rb +2 -0
  832. data/lib/puppet/ssl/oids.rb +3 -3
  833. data/lib/puppet/ssl/openssl_loader.rb +1 -0
  834. data/lib/puppet/ssl/ssl_context.rb +11 -15
  835. data/lib/puppet/ssl/ssl_provider.rb +2 -1
  836. data/lib/puppet/ssl/state_machine.rb +1 -0
  837. data/lib/puppet/ssl/verifier.rb +2 -2
  838. data/lib/puppet/ssl.rb +1 -0
  839. data/lib/puppet/syntax_checkers/base64.rb +2 -1
  840. data/lib/puppet/syntax_checkers/epp.rb +1 -1
  841. data/lib/puppet/syntax_checkers/json.rb +1 -2
  842. data/lib/puppet/syntax_checkers/pp.rb +1 -1
  843. data/lib/puppet/syntax_checkers.rb +1 -0
  844. data/lib/puppet/test/test_helper.rb +16 -14
  845. data/lib/puppet/thread_local.rb +1 -0
  846. data/lib/puppet/transaction/additional_resource_generator.rb +5 -1
  847. data/lib/puppet/transaction/event.rb +5 -3
  848. data/lib/puppet/transaction/event_manager.rb +4 -3
  849. data/lib/puppet/transaction/persistence.rb +2 -1
  850. data/lib/puppet/transaction/report.rb +23 -15
  851. data/lib/puppet/transaction/resource_harness.rb +6 -3
  852. data/lib/puppet/transaction.rb +11 -6
  853. data/lib/puppet/trusted_external.rb +8 -4
  854. data/lib/puppet/type/component.rb +11 -5
  855. data/lib/puppet/type/exec.rb +26 -10
  856. data/lib/puppet/type/file/checksum.rb +1 -0
  857. data/lib/puppet/type/file/checksum_value.rb +3 -2
  858. data/lib/puppet/type/file/content.rb +16 -13
  859. data/lib/puppet/type/file/ctime.rb +2 -1
  860. data/lib/puppet/type/file/data_sync.rb +4 -2
  861. data/lib/puppet/type/file/ensure.rb +5 -5
  862. data/lib/puppet/type/file/group.rb +2 -1
  863. data/lib/puppet/type/file/mode.rb +4 -2
  864. data/lib/puppet/type/file/mtime.rb +2 -1
  865. data/lib/puppet/type/file/owner.rb +2 -1
  866. data/lib/puppet/type/file/selcontext.rb +2 -2
  867. data/lib/puppet/type/file/source.rb +12 -10
  868. data/lib/puppet/type/file/target.rb +2 -2
  869. data/lib/puppet/type/file/type.rb +2 -1
  870. data/lib/puppet/type/file.rb +22 -13
  871. data/lib/puppet/type/filebucket.rb +1 -0
  872. data/lib/puppet/type/group.rb +8 -8
  873. data/lib/puppet/type/notify.rb +1 -1
  874. data/lib/puppet/type/package.rb +21 -21
  875. data/lib/puppet/type/resources.rb +30 -25
  876. data/lib/puppet/type/schedule.rb +9 -10
  877. data/lib/puppet/type/service.rb +9 -7
  878. data/lib/puppet/type/stage.rb +1 -0
  879. data/lib/puppet/type/tidy.rb +9 -4
  880. data/lib/puppet/type/user.rb +28 -24
  881. data/lib/puppet/type/whit.rb +1 -1
  882. data/lib/puppet/type.rb +71 -61
  883. data/lib/puppet/util/at_fork/noop.rb +1 -0
  884. data/lib/puppet/util/at_fork/solaris.rb +2 -1
  885. data/lib/puppet/util/at_fork.rb +2 -1
  886. data/lib/puppet/util/autoload.rb +5 -0
  887. data/lib/puppet/util/backups.rb +3 -2
  888. data/lib/puppet/util/character_encoding.rb +1 -0
  889. data/lib/puppet/util/checksums.rb +11 -9
  890. data/lib/puppet/util/classgen.rb +8 -13
  891. data/lib/puppet/util/colors.rb +32 -31
  892. data/lib/puppet/util/command_line/puppet_option_parser.rb +12 -12
  893. data/lib/puppet/util/command_line/trollop.rb +693 -690
  894. data/lib/puppet/util/command_line.rb +1 -0
  895. data/lib/puppet/util/constant_inflector.rb +3 -3
  896. data/lib/puppet/util/diff.rb +13 -13
  897. data/lib/puppet/util/docs.rb +3 -0
  898. data/lib/puppet/util/errors.rb +1 -0
  899. data/lib/puppet/util/execution.rb +16 -18
  900. data/lib/puppet/util/execution_stub.rb +1 -0
  901. data/lib/puppet/util/feature.rb +1 -0
  902. data/lib/puppet/util/file_watcher.rb +2 -0
  903. data/lib/puppet/util/fileparsing.rb +2 -0
  904. data/lib/puppet/util/filetype.rb +3 -0
  905. data/lib/puppet/util/http_proxy.rb +1 -0
  906. data/lib/puppet/util/inifile.rb +3 -3
  907. data/lib/puppet/util/instance_loader.rb +2 -0
  908. data/lib/puppet/util/json.rb +1 -0
  909. data/lib/puppet/util/json_lockfile.rb +3 -1
  910. data/lib/puppet/util/ldap/connection.rb +19 -18
  911. data/lib/puppet/util/ldap/generator.rb +1 -0
  912. data/lib/puppet/util/ldap/manager.rb +3 -2
  913. data/lib/puppet/util/ldap.rb +1 -0
  914. data/lib/puppet/util/libuser.rb +1 -1
  915. data/lib/puppet/util/limits.rb +1 -0
  916. data/lib/puppet/util/lockfile.rb +1 -0
  917. data/lib/puppet/util/log/destination.rb +1 -0
  918. data/lib/puppet/util/log/destinations.rb +14 -13
  919. data/lib/puppet/util/log.rb +21 -17
  920. data/lib/puppet/util/logging.rb +18 -14
  921. data/lib/puppet/util/metaid.rb +1 -0
  922. data/lib/puppet/util/metric.rb +2 -0
  923. data/lib/puppet/util/monkey_patches.rb +1 -0
  924. data/lib/puppet/util/multi_match.rb +4 -1
  925. data/lib/puppet/util/network_device/base.rb +1 -1
  926. data/lib/puppet/util/network_device/config.rb +3 -4
  927. data/lib/puppet/util/network_device/transport/base.rb +0 -1
  928. data/lib/puppet/util/network_device/transport.rb +1 -0
  929. data/lib/puppet/util/network_device.rb +1 -0
  930. data/lib/puppet/util/package/version/debian.rb +5 -3
  931. data/lib/puppet/util/package/version/gem.rb +2 -0
  932. data/lib/puppet/util/package/version/pip.rb +7 -2
  933. data/lib/puppet/util/package/version/range/eq.rb +2 -0
  934. data/lib/puppet/util/package/version/range/gt.rb +2 -0
  935. data/lib/puppet/util/package/version/range/gt_eq.rb +2 -0
  936. data/lib/puppet/util/package/version/range/lt.rb +2 -0
  937. data/lib/puppet/util/package/version/range/lt_eq.rb +2 -0
  938. data/lib/puppet/util/package/version/range/min_max.rb +4 -0
  939. data/lib/puppet/util/package/version/range/simple.rb +1 -0
  940. data/lib/puppet/util/package/version/range.rb +3 -0
  941. data/lib/puppet/util/package/version/rpm.rb +6 -4
  942. data/lib/puppet/util/package.rb +3 -0
  943. data/lib/puppet/util/pidlock.rb +7 -7
  944. data/lib/puppet/util/platform.rb +1 -0
  945. data/lib/puppet/util/plist.rb +1 -1
  946. data/lib/puppet/util/posix.rb +8 -5
  947. data/lib/puppet/util/profiler/aggregate.rb +2 -5
  948. data/lib/puppet/util/profiler/around_profiler.rb +1 -1
  949. data/lib/puppet/util/profiler/logging.rb +1 -0
  950. data/lib/puppet/util/profiler/object_counts.rb +1 -0
  951. data/lib/puppet/util/profiler/wall_clock.rb +1 -0
  952. data/lib/puppet/util/profiler.rb +1 -0
  953. data/lib/puppet/util/provider_features.rb +4 -0
  954. data/lib/puppet/util/psych_support.rb +1 -0
  955. data/lib/puppet/util/rdoc/code_objects.rb +3 -7
  956. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +37 -50
  957. data/lib/puppet/util/rdoc/generators/template/puppet/puppet.rb +50 -68
  958. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +5 -5
  959. data/lib/puppet/util/rdoc/parser/puppet_parser_rdoc2.rb +1 -0
  960. data/lib/puppet/util/rdoc/parser.rb +1 -0
  961. data/lib/puppet/util/rdoc.rb +1 -1
  962. data/lib/puppet/util/reference.rb +1 -1
  963. data/lib/puppet/util/resource_template.rb +2 -0
  964. data/lib/puppet/util/retry_action.rb +3 -3
  965. data/lib/puppet/util/rpm_compare.rb +6 -3
  966. data/lib/puppet/util/rubygems.rb +1 -1
  967. data/lib/puppet/util/run_mode.rb +2 -1
  968. data/lib/puppet/util/selinux.rb +22 -11
  969. data/lib/puppet/util/skip_tags.rb +1 -0
  970. data/lib/puppet/util/splayer.rb +1 -0
  971. data/lib/puppet/util/storage.rb +2 -1
  972. data/lib/puppet/util/suidmanager.rb +8 -5
  973. data/lib/puppet/util/symbolic_file_mode.rb +3 -1
  974. data/lib/puppet/util/tag_set.rb +1 -0
  975. data/lib/puppet/util/tagging.rb +2 -1
  976. data/lib/puppet/util/terminal.rb +1 -0
  977. data/lib/puppet/util/user_attr.rb +1 -0
  978. data/lib/puppet/util/warnings.rb +3 -0
  979. data/lib/puppet/util/watched_file.rb +1 -0
  980. data/lib/puppet/util/watcher/change_watcher.rb +1 -0
  981. data/lib/puppet/util/watcher/periodic_watcher.rb +1 -0
  982. data/lib/puppet/util/watcher/timer.rb +1 -0
  983. data/lib/puppet/util/watcher.rb +1 -0
  984. data/lib/puppet/util/windows/access_control_entry.rb +1 -0
  985. data/lib/puppet/util/windows/access_control_list.rb +3 -2
  986. data/lib/puppet/util/windows/adsi.rb +32 -25
  987. data/lib/puppet/util/windows/com.rb +5 -3
  988. data/lib/puppet/util/windows/daemon.rb +33 -33
  989. data/lib/puppet/util/windows/error.rb +3 -2
  990. data/lib/puppet/util/windows/eventlog.rb +8 -5
  991. data/lib/puppet/util/windows/file.rb +30 -24
  992. data/lib/puppet/util/windows/monkey_patches/process.rb +0 -1
  993. data/lib/puppet/util/windows/principal.rb +27 -27
  994. data/lib/puppet/util/windows/process.rb +7 -6
  995. data/lib/puppet/util/windows/registry.rb +43 -41
  996. data/lib/puppet/util/windows/root_certs.rb +1 -0
  997. data/lib/puppet/util/windows/security.rb +43 -44
  998. data/lib/puppet/util/windows/security_descriptor.rb +1 -0
  999. data/lib/puppet/util/windows/service.rb +12 -1
  1000. data/lib/puppet/util/windows/sid.rb +6 -6
  1001. data/lib/puppet/util/windows/string.rb +1 -0
  1002. data/lib/puppet/util/windows/user.rb +33 -33
  1003. data/lib/puppet/util/windows.rb +6 -0
  1004. data/lib/puppet/util/yaml.rb +1 -0
  1005. data/lib/puppet/util.rb +18 -20
  1006. data/lib/puppet/vendor.rb +2 -1
  1007. data/lib/puppet/version.rb +3 -1
  1008. data/lib/puppet/x509/cert_provider.rb +7 -1
  1009. data/lib/puppet/x509/pem_store.rb +1 -0
  1010. data/lib/puppet/x509.rb +1 -0
  1011. data/lib/puppet.rb +1 -0
  1012. data/lib/puppet_pal.rb +1 -0
  1013. data/lib/puppet_x.rb +1 -0
  1014. data/locales/puppet.pot +195 -199
  1015. data/man/man5/puppet.conf.5 +2 -2
  1016. data/man/man8/puppet-agent.8 +1 -1
  1017. data/man/man8/puppet-apply.8 +1 -1
  1018. data/man/man8/puppet-catalog.8 +1 -1
  1019. data/man/man8/puppet-config.8 +1 -1
  1020. data/man/man8/puppet-describe.8 +1 -1
  1021. data/man/man8/puppet-device.8 +1 -1
  1022. data/man/man8/puppet-doc.8 +1 -1
  1023. data/man/man8/puppet-epp.8 +1 -1
  1024. data/man/man8/puppet-facts.8 +1 -1
  1025. data/man/man8/puppet-filebucket.8 +1 -1
  1026. data/man/man8/puppet-generate.8 +1 -1
  1027. data/man/man8/puppet-help.8 +1 -1
  1028. data/man/man8/puppet-lookup.8 +1 -1
  1029. data/man/man8/puppet-module.8 +1 -1
  1030. data/man/man8/puppet-node.8 +1 -1
  1031. data/man/man8/puppet-parser.8 +1 -1
  1032. data/man/man8/puppet-plugin.8 +1 -1
  1033. data/man/man8/puppet-report.8 +1 -1
  1034. data/man/man8/puppet-resource.8 +1 -1
  1035. data/man/man8/puppet-script.8 +1 -1
  1036. data/man/man8/puppet-ssl.8 +1 -1
  1037. data/man/man8/puppet.8 +2 -2
  1038. data/spec/integration/application/agent_spec.rb +13 -0
  1039. data/spec/lib/puppet_spec/puppetserver.rb +1 -0
  1040. data/spec/lib/puppet_spec/verbose.rb +5 -3
  1041. data/spec/unit/agent_spec.rb +2 -7
  1042. data/spec/unit/daemon_spec.rb +3 -20
  1043. data/spec/unit/indirector/catalog/compiler_spec.rb +17 -0
  1044. data/spec/unit/indirector/catalog/rest_spec.rb +17 -0
  1045. data/spec/unit/provider/package/appdmg_spec.rb +1 -1
  1046. data/spec/unit/provider/package/dnf_spec.rb +7 -0
  1047. data/spec/unit/provider/package/dnfmodule_spec.rb +22 -2
  1048. data/spec/unit/provider/service/systemd_spec.rb +8 -6
  1049. data/spec/unit/type/exec_spec.rb +14 -9
  1050. data/spec/unit/util/rpm_compare_spec.rb +8 -8
  1051. metadata +2 -3
  1052. 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)
@@ -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?