puppet 4.3.2-x64-mingw32 → 4.4.0-x64-mingw32

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,3 +1,5 @@
1
+ module Puppet::Pops
2
+ module Evaluator
1
3
  # A Closure represents logic bound to a particular scope.
2
4
  # As long as the runtime (basically the scope implementation) has the behavior of Puppet 3x it is not
3
5
  # safe to return and later use this closure.
@@ -11,7 +13,7 @@
11
13
  # Note that this class is a CallableSignature, and the methods defined there should be used
12
14
  # as the API for obtaining information in a callable-implementation agnostic way.
13
15
  #
14
- class Puppet::Pops::Evaluator::Closure < Puppet::Pops::Evaluator::CallableSignature
16
+ class Closure < CallableSignature
15
17
  attr_reader :evaluator
16
18
  attr_reader :model
17
19
  attr_reader :enclosing_scope
@@ -25,22 +27,7 @@ class Puppet::Pops::Evaluator::Closure < Puppet::Pops::Evaluator::CallableSignat
25
27
  # Evaluates a closure in its enclosing scope after having matched given arguments with parameters (from left to right)
26
28
  # @api public
27
29
  def call(*args)
28
- variable_bindings = combine_values_with_parameters(args)
29
-
30
- tc = Puppet::Pops::Types::TypeCalculator.singleton
31
- final_args = tc.infer_set(parameters.reduce([]) do |tmp_args, param|
32
- if param.captures_rest
33
- tmp_args.concat(variable_bindings[param.name])
34
- else
35
- tmp_args << variable_bindings[param.name]
36
- end
37
- end)
38
-
39
- if type.callable?(final_args)
40
- @evaluator.evaluate_block_with_bindings(@enclosing_scope, variable_bindings, @model.body)
41
- else
42
- raise ArgumentError, Puppet::Pops::Types::TypeMismatchDescriber.describe_signatures(closure_name, [self], final_args)
43
- end
30
+ call_with_scope(@enclosing_scope, args)
44
31
  end
45
32
 
46
33
  # This method makes a Closure compatible with a Dispatch. This is used when the closure is wrapped in a Function
@@ -48,20 +35,29 @@ class Puppet::Pops::Evaluator::Closure < Puppet::Pops::Evaluator::CallableSignat
48
35
  # checks of the argument type/arity validity).
49
36
  # @api private
50
37
  def invoke(instance, calling_scope, args, &block)
51
- call(*args, &block)
38
+ @enclosing_scope.with_global_scope do |global_scope|
39
+ call_with_scope(global_scope, args, &block)
40
+ end
52
41
  end
53
42
 
54
43
  # Call closure with argument assignment by name
55
44
  def call_by_name(args_hash, enforce_parameters)
56
45
  if enforce_parameters
57
- args_hash = args_hash.dup
58
- parameters.each do |p|
59
- name = p.name
60
- # only set result of default expr if it is defined (it is otherwise not possible to differentiate
61
- # between explicit undef and no default expression
62
- args_hash[name] = @evaluator.evaluate(p.value, @enclosing_scope) if args_hash[name].nil? && !p.value.nil?
46
+ # Push a temporary parameter scope used while resolving the parameter defaults
47
+ @enclosing_scope.with_parameter_scope(parameter_names) do |param_scope|
48
+ args_hash.each { |k, v| param_scope[k] = v unless v.nil? && parameter_names.include?(k) }
49
+ parameters.each do |p|
50
+ name = p.name
51
+ # only set result of default expr if it is defined (it is otherwise not possible to differentiate
52
+ # between explicit undef and no default expression
53
+ arg = args_hash[name]
54
+ if arg.nil? && !p.value.nil?
55
+ param_scope[name] = param_scope.evaluate(name, p.value, @enclosing_scope, @evaluator)
56
+ end
57
+ end
58
+ args_hash = param_scope.to_hash
63
59
  end
64
- Puppet::Pops::Types::TypeMismatchDescriber.validate_parameters(closure_name, params_struct, args_hash)
60
+ Types::TypeMismatchDescriber.validate_parameters(closure_name, params_struct, args_hash)
65
61
  end
66
62
 
67
63
  @evaluator.evaluate_block_with_bindings(@enclosing_scope, args_hash, @model.body)
@@ -112,7 +108,7 @@ class Puppet::Pops::Evaluator::Closure < Puppet::Pops::Evaluator::CallableSignat
112
108
  CLOSURE_NAME
113
109
  end
114
110
 
115
- class Named < Puppet::Pops::Evaluator::Closure
111
+ class Named < Closure
116
112
  def initialize(name, evaluator, model, scope)
117
113
  @name = name
118
114
  super(evaluator, model, scope)
@@ -125,52 +121,70 @@ class Puppet::Pops::Evaluator::Closure < Puppet::Pops::Evaluator::CallableSignat
125
121
 
126
122
  private
127
123
 
128
- def combine_values_with_parameters(args)
129
- variable_bindings = {}
124
+ def call_with_scope(scope, args)
125
+ variable_bindings = combine_values_with_parameters(scope, args)
126
+
127
+ tc = Types::TypeCalculator.singleton
128
+ final_args = tc.infer_set(parameters.reduce([]) do |tmp_args, param|
129
+ if param.captures_rest
130
+ tmp_args.concat(variable_bindings[param.name])
131
+ else
132
+ tmp_args << variable_bindings[param.name]
133
+ end
134
+ end)
130
135
 
131
- parameters.each_with_index do |parameter, index|
132
- param_captures = parameter.captures_rest
133
- default_expression = parameter.value
136
+ if type.callable?(final_args)
137
+ @evaluator.evaluate_block_with_bindings(scope, variable_bindings, @model.body)
138
+ else
139
+ raise ArgumentError, Types::TypeMismatchDescriber.describe_signatures(closure_name, [self], final_args)
140
+ end
141
+ end
134
142
 
135
- if index >= args.size
136
- if default_expression
137
- # not given, has default
138
- value = @evaluator.evaluate(default_expression, @enclosing_scope)
139
- if param_captures && !value.is_a?(Array)
140
- # correct non array default value
141
- value = [value]
143
+ def combine_values_with_parameters(scope, args)
144
+ scope.with_parameter_scope(parameter_names) do |param_scope|
145
+ parameters.each_with_index do |parameter, index|
146
+ param_captures = parameter.captures_rest
147
+ default_expression = parameter.value
148
+
149
+ if index >= args.size
150
+ if default_expression
151
+ # not given, has default
152
+ value = param_scope.evaluate(parameter.name, default_expression, scope, @evaluator)
153
+
154
+ if param_captures && !value.is_a?(Array)
155
+ # correct non array default value
156
+ value = [value]
157
+ end
158
+ else
159
+ # not given, does not have default
160
+ if param_captures
161
+ # default for captures rest is an empty array
162
+ value = []
163
+ else
164
+ @evaluator.fail(Issues::MISSING_REQUIRED_PARAMETER, parameter, { :param_name => parameter.name })
165
+ end
142
166
  end
143
167
  else
144
- # not given, does not have default
168
+ given_argument = args[index]
145
169
  if param_captures
146
- # default for captures rest is an empty array
147
- value = []
170
+ # get excess arguments
171
+ value = args[(parameter_count-1)..-1]
172
+ # If the input was a single nil, or undef, and there is a default, use the default
173
+ # This supports :undef in case it was used in a 3x data structure and it is passed as an arg
174
+ #
175
+ if value.size == 1 && (given_argument.nil? || given_argument == :undef) && default_expression
176
+ value = param_scope.evaluate(parameter.name, default_expression, scope, @evaluator)
177
+ # and ensure it is an array
178
+ value = [value] unless value.is_a?(Array)
179
+ end
148
180
  else
149
- @evaluator.fail(Puppet::Pops::Issues::MISSING_REQUIRED_PARAMETER, parameter, { :param_name => parameter.name })
181
+ value = given_argument
150
182
  end
151
183
  end
152
- else
153
- given_argument = args[index]
154
- if param_captures
155
- # get excess arguments
156
- value = args[(parameter_count-1)..-1]
157
- # If the input was a single nil, or undef, and there is a default, use the default
158
- # This supports :undef in case it was used in a 3x data structure and it is passed as an arg
159
- #
160
- if value.size == 1 && (given_argument.nil? || given_argument == :undef) && default_expression
161
- value = @evaluator.evaluate(default_expression, @enclosing_scope)
162
- # and ensure it is an array
163
- value = [value] unless value.is_a?(Array)
164
- end
165
- else
166
- value = given_argument
167
- end
184
+ param_scope[parameter.name] = value
168
185
  end
169
-
170
- variable_bindings[parameter.name] = value
186
+ param_scope.to_hash
171
187
  end
172
-
173
- variable_bindings
174
188
  end
175
189
 
176
190
  def create_callable_type()
@@ -185,7 +199,7 @@ class Puppet::Pops::Evaluator::Closure < Puppet::Pops::Evaluator::CallableSignat
185
199
  if param_range[0] == 0
186
200
  in_optional_parameters = true
187
201
  elsif param_range[0] != 0 && in_optional_parameters
188
- @evaluator.fail(Puppet::Pops::Issues::REQUIRED_PARAMETER_AFTER_OPTIONAL, param, { :param_name => param.name })
202
+ @evaluator.fail(Issues::REQUIRED_PARAMETER_AFTER_OPTIONAL, param, { :param_name => param.name })
189
203
  end
190
204
 
191
205
  range[0] += param_range[0]
@@ -196,11 +210,11 @@ class Puppet::Pops::Evaluator::Closure < Puppet::Pops::Evaluator::CallableSignat
196
210
  range[1] = :default
197
211
  end
198
212
 
199
- Puppet::Pops::Types::TypeFactory.callable(*(types + range))
213
+ Types::TypeFactory.callable(*(types + range))
200
214
  end
201
215
 
202
216
  def create_params_struct
203
- type_factory = Puppet::Pops::Types::TypeFactory
217
+ type_factory = Types::TypeFactory
204
218
  members = {}
205
219
 
206
220
  parameters.each do |param|
@@ -216,10 +230,10 @@ class Puppet::Pops::Evaluator::Closure < Puppet::Pops::Evaluator::CallableSignat
216
230
  type = if param.type_expr
217
231
  @evaluator.evaluate(param.type_expr, @enclosing_scope)
218
232
  else
219
- Puppet::Pops::Types::PAnyType::DEFAULT
233
+ Types::PAnyType::DEFAULT
220
234
  end
221
235
 
222
- if param.captures_rest && type.is_a?(Puppet::Pops::Types::PArrayType)
236
+ if param.captures_rest && type.is_a?(Types::PArrayType)
223
237
  # An array on a slurp parameter is how a size range is defined for a
224
238
  # slurp (Array[Integer, 1, 3] *$param). However, the callable that is
225
239
  # created can't have the array in that position or else type checking
@@ -228,7 +242,7 @@ class Puppet::Pops::Evaluator::Closure < Puppet::Pops::Evaluator::CallableSignat
228
242
  # to be unpacked.
229
243
  param_range = type.size_range
230
244
  type = type.element_type
231
- elsif param.captures_rest && !type.is_a?(Puppet::Pops::Types::PArrayType)
245
+ elsif param.captures_rest && !type.is_a?(Types::PArrayType)
232
246
  param_range = ANY_NUMBER_RANGE
233
247
  elsif param.value
234
248
  param_range = OPTIONAL_SINGLE_RANGE
@@ -247,3 +261,5 @@ class Puppet::Pops::Evaluator::Closure < Puppet::Pops::Evaluator::CallableSignat
247
261
  OPTIONAL_SINGLE_RANGE = [0, 1]
248
262
  REQUIRED_SINGLE_RANGE = [1, 1]
249
263
  end
264
+ end
265
+ end
@@ -1,16 +1,18 @@
1
- class Puppet::Pops::Evaluator::CollectorTransformer
1
+ module Puppet::Pops
2
+ module Evaluator
3
+ class CollectorTransformer
2
4
 
3
5
  def initialize
4
- @@query_visitor ||= Puppet::Pops::Visitor.new(nil, "query", 1, 1)
5
- @@match_visitor ||= Puppet::Pops::Visitor.new(nil, "match", 1, 1)
6
- @@evaluator ||= Puppet::Pops::Evaluator::EvaluatorImpl.new
7
- @@compare_operator ||= Puppet::Pops::Evaluator::CompareOperator.new()
6
+ @@query_visitor ||= Visitor.new(nil, "query", 1, 1)
7
+ @@match_visitor ||= Visitor.new(nil, "match", 1, 1)
8
+ @@evaluator ||= EvaluatorImpl.new
9
+ @@compare_operator ||= CompareOperator.new()
8
10
  end
9
11
 
10
12
  def transform(o, scope)
11
- raise ArgumentError, "Expected CollectExpression" unless o.is_a? Puppet::Pops::Model::CollectExpression
13
+ raise ArgumentError, "Expected CollectExpression" unless o.is_a? Model::CollectExpression
12
14
 
13
- raise "LHS is not a type" unless o.type_expr.is_a? Puppet::Pops::Model::QualifiedReference
15
+ raise "LHS is not a type" unless o.type_expr.is_a? Model::QualifiedReference
14
16
  type = o.type_expr.value().downcase()
15
17
 
16
18
  if type == 'class'
@@ -20,7 +22,7 @@ class Puppet::Pops::Evaluator::CollectorTransformer
20
22
  resource_type = scope.find_resource_type(type)
21
23
  fail "Resource type #{type} doesn't exist" unless resource_type
22
24
 
23
- adapter = Puppet::Pops::Adapters::SourcePosAdapter.adapt(o)
25
+ adapter = Adapters::SourcePosAdapter.adapt(o)
24
26
  line_num = adapter.line
25
27
  position = adapter.pos
26
28
  file_path = adapter.locator.file
@@ -38,11 +40,11 @@ class Puppet::Pops::Evaluator::CollectorTransformer
38
40
  code = query_unless_nop(o.query, scope)
39
41
 
40
42
  case o.query
41
- when Puppet::Pops::Model::VirtualQuery
42
- newcoll = Puppet::Pops::Evaluator::Collectors::CatalogCollector.new(scope, resource_type.name, code, overrides)
43
- when Puppet::Pops::Model::ExportedQuery
43
+ when Model::VirtualQuery
44
+ newcoll = Collectors::CatalogCollector.new(scope, resource_type.name, code, overrides)
45
+ when Model::ExportedQuery
44
46
  match = match_unless_nop(o.query, scope)
45
- newcoll = Puppet::Pops::Evaluator::Collectors::ExportedCollector.new(scope, resource_type.name, match, code, overrides)
47
+ newcoll = Collectors::ExportedCollector.new(scope, resource_type.name, match, code, overrides)
46
48
  end
47
49
 
48
50
  scope.compiler.add_collection(newcoll)
@@ -61,13 +63,13 @@ protected
61
63
  end
62
64
 
63
65
  def query_unless_nop(query, scope)
64
- unless query.expr.nil? || query.expr.is_a?(Puppet::Pops::Model::Nop)
66
+ unless query.expr.nil? || query.expr.is_a?(Model::Nop)
65
67
  query(query.expr, scope)
66
68
  end
67
69
  end
68
70
 
69
71
  def match_unless_nop(query, scope)
70
- unless query.expr.nil? || query.expr.is_a?(Puppet::Pops::Model::Nop)
72
+ unless query.expr.nil? || query.expr.is_a?(Model::Nop)
71
73
  match(query.expr, scope)
72
74
  end
73
75
  end
@@ -223,3 +225,5 @@ protected
223
225
  raise ArgumentError, "Cannot transform object of class #{o.class}"
224
226
  end
225
227
  end
228
+ end
229
+ end
@@ -19,7 +19,6 @@ class Puppet::Pops::Evaluator::Collectors::ExportedCollector < Puppet::Pops::Eva
19
19
  # evaluate method
20
20
  def evaluate
21
21
  if Puppet[:storeconfigs] != true
22
- Puppet.warning "Not collecting exported resources without storeconfigs"
23
22
  return false
24
23
  end
25
24
 
@@ -1,3 +1,5 @@
1
+ module Puppet::Pops
2
+ module Evaluator
1
3
  # Compares the puppet DSL way
2
4
  #
3
5
  # ==Equality
@@ -6,20 +8,20 @@
6
8
  # Hashes are equal to hashes if they have the same size and keys and values #equals.
7
9
  # All other objects are equal if they are ruby #== equal
8
10
  #
9
- class Puppet::Pops::Evaluator::CompareOperator
10
- include Puppet::Pops::Utils
11
+ class CompareOperator
12
+ include Utils
11
13
 
12
14
  # Provides access to the Puppet 3.x runtime (scope, etc.)
13
15
  # This separation has been made to make it easier to later migrate the evaluator to an improved runtime.
14
16
  #
15
- include Puppet::Pops::Evaluator::Runtime3Support
17
+ include Runtime3Support
16
18
 
17
19
  def initialize
18
- @@equals_visitor ||= Puppet::Pops::Visitor.new(self, "equals", 1, 1)
19
- @@compare_visitor ||= Puppet::Pops::Visitor.new(self, "cmp", 1, 1)
20
- @@match_visitor ||= Puppet::Pops::Visitor.new(self, "match", 2, 2)
21
- @@include_visitor ||= Puppet::Pops::Visitor.new(self, "include", 2, 2)
22
- @type_calculator = Puppet::Pops::Types::TypeCalculator.new()
20
+ @@equals_visitor ||= Visitor.new(self, "equals", 1, 1)
21
+ @@compare_visitor ||= Visitor.new(self, "cmp", 1, 1)
22
+ @@match_visitor ||= Visitor.new(self, "match", 2, 2)
23
+ @@include_visitor ||= Visitor.new(self, "include", 2, 2)
24
+ @type_calculator = Types::TypeCalculator.new()
23
25
  end
24
26
 
25
27
  def equals (a, b)
@@ -143,7 +145,7 @@ class Puppet::Pops::Evaluator::CompareOperator
143
145
  # Always set match data, a "not found" should not keep old match data visible
144
146
  set_match_data(matched, scope) # creates ephemeral
145
147
  return !!matched
146
- when Puppet::Pops::Types::PAnyType
148
+ when Types::PAnyType
147
149
  a.each {|element| return true if @type_calculator.instance?(b, element) }
148
150
  return false
149
151
  else
@@ -193,3 +195,5 @@ class Puppet::Pops::Evaluator::CompareOperator
193
195
  equals(left, default, scope)
194
196
  end
195
197
  end
198
+ end
199
+ end
@@ -66,18 +66,19 @@ class Puppet::Pops::Evaluator::EppEvaluator
66
66
 
67
67
  parameters_specified = body.body.parameters_specified
68
68
  if parameters_specified || template_args_set
69
- # no epp params or user provided arguments in a hash, epp() logic
70
- # only sees global + what was given
71
- closure_scope = scope.find_global_scope
72
69
  enforce_parameters = parameters_specified
73
70
  else
74
- # no epp params and no arguments were given => inline_epp() logic
75
- # sees all local variables, epp() all global
76
- closure_scope = use_global_scope_only ? scope.find_global_scope : scope
77
71
  enforce_parameters = true
78
72
  end
79
- evaluated_result = parser.closure(body, closure_scope).call_by_name(template_args, enforce_parameters)
80
- evaluated_result
73
+
74
+ # inline_epp() logic sees all local variables, epp() all global
75
+ if use_global_scope_only
76
+ scope.with_global_scope do |global_scope|
77
+ parser.closure(body, global_scope).call_by_name(template_args, enforce_parameters)
78
+ end
79
+ else
80
+ parser.closure(body, scope).call_by_name(template_args, enforce_parameters)
81
+ end
81
82
  end
82
83
 
83
84
  def self.handle_template_args(func_name, template_args)
@@ -1,11 +1,15 @@
1
1
  require 'rgen/ecore/ecore'
2
+ require 'puppet/parser/scope'
2
3
  require 'puppet/pops/evaluator/compare_operator'
3
4
  require 'puppet/pops/evaluator/relationship_operator'
4
5
  require 'puppet/pops/evaluator/access_operator'
5
6
  require 'puppet/pops/evaluator/closure'
6
7
  require 'puppet/pops/evaluator/external_syntax_support'
8
+ require 'puppet/pops/types/iterable'
7
9
 
8
- # This implementation of {Puppet::Pops::Evaluator} performs evaluation using the puppet 3.x runtime system
10
+ module Puppet::Pops
11
+ module Evaluator
12
+ # This implementation of {Evaluator} performs evaluation using the puppet 3.x runtime system
9
13
  # in a manner largely compatible with Puppet 3.x, but adds new features and introduces constraints.
10
14
  #
11
15
  # The evaluation uses _polymorphic dispatch_ which works by dispatching to the first found method named after
@@ -18,17 +22,17 @@ require 'puppet/pops/evaluator/external_syntax_support'
18
22
  # either the actual class, or one of its super classes). The _scope_ parameter is always the scope in which
19
23
  # the evaluation takes place. If nothing else is mentioned, the return is always the result of evaluation.
20
24
  #
21
- # See {Puppet::Pops::Visitable} and {Puppet::Pops::Visitor} for more information about
25
+ # See {Visitable} and {Visitor} for more information about
22
26
  # polymorphic calling.
23
27
  #
24
- class Puppet::Pops::Evaluator::EvaluatorImpl
25
- include Puppet::Pops::Utils
28
+ class EvaluatorImpl
29
+ include Utils
26
30
 
27
31
  # Provides access to the Puppet 3.x runtime (scope, etc.)
28
32
  # This separation has been made to make it easier to later migrate the evaluator to an improved runtime.
29
33
  #
30
- include Puppet::Pops::Evaluator::Runtime3Support
31
- include Puppet::Pops::Evaluator::ExternalSyntaxSupport
34
+ include Runtime3Support
35
+ include ExternalSyntaxSupport
32
36
 
33
37
  EMPTY_STRING = ''.freeze
34
38
  COMMA_SEPARATOR = ', '.freeze
@@ -36,22 +40,22 @@ class Puppet::Pops::Evaluator::EvaluatorImpl
36
40
  # Reference to Issues name space makes it easier to refer to issues
37
41
  # (Issues are shared with the validator).
38
42
  #
39
- Issues = Puppet::Pops::Issues
43
+ Issues = Issues
40
44
 
41
45
  def initialize
42
- @@eval_visitor ||= Puppet::Pops::Visitor.new(self, "eval", 1, 1)
43
- @@lvalue_visitor ||= Puppet::Pops::Visitor.new(self, "lvalue", 1, 1)
44
- @@assign_visitor ||= Puppet::Pops::Visitor.new(self, "assign", 3, 3)
45
- @@string_visitor ||= Puppet::Pops::Visitor.new(self, "string", 1, 1)
46
+ @@eval_visitor ||= Visitor.new(self, "eval", 1, 1)
47
+ @@lvalue_visitor ||= Visitor.new(self, "lvalue", 1, 1)
48
+ @@assign_visitor ||= Visitor.new(self, "assign", 3, 3)
49
+ @@string_visitor ||= Visitor.new(self, "string", 1, 1)
46
50
 
47
- @@type_calculator ||= Puppet::Pops::Types::TypeCalculator.new()
48
- @@type_parser ||= Puppet::Pops::Types::TypeParser.new()
51
+ @@type_calculator ||= Types::TypeCalculator.new()
52
+ @@type_parser ||= Types::TypeParser.new()
49
53
 
50
- @@compare_operator ||= Puppet::Pops::Evaluator::CompareOperator.new()
51
- @@relationship_operator ||= Puppet::Pops::Evaluator::RelationshipOperator.new()
54
+ @@compare_operator ||= CompareOperator.new()
55
+ @@relationship_operator ||= RelationshipOperator.new()
52
56
 
53
57
  # Use null migration checker unless given in context
54
- @migration_checker = (Puppet.lookup(:migration_checker) { Puppet::Pops::Migration::MigrationChecker.new() })
58
+ @migration_checker = (Puppet.lookup(:migration_checker) { Migration::MigrationChecker.new() })
55
59
  end
56
60
 
57
61
  # @api private
@@ -72,7 +76,7 @@ class Puppet::Pops::Evaluator::EvaluatorImpl
72
76
  begin
73
77
  @@eval_visitor.visit_this_1(self, target, scope)
74
78
 
75
- rescue Puppet::Pops::SemanticError => e
79
+ rescue SemanticError => e
76
80
  # A raised issue may not know the semantic target, use errors call stack, but fill in the
77
81
  # rest from a supplied semantic object, or the target instruction if there is not semantic
78
82
  # object.
@@ -119,7 +123,7 @@ class Puppet::Pops::Evaluator::EvaluatorImpl
119
123
  #
120
124
  # @param target [Object] assignment target - see methods on the pattern assign_TYPE for actual supported types.
121
125
  # @param value [Object] the value to assign to `target`
122
- # @param o [Puppet::Pops::Model::PopsObject] originating instruction
126
+ # @param o [Model::PopsObject] originating instruction
123
127
  # @param scope [Object] the runtime specific scope where evaluation should take place
124
128
  #
125
129
  # @api private
@@ -153,12 +157,12 @@ class Puppet::Pops::Evaluator::EvaluatorImpl
153
157
  #
154
158
  # @param scope [Puppet::Parser::Scope] the parent scope
155
159
  # @param variable_bindings [Hash{String => Object}] the variable names and values to bind (names are keys, bound values are values)
156
- # @param block [Puppet::Pops::Model::BlockExpression] the sequence of expressions to evaluate in the new scope
160
+ # @param block [Model::BlockExpression] the sequence of expressions to evaluate in the new scope
157
161
  #
158
162
  # @api private
159
163
  #
160
164
  def evaluate_block_with_bindings(scope, variable_bindings, block_expr)
161
- with_guarded_scope(scope) do
165
+ scope.with_guarded_scope do
162
166
  # change to create local scope_from - cannot give it file and line -
163
167
  # that is the place of the call, not "here"
164
168
  create_local_scope_from(variable_bindings, scope)
@@ -190,7 +194,7 @@ class Puppet::Pops::Evaluator::EvaluatorImpl
190
194
  # $name = value
191
195
  # @param name [String] name of variable without $
192
196
  # @param value [Object] value to assign to the variable
193
- # @param o [Puppet::Pops::Model::PopsObject] originating instruction
197
+ # @param o [Model::PopsObject] originating instruction
194
198
  # @param scope [Object] the runtime specific scope where evaluation should take place
195
199
  # @return [value<Object>]
196
200
  #
@@ -257,7 +261,7 @@ class Puppet::Pops::Evaluator::EvaluatorImpl
257
261
  #
258
262
  def eval_ReservedWord(o, scope)
259
263
  if !o.future
260
- fail(Puppet::Pops::Issues::RESERVED_WORD, o, {:word => o.word})
264
+ fail(Issues::RESERVED_WORD, o, {:word => o.word})
261
265
  else
262
266
  o.word
263
267
  end
@@ -274,7 +278,7 @@ class Puppet::Pops::Evaluator::EvaluatorImpl
274
278
  # A QualifiedReference (i.e. a capitalized qualified name such as Foo, or Foo::Bar) evaluates to a PType
275
279
  #
276
280
  def eval_QualifiedReference(o, scope)
277
- @@type_parser.interpret(o)
281
+ @@type_parser.interpret(o, scope)
278
282
  end
279
283
 
280
284
  def eval_NotExpression(o, scope)
@@ -294,6 +298,8 @@ class Puppet::Pops::Evaluator::EvaluatorImpl
294
298
  candidate
295
299
  when Hash
296
300
  candidate.to_a
301
+ when Puppet::Pops::Types::Iterator
302
+ candidate.to_a
297
303
  else
298
304
  # turns anything else into an array (so result can be unfolded)
299
305
  [candidate]
@@ -419,7 +425,7 @@ class Puppet::Pops::Evaluator::EvaluatorImpl
419
425
  def eval_AccessExpression(o, scope)
420
426
  left = evaluate(o.left_expr, scope)
421
427
  keys = o.keys.nil? ? [] : o.keys.collect {|key| evaluate(key, scope) }
422
- Puppet::Pops::Evaluator::AccessOperator.new(o).access(left, scope, *keys)
428
+ AccessOperator.new(o).access(left, scope, *keys)
423
429
  end
424
430
 
425
431
  # Evaluates <, <=, >, >=, and ==
@@ -430,7 +436,7 @@ class Puppet::Pops::Evaluator::EvaluatorImpl
430
436
 
431
437
  begin
432
438
  # Left is a type
433
- if left.is_a?(Puppet::Pops::Types::PAnyType)
439
+ if left.is_a?(Types::PAnyType)
434
440
  case o.operator
435
441
  when :'=='
436
442
  @@type_calculator.equals(left,right)
@@ -503,7 +509,7 @@ class Puppet::Pops::Evaluator::EvaluatorImpl
503
509
  pattern = evaluate(o.right_expr, scope)
504
510
 
505
511
  # matches RHS types as instance of for all types except a parameterized Regexp[R]
506
- if pattern.is_a?(Puppet::Pops::Types::PAnyType)
512
+ if pattern.is_a?(Types::PAnyType)
507
513
  # evaluate as instance? of type check
508
514
  matched = @@type_calculator.instance?(pattern, left)
509
515
  # convert match result to Boolean true, or false
@@ -584,7 +590,7 @@ class Puppet::Pops::Evaluator::EvaluatorImpl
584
590
  # memo scope level before evaluating test - don't want a match in the case test to leak $n match vars
585
591
  # to expressions after the case expression.
586
592
  #
587
- with_guarded_scope(scope) do
593
+ scope.with_guarded_scope do
588
594
  test = evaluate(o.test, scope)
589
595
 
590
596
  result = nil
@@ -594,10 +600,10 @@ class Puppet::Pops::Evaluator::EvaluatorImpl
594
600
  if co.values.find do |c|
595
601
  c = unwind_parentheses(c)
596
602
  case c
597
- when Puppet::Pops::Model::LiteralDefault
603
+ when Model::LiteralDefault
598
604
  the_default = co.then_expr
599
605
  next false
600
- when Puppet::Pops::Model::UnfoldExpression
606
+ when Model::UnfoldExpression
601
607
  # not ideal for error reporting, since it is not known which unfolded result
602
608
  # that caused an error - the entire unfold expression is blamed (i.e. the var c, passed to is_match?)
603
609
  evaluate(c, scope).any? {|v| is_match?(test, v, c, co, scope) }
@@ -621,7 +627,10 @@ class Puppet::Pops::Evaluator::EvaluatorImpl
621
627
  # to the compiler to collect the resources specified by the query.
622
628
  #
623
629
  def eval_CollectExpression o, scope
624
- Puppet::Pops::Evaluator::CollectorTransformer.new().transform(o,scope)
630
+ if o.query.is_a?(Model::ExportedQuery)
631
+ optionally_fail(Issues::RT_NO_STORECONFIGS, o);
632
+ end
633
+ CollectorTransformer.new().transform(o,scope)
625
634
  end
626
635
 
627
636
  def eval_ParenthesizedExpression(o, scope)
@@ -652,47 +661,47 @@ class Puppet::Pops::Evaluator::EvaluatorImpl
652
661
 
653
662
  # Get the type name
654
663
  type_name =
655
- if (tmp_name = o.type_name).is_a?(Puppet::Pops::Model::QualifiedName)
664
+ if (tmp_name = o.type_name).is_a?(Model::QualifiedName)
656
665
  tmp_name.value # already validated as a name
657
666
  else
658
667
  type_name_acceptable =
659
668
  case o.type_name
660
- when Puppet::Pops::Model::QualifiedReference
669
+ when Model::QualifiedReference
661
670
  true
662
- when Puppet::Pops::Model::AccessExpression
663
- o.type_name.left_expr.is_a?(Puppet::Pops::Model::QualifiedReference)
671
+ when Model::AccessExpression
672
+ o.type_name.left_expr.is_a?(Model::QualifiedReference)
664
673
  end
665
674
 
666
675
  evaluated_name = evaluate(tmp_name, scope)
667
676
  unless type_name_acceptable
668
677
  actual = type_calculator.generalize(type_calculator.infer(evaluated_name)).to_s
669
- fail(Puppet::Pops::Issues::ILLEGAL_RESOURCE_TYPE, o.type_name, {:actual => actual})
678
+ fail(Issues::ILLEGAL_RESOURCE_TYPE, o.type_name, {:actual => actual})
670
679
  end
671
680
 
672
681
  # must be a CatalogEntry subtype
673
682
  case evaluated_name
674
- when Puppet::Pops::Types::PHostClassType
683
+ when Types::PHostClassType
675
684
  unless evaluated_name.class_name.nil?
676
- fail(Puppet::Pops::Issues::ILLEGAL_RESOURCE_TYPE, o.type_name, {:actual=> evaluated_name.to_s})
685
+ fail(Issues::ILLEGAL_RESOURCE_TYPE, o.type_name, {:actual=> evaluated_name.to_s})
677
686
  end
678
687
  'class'
679
688
 
680
- when Puppet::Pops::Types::PResourceType
689
+ when Types::PResourceType
681
690
  unless evaluated_name.title().nil?
682
- fail(Puppet::Pops::Issues::ILLEGAL_RESOURCE_TYPE, o.type_name, {:actual=> evaluated_name.to_s})
691
+ fail(Issues::ILLEGAL_RESOURCE_TYPE, o.type_name, {:actual=> evaluated_name.to_s})
683
692
  end
684
693
  evaluated_name.type_name # assume validated
685
694
 
686
695
  else
687
696
  actual = type_calculator.generalize(type_calculator.infer(evaluated_name)).to_s
688
- fail(Puppet::Pops::Issues::ILLEGAL_RESOURCE_TYPE, o.type_name, {:actual=>actual})
697
+ fail(Issues::ILLEGAL_RESOURCE_TYPE, o.type_name, {:actual=>actual})
689
698
  end
690
699
  end
691
700
 
692
701
  # This is a runtime check - the model is valid, but will have runtime issues when evaluated
693
702
  # and storeconfigs is not set.
694
703
  if(o.exported)
695
- optionally_fail(Puppet::Pops::Issues::RT_NO_STORECONFIGS_EXPORT, o);
704
+ optionally_fail(Issues::RT_NO_STORECONFIGS_EXPORT, o);
696
705
  end
697
706
 
698
707
  titles_to_body = {}
@@ -710,24 +719,24 @@ class Puppet::Pops::Evaluator::EvaluatorImpl
710
719
  # There may be a :default entry, its entries apply with lower precedence
711
720
  #
712
721
  if titles.nil?
713
- fail(Puppet::Pops::Issues::MISSING_TITLE, body.title)
722
+ fail(Issues::MISSING_TITLE, body.title)
714
723
  end
715
724
  titles = [titles].flatten
716
725
 
717
726
  # Check types of evaluated titles and duplicate entries
718
727
  titles.each_with_index do |title, index|
719
728
  if title.nil?
720
- fail(Puppet::Pops::Issues::MISSING_TITLE_AT, body.title, {:index => index})
729
+ fail(Issues::MISSING_TITLE_AT, body.title, {:index => index})
721
730
 
722
731
  elsif !title.is_a?(String) && title != :default
723
732
  actual = type_calculator.generalize(type_calculator.infer(title)).to_s
724
- fail(Puppet::Pops::Issues::ILLEGAL_TITLE_TYPE_AT, body.title, {:index => index, :actual => actual})
733
+ fail(Issues::ILLEGAL_TITLE_TYPE_AT, body.title, {:index => index, :actual => actual})
725
734
 
726
735
  elsif title == EMPTY_STRING
727
- fail(Puppet::Pops::Issues::EMPTY_STRING_TITLE_AT, body.title, {:index => index})
736
+ fail(Issues::EMPTY_STRING_TITLE_AT, body.title, {:index => index})
728
737
 
729
738
  elsif titles_to_body[title]
730
- fail(Puppet::Pops::Issues::DUPLICATE_TITLE, o, {:title => title})
739
+ fail(Issues::DUPLICATE_TITLE, o, {:title => title})
731
740
  end
732
741
  titles_to_body[title] = body
733
742
  end
@@ -744,7 +753,7 @@ class Puppet::Pops::Evaluator::EvaluatorImpl
744
753
  params = [params] unless params.is_a?(Array)
745
754
  params.each do |p|
746
755
  if param_memo.include? p.name
747
- fail(Puppet::Pops::Issues::DUPLICATE_ATTRIBUTE, o, {:attribute => p.name})
756
+ fail(Issues::DUPLICATE_ATTRIBUTE, o, {:attribute => p.name})
748
757
  end
749
758
  param_memo[p.name] = p
750
759
  end
@@ -780,7 +789,7 @@ class Puppet::Pops::Evaluator::EvaluatorImpl
780
789
  hashed_params = evaluate(o.expr, scope)
781
790
  unless hashed_params.is_a?(Hash)
782
791
  actual = type_calculator.generalize(type_calculator.infer(hashed_params)).to_s
783
- fail(Puppet::Pops::Issues::TYPE_MISMATCH, o.expr, {:expected => 'Hash', :actual => actual})
792
+ fail(Issues::TYPE_MISMATCH, o.expr, {:expected => 'Hash', :actual => actual})
784
793
  end
785
794
  hashed_params.map { |k,v| create_resource_parameter(o, scope, k, v, :'=>') }
786
795
  end
@@ -790,7 +799,7 @@ class Puppet::Pops::Evaluator::EvaluatorImpl
790
799
  def eval_ResourceDefaultsExpression(o, scope)
791
800
  type = evaluate(o.type_ref, scope)
792
801
  type_name =
793
- if type.is_a?(Puppet::Pops::Types::PResourceType) && !type.type_name.nil? && type.title.nil?
802
+ if type.is_a?(Types::PResourceType) && !type.type_name.nil? && type.title.nil?
794
803
  type.type_name # assume it is a valid name
795
804
  else
796
805
  actual = type_calculator.generalize(type_calculator.infer(type))
@@ -808,9 +817,9 @@ class Puppet::Pops::Evaluator::EvaluatorImpl
808
817
  # The functor expression is not evaluated, it is not possible to select the function to call
809
818
  # via an expression like $a()
810
819
  case o.functor_expr
811
- when Puppet::Pops::Model::QualifiedName
820
+ when Model::QualifiedName
812
821
  # ok
813
- when Puppet::Pops::Model::RenderStringExpression
822
+ when Model::RenderStringExpression
814
823
  # helpful to point out this easy to make Epp error
815
824
  fail(Issues::ILLEGAL_EPP_PARAMETERS, o)
816
825
  else
@@ -823,12 +832,12 @@ class Puppet::Pops::Evaluator::EvaluatorImpl
823
832
  # Evaluation of CallMethodExpression handles a NamedAccessExpression functor (receiver.function_name)
824
833
  #
825
834
  def eval_CallMethodExpression(o, scope)
826
- unless o.functor_expr.is_a? Puppet::Pops::Model::NamedAccessExpression
835
+ unless o.functor_expr.is_a? Model::NamedAccessExpression
827
836
  fail(Issues::ILLEGAL_EXPRESSION, o.functor_expr, {:feature=>'function accessor', :container => o})
828
837
  end
829
838
  receiver = unfold([], [o.functor_expr.left_expr], scope)
830
839
  name = o.functor_expr.right_expr
831
- unless name.is_a? Puppet::Pops::Model::QualifiedName
840
+ unless name.is_a? Model::QualifiedName
832
841
  fail(Issues::ILLEGAL_EXPRESSION, o.functor_expr, {:feature=>'function name', :container => o})
833
842
  end
834
843
  name = name.value # the string function name
@@ -839,8 +848,8 @@ class Puppet::Pops::Evaluator::EvaluatorImpl
839
848
  if o.lambda.nil?
840
849
  call_function(name, evaluated_arguments, o, scope)
841
850
  else
842
- closure = Puppet::Pops::Evaluator::Closure.new(self, o.lambda, scope)
843
- call_function(name, evaluated_arguments, o, scope, &Puppet::Pops::Evaluator::PuppetProc.new(closure) { |*args| closure.call(*args) })
851
+ closure = Closure.new(self, o.lambda, scope)
852
+ call_function(name, evaluated_arguments, o, scope, &PuppetProc.new(closure) { |*args| closure.call(*args) })
844
853
  end
845
854
  end
846
855
  private :call_function_with_block
@@ -852,17 +861,17 @@ class Puppet::Pops::Evaluator::EvaluatorImpl
852
861
  # memo scope level before evaluating test - don't want a match in the case test to leak $n match vars
853
862
  # to expressions after the selector expression.
854
863
  #
855
- with_guarded_scope(scope) do
864
+ scope.with_guarded_scope do
856
865
  test = evaluate(o.left_expr, scope)
857
866
 
858
867
  the_default = nil
859
868
  selected = o.selectors.find do |s|
860
869
  me = unwind_parentheses(s.matching_expr)
861
870
  case me
862
- when Puppet::Pops::Model::LiteralDefault
871
+ when Model::LiteralDefault
863
872
  the_default = s.value_expr
864
873
  false
865
- when Puppet::Pops::Model::UnfoldExpression
874
+ when Model::UnfoldExpression
866
875
  # not ideal for error reporting, since it is not known which unfolded result
867
876
  # that caused an error - the entire unfold expression is blamed (i.e. the var c, passed to is_match?)
868
877
  evaluate(me, scope).any? {|v| is_match?(test, v, me, s, scope) }
@@ -894,7 +903,7 @@ class Puppet::Pops::Evaluator::EvaluatorImpl
894
903
 
895
904
  # Evaluates Puppet DSL `if`
896
905
  def eval_IfExpression o, scope
897
- with_guarded_scope(scope) do
906
+ scope.with_guarded_scope do
898
907
  if is_true?(evaluate(o.test, scope), o.test)
899
908
  evaluate(o.then_expr, scope)
900
909
  else
@@ -905,7 +914,7 @@ class Puppet::Pops::Evaluator::EvaluatorImpl
905
914
 
906
915
  # Evaluates Puppet DSL `unless`
907
916
  def eval_UnlessExpression o, scope
908
- with_guarded_scope(scope) do
917
+ scope.with_guarded_scope do
909
918
  unless is_true?(evaluate(o.test, scope), o.test)
910
919
  evaluate(o.then_expr, scope)
911
920
  else
@@ -953,7 +962,7 @@ class Puppet::Pops::Evaluator::EvaluatorImpl
953
962
  # @return [String] the interpolated result
954
963
  #
955
964
  def eval_TextExpression o, scope
956
- if o.expr.is_a?(Puppet::Pops::Model::QualifiedName)
965
+ if o.expr.is_a?(Model::QualifiedName)
957
966
  string(get_variable_value(o.expr.value, o, scope), scope)
958
967
  else
959
968
  string(evaluate(o.expr, scope), scope)
@@ -985,7 +994,7 @@ class Puppet::Pops::Evaluator::EvaluatorImpl
985
994
  end
986
995
 
987
996
  def string_PAnyType(o, scope)
988
- @@type_calculator.string(o)
997
+ o.to_s
989
998
  end
990
999
 
991
1000
  # Produces concatenation / merge of x and y.
@@ -1057,7 +1066,7 @@ class Puppet::Pops::Evaluator::EvaluatorImpl
1057
1066
  # Use type calcultor to determine if array is Array[Array[?]], and if so use second form
1058
1067
  # of call
1059
1068
  t = @@type_calculator.infer(y)
1060
- if t.element_type.is_a? Puppet::Pops::Types::PArrayType
1069
+ if t.element_type.is_a? Types::PArrayType
1061
1070
  Hash[y]
1062
1071
  else
1063
1072
  Hash[*y]
@@ -1113,7 +1122,7 @@ class Puppet::Pops::Evaluator::EvaluatorImpl
1113
1122
  matched = right.match(left)
1114
1123
  set_match_data(matched, scope) # creates or clears ephemeral
1115
1124
  !!matched # convert to boolean
1116
- elsif right.is_a?(Puppet::Pops::Types::PAnyType)
1125
+ elsif right.is_a?(Types::PAnyType)
1117
1126
  # right is a type and left is not - check if left is an instance of the given type
1118
1127
  # (The reverse is not terribly meaningful - computing which of the case options that first produces
1119
1128
  # an instance of a given type).
@@ -1126,26 +1135,17 @@ class Puppet::Pops::Evaluator::EvaluatorImpl
1126
1135
  @@compare_operator.match(left, right, scope)
1127
1136
  end
1128
1137
 
1129
- def with_guarded_scope(scope)
1130
- scope_memo = get_scope_nesting_level(scope)
1131
- begin
1132
- yield
1133
- ensure
1134
- set_scope_nesting_level(scope, scope_memo)
1135
- end
1136
- end
1137
-
1138
1138
  # Maps the expression in the given array to their product except for UnfoldExpressions which are first unfolded.
1139
1139
  # The result is added to the given result Array.
1140
1140
  # @param result [Array] Where to add the result (may contain information to add to)
1141
- # @param array [Array[Puppet::Pops::Model::Expression] the expressions to map
1141
+ # @param array [Array[Model::Expression] the expressions to map
1142
1142
  # @param scope [Puppet::Parser::Scope] the scope to evaluate in
1143
1143
  # @return [Array] the given result array with content added from the operation
1144
1144
  #
1145
1145
  def unfold(result, array, scope)
1146
1146
  array.each do |x|
1147
1147
  x = unwind_parentheses(x)
1148
- if x.is_a?(Puppet::Pops::Model::UnfoldExpression)
1148
+ if x.is_a?(Model::UnfoldExpression)
1149
1149
  result.concat(evaluate(x, scope))
1150
1150
  else
1151
1151
  result << evaluate(x, scope)
@@ -1156,8 +1156,10 @@ class Puppet::Pops::Evaluator::EvaluatorImpl
1156
1156
  private :unfold
1157
1157
 
1158
1158
  def unwind_parentheses(o)
1159
- return o unless o.is_a?(Puppet::Pops::Model::ParenthesizedExpression)
1159
+ return o unless o.is_a?(Model::ParenthesizedExpression)
1160
1160
  unwind_parentheses(o.expr)
1161
1161
  end
1162
1162
  private :unwind_parentheses
1163
1163
  end
1164
+ end
1165
+ end