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
@@ -1,18 +1,17 @@
1
1
  # This class provides parsing of Type Specification from a string into the Type
2
- # Model that is produced by the Puppet::Pops::Types::TypeFactory.
2
+ # Model that is produced by the TypeFactory.
3
3
  #
4
4
  # The Type Specifications that are parsed are the same as the stringified forms
5
- # of types produced by the {Puppet::Pops::Types::TypeCalculator TypeCalculator}.
5
+ # of types produced by the {TypeCalculator TypeCalculator}.
6
6
  #
7
7
  # @api public
8
- class Puppet::Pops::Types::TypeParser
9
- # @api private
10
- TYPES = Puppet::Pops::Types::TypeFactory
11
-
8
+ module Puppet::Pops
9
+ module Types
10
+ class TypeParser
12
11
  # @api public
13
12
  def initialize
14
- @parser = Puppet::Pops::Parser::Parser.new
15
- @type_transformer = Puppet::Pops::Visitor.new(nil, 'interpret', 0, 0)
13
+ @parser = Parser::Parser.new
14
+ @type_transformer = Visitor.new(nil, 'interpret', 1, 1)
16
15
  end
17
16
 
18
17
  # Produces a *puppet type* based on the given string.
@@ -23,12 +22,13 @@ class Puppet::Pops::Types::TypeParser
23
22
  # parser.parse('Hash[Integer, Array[String]]')
24
23
  #
25
24
  # @param string [String] a string with the type expressed in stringified form as produced by the
26
- # {Puppet::Pops::Types::TypeCalculator#string TypeCalculator#string} method.
27
- # @return [Puppet::Pops::Types::PAnyType] a specialization of the PAnyType representing the type.
25
+ # types {"#to_s} method.
26
+ # @param context [Puppet::Parser::Scope,Loader::Loader] scope or loader to use when loading type aliases
27
+ # @return [PAnyType] a specialization of the PAnyType representing the type.
28
28
  #
29
29
  # @api public
30
30
  #
31
- def parse(string)
31
+ def parse(string, context = nil)
32
32
  # TODO: This state (@string) can be removed since the parse result of newer future parser
33
33
  # contains a Locator in its SourcePosAdapter and the Locator keeps the string.
34
34
  # This way, there is no difference between a parsed "string" and something that has been parsed
@@ -37,173 +37,198 @@ class Puppet::Pops::Types::TypeParser
37
37
  @string = string
38
38
  model = @parser.parse_string(@string)
39
39
  if model
40
- interpret(model.current)
40
+ interpret(model.current, context)
41
41
  else
42
42
  raise_invalid_type_specification_error
43
43
  end
44
44
  end
45
45
 
46
46
  # @api private
47
- def interpret(ast)
48
- result = @type_transformer.visit_this_0(self, ast)
49
- result = result.body if result.is_a?(Puppet::Pops::Model::Program)
50
- raise_invalid_type_specification_error unless result.is_a?(Puppet::Pops::Types::PAnyType)
47
+ def interpret(ast, context)
48
+ result = @type_transformer.visit_this_1(self, ast, context)
49
+ result = result.body if result.is_a?(Model::Program)
50
+ raise_invalid_type_specification_error unless result.is_a?(PAnyType)
51
51
  result
52
52
  end
53
53
 
54
54
  # @api private
55
- def interpret_any(ast)
56
- @type_transformer.visit_this_0(self, ast)
55
+ def interpret_any(ast, context)
56
+ @type_transformer.visit_this_1(self, ast, context)
57
57
  end
58
58
 
59
59
  # @api private
60
- def interpret_Object(o)
60
+ def interpret_Object(o, context)
61
61
  raise_invalid_type_specification_error
62
62
  end
63
63
 
64
64
  # @api private
65
- def interpret_Program(o)
66
- interpret(o.body)
65
+ def interpret_Program(o, context)
66
+ interpret(o.body, context)
67
67
  end
68
68
 
69
69
  # @api private
70
- def interpret_QualifiedName(o)
70
+ def interpret_QualifiedName(o, context)
71
71
  o.value
72
72
  end
73
73
 
74
74
  # @api private
75
- def interpret_LiteralString(o)
75
+ def interpret_LiteralString(o, context)
76
76
  o.value
77
77
  end
78
78
 
79
- def interpret_LiteralRegularExpression(o)
79
+ def interpret_LiteralRegularExpression(o, context)
80
80
  o.value
81
81
  end
82
82
 
83
83
  # @api private
84
- def interpret_String(o)
84
+ def interpret_String(o, context)
85
85
  o
86
86
  end
87
87
 
88
88
  # @api private
89
- def interpret_LiteralDefault(o)
89
+ def interpret_LiteralDefault(o, context)
90
90
  :default
91
91
  end
92
92
 
93
93
  # @api private
94
- def interpret_LiteralInteger(o)
94
+ def interpret_LiteralInteger(o, context)
95
95
  o.value
96
96
  end
97
97
 
98
98
  # @api private
99
- def interpret_LiteralFloat(o)
99
+ def interpret_UnaryMinusExpression(o, context)
100
+ -@type_transformer.visit_this_1(self, o.expr, context)
101
+ end
102
+
103
+ # @api private
104
+ def interpret_LiteralFloat(o, context)
100
105
  o.value
101
106
  end
102
107
 
103
108
  # @api private
104
- def interpret_LiteralHash(o)
109
+ def interpret_LiteralHash(o, context)
105
110
  result = {}
106
111
  o.entries.each do |entry|
107
- result[@type_transformer.visit_this_0(self, entry.key)] = @type_transformer.visit_this_0(self, entry.value)
112
+ result[@type_transformer.visit_this_1(self, entry.key, context)] = @type_transformer.visit_this_1(self, entry.value, context)
108
113
  end
109
114
  result
110
115
  end
111
116
 
112
117
  # @api private
113
- def interpret_QualifiedReference(name_ast)
114
- case name_ast.value
118
+ def interpret_QualifiedReference(name_ast, context)
119
+ name = name_ast.value
120
+ case name
115
121
  when 'integer'
116
- TYPES.integer
122
+ TypeFactory.integer
117
123
 
118
124
  when 'float'
119
- TYPES.float
125
+ TypeFactory.float
120
126
 
121
127
  when 'numeric'
122
- TYPES.numeric
128
+ TypeFactory.numeric
129
+
130
+ when 'iterable'
131
+ TypeFactory.iterable
132
+
133
+ when 'iterator'
134
+ TypeFactory.iterator
123
135
 
124
136
  when 'string'
125
- TYPES.string
137
+ TypeFactory.string
126
138
 
127
139
  when 'enum'
128
- TYPES.enum
140
+ TypeFactory.enum
129
141
 
130
142
  when 'boolean'
131
- TYPES.boolean
143
+ TypeFactory.boolean
132
144
 
133
145
  when 'pattern'
134
- TYPES.pattern
146
+ TypeFactory.pattern
135
147
 
136
148
  when 'regexp'
137
- TYPES.regexp
149
+ TypeFactory.regexp
138
150
 
139
151
  when 'data'
140
- TYPES.data
152
+ TypeFactory.data
141
153
 
142
154
  when 'array'
143
- TYPES.array_of_data
155
+ TypeFactory.array_of_data
144
156
 
145
157
  when 'hash'
146
- TYPES.hash_of_data
158
+ TypeFactory.hash_of_data
147
159
 
148
160
  when 'class'
149
- TYPES.host_class
161
+ TypeFactory.host_class
150
162
 
151
163
  when 'resource'
152
- TYPES.resource
164
+ TypeFactory.resource
153
165
 
154
166
  when 'collection'
155
- TYPES.collection
167
+ TypeFactory.collection
156
168
 
157
169
  when 'scalar'
158
- TYPES.scalar
170
+ TypeFactory.scalar
159
171
 
160
172
  when 'catalogentry'
161
- TYPES.catalog_entry
173
+ TypeFactory.catalog_entry
162
174
 
163
175
  when 'undef'
164
- TYPES.undef
176
+ TypeFactory.undef
165
177
 
166
178
  when 'notundef'
167
- TYPES.not_undef()
179
+ TypeFactory.not_undef()
168
180
 
169
181
  when 'default'
170
- TYPES.default()
182
+ TypeFactory.default()
171
183
 
172
184
  when 'any'
173
- TYPES.any
185
+ TypeFactory.any
174
186
 
175
187
  when 'variant'
176
- TYPES.variant
188
+ TypeFactory.variant
177
189
 
178
190
  when 'optional'
179
- TYPES.optional
191
+ TypeFactory.optional
180
192
 
181
193
  when 'runtime'
182
- TYPES.runtime
194
+ TypeFactory.runtime
183
195
 
184
196
  when 'type'
185
- TYPES.type_type
197
+ TypeFactory.type_type
186
198
 
187
199
  when 'tuple'
188
- TYPES.tuple
200
+ TypeFactory.tuple
189
201
 
190
202
  when 'struct'
191
- TYPES.struct
203
+ TypeFactory.struct
192
204
 
193
205
  when 'callable'
194
206
  # A generic callable as opposed to one that does not accept arguments
195
- TYPES.all_callables
207
+ TypeFactory.all_callables
196
208
 
197
209
  else
198
- TYPES.resource(name_ast.value)
210
+ if context.nil?
211
+ TypeFactory.type_reference(name.capitalize)
212
+ else
213
+ if context.is_a?(Puppet::Pops::Loader::Loader)
214
+ loader = context
215
+ else
216
+ loader = Puppet::Pops::Adapters::LoaderAdapter.loader_for_model_object(name_ast, context)
217
+ end
218
+ unless loader.nil?
219
+ type = loader.load(:type, name)
220
+ type = type.resolve(self, loader) unless type.nil?
221
+ end
222
+ type || TypeFactory.resource(name)
223
+ end
199
224
  end
200
225
  end
201
226
 
202
227
  # @api private
203
- def interpret_AccessExpression(parameterized_ast)
204
- parameters = parameterized_ast.keys.collect { |param| interpret_any(param) }
228
+ def interpret_AccessExpression(parameterized_ast, context)
229
+ parameters = parameterized_ast.keys.collect { |param| interpret_any(param, context) }
205
230
 
206
- unless parameterized_ast.left_expr.is_a?(Puppet::Pops::Model::QualifiedReference)
231
+ unless parameterized_ast.left_expr.is_a?(Model::QualifiedReference)
207
232
  raise_invalid_type_specification_error
208
233
  end
209
234
 
@@ -213,45 +238,45 @@ class Puppet::Pops::Types::TypeParser
213
238
  when 1
214
239
  when 2
215
240
  size_type =
216
- if parameters[1].is_a?(Puppet::Pops::Types::PIntegerType)
241
+ if parameters[1].is_a?(PIntegerType)
217
242
  parameters[1]
218
243
  else
219
244
  assert_range_parameter(parameters[1])
220
- TYPES.range(parameters[1], :default)
245
+ TypeFactory.range(parameters[1], :default)
221
246
  end
222
247
  when 3
223
248
  assert_range_parameter(parameters[1])
224
249
  assert_range_parameter(parameters[2])
225
- size_type = TYPES.range(parameters[1], parameters[2])
250
+ size_type = TypeFactory.range(parameters[1], parameters[2])
226
251
  else
227
252
  raise_invalid_parameters_error('Array', '1 to 3', parameters.size)
228
253
  end
229
254
  assert_type(parameters[0])
230
- TYPES.array_of(parameters[0], size_type)
255
+ TypeFactory.array_of(parameters[0], size_type)
231
256
 
232
257
  when 'hash'
233
258
  case parameters.size
234
259
  when 2
235
260
  assert_type(parameters[0])
236
261
  assert_type(parameters[1])
237
- TYPES.hash_of(parameters[1], parameters[0])
262
+ TypeFactory.hash_of(parameters[1], parameters[0])
238
263
  when 3
239
264
  size_type =
240
- if parameters[2].is_a?(Puppet::Pops::Types::PIntegerType)
265
+ if parameters[2].is_a?(PIntegerType)
241
266
  parameters[2]
242
267
  else
243
268
  assert_range_parameter(parameters[2])
244
- TYPES.range(parameters[2], :default)
269
+ TypeFactory.range(parameters[2], :default)
245
270
  end
246
271
  assert_type(parameters[0])
247
272
  assert_type(parameters[1])
248
- TYPES.hash_of(parameters[1], parameters[0], size_type)
273
+ TypeFactory.hash_of(parameters[1], parameters[0], size_type)
249
274
  when 4
250
275
  assert_range_parameter(parameters[2])
251
276
  assert_range_parameter(parameters[3])
252
277
  assert_type(parameters[0])
253
278
  assert_type(parameters[1])
254
- TYPES.hash_of(parameters[1], parameters[0], TYPES.range(parameters[2], parameters[3]))
279
+ TypeFactory.hash_of(parameters[1], parameters[0], TypeFactory.range(parameters[2], parameters[3]))
255
280
  else
256
281
  raise_invalid_parameters_error('Hash', '2 to 4', parameters.size)
257
282
  end
@@ -259,62 +284,62 @@ class Puppet::Pops::Types::TypeParser
259
284
  when 'collection'
260
285
  size_type = case parameters.size
261
286
  when 1
262
- if parameters[0].is_a?(Puppet::Pops::Types::PIntegerType)
287
+ if parameters[0].is_a?(PIntegerType)
263
288
  parameters[0]
264
289
  else
265
290
  assert_range_parameter(parameters[0])
266
- TYPES.range(parameters[0], :default)
291
+ TypeFactory.range(parameters[0], :default)
267
292
  end
268
293
  when 2
269
294
  assert_range_parameter(parameters[0])
270
295
  assert_range_parameter(parameters[1])
271
- TYPES.range(parameters[0], parameters[1])
296
+ TypeFactory.range(parameters[0], parameters[1])
272
297
  else
273
298
  raise_invalid_parameters_error('Collection', '1 to 2', parameters.size)
274
299
  end
275
- TYPES.collection(size_type)
300
+ TypeFactory.collection(size_type)
276
301
 
277
302
  when 'class'
278
303
  if parameters.size != 1
279
304
  raise_invalid_parameters_error('Class', 1, parameters.size)
280
305
  end
281
- TYPES.host_class(parameters[0])
306
+ TypeFactory.host_class(parameters[0])
282
307
 
283
308
  when 'resource'
284
309
  if parameters.size == 1
285
- TYPES.resource(parameters[0])
310
+ TypeFactory.resource(parameters[0])
286
311
  elsif parameters.size != 2
287
312
  raise_invalid_parameters_error('Resource', '1 or 2', parameters.size)
288
313
  else
289
- TYPES.resource(parameters[0], parameters[1])
314
+ TypeFactory.resource(parameters[0], parameters[1])
290
315
  end
291
316
 
292
317
  when 'regexp'
293
318
  # 1 parameter being a string, or regular expression
294
319
  raise_invalid_parameters_error('Regexp', '1', parameters.size) unless parameters.size == 1
295
- TYPES.regexp(parameters[0])
320
+ TypeFactory.regexp(parameters[0])
296
321
 
297
322
  when 'enum'
298
323
  # 1..m parameters being strings
299
324
  raise_invalid_parameters_error('Enum', '1 or more', parameters.size) unless parameters.size >= 1
300
- TYPES.enum(*parameters)
325
+ TypeFactory.enum(*parameters)
301
326
 
302
327
  when 'pattern'
303
328
  # 1..m parameters being strings or regular expressions
304
329
  raise_invalid_parameters_error('Pattern', '1 or more', parameters.size) unless parameters.size >= 1
305
- TYPES.pattern(*parameters)
330
+ TypeFactory.pattern(*parameters)
306
331
 
307
332
  when 'variant'
308
333
  # 1..m parameters being strings or regular expressions
309
334
  raise_invalid_parameters_error('Variant', '1 or more', parameters.size) unless parameters.size >= 1
310
- TYPES.variant(*parameters)
335
+ TypeFactory.variant(*parameters)
311
336
 
312
337
  when 'tuple'
313
338
  # 1..m parameters being types (last two optionally integer or literal default
314
339
  raise_invalid_parameters_error('Tuple', '1 or more', parameters.size) unless parameters.size >= 1
315
340
  length = parameters.size
316
341
  size_type = nil
317
- if TYPES.is_range_parameter?(parameters[-2])
342
+ if TypeFactory.is_range_parameter?(parameters[-2])
318
343
  # min, max specification
319
344
  min = parameters[-2]
320
345
  min = (min == :default || min == 'default') ? 0 : min
@@ -322,73 +347,87 @@ class Puppet::Pops::Types::TypeParser
322
347
  max = parameters[-1]
323
348
  max = max == :default ? nil : max
324
349
  parameters = parameters[0, length-2]
325
- size_type = TYPES.range(min, max)
326
- elsif TYPES.is_range_parameter?(parameters[-1])
350
+ size_type = TypeFactory.range(min, max)
351
+ elsif TypeFactory.is_range_parameter?(parameters[-1])
327
352
  min = parameters[-1]
328
353
  min = (min == :default || min == 'default') ? 0 : min
329
354
  max = nil
330
355
  parameters = parameters[0, length-1]
331
- size_type = TYPES.range(min, max)
356
+ size_type = TypeFactory.range(min, max)
332
357
  end
333
- TYPES.tuple(parameters, size_type)
358
+ TypeFactory.tuple(parameters, size_type)
334
359
 
335
360
  when 'callable'
336
361
  # 1..m parameters being types (last three optionally integer or literal default, and a callable)
337
- TYPES.callable(*parameters)
362
+ TypeFactory.callable(*parameters)
338
363
 
339
364
  when 'struct'
340
365
  # 1..m parameters being types (last two optionally integer or literal default
341
366
  raise_invalid_parameters_error('Struct', '1', parameters.size) unless parameters.size == 1
342
367
  h = parameters[0]
343
368
  raise_invalid_type_specification_error unless h.is_a?(Hash)
344
- TYPES.struct(h)
369
+ TypeFactory.struct(h)
345
370
 
346
371
  when 'integer'
347
372
  if parameters.size == 1
348
373
  case parameters[0]
349
374
  when Integer
350
- TYPES.range(parameters[0], :default)
375
+ TypeFactory.range(parameters[0], :default)
351
376
  when :default
352
- TYPES.integer # unbound
377
+ TypeFactory.integer # unbound
353
378
  end
354
379
  elsif parameters.size != 2
355
380
  raise_invalid_parameters_error('Integer', '1 or 2', parameters.size)
356
381
  else
357
- TYPES.range(parameters[0] == :default ? nil : parameters[0], parameters[1] == :default ? nil : parameters[1])
382
+ TypeFactory.range(parameters[0] == :default ? nil : parameters[0], parameters[1] == :default ? nil : parameters[1])
358
383
  end
359
384
 
385
+ when 'iterable'
386
+ if parameters.size != 1
387
+ raise_invalid_parameters_error('Iterable', 1, parameters.size)
388
+ end
389
+ assert_type(parameters[0])
390
+ TypeFactory.iterable(parameters[0])
391
+
392
+ when 'iterator'
393
+ if parameters.size != 1
394
+ raise_invalid_parameters_error('Iterator', 1, parameters.size)
395
+ end
396
+ assert_type(parameters[0])
397
+ TypeFactory.iterator(parameters[0])
398
+
360
399
  when 'float'
361
400
  if parameters.size == 1
362
401
  case parameters[0]
363
402
  when Integer, Float
364
- TYPES.float_range(parameters[0], :default)
403
+ TypeFactory.float_range(parameters[0], :default)
365
404
  when :default
366
- TYPES.float # unbound
405
+ TypeFactory.float # unbound
367
406
  end
368
407
  elsif parameters.size != 2
369
408
  raise_invalid_parameters_error('Float', '1 or 2', parameters.size)
370
409
  else
371
- TYPES.float_range(parameters[0] == :default ? nil : parameters[0], parameters[1] == :default ? nil : parameters[1])
410
+ TypeFactory.float_range(parameters[0] == :default ? nil : parameters[0], parameters[1] == :default ? nil : parameters[1])
372
411
  end
373
412
 
374
413
  when 'string'
375
414
  size_type =
376
415
  case parameters.size
377
416
  when 1
378
- if parameters[0].is_a?(Puppet::Pops::Types::PIntegerType)
417
+ if parameters[0].is_a?(PIntegerType)
379
418
  parameters[0]
380
419
  else
381
420
  assert_range_parameter(parameters[0])
382
- TYPES.range(parameters[0], :default)
421
+ TypeFactory.range(parameters[0], :default)
383
422
  end
384
423
  when 2
385
424
  assert_range_parameter(parameters[0])
386
425
  assert_range_parameter(parameters[1])
387
- TYPES.range(parameters[0], parameters[1])
426
+ TypeFactory.range(parameters[0], parameters[1])
388
427
  else
389
428
  raise_invalid_parameters_error('String', '1 to 2', parameters.size)
390
429
  end
391
- TYPES.string(size_type)
430
+ TypeFactory.string(size_type)
392
431
 
393
432
  when 'optional'
394
433
  if parameters.size != 1
@@ -396,7 +435,7 @@ class Puppet::Pops::Types::TypeParser
396
435
  end
397
436
  param = parameters[0]
398
437
  assert_type(param) unless param.is_a?(String)
399
- TYPES.optional(param)
438
+ TypeFactory.optional(param)
400
439
 
401
440
  when 'any', 'data', 'catalogentry', 'boolean', 'scalar', 'undef', 'numeric', 'default'
402
441
  raise_unparameterized_type_error(parameterized_ast.left_expr)
@@ -404,11 +443,11 @@ class Puppet::Pops::Types::TypeParser
404
443
  when 'notundef'
405
444
  case parameters.size
406
445
  when 0
407
- TYPES.not_undef
446
+ TypeFactory.not_undef
408
447
  when 1
409
448
  param = parameters[0]
410
449
  assert_type(param) unless param.is_a?(String)
411
- TYPES.not_undef(param)
450
+ TypeFactory.not_undef(param)
412
451
  else
413
452
  raise_invalid_parameters_error("NotUndef", "0 to 1", parameters.size)
414
453
  end
@@ -418,31 +457,37 @@ class Puppet::Pops::Types::TypeParser
418
457
  raise_invalid_parameters_error('Type', 1, parameters.size)
419
458
  end
420
459
  assert_type(parameters[0])
421
- TYPES.type_type(parameters[0])
460
+ TypeFactory.type_type(parameters[0])
422
461
 
423
462
  when 'runtime'
424
463
  raise_invalid_parameters_error('Runtime', '2', parameters.size) unless parameters.size == 2
425
- TYPES.runtime(*parameters)
464
+ TypeFactory.runtime(*parameters)
426
465
 
427
466
  else
428
- # It is a resource such a File['/tmp/foo']
429
467
  type_name = parameterized_ast.left_expr.value
430
- if parameters.size != 1
431
- raise_invalid_parameters_error(type_name.capitalize, 1, parameters.size)
468
+ if context.nil?
469
+ # Will be impossible to tell from a typed alias (when implemented) so a type reference
470
+ # is returned here for now
471
+ TypeFactory.type_reference(type_name.capitalize, parameters)
472
+ else
473
+ # It is a resource such a File['/tmp/foo']
474
+ if parameters.size != 1
475
+ raise_invalid_parameters_error(type_name.capitalize, 1, parameters.size)
476
+ end
477
+ TypeFactory.resource(type_name, parameters[0])
432
478
  end
433
- TYPES.resource(type_name, parameters[0])
434
479
  end
435
480
  end
436
481
 
437
482
  private
438
483
 
439
484
  def assert_type(t)
440
- raise_invalid_type_specification_error unless t.is_a?(Puppet::Pops::Types::PAnyType)
485
+ raise_invalid_type_specification_error unless t.is_a?(PAnyType)
441
486
  true
442
487
  end
443
488
 
444
489
  def assert_range_parameter(t)
445
- raise_invalid_type_specification_error unless TYPES.is_range_parameter?(t)
490
+ raise_invalid_type_specification_error unless TypeFactory.is_range_parameter?(t)
446
491
  end
447
492
 
448
493
  def raise_invalid_type_specification_error
@@ -464,7 +509,9 @@ class Puppet::Pops::Types::TypeParser
464
509
  end
465
510
 
466
511
  def original_text_of(ast)
467
- position = Puppet::Pops::Adapters::SourcePosAdapter.adapt(ast)
512
+ position = Adapters::SourcePosAdapter.adapt(ast)
468
513
  position.extract_text
469
514
  end
470
515
  end
516
+ end
517
+ end