openvox 7.37.1 → 8.19.0

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