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,7 +1,9 @@
1
+ module Puppet::Pops
2
+ module Binder
1
3
  # The KeyFactory is responsible for creating keys used for lookup of bindings.
2
4
  # @api public
3
5
  #
4
- class Puppet::Pops::Binder::KeyFactory
6
+ class KeyFactory
5
7
 
6
8
  # @api public
7
9
  def binding_key(binding)
@@ -10,12 +12,12 @@ class Puppet::Pops::Binder::KeyFactory
10
12
 
11
13
  # @api public
12
14
  def named_key(type, name)
13
- [(Puppet::Pops::Types::PDataType::DEFAULT.assignable?(type) ? Puppet::Pops::Types::PDataType::DEFAULT : type), name]
15
+ [(Types::PDataType::DEFAULT.assignable?(type) ? Types::PDataType::DEFAULT : type), name]
14
16
  end
15
17
 
16
18
  # @api public
17
19
  def data_key(name)
18
- [Puppet::Pops::Types::PDataType::DEFAULT, name]
20
+ [Types::PDataType::DEFAULT, name]
19
21
  end
20
22
 
21
23
  # @api public
@@ -42,13 +44,13 @@ class Puppet::Pops::Binder::KeyFactory
42
44
 
43
45
  # @api public
44
46
  def is_data?(key)
45
- return false unless key.is_a?(Array) && key[0].is_a?(Puppet::Pops::Types::PAnyType)
46
- Puppet::Pops::Types::PDataType::DEFAULT.assignable?(key[0])
47
+ return false unless key.is_a?(Array) && key[0].is_a?(Types::PAnyType)
48
+ Types::PDataType::DEFAULT.assignable?(key[0])
47
49
  end
48
50
 
49
51
  # @api public
50
52
  def is_ruby?(key)
51
- key.is_a?(Array) && key[0].is_a?(Puppet::Pops::Types::PRuntimeType) && key[0].runtime == :ruby
53
+ key.is_a?(Array) && key[0].is_a?(Types::PRuntimeType) && key[0].runtime == :ruby
52
54
  end
53
55
 
54
56
  # Returns the type of the key
@@ -59,3 +61,5 @@ class Puppet::Pops::Binder::KeyFactory
59
61
  key[0]
60
62
  end
61
63
  end
64
+ end
65
+ end
@@ -1,10 +1,13 @@
1
+ module Puppet::Pops
2
+ module Binder
1
3
  # This module contains the various producers used by Puppet Bindings.
2
- # The main (abstract) class is {Puppet::Pops::Binder::Producers::Producer} which documents the
4
+
5
+ # The main (abstract) class is {Producers::Producer} which documents the
3
6
  # Producer API and serves as a base class for all other producers.
4
7
  # It is required that custom producers inherit from this producer (directly or indirectly).
5
8
  #
6
9
  # The selection of a Producer is typically performed by the Innjector when it configures itself
7
- # from a Bindings model where a {Puppet::Pops::Binder::Bindings::ProducerDescriptor} describes
10
+ # from a Bindings model where a {Bindings::ProducerDescriptor} describes
8
11
  # which producer to use. The configuration uses this to create the concrete producer.
9
12
  # It is possible to describe that a particular producer class is to be used, and also to describe that
10
13
  # a custom producer (derived from Producer) should be used. This is available for both regular
@@ -13,7 +16,7 @@
13
16
  #
14
17
  # @api public
15
18
  #
16
- module Puppet::Pops::Binder::Producers
19
+ module Producers
17
20
  # Producer is an abstract base class representing the base contract for a bound producer.
18
21
  # Typically, when a lookup is performed it is the value that is returned (via a producer), but
19
22
  # it is also possible to lookup the producer, and ask it to produce the value (the producer may
@@ -48,10 +51,10 @@ module Puppet::Pops::Binder::Producers
48
51
  # Creates a Producer.
49
52
  # Derived classes should call this constructor to get support for transformer lambda.
50
53
  #
51
- # @param injector [Puppet::Pops::Binder::Injector] The injector where the lookup originates
52
- # @param binding [Puppet::Pops::Binder::Bindings::Binding, nil] The binding using this producer
54
+ # @param injector [Injector] The injector where the lookup originates
55
+ # @param binding [Bindings::Binding, nil] The binding using this producer
53
56
  # @param scope [Puppet::Parser::Scope] The scope to use for evaluation
54
- # @option options [Puppet::Pops::Model::LambdaExpression] :transformer (nil) a transformer of produced value
57
+ # @option options [Model::LambdaExpression] :transformer (nil) a transformer of produced value
55
58
  # @api public
56
59
  #
57
60
  def initialize(injector, binding, scope, options)
@@ -60,9 +63,9 @@ module Puppet::Pops::Binder::Producers
60
63
  raise ArgumentError, "Transformer Proc must take one argument; value." unless transformer_lambda.arity == 1
61
64
  @transformer = transformer_lambda
62
65
  else
63
- raise ArgumentError, "Transformer must be a LambdaExpression" unless transformer_lambda.is_a?(Puppet::Pops::Model::LambdaExpression)
66
+ raise ArgumentError, "Transformer must be a LambdaExpression" unless transformer_lambda.is_a?(Model::LambdaExpression)
64
67
  raise ArgumentError, "Transformer lambda must take one argument; value." unless transformer_lambda.parameters.size() == 1
65
- @transformer = Puppet::Pops::Parser::EvaluatingParser.new.closure(transformer_lambda, scope)
68
+ @transformer = Parser::EvaluatingParser.new.closure(transformer_lambda, scope)
66
69
  end
67
70
  end
68
71
  end
@@ -81,9 +84,9 @@ module Puppet::Pops::Binder::Producers
81
84
  # This implementation returns `self`. A derived class may want to override this method
82
85
  # to perform initialization/refresh of its internal state. This method is called when
83
86
  # a producer is requested.
84
- # @see Puppet::Pops::Binder::ProducerProducer for an example of implementation.
87
+ # @see ProducerProducer for an example of implementation.
85
88
  # @param scope [Puppet::Parser:Scope] the scope to use for evaluation
86
- # @return [Puppet::Pops::Binder::Producer] the producer to use
89
+ # @return [Producer] the producer to use
87
90
  # @api public
88
91
  #
89
92
  def producer(scope)
@@ -123,11 +126,11 @@ module Puppet::Pops::Binder::Producers
123
126
  # @api public
124
127
  attr_reader :value
125
128
 
126
- # @param injector [Puppet::Pops::Binder::Injector] The injector where the lookup originates
127
- # @param binding [Puppet::Pops::Binder::Bindings::Binding, nil] The binding using this producer
129
+ # @param injector [Injector] The injector where the lookup originates
130
+ # @param binding [Bindings::Binding, nil] The binding using this producer
128
131
  # @param scope [Puppet::Parser::Scope] The scope to use for evaluation
129
- # @option options [Puppet::Pops::Model::LambdaExpression] :transformer (nil) a transformer of produced value
130
- # @option options [Puppet::Pops::Model::LambdaExpression, nil] :value (nil) the value to produce
132
+ # @option options [Model::LambdaExpression] :transformer (nil) a transformer of produced value
133
+ # @option options [Model::LambdaExpression, nil] :value (nil) the value to produce
131
134
  # @api public
132
135
  #
133
136
  def initialize(injector, binding, scope, options)
@@ -182,10 +185,10 @@ module Puppet::Pops::Binder::Producers
182
185
  # @api public
183
186
  attr_reader :binding
184
187
 
185
- # @param injector [Puppet::Pops::Binder::Injector] The injector where the lookup originates
186
- # @param binding [Puppet::Pops::Binder::Bindings::Binding, nil] The binding using this producer
188
+ # @param injector [Injector] The injector where the lookup originates
189
+ # @param binding [Bindings::Binding, nil] The binding using this producer
187
190
  # @param scope [Puppet::Parser::Scope] The scope to use for evaluation
188
- # @option options [Puppet::Pops::Model::LambdaExpression] :transformer (nil) a transformer of produced value
191
+ # @option options [Model::LambdaExpression] :transformer (nil) a transformer of produced value
189
192
  # @api public
190
193
  #
191
194
  def initialize(injector, binding, scope, options)
@@ -204,10 +207,10 @@ module Puppet::Pops::Binder::Producers
204
207
  # @api public
205
208
  attr_reader :init_args
206
209
 
207
- # @param injector [Puppet::Pops::Binder::Injector] The injector where the lookup originates
208
- # @param binding [Puppet::Pops::Binder::Bindings::Binding, nil] The binding using this producer
210
+ # @param injector [Injector] The injector where the lookup originates
211
+ # @param binding [Bindings::Binding, nil] The binding using this producer
209
212
  # @param scope [Puppet::Parser::Scope] The scope to use for evaluation
210
- # @option options [Puppet::Pops::Model::LambdaExpression] :transformer (nil) a transformer of produced value
213
+ # @option options [Model::LambdaExpression] :transformer (nil) a transformer of produced value
211
214
  # @option options [String] :class_name The name of the class to create instance of
212
215
  # @option options [Array<Object>] :init_args ([]) Optional arguments to class constructor
213
216
  # @api public
@@ -220,7 +223,7 @@ module Puppet::Pops::Binder::Producers
220
223
  class_name = options[:class_name]
221
224
  raise ArgumentError, "Option 'class_name' must be given for an InstantiatingProducer" unless class_name
222
225
  # get class by name
223
- @the_class = Puppet::Pops::Types::ClassLoader.provide(class_name)
226
+ @the_class = Types::ClassLoader.provide(class_name)
224
227
  @init_args = options[:init_args] || []
225
228
  raise ArgumentError, "Can not load the class #{class_name} specified in binding named: '#{binding.name}'" unless @the_class
226
229
  end
@@ -255,11 +258,11 @@ module Puppet::Pops::Binder::Producers
255
258
  # @api public
256
259
  attr_reader :producers
257
260
 
258
- # @param injector [Puppet::Pops::Binder::Injector] The injector where the lookup originates
259
- # @param binding [Puppet::Pops::Binder::Bindings::Binding, nil] The binding using this producer
261
+ # @param injector [Injector] The injector where the lookup originates
262
+ # @param binding [Bindings::Binding, nil] The binding using this producer
260
263
  # @param scope [Puppet::Parser::Scope] The scope to use for evaluation
261
- # @option options [Puppet::Pops::Model::LambdaExpression] :transformer (nil) a transformer of produced value
262
- # @option options [Array<Puppet::Pops::Binder::Producers::Producer>] :producers list of producers to consult. Required.
264
+ # @option options [Model::LambdaExpression] :transformer (nil) a transformer of produced value
265
+ # @option options [Array<Producers::Producer>] :producers list of producers to consult. Required.
263
266
  # @api public
264
267
  #
265
268
  def initialize(injector, binding, scope, options)
@@ -288,11 +291,11 @@ module Puppet::Pops::Binder::Producers
288
291
  #
289
292
  attr_reader :expression
290
293
 
291
- # @param injector [Puppet::Pops::Binder::Injector] The injector where the lookup originates
292
- # @param binding [Puppet::Pops::Binder::Bindings::Binding, nil] The binding using this producer
294
+ # @param injector [Injector] The injector where the lookup originates
295
+ # @param binding [Bindings::Binding, nil] The binding using this producer
293
296
  # @param scope [Puppet::Parser::Scope] The scope to use for evaluation
294
- # @option options [Puppet::Pops::Model::LambdaExpression] :transformer (nil) a transformer of produced value
295
- # @option options [Array<Puppet::Pops::Model::Expression>] :expression The expression to evaluate
297
+ # @option options [Model::LambdaExpression] :transformer (nil) a transformer of produced value
298
+ # @option options [Array<Model::Expression>] :expression The expression to evaluate
296
299
  # @api public
297
300
  #
298
301
  def initialize(injector, binding, scope, options)
@@ -303,7 +306,7 @@ module Puppet::Pops::Binder::Producers
303
306
 
304
307
  # @api private
305
308
  def internal_produce(scope)
306
- Puppet::Pops::Parser::EvaluatingParser.new.evaluate(scope, expression)
309
+ Parser::EvaluatingParser.new.evaluate(scope, expression)
307
310
  end
308
311
  end
309
312
 
@@ -316,11 +319,11 @@ module Puppet::Pops::Binder::Producers
316
319
  # @api public
317
320
  attr_reader :name
318
321
 
319
- # @param injector [Puppet::Pops::Binder::Injector] The injector where the lookup originates
320
- # @param binder [Puppet::Pops::Binder::Bindings::Binding, nil] The binding using this producer
322
+ # @param injector [Injector] The injector where the lookup originates
323
+ # @param binder [Bindings::Binding, nil] The binding using this producer
321
324
  # @param scope [Puppet::Parser::Scope] The scope to use for evaluation
322
- # @option options [Puppet::Pops::Model::LambdaExpression] :transformer (nil) a transformer of produced value
323
- # @option options [Puppet::Pops::Types::PAnyType] :type The type to lookup
325
+ # @option options [Model::LambdaExpression] :transformer (nil) a transformer of produced value
326
+ # @option options [Types::PAnyType] :type The type to lookup
324
327
  # @option options [String] :name ('') The name to lookup
325
328
  # @api public
326
329
  #
@@ -345,13 +348,13 @@ module Puppet::Pops::Binder::Producers
345
348
  # @api public
346
349
  attr_reader :key
347
350
 
348
- # @param injector [Puppet::Pops::Binder::Injector] The injector where the lookup originates
349
- # @param binder [Puppet::Pops::Binder::Bindings::Binding, nil] The binding using this producer
351
+ # @param injector [Injector] The injector where the lookup originates
352
+ # @param binder [Bindings::Binding, nil] The binding using this producer
350
353
  # @param scope [Puppet::Parser::Scope] The scope to use for evaluation
351
- # @option options [Puppet::Pops::Model::LambdaExpression] :transformer (nil) a transformer of produced value
352
- # @option options [Puppet::Pops::Types::PAnyType] :type The type to lookup
354
+ # @option options [Model::LambdaExpression] :transformer (nil) a transformer of produced value
355
+ # @option options [Types::PAnyType] :type The type to lookup
353
356
  # @option options [String] :name ('') The name to lookup
354
- # @option options [Puppet::Pops::Types::PAnyType] :key The key to lookup in the hash
357
+ # @option options [Types::PAnyType] :key The key to lookup in the hash
355
358
  # @api public
356
359
  #
357
360
  def initialize(injector, binder, scope, options)
@@ -379,11 +382,11 @@ module Puppet::Pops::Binder::Producers
379
382
  # @api public
380
383
  attr_reader :value_producer
381
384
 
382
- # @param injector [Puppet::Pops::Binder::Injector] The injector where the lookup originates
383
- # @param binding [Puppet::Pops::Binder::Bindings::Binding, nil] The binding using this producer
385
+ # @param injector [Injector] The injector where the lookup originates
386
+ # @param binding [Bindings::Binding, nil] The binding using this producer
384
387
  # @param scope [Puppet::Parser::Scope] The scope to use for evaluation
385
- # @option options [Puppet::Pops::Model::LambdaExpression] :transformer (nil) a transformer of produced value
386
- # @option options [Puppet::Pops::Model::LambdaExpression] :producer_producer a producer of a value producer (required)
388
+ # @option options [Model::LambdaExpression] :transformer (nil) a transformer of produced value
389
+ # @option options [Model::LambdaExpression] :producer_producer a producer of a value producer (required)
387
390
  # @api public
388
391
  #
389
392
  def initialize(injector, binding, scope, options)
@@ -420,11 +423,11 @@ module Puppet::Pops::Binder::Producers
420
423
 
421
424
  # Creates new ProducerProducer given a producer.
422
425
  #
423
- # @param injector [Puppet::Pops::Binder::Injector] The injector where the lookup originates
424
- # @param binding [Puppet::Pops::Binder::Bindings::Binding, nil] The binding using this producer
426
+ # @param injector [Injector] The injector where the lookup originates
427
+ # @param binding [Bindings::Binding, nil] The binding using this producer
425
428
  # @param scope [Puppet::Parser::Scope] The scope to use for evaluation
426
- # @option options [Puppet::Pops::Model::LambdaExpression] :transformer (nil) a transformer of produced value
427
- # @option options [Puppet::Pops::Binder::Producer] :producer_producer a producer of a value producer (required)
429
+ # @option options [Model::LambdaExpression] :transformer (nil) a transformer of produced value
430
+ # @option options [Producer] :producer_producer a producer of a value producer (required)
428
431
  #
429
432
  # @api public
430
433
  #
@@ -512,10 +515,10 @@ module Puppet::Pops::Binder::Producers
512
515
  class MultibindProducer < AbstractArgumentedProducer
513
516
  attr_reader :contributions_key
514
517
 
515
- # @param injector [Puppet::Pops::Binder::Injector] The injector where the lookup originates
516
- # @param binding [Puppet::Pops::Binder::Bindings::Binding, nil] The binding using this producer
518
+ # @param injector [Injector] The injector where the lookup originates
519
+ # @param binding [Bindings::Binding, nil] The binding using this producer
517
520
  # @param scope [Puppet::Parser::Scope] The scope to use for evaluation
518
- # @option options [Puppet::Pops::Model::LambdaExpression] :transformer (nil) a transformer of produced value
521
+ # @option options [Model::LambdaExpression] :transformer (nil) a transformer of produced value
519
522
  #
520
523
  # @api public
521
524
  #
@@ -524,8 +527,8 @@ module Puppet::Pops::Binder::Producers
524
527
  @contributions_key = injector.key_factory.multibind_contributions(binding.id)
525
528
  end
526
529
 
527
- # @param expected [Array<Puppet::Pops::Types::PAnyType>, Puppet::Pops::Types::PAnyType] expected type or types
528
- # @param actual [Object, Puppet::Pops::Types::PAnyType> the actual value (or its type)
530
+ # @param expected [Array<Types::PAnyType>, Types::PAnyType] expected type or types
531
+ # @param actual [Object, Types::PAnyType> the actual value (or its type)
529
532
  # @return [String] a formatted string for inclusion as detail in an error message
530
533
  # @api private
531
534
  #
@@ -533,8 +536,8 @@ module Puppet::Pops::Binder::Producers
533
536
  tc = injector.type_calculator
534
537
  expected = [expected] unless expected.is_a?(Array)
535
538
  actual_t = tc.is_ptype?(actual) ? actual : tc.infer(actual)
536
- expstrs = expected.collect {|t| tc.string(t) }
537
- "expected: #{expstrs.join(', or ')}, got: #{tc.string(actual_t)}"
539
+ expstrs = expected.collect {|t| t.to_s }
540
+ "expected: #{expstrs.join(', or ')}, got: #{actual_t}"
538
541
  end
539
542
  end
540
543
 
@@ -578,10 +581,10 @@ module Puppet::Pops::Binder::Producers
578
581
  # @api public
579
582
  attr_reader :priority_on_unnamed
580
583
 
581
- # @param injector [Puppet::Pops::Binder::Injector] The injector where the lookup originates
582
- # @param binding [Puppet::Pops::Binder::Bindings::Binding, nil] The binding using this producer
584
+ # @param injector [Injector] The injector where the lookup originates
585
+ # @param binding [Bindings::Binding, nil] The binding using this producer
583
586
  # @param scope [Puppet::Parser::Scope] The scope to use for evaluation
584
- # @option options [Puppet::Pops::Model::LambdaExpression] :transformer (nil) a transformer of produced value
587
+ # @option options [Model::LambdaExpression] :transformer (nil) a transformer of produced value
585
588
  # @option options [Boolean] :uniq (false) if collected result should be post-processed to contain only unique entries
586
589
  # @option options [Boolean, Integer] :flatten (false) if collected result should be post-processed so all contained arrays
587
590
  # are flattened. May be set to an Integer value to indicate the level of recursion (-1 is endless, 0 is none).
@@ -680,10 +683,10 @@ module Puppet::Pops::Binder::Producers
680
683
  # By default, the hash is produced using `:priority` resolution - the highest entry is selected, the rest are
681
684
  # ignored unless they have the same priority which is an error.
682
685
  #
683
- # @param injector [Puppet::Pops::Binder::Injector] The injector where the lookup originates
684
- # @param binding [Puppet::Pops::Binder::Bindings::Binding, nil] The binding using this producer
686
+ # @param injector [Injector] The injector where the lookup originates
687
+ # @param binding [Bindings::Binding, nil] The binding using this producer
685
688
  # @param scope [Puppet::Parser::Scope] The scope to use for evaluation
686
- # @option options [Puppet::Pops::Model::LambdaExpression] :transformer (nil) a transformer of produced value
689
+ # @option options [Model::LambdaExpression] :transformer (nil) a transformer of produced value
687
690
  # @option options [Symbol, String] :conflict_resolution (:priority) One of `:error`, `:merge`, `:append`, `:priority`, `:ignore`
688
691
  # <ul><li> `ignore` the first found highest priority contribution is used, the rest are ignored</li>
689
692
  # <li>`error` any duplicate key is an error</li>
@@ -720,13 +723,13 @@ module Puppet::Pops::Binder::Producers
720
723
 
721
724
  if uniq || flatten || conflict_resolution.to_s == 'append'
722
725
  etype = binding.type.element_type
723
- unless etype.class == Puppet::Pops::Types::PDataType || etype.is_a?(Puppet::Pops::Types::PArrayType)
726
+ unless etype.class == Types::PDataType || etype.is_a?(Types::PArrayType)
724
727
  detail = []
725
728
  detail << ":uniq" if uniq
726
729
  detail << ":flatten" if flatten
727
730
  detail << ":conflict_resolution => :append" if conflict_resolution.to_s == 'append'
728
731
  raise ArgumentError, ["Options #{detail.join(', and ')} cannot be used with a Multibind ",
729
- "of type #{injector.type_calculator.string(binding.type)}"].join()
732
+ "of type #{binding.type}"].join()
730
733
  end
731
734
  end
732
735
  end
@@ -824,3 +827,5 @@ module Puppet::Pops::Binder::Producers
824
827
  end
825
828
 
826
829
  end
830
+ end
831
+ end
@@ -1,24 +1,24 @@
1
+ module Puppet::Pops
2
+ module Evaluator
1
3
  # AccessOperator handles operator []
2
4
  # This operator is part of evaluation.
3
5
  #
4
- class Puppet::Pops::Evaluator::AccessOperator
6
+ class AccessOperator
5
7
  # Provides access to the Puppet 3.x runtime (scope, etc.)
6
8
  # This separation has been made to make it easier to later migrate the evaluator to an improved runtime.
7
9
  #
8
- include Puppet::Pops::Evaluator::Runtime3Support
10
+ include Runtime3Support
9
11
 
10
- Issues = Puppet::Pops::Issues
11
- TYPEFACTORY = Puppet::Pops::Types::TypeFactory
12
12
  EMPTY_STRING = ''.freeze
13
13
 
14
14
  attr_reader :semantic
15
15
 
16
16
  # Initialize with AccessExpression to enable reporting issues
17
- # @param access_expression [Puppet::Pops::Model::AccessExpression] the semantic object being evaluated
17
+ # @param access_expression [Model::AccessExpression] the semantic object being evaluated
18
18
  # @return [void]
19
19
  #
20
20
  def initialize(access_expression)
21
- @@access_visitor ||= Puppet::Pops::Visitor.new(self, "access", 2, nil)
21
+ @@access_visitor ||= Visitor.new(self, "access", 2, nil)
22
22
  @semantic = access_expression
23
23
  end
24
24
 
@@ -36,7 +36,7 @@ class Puppet::Pops::Evaluator::AccessOperator
36
36
  keys.flatten!
37
37
  result = case keys.size
38
38
  when 0
39
- fail(Puppet::Pops::Issues::BAD_STRING_SLICE_ARITY, @semantic.left_expr, {:actual => keys.size})
39
+ fail(Issues::BAD_STRING_SLICE_ARITY, @semantic.left_expr, {:actual => keys.size})
40
40
  when 1
41
41
  # Note that Ruby 1.8.7 requires a length of 1 to produce a String
42
42
  k1 = coerce_numeric(keys[0], @semantic.keys[0], scope)
@@ -63,7 +63,7 @@ class Puppet::Pops::Evaluator::AccessOperator
63
63
  end
64
64
  o[ k1, k2 ]
65
65
  else
66
- fail(Puppet::Pops::Issues::BAD_STRING_SLICE_ARITY, @semantic.left_expr, {:actual => keys.size})
66
+ fail(Issues::BAD_STRING_SLICE_ARITY, @semantic.left_expr, {:actual => keys.size})
67
67
  end
68
68
  # Specified as: an index outside of range, or empty result == empty string
69
69
  (result.nil? || result.empty?) ? EMPTY_STRING : result
@@ -75,10 +75,10 @@ class Puppet::Pops::Evaluator::AccessOperator
75
75
  keys.flatten!
76
76
  unless keys.size == 1
77
77
  blamed = keys.size == 0 ? @semantic : @semantic.keys[1]
78
- fail(Puppet::Pops::Issues::BAD_TYPE_SLICE_ARITY, blamed, :base_type => o, :min=>1, :actual => keys.size)
78
+ fail(Issues::BAD_TYPE_SLICE_ARITY, blamed, :base_type => o, :min=>1, :actual => keys.size)
79
79
  end
80
80
  assert_keys(keys, o, 1, 1, String, Regexp)
81
- Puppet::Pops::Types::TypeFactory.regexp(*keys)
81
+ Types::TypeFactory.regexp(*keys)
82
82
  end
83
83
 
84
84
  # Evaluates <ary>[] with 1 or 2 arguments. One argument is an index lookup, two arguments is a slice from/to.
@@ -87,7 +87,7 @@ class Puppet::Pops::Evaluator::AccessOperator
87
87
  keys.flatten!
88
88
  case keys.size
89
89
  when 0
90
- fail(Puppet::Pops::Issues::BAD_ARRAY_SLICE_ARITY, @semantic.left_expr, {:actual => keys.size})
90
+ fail(Issues::BAD_ARRAY_SLICE_ARITY, @semantic.left_expr, {:actual => keys.size})
91
91
  when 1
92
92
  key = coerce_numeric(keys[0], @semantic.keys[0], scope)
93
93
  unless key.is_a?(Integer)
@@ -114,7 +114,7 @@ class Puppet::Pops::Evaluator::AccessOperator
114
114
  result = o[ k1, k2 ]
115
115
  result.nil? ? [] : result
116
116
  else
117
- fail(Puppet::Pops::Issues::BAD_ARRAY_SLICE_ARITY, @semantic.left_expr, {:actual => keys.size})
117
+ fail(Issues::BAD_ARRAY_SLICE_ARITY, @semantic.left_expr, {:actual => keys.size})
118
118
  end
119
119
  end
120
120
 
@@ -132,7 +132,7 @@ class Puppet::Pops::Evaluator::AccessOperator
132
132
  end
133
133
  case result.size
134
134
  when 0
135
- fail(Puppet::Pops::Issues::BAD_HASH_SLICE_ARITY, @semantic.left_expr, {:actual => keys.size})
135
+ fail(Issues::BAD_HASH_SLICE_ARITY, @semantic.left_expr, {:actual => keys.size})
136
136
  when 1
137
137
  result.pop
138
138
  else
@@ -145,35 +145,35 @@ class Puppet::Pops::Evaluator::AccessOperator
145
145
  def access_PEnumType(o, scope, keys)
146
146
  keys.flatten!
147
147
  assert_keys(keys, o, 1, Float::INFINITY, String)
148
- Puppet::Pops::Types::TypeFactory.enum(*keys)
148
+ Types::TypeFactory.enum(*keys)
149
149
  end
150
150
 
151
151
  def access_PVariantType(o, scope, keys)
152
152
  keys.flatten!
153
- assert_keys(keys, o, 1, Float::INFINITY, Puppet::Pops::Types::PAnyType)
154
- Puppet::Pops::Types::TypeFactory.variant(*keys)
153
+ assert_keys(keys, o, 1, Float::INFINITY, Types::PAnyType)
154
+ Types::TypeFactory.variant(*keys)
155
155
  end
156
156
 
157
157
  def access_PTupleType(o, scope, keys)
158
158
  keys.flatten!
159
- if TYPEFACTORY.is_range_parameter?(keys[-2]) && TYPEFACTORY.is_range_parameter?(keys[-1])
160
- size_type = TYPEFACTORY.range(keys[-2], keys[-1])
159
+ if Types::TypeFactory.is_range_parameter?(keys[-2]) && Types::TypeFactory.is_range_parameter?(keys[-1])
160
+ size_type = Types::TypeFactory.range(keys[-2], keys[-1])
161
161
  keys = keys[0, keys.size - 2]
162
- elsif TYPEFACTORY.is_range_parameter?(keys[-1])
163
- size_type = TYPEFACTORY.range(keys[-1], :default)
162
+ elsif Types::TypeFactory.is_range_parameter?(keys[-1])
163
+ size_type = Types::TypeFactory.range(keys[-1], :default)
164
164
  keys = keys[0, keys.size - 1]
165
165
  end
166
- assert_keys(keys, o, 1, Float::INFINITY, Puppet::Pops::Types::PAnyType)
167
- Puppet::Pops::Types::TypeFactory.tuple(keys, size_type)
166
+ assert_keys(keys, o, 1, Float::INFINITY, Types::PAnyType)
167
+ Types::TypeFactory.tuple(keys, size_type)
168
168
  end
169
169
 
170
170
  def access_PCallableType(o, scope, keys)
171
- TYPEFACTORY.callable(*keys)
171
+ Types::TypeFactory.callable(*keys)
172
172
  end
173
173
 
174
174
  def access_PStructType(o, scope, keys)
175
175
  assert_keys(keys, o, 1, 1, Hash)
176
- TYPEFACTORY.struct(keys[0])
176
+ Types::TypeFactory.struct(keys[0])
177
177
  end
178
178
 
179
179
  def access_PStringType(o, scope, keys)
@@ -184,9 +184,9 @@ class Puppet::Pops::Evaluator::AccessOperator
184
184
  when 2
185
185
  size_t = collection_size_t(0, keys[0], keys[1])
186
186
  else
187
- fail(Puppet::Pops::Issues::BAD_STRING_SLICE_ARITY, @semantic, {:actual => keys.size})
187
+ fail(Issues::BAD_STRING_SLICE_ARITY, @semantic, {:actual => keys.size})
188
188
  end
189
- TYPEFACTORY.string(size_t)
189
+ Types::TypeFactory.string(size_t)
190
190
  end
191
191
 
192
192
  # Asserts type of each key and calls fail with BAD_TYPE_SPECIFICATION
@@ -200,7 +200,7 @@ class Puppet::Pops::Evaluator::AccessOperator
200
200
  def assert_keys(keys, o, min, max, *allowed_classes)
201
201
  size = keys.size
202
202
  unless size.between?(min, max || Float::INFINITY)
203
- fail(Puppet::Pops::Issues::BAD_TYPE_SLICE_ARITY, @semantic, :base_type => o, :min=>1, :max => max, :actual => keys.size)
203
+ fail(Issues::BAD_TYPE_SLICE_ARITY, @semantic, :base_type => o, :min=>1, :max => max, :actual => keys.size)
204
204
  end
205
205
  keys.each_with_index do |k, i|
206
206
  unless allowed_classes.any? {|clazz| k.is_a?(clazz) }
@@ -210,7 +210,7 @@ class Puppet::Pops::Evaluator::AccessOperator
210
210
  end
211
211
 
212
212
  def bad_access_key_type(lhs, key_index, actual, *expected_classes)
213
- fail(Puppet::Pops::Issues::BAD_SLICE_KEY_TYPE, @semantic.keys[key_index], {
213
+ fail(Issues::BAD_SLICE_KEY_TYPE, @semantic.keys[key_index], {
214
214
  :left_value => lhs,
215
215
  :actual => bad_key_type_name(actual),
216
216
  :expected_classes => expected_classes
@@ -224,14 +224,14 @@ class Puppet::Pops::Evaluator::AccessOperator
224
224
  when :default
225
225
  'Default'
226
226
  else
227
- Puppet::Pops::Types::TypeCalculator.generalize(Puppet::Pops::Types::TypeCalculator.infer(actual)).to_s
227
+ Types::TypeCalculator.generalize(Types::TypeCalculator.infer(actual)).to_s
228
228
  end
229
229
  end
230
230
 
231
231
  def bad_type_specialization_key_type(type, key_index, actual, *expected_classes)
232
- label_provider = Puppet::Pops::Model::ModelLabelProvider.new()
232
+ label_provider = Model::ModelLabelProvider.new()
233
233
  expected = expected_classes.map {|c| label_provider.label(c) }.join(' or ')
234
- fail(Puppet::Pops::Issues::BAD_TYPE_SPECIALIZATION, @semantic.keys[key_index], {
234
+ fail(Issues::BAD_TYPE_SPECIALIZATION, @semantic.keys[key_index], {
235
235
  :type => type,
236
236
  :message => "Cannot use #{bad_key_type_name(actual)} where #{expected} is expected"
237
237
  })
@@ -239,24 +239,24 @@ class Puppet::Pops::Evaluator::AccessOperator
239
239
 
240
240
  def access_PPatternType(o, scope, keys)
241
241
  keys.flatten!
242
- assert_keys(keys, o, 1, Float::INFINITY, String, Regexp, Puppet::Pops::Types::PPatternType, Puppet::Pops::Types::PRegexpType)
243
- Puppet::Pops::Types::TypeFactory.pattern(*keys)
242
+ assert_keys(keys, o, 1, Float::INFINITY, String, Regexp, Types::PPatternType, Types::PRegexpType)
243
+ Types::TypeFactory.pattern(*keys)
244
244
  end
245
245
 
246
246
  def access_POptionalType(o, scope, keys)
247
247
  keys.flatten!
248
248
  if keys.size == 1
249
249
  type = keys[0]
250
- unless type.is_a?(Puppet::Pops::Types::PAnyType)
250
+ unless type.is_a?(Types::PAnyType)
251
251
  if type.is_a?(String)
252
- type = TYPEFACTORY.string(nil, type)
252
+ type = Types::TypeFactory.string(nil, type)
253
253
  else
254
- fail(Puppet::Pops::Issues::BAD_TYPE_SLICE_TYPE, @semantic.keys[0], {:base_type => 'Optional-Type', :actual => type.class})
254
+ fail(Issues::BAD_TYPE_SLICE_TYPE, @semantic.keys[0], {:base_type => 'Optional-Type', :actual => type.class})
255
255
  end
256
256
  end
257
- Puppet::Pops::Types::POptionalType.new(type)
257
+ Types::POptionalType.new(type)
258
258
  else
259
- fail(Puppet::Pops::Issues::BAD_TYPE_SLICE_ARITY, @semantic, {:base_type => 'Optional-Type', :min => 1, :actual => keys.size})
259
+ fail(Issues::BAD_TYPE_SLICE_ARITY, @semantic, {:base_type => 'Optional-Type', :min => 1, :actual => keys.size})
260
260
  end
261
261
  end
262
262
 
@@ -264,32 +264,32 @@ class Puppet::Pops::Evaluator::AccessOperator
264
264
  keys.flatten!
265
265
  case keys.size
266
266
  when 0
267
- TYPEFACTORY.not_undef
267
+ Types::TypeFactory.not_undef
268
268
  when 1
269
269
  type = keys[0]
270
270
  case type
271
271
  when String
272
- type = TYPEFACTORY.string(nil, type)
273
- when Puppet::Pops::Types::PAnyType
274
- type = nil if type.class == Puppet::Pops::Types::PAnyType
272
+ type = Types::TypeFactory.string(nil, type)
273
+ when Types::PAnyType
274
+ type = nil if type.class == Types::PAnyType
275
275
  else
276
- fail(Puppet::Pops::Issues::BAD_NOT_UNDEF_SLICE_TYPE, @semantic.keys[0], {:base_type => 'NotUndef-Type', :actual => type.class})
276
+ fail(Issues::BAD_NOT_UNDEF_SLICE_TYPE, @semantic.keys[0], {:base_type => 'NotUndef-Type', :actual => type.class})
277
277
  end
278
- TYPEFACTORY.not_undef(type)
278
+ Types::TypeFactory.not_undef(type)
279
279
  else
280
- fail(Puppet::Pops::Issues::BAD_TYPE_SLICE_ARITY, @semantic, {:base_type => 'NotUndef-Type', :min => 0, :max => 1, :actual => keys.size})
280
+ fail(Issues::BAD_TYPE_SLICE_ARITY, @semantic, {:base_type => 'NotUndef-Type', :min => 0, :max => 1, :actual => keys.size})
281
281
  end
282
282
  end
283
283
 
284
284
  def access_PType(o, scope, keys)
285
285
  keys.flatten!
286
286
  if keys.size == 1
287
- unless keys[0].is_a?(Puppet::Pops::Types::PAnyType)
288
- fail(Puppet::Pops::Issues::BAD_TYPE_SLICE_TYPE, @semantic.keys[0], {:base_type => 'Type-Type', :actual => keys[0].class})
287
+ unless keys[0].is_a?(Types::PAnyType)
288
+ fail(Issues::BAD_TYPE_SLICE_TYPE, @semantic.keys[0], {:base_type => 'Type-Type', :actual => keys[0].class})
289
289
  end
290
- Puppet::Pops::Types::PType.new(keys[0])
290
+ Types::PType.new(keys[0])
291
291
  else
292
- fail(Puppet::Pops::Issues::BAD_TYPE_SLICE_ARITY, @semantic, {:base_type => 'Type-Type', :min => 1, :actual => keys.size})
292
+ fail(Issues::BAD_TYPE_SLICE_ARITY, @semantic, {:base_type => 'Type-Type', :min => 1, :actual => keys.size})
293
293
  end
294
294
  end
295
295
 
@@ -297,34 +297,34 @@ class Puppet::Pops::Evaluator::AccessOperator
297
297
  keys.flatten!
298
298
  assert_keys(keys, o, 2, 2, String, String)
299
299
  # create runtime type based on runtime and name of class, (not inference of key's type)
300
- Puppet::Pops::Types::TypeFactory.runtime(*keys)
300
+ Types::TypeFactory.runtime(*keys)
301
301
  end
302
302
 
303
303
  def access_PIntegerType(o, scope, keys)
304
304
  keys.flatten!
305
305
  unless keys.size.between?(1, 2)
306
- fail(Puppet::Pops::Issues::BAD_INTEGER_SLICE_ARITY, @semantic, {:actual => keys.size})
306
+ fail(Issues::BAD_INTEGER_SLICE_ARITY, @semantic, {:actual => keys.size})
307
307
  end
308
308
  keys.each_with_index do |x, index|
309
- fail(Puppet::Pops::Issues::BAD_INTEGER_SLICE_TYPE, @semantic.keys[index],
309
+ fail(Issues::BAD_INTEGER_SLICE_TYPE, @semantic.keys[index],
310
310
  {:actual => x.class}) unless (x.is_a?(Integer) || x == :default)
311
311
  end
312
- Puppet::Pops::Types::PIntegerType.new(*keys)
312
+ Types::PIntegerType.new(*keys)
313
313
  end
314
314
 
315
315
  def access_PFloatType(o, scope, keys)
316
316
  keys.flatten!
317
317
  unless keys.size.between?(1, 2)
318
- fail(Puppet::Pops::Issues::BAD_FLOAT_SLICE_ARITY, @semantic, {:actual => keys.size})
318
+ fail(Issues::BAD_FLOAT_SLICE_ARITY, @semantic, {:actual => keys.size})
319
319
  end
320
320
  keys.each_with_index do |x, index|
321
- fail(Puppet::Pops::Issues::BAD_FLOAT_SLICE_TYPE, @semantic.keys[index],
321
+ fail(Issues::BAD_FLOAT_SLICE_TYPE, @semantic.keys[index],
322
322
  {:actual => x.class}) unless (x.is_a?(Float) || x.is_a?(Integer) || x == :default)
323
323
  end
324
324
  from, to = keys
325
325
  from = from == :default || from.nil? ? nil : Float(from)
326
326
  to = to == :default || to.nil? ? nil : Float(to)
327
- Puppet::Pops::Types::PFloatType.new(from, to)
327
+ Types::PFloatType.new(from, to)
328
328
  end
329
329
 
330
330
  # A Hash can create a new Hash type, one arg sets value type, two args sets key and value type in new type.
@@ -334,21 +334,21 @@ class Puppet::Pops::Evaluator::AccessOperator
334
334
  def access_PHashType(o, scope, keys)
335
335
  keys.flatten!
336
336
  keys[0,2].each_with_index do |k, index|
337
- unless k.is_a?(Puppet::Pops::Types::PAnyType)
338
- fail(Puppet::Pops::Issues::BAD_TYPE_SLICE_TYPE, @semantic.keys[index], {:base_type => 'Hash-Type', :actual => k.class})
337
+ unless k.is_a?(Types::PAnyType)
338
+ fail(Issues::BAD_TYPE_SLICE_TYPE, @semantic.keys[index], {:base_type => 'Hash-Type', :actual => k.class})
339
339
  end
340
340
  end
341
341
  case keys.size
342
342
  when 2
343
- Puppet::Pops::Types::PHashType.new(keys[0], keys[1], nil)
343
+ Types::PHashType.new(keys[0], keys[1], nil)
344
344
  when 3
345
345
  size_t = keys[2]
346
- size_t = Puppet::Pops::Types::PIntegerType.new(size_t) unless size_t.is_a?(Puppet::Pops::Types::PIntegerType)
347
- Puppet::Pops::Types::PHashType.new(keys[0], keys[1], size_t)
346
+ size_t = Types::PIntegerType.new(size_t) unless size_t.is_a?(Types::PIntegerType)
347
+ Types::PHashType.new(keys[0], keys[1], size_t)
348
348
  when 4
349
- Puppet::Pops::Types::PHashType.new(keys[0], keys[1], collection_size_t(1, keys[2], keys[3]))
349
+ Types::PHashType.new(keys[0], keys[1], collection_size_t(1, keys[2], keys[3]))
350
350
  else
351
- fail(Puppet::Pops::Issues::BAD_TYPE_SLICE_ARITY, @semantic, {
351
+ fail(Issues::BAD_TYPE_SLICE_ARITY, @semantic, {
352
352
  :base_type => 'Hash-Type', :min => 2, :max => 4, :actual => keys.size
353
353
  })
354
354
  end
@@ -363,10 +363,10 @@ class Puppet::Pops::Evaluator::AccessOperator
363
363
  when 2
364
364
  size_t = collection_size_t(1, keys[0], keys[1])
365
365
  else
366
- fail(Puppet::Pops::Issues::BAD_TYPE_SLICE_ARITY, @semantic,
366
+ fail(Issues::BAD_TYPE_SLICE_ARITY, @semantic,
367
367
  {:base_type => 'Collection-Type', :min => 1, :max => 2, :actual => keys.size})
368
368
  end
369
- Puppet::Pops::Types::PCollectionType.new(size_t)
369
+ Types::PCollectionType.new(size_t)
370
370
  end
371
371
 
372
372
  # An Array can create a new Array type. It is not possible to create a collection of Array types.
@@ -381,25 +381,25 @@ class Puppet::Pops::Evaluator::AccessOperator
381
381
  when 3
382
382
  size_t = collection_size_t(1, keys[1], keys[2])
383
383
  else
384
- fail(Puppet::Pops::Issues::BAD_TYPE_SLICE_ARITY, @semantic,
384
+ fail(Issues::BAD_TYPE_SLICE_ARITY, @semantic,
385
385
  {:base_type => 'Array-Type', :min => 1, :max => 3, :actual => keys.size})
386
386
  end
387
- unless keys[0].is_a?(Puppet::Pops::Types::PAnyType)
388
- fail(Puppet::Pops::Issues::BAD_TYPE_SLICE_TYPE, @semantic.keys[0], {:base_type => 'Array-Type', :actual => keys[0].class})
387
+ unless keys[0].is_a?(Types::PAnyType)
388
+ fail(Issues::BAD_TYPE_SLICE_TYPE, @semantic.keys[0], {:base_type => 'Array-Type', :actual => keys[0].class})
389
389
  end
390
- Puppet::Pops::Types::PArrayType.new(keys[0], size_t)
390
+ Types::PArrayType.new(keys[0], size_t)
391
391
  end
392
392
 
393
393
  # Produces an PIntegerType (range) given one or two keys.
394
394
  def collection_size_t(start_index, *keys)
395
- if keys.size == 1 && keys[0].is_a?(Puppet::Pops::Types::PIntegerType)
395
+ if keys.size == 1 && keys[0].is_a?(Types::PIntegerType)
396
396
  keys[0]
397
397
  else
398
398
  keys.each_with_index do |x, index|
399
- fail(Puppet::Pops::Issues::BAD_COLLECTION_SLICE_TYPE, @semantic.keys[start_index + index],
399
+ fail(Issues::BAD_COLLECTION_SLICE_TYPE, @semantic.keys[start_index + index],
400
400
  {:actual => x.class}) unless (x.is_a?(Integer) || x == :default)
401
401
  end
402
- Puppet::Pops::Types::PIntegerType.new(*keys)
402
+ Types::PIntegerType.new(*keys)
403
403
  end
404
404
  end
405
405
 
@@ -408,7 +408,7 @@ class Puppet::Pops::Evaluator::AccessOperator
408
408
  def access_Resource(o, scope, keys)
409
409
  # To access a Puppet::Resource as if it was a PResourceType, simply infer it, and take the type of
410
410
  # the parameterized meta type (i.e. Type[Resource[the_resource_type, the_resource_title]])
411
- t = Puppet::Pops::Types::TypeCalculator.infer(o).type
411
+ t = Types::TypeCalculator.infer(o).type
412
412
  # must map "undefined title" from resource to nil
413
413
  t.title = nil if t.title == EMPTY_STRING
414
414
  access(t, scope, *keys)
@@ -430,8 +430,8 @@ class Puppet::Pops::Evaluator::AccessOperator
430
430
  blamed = keys.size == 0 ? @semantic : @semantic.keys[0]
431
431
 
432
432
  if keys.size == 0
433
- fail(Puppet::Pops::Issues::BAD_TYPE_SLICE_ARITY, blamed,
434
- :base_type => Puppet::Pops::Types::TypeCalculator.new().string(o), :min => 1, :max => -1, :actual => 0)
433
+ fail(Issues::BAD_TYPE_SLICE_ARITY, blamed,
434
+ :base_type => o.to_s, :min => 1, :max => -1, :actual => 0)
435
435
  end
436
436
 
437
437
  # Must know which concrete resource type to operate on in all cases.
@@ -439,19 +439,19 @@ class Puppet::Pops::Evaluator::AccessOperator
439
439
  # type_name is LHS type_name if set, else the first given arg
440
440
  type_name = o.type_name || keys.shift
441
441
  type_name = case type_name
442
- when Puppet::Pops::Types::PResourceType
442
+ when Types::PResourceType
443
443
  type_name.type_name
444
444
  when String
445
445
  type_name.downcase
446
446
  else
447
447
  # blame given left expression if it defined the type, else the first given key expression
448
448
  blame = o.type_name.nil? ? @semantic.keys[0] : @semantic.left_expr
449
- fail(Puppet::Pops::Issues::ILLEGAL_RESOURCE_SPECIALIZATION, blame, {:actual => bad_key_type_name(type_name)})
449
+ fail(Issues::ILLEGAL_RESOURCE_SPECIALIZATION, blame, {:actual => bad_key_type_name(type_name)})
450
450
  end
451
451
 
452
452
  # type name must conform
453
- if type_name !~ Puppet::Pops::Patterns::CLASSREF
454
- fail(Puppet::Pops::Issues::ILLEGAL_CLASSREF, blamed, {:name=>type_name})
453
+ if type_name !~ Patterns::CLASSREF
454
+ fail(Issues::ILLEGAL_CLASSREF, blamed, {:name=>type_name})
455
455
  end
456
456
 
457
457
  # The result is an array if multiple titles are given, or if titles are specified with an array
@@ -467,7 +467,7 @@ class Puppet::Pops::Evaluator::AccessOperator
467
467
  # Return an empty array
468
468
  #
469
469
  if keys.empty? && keys_orig_size > 0
470
- optionally_fail(Puppet::Pops::Issues::EMPTY_RESOURCE_SPECIALIZATION, blamed)
470
+ optionally_fail(Issues::EMPTY_RESOURCE_SPECIALIZATION, blamed)
471
471
  return result_type_array ? [] : nil
472
472
  end
473
473
 
@@ -475,12 +475,12 @@ class Puppet::Pops::Evaluator::AccessOperator
475
475
  # lookup resource and return one or more parameter values
476
476
  resource = find_resource(scope, o.type_name, o.title)
477
477
  unless resource
478
- fail(Puppet::Pops::Issues::UNKNOWN_RESOURCE, @semantic, {:type_name => o.type_name, :title => o.title})
478
+ fail(Issues::UNKNOWN_RESOURCE, @semantic, {:type_name => o.type_name, :title => o.title})
479
479
  end
480
480
 
481
481
  result = keys.map do |k|
482
482
  unless is_parameter_of_resource?(scope, resource, k)
483
- fail(Puppet::Pops::Issues::UNKNOWN_RESOURCE_PARAMETER, @semantic,
483
+ fail(Issues::UNKNOWN_RESOURCE_PARAMETER, @semantic,
484
484
  {:type_name => o.type_name, :title => o.title, :param_name=>k})
485
485
  end
486
486
  get_resource_parameter_value(scope, resource, k)
@@ -493,13 +493,13 @@ class Puppet::Pops::Evaluator::AccessOperator
493
493
  result = keys.each_with_index.map do |t, i|
494
494
  unless t.is_a?(String) || t == :no_title
495
495
  index = keys_orig_size != keys.size ? i+1 : i
496
- fail(Puppet::Pops::Issues::BAD_TYPE_SPECIALIZATION, @semantic.keys[index], {
496
+ fail(Issues::BAD_TYPE_SPECIALIZATION, @semantic.keys[index], {
497
497
  :type => o,
498
498
  :message => "Cannot use #{bad_key_type_name(t)} where a resource title String is expected"
499
499
  })
500
500
  end
501
501
 
502
- Puppet::Pops::Types::PResourceType.new(type_name, t == :no_title ? nil : t)
502
+ Types::PResourceType.new(type_name, t == :no_title ? nil : t)
503
503
  end
504
504
  # returns single type if request was for a single entity, else an array of types (possibly empty)
505
505
  return result_type_array ? result : result.pop
@@ -510,8 +510,8 @@ class Puppet::Pops::Evaluator::AccessOperator
510
510
  keys_orig_size = keys.size
511
511
 
512
512
  if keys_orig_size == 0
513
- fail(Puppet::Pops::Issues::BAD_TYPE_SLICE_ARITY, blamed,
514
- :base_type => Puppet::Pops::Types::TypeCalculator.new().string(o), :min => 1, :max => -1, :actual => 0)
513
+ fail(Issues::BAD_TYPE_SLICE_ARITY, blamed,
514
+ :base_type => o.to_s, :min => 1, :max => -1, :actual => 0)
515
515
  end
516
516
 
517
517
  # The result is an array if multiple classnames are given, or if classnames are specified with an array
@@ -526,7 +526,7 @@ class Puppet::Pops::Evaluator::AccessOperator
526
526
  # Return an empty array
527
527
  #
528
528
  if keys.empty? && keys_orig_size > 0
529
- optionally_fail(Puppet::Pops::Issues::EMPTY_RESOURCE_SPECIALIZATION, blamed)
529
+ optionally_fail(Issues::EMPTY_RESOURCE_SPECIALIZATION, blamed)
530
530
  return result_type_array ? [] : nil
531
531
  end
532
532
 
@@ -536,18 +536,18 @@ class Puppet::Pops::Evaluator::AccessOperator
536
536
  # does not have a title. This should probably be deprecated.
537
537
  #
538
538
  result = keys.each_with_index.map do |c, i|
539
- name = if c.is_a?(Puppet::Pops::Types::PResourceType) && !c.type_name.nil? && c.title.nil?
539
+ name = if c.is_a?(Types::PResourceType) && !c.type_name.nil? && c.title.nil?
540
540
  # type_name is already downcase. Don't waste time trying to downcase again
541
541
  c.type_name
542
542
  elsif c.is_a?(String)
543
543
  c.downcase
544
544
  else
545
- fail(Puppet::Pops::Issues::ILLEGAL_HOSTCLASS_NAME, @semantic.keys[i], {:name => c})
545
+ fail(Issues::ILLEGAL_HOSTCLASS_NAME, @semantic.keys[i], {:name => c})
546
546
  end
547
547
 
548
- if name =~ Puppet::Pops::Patterns::NAME
548
+ if name =~ Patterns::NAME
549
549
  # Remove leading '::' since all references are global, and 3x runtime does the wrong thing
550
- Puppet::Pops::Types::PHostClassType.new(name.sub(/^::/, EMPTY_STRING))
550
+ Types::PHostClassType.new(name.sub(/^::/, EMPTY_STRING))
551
551
  else
552
552
  fail(Issues::ILLEGAL_NAME, @semantic.keys[i], {:name=>c})
553
553
  end
@@ -560,12 +560,12 @@ class Puppet::Pops::Evaluator::AccessOperator
560
560
  if is_parameter_of_resource?(scope, resource, k)
561
561
  get_resource_parameter_value(scope, resource, k)
562
562
  else
563
- fail(Puppet::Pops::Issues::UNKNOWN_RESOURCE_PARAMETER, @semantic,
563
+ fail(Issues::UNKNOWN_RESOURCE_PARAMETER, @semantic,
564
564
  {:type_name => 'Class', :title => o.class_name, :param_name=>k})
565
565
  end
566
566
  end
567
567
  else
568
- fail(Puppet::Pops::Issues::UNKNOWN_RESOURCE, @semantic, {:type_name => 'Class', :title => o.class_name})
568
+ fail(Issues::UNKNOWN_RESOURCE, @semantic, {:type_name => 'Class', :title => o.class_name})
569
569
  end
570
570
  end
571
571
 
@@ -573,3 +573,5 @@ class Puppet::Pops::Evaluator::AccessOperator
573
573
  return result_type_array ? result : result.pop
574
574
  end
575
575
  end
576
+ end
577
+ end