puppet 4.3.2 → 4.4.0

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

Potentially problematic release.


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

Files changed (487) hide show
  1. checksums.yaml +4 -4
  2. data/COMMITTERS.md +2 -2
  3. data/CONTRIBUTING.md +6 -6
  4. data/LICENSE +1 -1
  5. data/README.md +8 -9
  6. data/conf/auth.conf +2 -2
  7. data/ext/README.environment +1 -1
  8. data/ext/debian/README.source +1 -1
  9. data/ext/debian/control +1 -1
  10. data/ext/debian/copyright +4 -4
  11. data/ext/debian/puppetmaster.README.debian +11 -9
  12. data/ext/emacs/puppet-mode.el +1 -1
  13. data/ext/envpuppet +2 -2
  14. data/ext/ips/puppetagent.xml +1 -1
  15. data/ext/ips/puppetmaster.xml +1 -1
  16. data/ext/project_data.yaml +8 -0
  17. data/ext/puppet-test +3 -3
  18. data/ext/rack/example-passenger-vhost.conf +1 -1
  19. data/ext/redhat/puppet.spec.erb +2 -2
  20. data/ext/regexp_nodes/regexp_nodes.rb +1 -1
  21. data/ext/solaris/pkginfo +1 -1
  22. data/ext/solaris/smf/puppet.xml +1 -1
  23. data/ext/suse/puppet.spec +2 -2
  24. data/ext/upload_facts.rb +1 -1
  25. data/ext/windows/puppet_interactive.bat +6 -0
  26. data/ext/windows/puppet_shell.bat +9 -0
  27. data/ext/windows/run_puppet_interactive.bat +9 -0
  28. data/ext/yaml_nodes.rb +1 -1
  29. data/install.rb +30 -20
  30. data/lib/puppet/agent.rb +1 -1
  31. data/lib/puppet/application/agent.rb +4 -2
  32. data/lib/puppet/application/apply.rb +7 -4
  33. data/lib/puppet/application/cert.rb +1 -1
  34. data/lib/puppet/application/device.rb +1 -1
  35. data/lib/puppet/application/filebucket.rb +1 -1
  36. data/lib/puppet/application/inspect.rb +1 -1
  37. data/lib/puppet/application/lookup.rb +4 -4
  38. data/lib/puppet/application/master.rb +2 -2
  39. data/lib/puppet/application/resource.rb +1 -1
  40. data/lib/puppet/configurer.rb +100 -22
  41. data/lib/puppet/data_providers/hiera_config.rb +28 -3
  42. data/lib/puppet/data_providers/hiera_interpolate.rb +30 -15
  43. data/lib/puppet/data_providers/hiera_support.rb +1 -1
  44. data/lib/puppet/data_providers/json_data_provider_factory.rb +2 -2
  45. data/lib/puppet/data_providers/yaml_data_provider_factory.rb +2 -2
  46. data/lib/puppet/defaults.rb +65 -19
  47. data/lib/puppet/environments.rb +3 -1
  48. data/lib/puppet/face/config.rb +1 -1
  49. data/lib/puppet/face/epp.rb +1 -1
  50. data/lib/puppet/face/help/man.erb +1 -1
  51. data/lib/puppet/face/module/install.rb +6 -6
  52. data/lib/puppet/face/parser.rb +12 -9
  53. data/lib/puppet/face/status.rb +2 -1
  54. data/lib/puppet/feature/cfpropertylist.rb +3 -0
  55. data/lib/puppet/feature/telnet.rb +9 -0
  56. data/lib/puppet/file_serving/http_metadata.rb +46 -0
  57. data/lib/puppet/file_serving/metadata.rb +18 -2
  58. data/lib/puppet/file_serving/terminus_selector.rb +2 -0
  59. data/lib/puppet/file_system.rb +2 -2
  60. data/lib/puppet/file_system/file_impl.rb +2 -2
  61. data/lib/puppet/file_system/memory_impl.rb +1 -1
  62. data/lib/puppet/file_system/uniquefile.rb +1 -1
  63. data/lib/puppet/forge.rb +1 -1
  64. data/lib/puppet/forge/repository.rb +1 -31
  65. data/lib/puppet/functions.rb +45 -6
  66. data/lib/puppet/functions/assert_type.rb +9 -9
  67. data/lib/puppet/functions/each.rb +5 -13
  68. data/lib/puppet/functions/filter.rb +5 -14
  69. data/lib/puppet/functions/map.rb +6 -14
  70. data/lib/puppet/functions/reduce.rb +5 -13
  71. data/lib/puppet/functions/reverse_each.rb +82 -0
  72. data/lib/puppet/functions/scanf.rb +15 -18
  73. data/lib/puppet/functions/slice.rb +22 -36
  74. data/lib/puppet/functions/split.rb +2 -2
  75. data/lib/puppet/functions/step.rb +88 -0
  76. data/lib/puppet/functions/type.rb +70 -0
  77. data/lib/puppet/graph/rb_tree_map.rb +1 -1
  78. data/lib/puppet/indirector/catalog/compiler.rb +188 -5
  79. data/lib/puppet/indirector/file_content/http.rb +15 -0
  80. data/lib/puppet/indirector/file_metadata/http.rb +27 -0
  81. data/lib/puppet/indirector/generic_http.rb +16 -0
  82. data/lib/puppet/indirector/node/exec.rb +1 -1
  83. data/lib/puppet/indirector/node/ldap.rb +1 -1
  84. data/lib/puppet/indirector/rest.rb +2 -1
  85. data/lib/puppet/info_service/class_information_service.rb +13 -12
  86. data/lib/puppet/loaders.rb +1 -0
  87. data/lib/puppet/module.rb +3 -0
  88. data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +9 -2
  89. data/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +1 -1
  90. data/lib/puppet/module_tool/skeleton/templates/generator/tests/init.pp.erb +2 -2
  91. data/lib/puppet/module_tool/tar/mini.rb +3 -3
  92. data/lib/puppet/network/http/pool.rb +9 -0
  93. data/lib/puppet/node.rb +1 -1
  94. data/lib/puppet/node/environment.rb +11 -2
  95. data/lib/puppet/parser/ast/pops_bridge.rb +19 -22
  96. data/lib/puppet/parser/compiler.rb +3 -3
  97. data/lib/puppet/parser/environment_compiler.rb +0 -1
  98. data/lib/puppet/parser/functions.rb +28 -16
  99. data/lib/puppet/parser/functions/fqdn_rand.rb +1 -1
  100. data/lib/puppet/parser/functions/inline_template.rb +1 -1
  101. data/lib/puppet/parser/functions/map.rb +1 -1
  102. data/lib/puppet/parser/functions/scanf.rb +15 -26
  103. data/lib/puppet/parser/functions/slice.rb +17 -24
  104. data/lib/puppet/parser/functions/split.rb +1 -1
  105. data/lib/puppet/parser/resource.rb +19 -17
  106. data/lib/puppet/parser/scope.rb +176 -5
  107. data/lib/puppet/plugins/data_providers/data_provider.rb +54 -13
  108. data/lib/puppet/pops.rb +0 -8
  109. data/lib/puppet/pops/adaptable.rb +4 -1
  110. data/lib/puppet/pops/adapters.rb +38 -13
  111. data/lib/puppet/pops/binder/binder.rb +21 -17
  112. data/lib/puppet/pops/binder/binder_issues.rb +8 -6
  113. data/lib/puppet/pops/binder/bindings_checker.rb +12 -8
  114. data/lib/puppet/pops/binder/bindings_composer.rb +16 -12
  115. data/lib/puppet/pops/binder/bindings_factory.rb +108 -104
  116. data/lib/puppet/pops/binder/bindings_model.rb +49 -47
  117. data/lib/puppet/pops/binder/config/diagnostic_producer.rb +10 -6
  118. data/lib/puppet/pops/binder/injector.rb +53 -48
  119. data/lib/puppet/pops/binder/key_factory.rb +10 -6
  120. data/lib/puppet/pops/binder/producers.rb +67 -62
  121. data/lib/puppet/pops/evaluator/access_operator.rb +95 -93
  122. data/lib/puppet/pops/evaluator/closure.rb +84 -68
  123. data/lib/puppet/pops/evaluator/collector_transformer.rb +18 -14
  124. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +0 -1
  125. data/lib/puppet/pops/evaluator/compare_operator.rb +13 -9
  126. data/lib/puppet/pops/evaluator/epp_evaluator.rb +9 -8
  127. data/lib/puppet/pops/evaluator/evaluator_impl.rb +78 -76
  128. data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +85 -0
  129. data/lib/puppet/pops/evaluator/relationship_operator.rb +13 -11
  130. data/lib/puppet/pops/evaluator/runtime3_converter.rb +5 -0
  131. data/lib/puppet/pops/evaluator/runtime3_support.rb +41 -45
  132. data/lib/puppet/pops/issue_reporter.rb +6 -4
  133. data/lib/puppet/pops/issues.rb +34 -11
  134. data/lib/puppet/pops/loader/base_loader.rb +1 -1
  135. data/lib/puppet/pops/loader/loader.rb +1 -1
  136. data/lib/puppet/pops/loader/loader_paths.rb +15 -0
  137. data/lib/puppet/pops/loader/module_loaders.rb +17 -13
  138. data/lib/puppet/pops/loader/puppet_function_instantiator.rb +16 -12
  139. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +16 -3
  140. data/lib/puppet/pops/loader/type_definition_instantiator.rb +55 -0
  141. data/lib/puppet/pops/loaders.rb +51 -9
  142. data/lib/puppet/pops/lookup.rb +14 -12
  143. data/lib/puppet/pops/merge_strategy.rb +16 -19
  144. data/lib/puppet/pops/model/factory.rb +26 -2
  145. data/lib/puppet/pops/model/model.rb +8 -8
  146. data/lib/puppet/pops/model/model_label_provider.rb +13 -7
  147. data/lib/puppet/pops/model/model_meta.rb +17 -0
  148. data/lib/puppet/pops/model/model_tree_dumper.rb +8 -0
  149. data/lib/puppet/pops/parser/egrammar.ra +38 -14
  150. data/lib/puppet/pops/parser/eparser.rb +1353 -1276
  151. data/lib/puppet/pops/parser/epp_support.rb +11 -7
  152. data/lib/puppet/pops/parser/evaluating_parser.rb +14 -10
  153. data/lib/puppet/pops/parser/heredoc_support.rb +15 -11
  154. data/lib/puppet/pops/parser/lexer2.rb +26 -19
  155. data/lib/puppet/pops/parser/lexer_support.rb +85 -7
  156. data/lib/puppet/pops/parser/locator.rb +21 -0
  157. data/lib/puppet/pops/parser/parser_support.rb +19 -16
  158. data/lib/puppet/pops/parser/slurp_support.rb +11 -7
  159. data/lib/puppet/pops/types/class_loader.rb +23 -19
  160. data/lib/puppet/pops/types/enumeration.rb +9 -26
  161. data/lib/puppet/pops/types/iterable.rb +308 -0
  162. data/lib/puppet/pops/types/recursion_guard.rb +82 -0
  163. data/lib/puppet/pops/types/type_acceptor.rb +25 -0
  164. data/lib/puppet/pops/types/type_asserter.rb +10 -9
  165. data/lib/puppet/pops/types/type_calculator.rb +138 -381
  166. data/lib/puppet/pops/types/type_factory.rb +91 -57
  167. data/lib/puppet/pops/types/type_formatter.rb +334 -0
  168. data/lib/puppet/pops/types/type_mismatch_describer.rb +226 -59
  169. data/lib/puppet/pops/types/type_parser.rb +159 -112
  170. data/lib/puppet/pops/types/types.rb +2057 -1247
  171. data/lib/puppet/pops/utils.rb +11 -10
  172. data/lib/puppet/pops/validation.rb +11 -9
  173. data/lib/puppet/pops/validation/checker4_0.rb +83 -55
  174. data/lib/puppet/pops/validation/validator_factory_4_0.rb +8 -4
  175. data/lib/puppet/provider/aixobject.rb +1 -1
  176. data/lib/puppet/provider/augeas/augeas.rb +1 -1
  177. data/lib/puppet/provider/cron/crontab.rb +1 -1
  178. data/lib/puppet/provider/exec/windows.rb +1 -1
  179. data/lib/puppet/provider/macauthorization/macauthorization.rb +10 -9
  180. data/lib/puppet/provider/nameservice/directoryservice.rb +35 -50
  181. data/lib/puppet/provider/package/appdmg.rb +3 -2
  182. data/lib/puppet/provider/package/dnf.rb +1 -1
  183. data/lib/puppet/provider/package/pip.rb +5 -8
  184. data/lib/puppet/provider/package/pip3.rb +1 -1
  185. data/lib/puppet/provider/package/pkg.rb +1 -1
  186. data/lib/puppet/provider/package/pkgdmg.rb +3 -2
  187. data/lib/puppet/provider/package/pkgng.rb +13 -4
  188. data/lib/puppet/provider/package/windows.rb +1 -1
  189. data/lib/puppet/provider/package/yum.rb +1 -1
  190. data/lib/puppet/provider/package/zypper.rb +19 -0
  191. data/lib/puppet/provider/service/debian.rb +2 -2
  192. data/lib/puppet/provider/service/launchd.rb +6 -18
  193. data/lib/puppet/provider/service/systemd.rb +9 -2
  194. data/lib/puppet/provider/sshkey/parsed.rb +1 -1
  195. data/lib/puppet/provider/user/aix.rb +1 -1
  196. data/lib/puppet/provider/user/directoryservice.rb +33 -58
  197. data/lib/puppet/provider/zfs/zfs.rb +1 -1
  198. data/lib/puppet/provider/zpool/zpool.rb +1 -1
  199. data/lib/puppet/reference/configuration.rb +1 -1
  200. data/lib/puppet/reference/providers.rb +1 -1
  201. data/lib/puppet/resource.rb +15 -12
  202. data/lib/puppet/resource/capability_finder.rb +20 -13
  203. data/lib/puppet/resource/catalog.rb +60 -3
  204. data/lib/puppet/resource/status.rb +11 -2
  205. data/lib/puppet/resource/type.rb +28 -38
  206. data/lib/puppet/settings.rb +1 -1
  207. data/lib/puppet/settings/config_file.rb +1 -1
  208. data/lib/puppet/settings/environment_conf.rb +13 -5
  209. data/lib/puppet/ssl/certificate_factory.rb +3 -3
  210. data/lib/puppet/ssl/certificate_request.rb +4 -4
  211. data/lib/puppet/ssl/certificate_signer.rb +1 -1
  212. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  213. data/lib/puppet/test/test_helper.rb +16 -4
  214. data/lib/puppet/transaction.rb +15 -2
  215. data/lib/puppet/transaction/additional_resource_generator.rb +6 -2
  216. data/lib/puppet/transaction/report.rb +31 -1
  217. data/lib/puppet/transaction/resource_harness.rb +0 -25
  218. data/lib/puppet/type.rb +11 -11
  219. data/lib/puppet/type/augeas.rb +1 -1
  220. data/lib/puppet/type/cron.rb +12 -12
  221. data/lib/puppet/type/file.rb +91 -39
  222. data/lib/puppet/type/file/checksum_value.rb +53 -0
  223. data/lib/puppet/type/file/content.rb +26 -111
  224. data/lib/puppet/type/file/data_sync.rb +84 -0
  225. data/lib/puppet/type/file/ensure.rb +17 -14
  226. data/lib/puppet/type/file/selcontext.rb +1 -1
  227. data/lib/puppet/type/file/source.rb +103 -18
  228. data/lib/puppet/type/filebucket.rb +1 -1
  229. data/lib/puppet/type/interface.rb +8 -3
  230. data/lib/puppet/type/macauthorization.rb +1 -1
  231. data/lib/puppet/type/package.rb +6 -0
  232. data/lib/puppet/type/schedule.rb +1 -1
  233. data/lib/puppet/type/stage.rb +1 -1
  234. data/lib/puppet/type/user.rb +19 -17
  235. data/lib/puppet/type/yumrepo.rb +20 -0
  236. data/lib/puppet/util.rb +109 -22
  237. data/lib/puppet/util/autoload.rb +16 -11
  238. data/lib/puppet/util/checksums.rb +74 -31
  239. data/lib/puppet/util/execution.rb +1 -1
  240. data/lib/puppet/util/http_proxy.rb +72 -0
  241. data/lib/puppet/util/log.rb +2 -0
  242. data/lib/puppet/util/logging.rb +43 -1
  243. data/lib/puppet/util/monkey_patches.rb +2 -2
  244. data/lib/puppet/util/multi_match.rb +51 -0
  245. data/lib/puppet/util/network_device/cisco/device.rb +10 -2
  246. data/lib/puppet/util/network_device/cisco/interface.rb +21 -8
  247. data/lib/puppet/util/network_device/transport/ssh.rb +7 -3
  248. data/lib/puppet/util/network_device/transport/telnet.rb +39 -36
  249. data/lib/puppet/util/plist.rb +130 -0
  250. data/lib/puppet/util/resource_template.rb +1 -1
  251. data/lib/puppet/util/run_mode.rb +2 -2
  252. data/lib/puppet/util/skip_tags.rb +9 -0
  253. data/lib/puppet/util/windows/access_control_entry.rb +1 -1
  254. data/lib/puppet/util/windows/access_control_list.rb +3 -3
  255. data/lib/puppet/util/windows/adsi.rb +4 -4
  256. data/lib/puppet/util/windows/api_types.rb +24 -18
  257. data/lib/puppet/util/windows/com.rb +3 -3
  258. data/lib/puppet/util/windows/error.rb +1 -1
  259. data/lib/puppet/util/windows/file.rb +8 -8
  260. data/lib/puppet/util/windows/principal.rb +23 -14
  261. data/lib/puppet/util/windows/process.rb +78 -11
  262. data/lib/puppet/util/windows/registry.rb +1 -1
  263. data/lib/puppet/util/windows/root_certs.rb +5 -5
  264. data/lib/puppet/util/windows/security.rb +33 -35
  265. data/lib/puppet/util/windows/security_descriptor.rb +1 -1
  266. data/lib/puppet/util/windows/sid.rb +42 -4
  267. data/lib/puppet/util/windows/taskscheduler.rb +15 -15
  268. data/lib/puppet/util/windows/user.rb +10 -10
  269. data/lib/puppet/vendor/deep_merge/deep_merge.gemspec +1 -1
  270. data/lib/puppet/vendor/pathspec/LICENSE +2 -2
  271. data/lib/puppet/vendor/pathspec/README.md +1 -1
  272. data/lib/puppet/vendor/rgen/README.rdoc +1 -1
  273. data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +14 -0
  274. data/lib/puppet/version.rb +1 -1
  275. data/lib/semver.rb +17 -1
  276. data/man/man5/puppet.conf.5 +12 -12
  277. data/man/man8/extlookup2hiera.8 +1 -1
  278. data/man/man8/puppet-agent.8 +2 -2
  279. data/man/man8/puppet-apply.8 +2 -2
  280. data/man/man8/puppet-ca.8 +2 -2
  281. data/man/man8/puppet-catalog.8 +2 -2
  282. data/man/man8/puppet-cert.8 +2 -2
  283. data/man/man8/puppet-certificate.8 +2 -2
  284. data/man/man8/puppet-certificate_request.8 +2 -2
  285. data/man/man8/puppet-certificate_revocation_list.8 +2 -2
  286. data/man/man8/puppet-config.8 +3 -3
  287. data/man/man8/puppet-describe.8 +1 -1
  288. data/man/man8/puppet-device.8 +1 -1
  289. data/man/man8/puppet-doc.8 +1 -1
  290. data/man/man8/puppet-epp.8 +2 -2
  291. data/man/man8/puppet-facts.8 +2 -2
  292. data/man/man8/puppet-file.8 +2 -2
  293. data/man/man8/puppet-filebucket.8 +2 -2
  294. data/man/man8/puppet-help.8 +2 -2
  295. data/man/man8/puppet-inspect.8 +2 -2
  296. data/man/man8/puppet-key.8 +2 -2
  297. data/man/man8/puppet-man.8 +2 -2
  298. data/man/man8/puppet-master.8 +2 -2
  299. data/man/man8/puppet-module.8 +9 -9
  300. data/man/man8/puppet-node.8 +2 -2
  301. data/man/man8/puppet-parser.8 +2 -2
  302. data/man/man8/puppet-plugin.8 +2 -2
  303. data/man/man8/puppet-report.8 +2 -2
  304. data/man/man8/puppet-resource.8 +2 -2
  305. data/man/man8/puppet-resource_type.8 +2 -2
  306. data/man/man8/puppet-status.8 +3 -3
  307. data/man/man8/puppet.8 +1 -1
  308. data/spec/fixtures/module.tar.gz +0 -0
  309. data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +1 -0
  310. data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/manifests/init.pp +0 -1
  311. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/data/empty.json +0 -0
  312. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/hiera.yaml +5 -0
  313. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/manifests/init.pp +2 -0
  314. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/metadata.json +9 -0
  315. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/data/empty.yaml +1 -0
  316. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/hiera.yaml +5 -0
  317. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/manifests/init.pp +2 -0
  318. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/metadata.json +9 -0
  319. data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/data/first.json +2 -1
  320. data/spec/fixtures/unit/module/trailing-comma.json +1 -1
  321. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/manifests/init.pp +3 -1
  322. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/types/zero.pp +1 -0
  323. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseeone.pp +1 -0
  324. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseezero.pp +1 -0
  325. data/spec/fixtures/unit/provider/package/yum/yum-check-update-broken-notices.txt +187 -0
  326. data/spec/fixtures/unit/provider/sshkey/parsed/sample_with_blank_lines +8 -0
  327. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +205 -0
  328. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_not_update_if_content_on_disk_is_up-to-date.yml +213 -0
  329. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +213 -0
  330. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +205 -0
  331. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +197 -0
  332. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +205 -0
  333. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +205 -0
  334. data/spec/integration/defaults_spec.rb +14 -2
  335. data/spec/integration/file_system/uniquefile_spec.rb +29 -0
  336. data/spec/integration/module_tool/tar/mini_spec.rb +28 -0
  337. data/spec/integration/node/environment_spec.rb +13 -0
  338. data/spec/integration/parser/dynamic_scoping_spec.rb +67 -0
  339. data/spec/integration/parser/parameter_defaults_spec.rb +336 -0
  340. data/spec/integration/parser/undef_param_spec.rb +8 -0
  341. data/spec/integration/provider/yumrepo_spec.rb +1 -1
  342. data/spec/integration/test/test_helper_spec.rb +28 -0
  343. data/spec/integration/transaction/report_spec.rb +16 -0
  344. data/spec/integration/transaction_spec.rb +11 -0
  345. data/spec/integration/type/file_spec.rb +194 -4
  346. data/spec/integration/type/package_spec.rb +5 -1
  347. data/spec/integration/type/tidy_spec.rb +21 -9
  348. data/spec/integration/util/execution_spec.rb +22 -0
  349. data/spec/integration/util/windows/principal_spec.rb +90 -4
  350. data/spec/integration/util/windows/process_spec.rb +31 -0
  351. data/spec/integration/util/windows/security_spec.rb +6 -6
  352. data/spec/integration/util/windows/user_spec.rb +1 -1
  353. data/spec/integration/util_spec.rb +49 -27
  354. data/spec/lib/puppet_spec/compiler.rb +17 -0
  355. data/spec/lib/puppet_spec/files.rb +2 -2
  356. data/spec/lib/puppet_spec/pops.rb +13 -0
  357. data/spec/shared_behaviours/iterative_functions.rb +1 -1
  358. data/spec/shared_contexts/types_setup.rb +96 -0
  359. data/spec/unit/agent_spec.rb +1 -0
  360. data/spec/unit/application/agent_spec.rb +10 -0
  361. data/spec/unit/application/apply_spec.rb +9 -0
  362. data/spec/unit/configurer/downloader_spec.rb +5 -5
  363. data/spec/unit/configurer_spec.rb +271 -39
  364. data/spec/unit/data_providers/hiera_interpolation_spec.rb +57 -0
  365. data/spec/unit/defaults_spec.rb +15 -0
  366. data/spec/unit/environments_spec.rb +24 -4
  367. data/spec/unit/face/parser_spec.rb +43 -2
  368. data/spec/unit/file_serving/http_metadata_spec.rb +85 -0
  369. data/spec/unit/file_serving/metadata_spec.rb +50 -0
  370. data/spec/unit/file_serving/terminus_selector_spec.rb +12 -2
  371. data/spec/unit/file_system_spec.rb +26 -0
  372. data/spec/unit/functions/assert_type_spec.rb +36 -2
  373. data/spec/unit/functions/defined_spec.rb +2 -2
  374. data/spec/unit/functions/epp_spec.rb +11 -3
  375. data/spec/unit/functions/lookup_spec.rb +58 -13
  376. data/spec/unit/functions/regsubst_spec.rb +1 -1
  377. data/spec/unit/functions/reverse_each_spec.rb +108 -0
  378. data/spec/unit/functions/step_spec.rb +113 -0
  379. data/spec/unit/functions/type_spec.rb +35 -0
  380. data/spec/unit/functions4_spec.rb +61 -5
  381. data/spec/unit/indirector/catalog/compiler_spec.rb +705 -4
  382. data/spec/unit/indirector/file_bucket_file/file_spec.rb +1 -1
  383. data/spec/unit/indirector/indirection_spec.rb +1 -1
  384. data/spec/unit/info_service_spec.rb +94 -32
  385. data/spec/unit/module_spec.rb +14 -0
  386. data/spec/unit/module_tool/applications/builder_spec.rb +4 -4
  387. data/spec/unit/network/authstore_spec.rb +1 -1
  388. data/spec/unit/network/http/connection_spec.rb +1 -0
  389. data/spec/unit/network/http/pool_spec.rb +30 -0
  390. data/spec/unit/node_spec.rb +1 -1
  391. data/spec/unit/parser/compiler_spec.rb +16 -0
  392. data/spec/unit/parser/scope_spec.rb +28 -11
  393. data/spec/unit/pops/evaluator/access_ops_spec.rb +3 -3
  394. data/spec/unit/pops/evaluator/comparison_ops_spec.rb +3 -0
  395. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +7 -1
  396. data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +4 -4
  397. data/spec/unit/pops/evaluator/json_strict_literal_evaluator_spec.rb +63 -0
  398. data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +6 -0
  399. data/spec/unit/pops/loaders/dependency_loader_spec.rb +53 -0
  400. data/spec/unit/pops/loaders/loaders_spec.rb +44 -1
  401. data/spec/unit/pops/parser/lexer2_spec.rb +112 -3
  402. data/spec/unit/pops/parser/parse_calls_spec.rb +8 -0
  403. data/spec/unit/pops/parser/parser_spec.rb +10 -0
  404. data/spec/unit/pops/parser/source_pos_adapter_spec.rb +26 -0
  405. data/spec/unit/pops/types/iterable_spec.rb +262 -0
  406. data/spec/unit/pops/types/recursion_guard_spec.rb +91 -0
  407. data/spec/unit/pops/types/type_acceptor_spec.rb +105 -0
  408. data/spec/unit/pops/types/type_asserter_spec.rb +43 -0
  409. data/spec/unit/pops/types/type_calculator_spec.rb +275 -373
  410. data/spec/unit/pops/types/type_formatter_spec.rb +280 -0
  411. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +152 -0
  412. data/spec/unit/pops/types/type_parser_spec.rb +58 -13
  413. data/spec/unit/pops/types/types_spec.rb +241 -0
  414. data/spec/unit/pops/validator/validator_spec.rb +100 -43
  415. data/spec/unit/provider/cron/parsed_spec.rb +1 -0
  416. data/spec/unit/provider/macauthorization_spec.rb +5 -2
  417. data/spec/unit/provider/nameservice/directoryservice_spec.rb +14 -19
  418. data/spec/unit/provider/package/appdmg_spec.rb +3 -3
  419. data/spec/unit/provider/package/dnf_spec.rb +16 -0
  420. data/spec/unit/provider/package/pip3_spec.rb +60 -42
  421. data/spec/unit/provider/package/pip_spec.rb +47 -34
  422. data/spec/unit/provider/package/pkgdmg_spec.rb +18 -9
  423. data/spec/unit/provider/package/pkgng_spec.rb +4 -2
  424. data/spec/unit/provider/package/yum_spec.rb +11 -0
  425. data/spec/unit/provider/package/zypper_spec.rb +14 -0
  426. data/spec/unit/provider/service/launchd_spec.rb +17 -35
  427. data/spec/unit/provider/service/systemd_spec.rb +7 -0
  428. data/spec/unit/provider/sshkey/parsed_spec.rb +20 -19
  429. data/spec/unit/provider/user/directoryservice_spec.rb +40 -59
  430. data/spec/unit/resource/capability_finder_spec.rb +28 -15
  431. data/spec/unit/resource/catalog_spec.rb +33 -1
  432. data/spec/unit/resource/type_spec.rb +149 -7
  433. data/spec/unit/resource_spec.rb +96 -57
  434. data/spec/unit/settings/environment_conf_spec.rb +18 -1
  435. data/spec/unit/ssl/certificate_revocation_list_spec.rb +3 -3
  436. data/spec/unit/transaction/report_spec.rb +27 -0
  437. data/spec/unit/transaction/resource_harness_spec.rb +0 -47
  438. data/spec/unit/transaction_spec.rb +5 -0
  439. data/spec/unit/type/file/checksum_spec.rb +6 -0
  440. data/spec/unit/type/file/checksum_value_spec.rb +286 -0
  441. data/spec/unit/type/file/content_spec.rb +12 -193
  442. data/spec/unit/type/file/source_spec.rb +211 -119
  443. data/spec/unit/type/file_spec.rb +133 -34
  444. data/spec/unit/type/interface_spec.rb +32 -0
  445. data/spec/unit/type/macauthorization_spec.rb +4 -1
  446. data/spec/unit/type/yumrepo_spec.rb +2 -2
  447. data/spec/unit/util/filetype_spec.rb +1 -1
  448. data/spec/unit/util/http_proxy_spec.rb +2 -2
  449. data/spec/unit/util/log/destinations_spec.rb +0 -2
  450. data/spec/unit/util/logging_spec.rb +69 -0
  451. data/spec/unit/util/multi_match_spec.rb +39 -0
  452. data/spec/unit/util/network_device/cisco/device_spec.rb +253 -216
  453. data/spec/unit/util/network_device/transport/telnet_spec.rb +60 -58
  454. data/spec/unit/util/plist_spec.rb +110 -0
  455. data/spec/unit/util/resource_template_spec.rb +2 -2
  456. data/spec/unit/util/run_mode_spec.rb +27 -3
  457. data/spec/unit/util/windows/adsi_spec.rb +4 -4
  458. data/spec/unit/util/windows/api_types_spec.rb +42 -0
  459. data/spec/unit/util/windows/security_descriptor_spec.rb +3 -3
  460. data/spec/unit/util/windows/sid_spec.rb +1 -1
  461. data/spec/unit/util_spec.rb +123 -13
  462. data/tasks/cfpropertylist.rake +15 -0
  463. metadata +114 -26
  464. data/lib/puppet/vendor/load_plist.rb +0 -1
  465. data/lib/puppet/vendor/plist/CHANGELOG +0 -82
  466. data/lib/puppet/vendor/plist/MIT-LICENSE +0 -21
  467. data/lib/puppet/vendor/plist/PUPPET_README.md +0 -6
  468. data/lib/puppet/vendor/plist/README +0 -36
  469. data/lib/puppet/vendor/plist/Rakefile +0 -144
  470. data/lib/puppet/vendor/plist/docs/USAGE +0 -104
  471. data/lib/puppet/vendor/plist/docs/jamis-template.rb +0 -591
  472. data/lib/puppet/vendor/plist/lib/plist.rb +0 -22
  473. data/lib/puppet/vendor/plist/lib/plist/generator.rb +0 -224
  474. data/lib/puppet/vendor/plist/lib/plist/parser.rb +0 -225
  475. data/lib/puppet/vendor/plist/test/assets/AlbumData.xml +0 -203
  476. data/lib/puppet/vendor/plist/test/assets/Cookies.plist +0 -104
  477. data/lib/puppet/vendor/plist/test/assets/commented.plist +0 -9
  478. data/lib/puppet/vendor/plist/test/assets/example_data.bin +0 -0
  479. data/lib/puppet/vendor/plist/test/assets/example_data.jpg +0 -0
  480. data/lib/puppet/vendor/plist/test/assets/example_data.plist +0 -259
  481. data/lib/puppet/vendor/plist/test/assets/test_data_elements.plist +0 -24
  482. data/lib/puppet/vendor/plist/test/assets/test_empty_key.plist +0 -13
  483. data/lib/puppet/vendor/plist/test/test_data_elements.rb +0 -115
  484. data/lib/puppet/vendor/plist/test/test_generator.rb +0 -59
  485. data/lib/puppet/vendor/plist/test/test_generator_basic_types.rb +0 -58
  486. data/lib/puppet/vendor/plist/test/test_generator_collections.rb +0 -82
  487. data/lib/puppet/vendor/plist/test/test_parser.rb +0 -90
@@ -21,6 +21,8 @@ module Puppet::FileServing::TerminusSelector
21
21
  else
22
22
  Puppet[:default_file_terminus]
23
23
  end
24
+ when "http","https"
25
+ :http
24
26
  when nil
25
27
  :file_server
26
28
  else
@@ -122,8 +122,8 @@ module Puppet::FileSystem
122
122
  #
123
123
  # @api public
124
124
  #
125
- def self.read(path)
126
- @impl.read(assert_path(path))
125
+ def self.read(path, opts = {})
126
+ @impl.read(assert_path(path), opts)
127
127
  end
128
128
 
129
129
  # Read a file keeping the original line endings intact. This
@@ -71,8 +71,8 @@ class Puppet::FileSystem::FileImpl
71
71
  end
72
72
  end
73
73
 
74
- def read(path)
75
- path.read
74
+ def read(path, opts = {})
75
+ path.read(opts)
76
76
  end
77
77
 
78
78
  def read_preserve_line_endings(path)
@@ -39,7 +39,7 @@ class Puppet::FileSystem::MemoryImpl
39
39
  object.path
40
40
  end
41
41
 
42
- def read(path)
42
+ def read(path, opts = {})
43
43
  handle = assert_path(path).handle
44
44
  handle.read
45
45
  end
@@ -156,7 +156,7 @@ class Puppet::FileSystem::Uniquefile < DelegateClass(File)
156
156
  if $SAFE > 0
157
157
  tmp = @@systmpdir
158
158
  else
159
- for dir in [ENV['TMPDIR'], ENV['TMP'], ENV['TEMP'], @@systmpdir, '/tmp']
159
+ for dir in [ Puppet::Util.get_env('TMPDIR'), Puppet::Util.get_env('TMP'), Puppet::Util.get_env('TEMP'), @@systmpdir, '/tmp']
160
160
  if dir and stat = File.stat(dir) and stat.directory? and stat.writable?
161
161
  tmp = dir
162
162
  break
@@ -38,7 +38,7 @@ class Puppet::Forge < Semantic::Dependency::Source
38
38
  # "releases" => [{"version"=>"0.0.1"}, {"version"=>"0.0.2"}],
39
39
  # "full_name" => "puppetlabs/bacula",
40
40
  # "version" => "0.0.2",
41
- # "project_url" => "http://github.com/puppetlabs/puppetlabs-bacula",
41
+ # "project_url" => "https://github.com/puppetlabs/puppetlabs-bacula",
42
42
  # "desc" => "bacula"
43
43
  # }
44
44
  # ]
@@ -90,7 +90,7 @@ class Puppet::Forge
90
90
  # @raise [Puppet::Forge::Errors::SSLVerifyError] if there is a problem
91
91
  # verifying the remote SSL certificate
92
92
  def read_response(request, io = nil)
93
- http_object = get_http_object
93
+ http_object = Puppet::Util::HttpProxy.get_http_object(uri)
94
94
 
95
95
  http_object.start do |http|
96
96
  response = http.request(request)
@@ -121,36 +121,6 @@ class Puppet::Forge
121
121
  end
122
122
  end
123
123
 
124
- # Return a Net::HTTP::Proxy object constructed from the settings provided
125
- # accessing the repository.
126
- #
127
- # This method optionally configures SSL correctly if the URI scheme is
128
- # 'https', including setting up the root certificate store so remote server
129
- # SSL certificates can be validated.
130
- #
131
- # @return [Net::HTTP::Proxy] object constructed from repo settings
132
- def get_http_object
133
- proxy = Puppet::Util::HttpProxy.proxy(@uri)
134
-
135
- if @uri.scheme == 'https'
136
- cert_store = OpenSSL::X509::Store.new
137
- cert_store.set_default_paths
138
-
139
- proxy.use_ssl = true
140
- proxy.verify_mode = OpenSSL::SSL::VERIFY_PEER
141
- proxy.cert_store = cert_store
142
- end
143
-
144
- if Puppet[:http_debug]
145
- proxy.set_debug_output($stderr)
146
- end
147
-
148
- proxy.open_timeout = Puppet[:http_connect_timeout]
149
- proxy.read_timeout = Puppet[:http_read_timeout]
150
-
151
- proxy
152
- end
153
-
154
124
  # Return the local file name containing the data downloaded from the
155
125
  # repository at +release+ (e.g. "myuser-mymodule").
156
126
  def retrieve(release)
@@ -153,6 +153,28 @@ module Puppet::Functions
153
153
  #
154
154
  # @api public
155
155
  def self.create_function(func_name, function_base = Function, &block)
156
+ # Ruby < 2.1.0 does not have method on Binding, can only do eval
157
+ # and it will fail unless protected with an if defined? if the local
158
+ # variable does not exist in the block's binder.
159
+ #
160
+ loader = block.binding.eval('loader_injected_arg if defined?(loader_injected_arg)')
161
+ create_loaded_function(func_name, loader, function_base, &block)
162
+ end
163
+
164
+ # Creates a function in, or in a local loader under the given loader.
165
+ # This method should only be used when manually creating functions
166
+ # for the sake of testing. Functions that are autoloaded should
167
+ # always use the `create_function` method and the autoloader will supply
168
+ # the correct loader.
169
+ #
170
+ # @param func_name [String, Symbol] a simple or qualified function name
171
+ # @param loader [Puppet::Pops::Loaders::Loader] the loader loading the function
172
+ # @param block [Proc] the block that defines the methods and dispatch of the
173
+ # Function to create
174
+ # @return [Class<Function>] the newly created Function class
175
+ #
176
+ # @api public
177
+ def self.create_loaded_function(func_name, loader, function_base = Function, &block)
156
178
  if function_base.ancestors.none? { |s| s == Puppet::Pops::Functions::Function }
157
179
  raise ArgumentError, "Functions must be based on Puppet::Pops::Functions::Function. Got #{function_base}"
158
180
  end
@@ -162,7 +184,12 @@ module Puppet::Functions
162
184
  # The idea being that it is garbage collected when there are no more
163
185
  # references to it.
164
186
  #
165
- the_class = Class.new(function_base, &block)
187
+ # (Do not give the class the block here, as instance variables should be set first)
188
+ the_class = Class.new(function_base)
189
+
190
+ unless loader.nil?
191
+ the_class.instance_variable_set(:'@loader', loader.private_loader)
192
+ end
166
193
 
167
194
  # Make the anonymous class appear to have the class-name <func_name>
168
195
  # Even if this class is not bound to such a symbol in a global ruby scope and
@@ -175,11 +202,20 @@ module Puppet::Functions
175
202
  #
176
203
  the_class.instance_eval do
177
204
  @func_name = func_name
205
+
178
206
  def name
179
207
  @func_name
180
208
  end
209
+
210
+ def loader
211
+ @loader
212
+ end
181
213
  end
182
214
 
215
+ # The given block can now be evaluated and have access to name and loader
216
+ #
217
+ the_class.class_eval(&block)
218
+
183
219
  # Automatically create an object dispatcher based on introspection if the
184
220
  # loaded user code did not define any dispatchers. Fail if function name
185
221
  # does not match a given method name in user code.
@@ -238,7 +274,7 @@ module Puppet::Functions
238
274
  def self.builder
239
275
  @type_parser ||= Puppet::Pops::Types::TypeParser.new
240
276
  @all_callables ||= Puppet::Pops::Types::TypeFactory.all_callables
241
- DispatcherBuilder.new(dispatcher, @type_parser, @all_callables)
277
+ DispatcherBuilder.new(dispatcher, @type_parser, @all_callables, loader)
242
278
  end
243
279
 
244
280
  # Dispatch any calls that match the signature to the provided method name.
@@ -269,11 +305,14 @@ module Puppet::Functions
269
305
  #
270
306
  # @api public
271
307
  class DispatcherBuilder
308
+ attr_reader :loader
309
+
272
310
  # @api private
273
- def initialize(dispatcher, type_parser, all_callables)
311
+ def initialize(dispatcher, type_parser, all_callables, loader)
274
312
  @type_parser = type_parser
275
313
  @all_callables = all_callables
276
314
  @dispatcher = dispatcher
315
+ @loader = loader
277
316
  end
278
317
 
279
318
  # Defines a required positional parameter with _type_ and _name_.
@@ -356,7 +395,7 @@ module Puppet::Functions
356
395
  name = type_and_name[0]
357
396
  when 2
358
397
  type_string, name = type_and_name
359
- type = @type_parser.parse(type_string)
398
+ type = @type_parser.parse(type_string, loader)
360
399
  else
361
400
  raise ArgumentError, "block_param accepts max 2 arguments (type, name), got #{type_and_name.size}."
362
401
  end
@@ -441,7 +480,7 @@ module Puppet::Functions
441
480
  # @api private
442
481
  def create_callable(types, block_type, from, to)
443
482
  mapped_types = types.map do |t|
444
- @type_parser.parse(t)
483
+ @type_parser.parse(t, loader)
445
484
  end
446
485
 
447
486
  if from != to
@@ -496,7 +535,7 @@ module Puppet::Functions
496
535
  def self.builder
497
536
  @type_parser ||= Puppet::Pops::Types::TypeParser.new
498
537
  @all_callables ||= Puppet::Pops::Types::TypeFactory.all_callables
499
- InternalDispatchBuilder.new(dispatcher, @type_parser, @all_callables)
538
+ InternalDispatchBuilder.new(dispatcher, @type_parser, @all_callables, loader)
500
539
  end
501
540
 
502
541
  # Defines class level injected attribute with reader method
@@ -50,7 +50,7 @@
50
50
  #
51
51
  # @since 4.0.0
52
52
  #
53
- Puppet::Functions.create_function(:assert_type) do
53
+ Puppet::Functions.create_function(:assert_type, Puppet::Functions::InternalFunction) do
54
54
  dispatch :assert_type do
55
55
  param 'Type', :type
56
56
  param 'Any', :value
@@ -58,6 +58,7 @@ Puppet::Functions.create_function(:assert_type) do
58
58
  end
59
59
 
60
60
  dispatch :assert_type_s do
61
+ scope_param
61
62
  param 'String', :type_string
62
63
  param 'Any', :value
63
64
  optional_block_param 'Callable[Type, Type]', :block
@@ -70,26 +71,25 @@ Puppet::Functions.create_function(:assert_type) do
70
71
  unless Puppet::Pops::Types::TypeCalculator.instance?(type,value)
71
72
  inferred_type = Puppet::Pops::Types::TypeCalculator.infer(value)
72
73
  if block_given?
73
- # Give the inferred type to allow richer comparisson in the given block (if generalized
74
+ # Give the inferred type to allow richer comparison in the given block (if generalized
74
75
  # information is lost).
75
76
  #
76
77
  value = yield(type, inferred_type)
77
78
  else
78
- # Do not give all the details - i.e. format as Integer, instead of Integer[n, n] for exact value, which
79
- # is just confusing. (OTOH: may need to revisit, or provide a better "type diff" output.
80
- #
81
- actual = Puppet::Pops::Types::TypeCalculator.generalize(inferred_type)
82
- raise Puppet::Pops::Types::TypeAssertionError.new("assert_type(): Expected type #{type} does not match actual: #{actual}", type,actual)
79
+ raise Puppet::Pops::Types::TypeAssertionError.new(
80
+ Puppet::Pops::Types::TypeMismatchDescriber.singleton.describe_mismatch('assert_type():', type, inferred_type),
81
+ type, inferred_type)
83
82
  end
84
83
  end
85
84
  value
86
85
  end
87
86
 
87
+ # @param scope [Puppet::Parser::Scope] scope used when obtaining loader for defined types
88
88
  # @param type_string [String] the type the value must be an instance of given in String form
89
89
  # @param value [Object] the value to assert
90
90
  #
91
- def assert_type_s(type_string, value, &proc)
92
- t = Puppet::Pops::Types::TypeParser.new.parse(type_string)
91
+ def assert_type_s(scope, type_string, value, &proc)
92
+ t = Puppet::Pops::Types::TypeParser.new.parse(type_string, scope)
93
93
  block_given? ? assert_type(t, value, &proc) : assert_type(t, value)
94
94
  end
95
95
  end
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # This function takes two mandatory arguments, in this order:
5
5
  #
6
- # 1. An array or hash the function will iterate over.
6
+ # 1. An array, hash, or other iterable object that the function will iterate over.
7
7
  # 2. A lambda, which the function calls for each element in the first argument. It can
8
8
  # request one or two parameters.
9
9
  #
@@ -106,12 +106,12 @@ Puppet::Functions.create_function(:each) do
106
106
  end
107
107
 
108
108
  dispatch :foreach_Enumerable_2 do
109
- param 'Any', :enumerable
109
+ param 'Iterable', :enumerable
110
110
  block_param 'Callable[2,2]', :block
111
111
  end
112
112
 
113
113
  dispatch :foreach_Enumerable_1 do
114
- param 'Any', :enumerable
114
+ param 'Iterable', :enumerable
115
115
  block_param 'Callable[1,1]', :block
116
116
  end
117
117
 
@@ -134,7 +134,7 @@ Puppet::Functions.create_function(:each) do
134
134
  end
135
135
 
136
136
  def foreach_Enumerable_1(enumerable)
137
- enum = asserted_enumerable(enumerable)
137
+ enum = Puppet::Pops::Types::Iterable.asserted_iterable(self, enumerable)
138
138
  begin
139
139
  loop { yield(enum.next) }
140
140
  rescue StopIteration
@@ -144,7 +144,7 @@ Puppet::Functions.create_function(:each) do
144
144
  end
145
145
 
146
146
  def foreach_Enumerable_2(enumerable)
147
- enum = asserted_enumerable(enumerable)
147
+ enum = Puppet::Pops::Types::Iterable.asserted_iterable(self, enumerable)
148
148
  index = 0
149
149
  begin
150
150
  loop do
@@ -156,12 +156,4 @@ Puppet::Functions.create_function(:each) do
156
156
  # produces the receiver
157
157
  enumerable
158
158
  end
159
-
160
- def asserted_enumerable(obj)
161
- unless enum = Puppet::Pops::Types::Enumeration.enumerator(obj)
162
- raise ArgumentError, ("#{self.class.name}(): wrong argument type (#{obj.class}; must be something enumerable.")
163
- end
164
- enum
165
- end
166
-
167
159
  end
@@ -4,7 +4,7 @@
4
4
  #
5
5
  # This function takes two mandatory arguments, in this order:
6
6
  #
7
- # 1. An array or hash the function will iterate over.
7
+ # 1. An array, hash, or other iterable object that the function will iterate over.
8
8
  # 2. A lambda, which the function calls for each element in the first argument. It can
9
9
  # request one or two parameters.
10
10
  #
@@ -80,12 +80,12 @@ Puppet::Functions.create_function(:filter) do
80
80
  end
81
81
 
82
82
  dispatch :filter_Enumerable_2 do
83
- param 'Any', :enumerable
83
+ param 'Iterable', :enumerable
84
84
  block_param 'Callable[2,2]', :block
85
85
  end
86
86
 
87
87
  dispatch :filter_Enumerable_1 do
88
- param 'Any', :enumerable
88
+ param 'Iterable', :enumerable
89
89
  block_param 'Callable[1,1]', :block
90
90
  end
91
91
 
@@ -105,8 +105,7 @@ Puppet::Functions.create_function(:filter) do
105
105
 
106
106
  def filter_Enumerable_1(enumerable)
107
107
  result = []
108
- index = 0
109
- enum = asserted_enumerable(enumerable)
108
+ enum = Puppet::Pops::Types::Iterable.asserted_iterable(self, enumerable)
110
109
  begin
111
110
  loop do
112
111
  it = enum.next
@@ -122,7 +121,7 @@ Puppet::Functions.create_function(:filter) do
122
121
  def filter_Enumerable_2(enumerable)
123
122
  result = []
124
123
  index = 0
125
- enum = asserted_enumerable(enumerable)
124
+ enum = Puppet::Pops::Types::Iterable.asserted_iterable(self, enumerable)
126
125
  begin
127
126
  loop do
128
127
  it = enum.next
@@ -135,12 +134,4 @@ Puppet::Functions.create_function(:filter) do
135
134
  end
136
135
  result
137
136
  end
138
-
139
- def asserted_enumerable(obj)
140
- unless enum = Puppet::Pops::Types::Enumeration.enumerator(obj)
141
- raise ArgumentError, ("#{self.class.name}(): wrong argument type (#{obj.class}; must be something enumerable.")
142
- end
143
- enum
144
- end
145
-
146
137
  end
@@ -1,9 +1,9 @@
1
- # Applies a [lambda](http://docs.puppetlabs.com/puppet/latest/reference/lang_lambdas.html)
1
+ # Applies a [lambda](https://docs.puppetlabs.com/puppet/latest/reference/lang_lambdas.html)
2
2
  # to every value in a data structure and returns an array containing the results.
3
3
  #
4
4
  # This function takes two mandatory arguments, in this order:
5
5
  #
6
- # 1. An array or hash the function will iterate over.
6
+ # 1. An array, hash, or other iterable object that the function will iterate over.
7
7
  # 2. A lambda, which the function calls for each element in the first argument. It can
8
8
  # request one or two parameters.
9
9
  #
@@ -78,12 +78,12 @@ Puppet::Functions.create_function(:map) do
78
78
  end
79
79
 
80
80
  dispatch :map_Enumerable_2 do
81
- param 'Any', :enumerable
81
+ param 'Iterable', :enumerable
82
82
  block_param 'Callable[2,2]', :block
83
83
  end
84
84
 
85
85
  dispatch :map_Enumerable_1 do
86
- param 'Any', :enumerable
86
+ param 'Iterable', :enumerable
87
87
  block_param 'Callable[1,1]', :block
88
88
  end
89
89
 
@@ -98,7 +98,7 @@ Puppet::Functions.create_function(:map) do
98
98
  def map_Enumerable_1(enumerable)
99
99
  result = []
100
100
  index = 0
101
- enum = asserted_enumerable(enumerable)
101
+ enum = Puppet::Pops::Types::Iterable.asserted_iterable(self, enumerable)
102
102
  begin
103
103
  loop { result << yield(enum.next) }
104
104
  rescue StopIteration
@@ -109,7 +109,7 @@ Puppet::Functions.create_function(:map) do
109
109
  def map_Enumerable_2(enumerable)
110
110
  result = []
111
111
  index = 0
112
- enum = asserted_enumerable(enumerable)
112
+ enum = Puppet::Pops::Types::Iterable.asserted_iterable(self, enumerable)
113
113
  begin
114
114
  loop do
115
115
  result << yield(index, enum.next)
@@ -119,12 +119,4 @@ Puppet::Functions.create_function(:map) do
119
119
  end
120
120
  result
121
121
  end
122
-
123
- def asserted_enumerable(obj)
124
- unless enum = Puppet::Pops::Types::Enumeration.enumerator(obj)
125
- raise ArgumentError, ("#{self.class.name}(): wrong argument type (#{obj.class}; must be something enumerable.")
126
- end
127
- enum
128
- end
129
-
130
122
  end
@@ -6,7 +6,7 @@
6
6
  #
7
7
  # This function takes two mandatory arguments, in this order:
8
8
  #
9
- # 1. An array or hash the function will iterate over.
9
+ # 1. An array, hash, or other iterable object that the function will iterate over.
10
10
  # 2. A lambda, which the function calls for each element in the first argument. It takes
11
11
  # two mandatory parameters:
12
12
  # 1. A memo value that is overwritten after each iteration with the iteration's result.
@@ -99,31 +99,23 @@
99
99
  Puppet::Functions.create_function(:reduce) do
100
100
 
101
101
  dispatch :reduce_without_memo do
102
- param 'Any', :enumerable
102
+ param 'Iterable', :enumerable
103
103
  block_param 'Callable[2,2]', :block
104
104
  end
105
105
 
106
106
  dispatch :reduce_with_memo do
107
- param 'Any', :enumerable
107
+ param 'Iterable', :enumerable
108
108
  param 'Any', :memo
109
109
  block_param 'Callable[2,2]', :block
110
110
  end
111
111
 
112
112
  def reduce_without_memo(enumerable)
113
- enum = asserted_enumerable(enumerable)
113
+ enum = Puppet::Pops::Types::Iterable.asserted_iterable(self, enumerable)
114
114
  enum.reduce {|memo, x| yield(memo, x) }
115
115
  end
116
116
 
117
117
  def reduce_with_memo(enumerable, given_memo)
118
- enum = asserted_enumerable(enumerable)
118
+ enum = Puppet::Pops::Types::Iterable.asserted_iterable(self, enumerable)
119
119
  enum.reduce(given_memo) {|memo, x| yield(memo, x) }
120
120
  end
121
-
122
- def asserted_enumerable(obj)
123
- unless enum = Puppet::Pops::Types::Enumeration.enumerator(obj)
124
- raise ArgumentError, ("#{self.class.name}(): wrong argument type (#{obj.class}; must be something enumerable.")
125
- end
126
- enum
127
- end
128
-
129
121
  end