puppet 4.5.3-x86-mingw32 → 4.6.1-x86-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 (422) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +10 -1
  3. data/ext/debian/control +2 -4
  4. data/ext/project_data.yaml +4 -4
  5. data/install.rb +6 -2
  6. data/lib/puppet.rb +3 -1
  7. data/lib/puppet/agent/locker.rb +1 -1
  8. data/lib/puppet/application.rb +6 -4
  9. data/lib/puppet/application/agent.rb +2 -1
  10. data/lib/puppet/application/cert.rb +35 -2
  11. data/lib/puppet/application/device.rb +1 -1
  12. data/lib/puppet/application/generate.rb +5 -0
  13. data/lib/puppet/application/lookup.rb +3 -3
  14. data/lib/puppet/application_support.rb +1 -1
  15. data/lib/puppet/compilable_resource_type.rb +15 -0
  16. data/lib/puppet/configurer.rb +67 -10
  17. data/lib/puppet/configurer/plugin_handler.rb +2 -4
  18. data/lib/puppet/data_providers/hiera_config.rb +1 -1
  19. data/lib/puppet/defaults.rb +34 -7
  20. data/lib/puppet/environments.rb +4 -2
  21. data/lib/puppet/error.rb +1 -1
  22. data/lib/puppet/external/dot.rb +1 -1
  23. data/lib/puppet/face/ca.rb +4 -1
  24. data/lib/puppet/face/certificate.rb +7 -1
  25. data/lib/puppet/face/epp.rb +5 -5
  26. data/lib/puppet/face/generate.rb +64 -0
  27. data/lib/puppet/face/help.rb +19 -13
  28. data/lib/puppet/face/man.rb +1 -1
  29. data/lib/puppet/feature/external_facts.rb +1 -1
  30. data/lib/puppet/file_system.rb +16 -0
  31. data/lib/puppet/file_system/file_impl.rb +5 -0
  32. data/lib/puppet/file_system/memory_impl.rb +4 -0
  33. data/lib/puppet/file_system/path_pattern.rb +1 -0
  34. data/lib/puppet/file_system/windows.rb +19 -0
  35. data/lib/puppet/functions.rb +3 -5
  36. data/lib/puppet/functions/assert_type.rb +1 -1
  37. data/lib/puppet/functions/defined.rb +7 -5
  38. data/lib/puppet/functions/dig.rb +2 -18
  39. data/lib/puppet/functions/hiera.rb +1 -1
  40. data/lib/puppet/functions/lest.rb +1 -37
  41. data/lib/puppet/functions/new.rb +2 -473
  42. data/lib/puppet/functions/reverse_each.rb +2 -59
  43. data/lib/puppet/functions/scanf.rb +4 -4
  44. data/lib/puppet/functions/step.rb +1 -63
  45. data/lib/puppet/functions/then.rb +1 -61
  46. data/lib/puppet/functions/type.rb +1 -40
  47. data/lib/puppet/functions/unwrap.rb +40 -0
  48. data/lib/puppet/generate/models/type/property.rb +70 -0
  49. data/lib/puppet/generate/models/type/type.rb +57 -0
  50. data/lib/puppet/generate/templates/type/pcore.erb +41 -0
  51. data/lib/puppet/generate/type.rb +239 -0
  52. data/lib/puppet/graph/simple_graph.rb +2 -6
  53. data/lib/puppet/indirector/catalog/static_compiler.rb +5 -2
  54. data/lib/puppet/indirector/facts/facter.rb +1 -1
  55. data/lib/puppet/indirector/key/ca.rb +2 -2
  56. data/lib/puppet/indirector/request.rb +25 -4
  57. data/lib/puppet/indirector/rest.rb +73 -3
  58. data/lib/puppet/info_service/class_information_service.rb +1 -2
  59. data/lib/puppet/interface/documentation.rb +1 -1
  60. data/lib/puppet/loaders.rb +2 -0
  61. data/lib/puppet/metatype/manager.rb +6 -6
  62. data/lib/puppet/module.rb +8 -1
  63. data/lib/puppet/module_tool.rb +2 -2
  64. data/lib/puppet/module_tool/checksums.rb +1 -1
  65. data/lib/puppet/module_tool/errors/installer.rb +2 -2
  66. data/lib/puppet/module_tool/metadata.rb +1 -1
  67. data/lib/puppet/network/http/api/indirected_routes.rb +23 -32
  68. data/lib/puppet/network/http/rack/rest.rb +15 -1
  69. data/lib/puppet/network/rights.rb +1 -11
  70. data/lib/puppet/node/environment.rb +7 -3
  71. data/lib/puppet/node/facts.rb +1 -1
  72. data/lib/puppet/parameter.rb +23 -3
  73. data/lib/puppet/parameter/boolean.rb +1 -1
  74. data/lib/puppet/parameter/value.rb +1 -1
  75. data/lib/puppet/parser.rb +0 -1
  76. data/lib/puppet/parser/ast/pops_bridge.rb +1 -1
  77. data/lib/puppet/parser/ast/resource.rb +5 -0
  78. data/lib/puppet/parser/ast/resource_instance.rb +5 -1
  79. data/lib/puppet/parser/ast/resourceparam.rb +5 -0
  80. data/lib/puppet/parser/compiler.rb +14 -17
  81. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +1 -1
  82. data/lib/puppet/parser/environment_compiler.rb +10 -0
  83. data/lib/puppet/parser/functions/create_resources.rb +39 -24
  84. data/lib/puppet/parser/functions/defined.rb +2 -26
  85. data/lib/puppet/parser/functions/dig.rb +29 -0
  86. data/lib/puppet/parser/functions/lest.rb +49 -0
  87. data/lib/puppet/parser/functions/new.rb +530 -0
  88. data/lib/puppet/parser/functions/require.rb +1 -1
  89. data/lib/puppet/parser/functions/reverse_each.rb +83 -0
  90. data/lib/puppet/parser/functions/scanf.rb +4 -4
  91. data/lib/puppet/parser/functions/step.rb +84 -0
  92. data/lib/puppet/parser/functions/then.rb +73 -0
  93. data/lib/puppet/parser/functions/type.rb +53 -0
  94. data/lib/puppet/parser/resource.rb +16 -7
  95. data/lib/puppet/parser/scope.rb +36 -28
  96. data/lib/puppet/parser/type_loader.rb +1 -1
  97. data/lib/puppet/plugins/data_providers/data_provider.rb +1 -1
  98. data/lib/puppet/pops.rb +13 -0
  99. data/lib/puppet/pops/adapters.rb +49 -49
  100. data/lib/puppet/pops/binder/scheme_handler/confdir_scheme.rb +1 -1
  101. data/lib/puppet/pops/evaluator/access_operator.rb +39 -2
  102. data/lib/puppet/pops/evaluator/closure.rb +39 -13
  103. data/lib/puppet/pops/evaluator/collector_transformer.rb +10 -1
  104. data/lib/puppet/pops/evaluator/evaluator_impl.rb +16 -11
  105. data/lib/puppet/pops/evaluator/external_syntax_support.rb +1 -1
  106. data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +0 -1
  107. data/lib/puppet/pops/evaluator/literal_evaluator.rb +0 -1
  108. data/lib/puppet/pops/evaluator/relationship_operator.rb +1 -2
  109. data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +119 -0
  110. data/lib/puppet/pops/evaluator/runtime3_support.rb +19 -45
  111. data/lib/puppet/pops/functions/function.rb +5 -0
  112. data/lib/puppet/pops/issues.rb +1 -1
  113. data/lib/puppet/pops/label_provider.rb +2 -2
  114. data/lib/puppet/pops/loader/base_loader.rb +12 -15
  115. data/lib/puppet/pops/loader/loader.rb +15 -50
  116. data/lib/puppet/pops/loader/loader_paths.rb +28 -2
  117. data/lib/puppet/pops/loader/module_loaders.rb +16 -1
  118. data/lib/puppet/pops/loader/null_loader.rb +17 -1
  119. data/lib/puppet/pops/loader/puppet_function_instantiator.rb +12 -11
  120. data/lib/puppet/pops/loader/puppet_resource_type_impl_instantiator.rb +80 -0
  121. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +2 -3
  122. data/lib/puppet/pops/loader/runtime3_type_loader.rb +52 -13
  123. data/lib/puppet/pops/loader/static_loader.rb +55 -0
  124. data/lib/puppet/pops/loader/type_definition_instantiator.rb +30 -14
  125. data/lib/puppet/pops/loader/typed_name.rb +50 -0
  126. data/lib/puppet/pops/loaders.rb +64 -19
  127. data/lib/puppet/pops/merge_strategy.rb +7 -7
  128. data/lib/puppet/pops/migration/migration_checker.rb +4 -0
  129. data/lib/puppet/pops/model/model_label_provider.rb +2 -0
  130. data/lib/puppet/pops/parser/egrammar.ra +8 -5
  131. data/lib/puppet/pops/parser/eparser.rb +1550 -1498
  132. data/lib/puppet/pops/parser/evaluating_parser.rb +1 -1
  133. data/lib/puppet/pops/parser/interpolation_support.rb +7 -0
  134. data/lib/puppet/pops/parser/lexer2.rb +14 -1
  135. data/lib/puppet/pops/parser/locator.rb +30 -1
  136. data/lib/puppet/pops/parser/parser_support.rb +0 -3
  137. data/lib/puppet/pops/parser/slurp_support.rb +3 -3
  138. data/lib/puppet/pops/patterns.rb +9 -1
  139. data/lib/puppet/pops/pcore.rb +67 -11
  140. data/lib/puppet/pops/puppet_stack.rb +43 -0
  141. data/lib/puppet/pops/resource/param.rb +51 -0
  142. data/lib/puppet/pops/resource/resource_type_impl.rb +301 -0
  143. data/lib/puppet/pops/resource/resource_type_set.pcore +21 -0
  144. data/lib/puppet/pops/serialization.rb +17 -0
  145. data/lib/puppet/pops/serialization/abstract_reader.rb +149 -0
  146. data/lib/puppet/pops/serialization/abstract_writer.rb +179 -0
  147. data/lib/puppet/pops/serialization/deserializer.rb +60 -0
  148. data/lib/puppet/pops/serialization/extension.rb +126 -0
  149. data/lib/puppet/pops/serialization/instance_reader.rb +19 -0
  150. data/lib/puppet/pops/serialization/instance_writer.rb +14 -0
  151. data/lib/puppet/pops/serialization/json.rb +247 -0
  152. data/lib/puppet/pops/serialization/object.rb +63 -0
  153. data/lib/puppet/pops/serialization/rgen.rb +151 -0
  154. data/lib/puppet/pops/serialization/serializer.rb +91 -0
  155. data/lib/puppet/pops/serialization/time_factory.rb +66 -0
  156. data/lib/puppet/pops/types/annotatable.rb +36 -0
  157. data/lib/puppet/pops/types/implementation_registry.rb +3 -8
  158. data/lib/puppet/pops/types/p_meta_type.rb +83 -0
  159. data/lib/puppet/pops/types/p_object_type.rb +110 -117
  160. data/lib/puppet/pops/types/p_runtime_type.rb +13 -0
  161. data/lib/puppet/pops/types/p_sem_ver_range_type.rb +23 -0
  162. data/lib/puppet/pops/types/p_sem_ver_type.rb +30 -2
  163. data/lib/puppet/pops/types/p_sensitive_type.rb +69 -0
  164. data/lib/puppet/pops/types/p_type_set_type.rb +361 -0
  165. data/lib/puppet/pops/types/puppet_object.rb +0 -5
  166. data/lib/puppet/pops/types/ruby_generator.rb +9 -2
  167. data/lib/puppet/pops/types/type_calculator.rb +6 -1
  168. data/lib/puppet/pops/types/type_factory.rb +14 -12
  169. data/lib/puppet/pops/types/type_formatter.rb +78 -33
  170. data/lib/puppet/pops/types/type_mismatch_describer.rb +0 -2
  171. data/lib/puppet/pops/types/type_parser.rb +27 -2
  172. data/lib/puppet/pops/types/type_set_reference.rb +59 -0
  173. data/lib/puppet/pops/types/types.rb +366 -13
  174. data/lib/puppet/pops/validation.rb +4 -4
  175. data/lib/puppet/pops/validation/checker4_0.rb +5 -2
  176. data/lib/puppet/pops/visitor.rb +2 -2
  177. data/lib/puppet/property.rb +64 -5
  178. data/lib/puppet/provider.rb +1 -1
  179. data/lib/puppet/provider/aixobject.rb +3 -3
  180. data/lib/puppet/provider/group/aix.rb +4 -4
  181. data/lib/puppet/provider/macauthorization/macauthorization.rb +1 -1
  182. data/lib/puppet/provider/mailalias/aliases.rb +1 -1
  183. data/lib/puppet/provider/mcx/mcxcontent.rb +2 -2
  184. data/lib/puppet/provider/mount/parsed.rb +1 -1
  185. data/lib/puppet/provider/nameservice/directoryservice.rb +5 -5
  186. data/lib/puppet/provider/package/appdmg.rb +3 -3
  187. data/lib/puppet/provider/package/apple.rb +1 -1
  188. data/lib/puppet/provider/package/dnf.rb +5 -0
  189. data/lib/puppet/provider/package/nim.rb +1 -1
  190. data/lib/puppet/provider/package/pacman.rb +2 -2
  191. data/lib/puppet/provider/package/pip.rb +5 -3
  192. data/lib/puppet/provider/package/pip3.rb +1 -1
  193. data/lib/puppet/provider/package/pkg.rb +5 -5
  194. data/lib/puppet/provider/package/pkgdmg.rb +4 -4
  195. data/lib/puppet/provider/package/pkgin.rb +1 -1
  196. data/lib/puppet/provider/package/pkgutil.rb +1 -1
  197. data/lib/puppet/provider/package/portage.rb +48 -8
  198. data/lib/puppet/provider/package/sun.rb +1 -1
  199. data/lib/puppet/provider/package/tdnf.rb +28 -0
  200. data/lib/puppet/provider/package/yum.rb +22 -4
  201. data/lib/puppet/provider/parsedfile.rb +2 -2
  202. data/lib/puppet/provider/service/base.rb +1 -1
  203. data/lib/puppet/provider/service/bsd.rb +1 -1
  204. data/lib/puppet/provider/service/daemontools.rb +2 -2
  205. data/lib/puppet/provider/service/debian.rb +3 -3
  206. data/lib/puppet/provider/service/init.rb +5 -3
  207. data/lib/puppet/provider/service/launchd.rb +16 -2
  208. data/lib/puppet/provider/service/runit.rb +1 -1
  209. data/lib/puppet/provider/service/smf.rb +8 -1
  210. data/lib/puppet/provider/service/systemd.rb +39 -6
  211. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +1 -1
  212. data/lib/puppet/provider/user/aix.rb +3 -2
  213. data/lib/puppet/provider/user/directoryservice.rb +4 -3
  214. data/lib/puppet/provider/user/hpux.rb +1 -1
  215. data/lib/puppet/provider/user/user_role_add.rb +1 -1
  216. data/lib/puppet/provider/user/windows_adsi.rb +3 -0
  217. data/lib/puppet/provider/zfs/zfs.rb +1 -1
  218. data/lib/puppet/reference/type.rb +1 -1
  219. data/lib/puppet/resource.rb +33 -7
  220. data/lib/puppet/resource/capability_finder.rb +74 -54
  221. data/lib/puppet/resource/status.rb +11 -2
  222. data/lib/puppet/settings.rb +17 -6
  223. data/lib/puppet/settings/environment_conf.rb +1 -1
  224. data/lib/puppet/settings/server_list_setting.rb +20 -0
  225. data/lib/puppet/ssl/certificate_authority.rb +32 -9
  226. data/lib/puppet/ssl/certificate_authority/interface.rb +164 -24
  227. data/lib/puppet/ssl/host.rb +3 -3
  228. data/lib/puppet/ssl/oids.rb +10 -0
  229. data/lib/puppet/ssl/validator/default_validator.rb +2 -2
  230. data/lib/puppet/test/test_helper.rb +2 -2
  231. data/lib/puppet/transaction.rb +12 -0
  232. data/lib/puppet/transaction/additional_resource_generator.rb +1 -1
  233. data/lib/puppet/transaction/event.rb +29 -2
  234. data/lib/puppet/transaction/event_manager.rb +1 -1
  235. data/lib/puppet/transaction/persistence.rb +84 -0
  236. data/lib/puppet/transaction/report.rb +49 -2
  237. data/lib/puppet/transaction/resource_harness.rb +98 -18
  238. data/lib/puppet/type.rb +63 -21
  239. data/lib/puppet/type/augeas.rb +3 -3
  240. data/lib/puppet/type/cron.rb +1 -1
  241. data/lib/puppet/type/file.rb +39 -2
  242. data/lib/puppet/type/file/data_sync.rb +13 -5
  243. data/lib/puppet/type/host.rb +1 -1
  244. data/lib/puppet/type/mount.rb +2 -6
  245. data/lib/puppet/type/notify.rb +1 -1
  246. data/lib/puppet/type/package.rb +1 -1
  247. data/lib/puppet/type/resources.rb +1 -1
  248. data/lib/puppet/type/scheduled_task.rb +1 -1
  249. data/lib/puppet/type/ssh_authorized_key.rb +2 -2
  250. data/lib/puppet/type/tidy.rb +1 -1
  251. data/lib/puppet/type/yumrepo.rb +3 -3
  252. data/lib/puppet/type/zone.rb +1 -1
  253. data/lib/puppet/util.rb +2 -2
  254. data/lib/puppet/util/classgen.rb +1 -1
  255. data/lib/puppet/util/command_line.rb +6 -2
  256. data/lib/puppet/util/command_line/trollop.rb +1 -1
  257. data/lib/puppet/util/execution.rb +2 -2
  258. data/lib/puppet/util/http_proxy.rb +1 -1
  259. data/lib/puppet/util/inifile.rb +1 -1
  260. data/lib/puppet/util/instance_loader.rb +1 -1
  261. data/lib/puppet/util/logging.rb +1 -1
  262. data/lib/puppet/util/multi_match.rb +1 -1
  263. data/lib/puppet/util/plist.rb +15 -5
  264. data/lib/puppet/util/profiler.rb +1 -1
  265. data/lib/puppet/util/profiler/around_profiler.rb +1 -1
  266. data/lib/puppet/util/psych_support.rb +1 -1
  267. data/lib/puppet/util/rdoc.rb +2 -2
  268. data/lib/puppet/util/rubygems.rb +1 -1
  269. data/lib/puppet/util/watcher/periodic_watcher.rb +2 -2
  270. data/lib/puppet/util/windows/access_control_entry.rb +1 -1
  271. data/lib/puppet/util/windows/adsi.rb +30 -8
  272. data/lib/puppet/util/windows/api_types.rb +1 -1
  273. data/lib/puppet/util/windows/file.rb +59 -0
  274. data/lib/puppet/util/windows/process.rb +10 -0
  275. data/lib/puppet/util/windows/security.rb +1 -1
  276. data/lib/puppet/util/windows/user.rb +22 -4
  277. data/lib/puppet/util/yaml.rb +15 -3
  278. data/lib/puppet/vendor/deep_merge/test/test_deep_merge.rb +1 -1
  279. data/lib/puppet/vendor/rgen_patch.rb +1 -1
  280. data/lib/puppet/version.rb +2 -2
  281. data/spec/fixtures/unit/pops/loaders/loaders/no_modules/manifests/site.pp +10 -0
  282. data/spec/integration/agent/logging_spec.rb +15 -14
  283. data/spec/integration/application/apply_spec.rb +1 -0
  284. data/spec/integration/directory_environments_spec.rb +16 -0
  285. data/spec/integration/environments/settings_spec.rb +32 -4
  286. data/spec/integration/faces/documentation_spec.rb +1 -1
  287. data/spec/integration/network/http/api/indirected_routes_spec.rb +33 -0
  288. data/spec/integration/node/environment_spec.rb +21 -0
  289. data/spec/integration/parser/collection_spec.rb +10 -0
  290. data/spec/integration/parser/compiler_spec.rb +76 -840
  291. data/spec/integration/parser/functions/require_spec.rb +3 -3
  292. data/spec/integration/parser/parameter_defaults_spec.rb +6 -2
  293. data/spec/integration/parser/pcore_resource_spec.rb +208 -0
  294. data/spec/integration/parser/resource_expressions_spec.rb +4 -2
  295. data/spec/integration/provider/yumrepo_spec.rb +4 -1
  296. data/spec/integration/transaction/report_spec.rb +666 -0
  297. data/spec/integration/type/file_spec.rb +11 -12
  298. data/spec/integration/util/windows/adsi_spec.rb +99 -0
  299. data/spec/integration/util/windows/principal_spec.rb +109 -60
  300. data/spec/integration/util/windows/process_spec.rb +4 -2
  301. data/spec/integration/util/windows/security_spec.rb +34 -8
  302. data/spec/integration/util/windows/user_spec.rb +26 -4
  303. data/spec/lib/puppet_spec/files.rb +2 -2
  304. data/spec/lib/puppet_spec/network.rb +12 -8
  305. data/spec/shared_examples/rhel_package_provider.rb +341 -0
  306. data/spec/spec_helper.rb +8 -2
  307. data/spec/unit/application/cert_spec.rb +20 -0
  308. data/spec/unit/configurer/plugin_handler_spec.rb +0 -26
  309. data/spec/unit/configurer_spec.rb +46 -0
  310. data/spec/unit/defaults_spec.rb +14 -0
  311. data/spec/unit/face/generate_spec.rb +230 -0
  312. data/spec/unit/face/help_spec.rb +53 -0
  313. data/spec/unit/face/parser_spec.rb +6 -0
  314. data/spec/unit/face/plugin_spec.rb +0 -4
  315. data/spec/unit/file_system_spec.rb +85 -0
  316. data/spec/unit/functions/lookup_spec.rb +4 -4
  317. data/spec/unit/functions/match_spec.rb +2 -2
  318. data/spec/unit/functions/regsubst_spec.rb +1 -1
  319. data/spec/unit/functions/split_spec.rb +1 -1
  320. data/spec/unit/functions/unwrap_spec.rb +29 -0
  321. data/spec/unit/functions/versioncmp_spec.rb +1 -1
  322. data/spec/unit/functions4_spec.rb +8 -8
  323. data/spec/unit/indirector/facts/facter_spec.rb +1 -9
  324. data/spec/unit/indirector/rest_spec.rb +95 -9
  325. data/spec/unit/module_spec.rb +43 -7
  326. data/spec/unit/module_tool/applications/installer_spec.rb +10 -1
  327. data/spec/unit/module_tool/applications/unpacker_spec.rb +2 -1
  328. data/spec/unit/module_tool/applications/upgrader_spec.rb +8 -0
  329. data/spec/unit/module_tool/tar/mini_spec.rb +3 -3
  330. data/spec/unit/network/http/api/indirected_routes_spec.rb +49 -58
  331. data/spec/unit/network/http/api/master/v3_spec.rb +7 -4
  332. data/spec/unit/network/rights_spec.rb +1 -1
  333. data/spec/unit/parameter_spec.rb +11 -0
  334. data/spec/unit/parser/compiler_spec.rb +19 -33
  335. data/spec/unit/{appmgmt_spec.rb → parser/environment_compiler_spec.rb} +12 -1
  336. data/spec/unit/parser/functions/create_resources_spec.rb +76 -4
  337. data/spec/unit/parser/functions/require_spec.rb +2 -2
  338. data/spec/unit/parser/resource_spec.rb +21 -11
  339. data/spec/unit/parser/scope_spec.rb +1 -5
  340. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +1 -1
  341. data/spec/unit/pops/loaders/dependency_loader_spec.rb +1 -1
  342. data/spec/unit/pops/loaders/loader_paths_spec.rb +1 -1
  343. data/spec/unit/pops/loaders/loaders_spec.rb +63 -5
  344. data/spec/unit/pops/loaders/module_loaders_spec.rb +2 -2
  345. data/spec/unit/pops/loaders/static_loader_spec.rb +1 -1
  346. data/spec/unit/pops/parser/lexer2_spec.rb +27 -3
  347. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +8 -0
  348. data/spec/unit/pops/parser/parse_calls_spec.rb +9 -0
  349. data/spec/unit/pops/puppet_stack_spec.rb +79 -0
  350. data/spec/unit/pops/resource/resource_type_impl_spec.rb +37 -0
  351. data/spec/unit/pops/serialization/packer_spec.rb +153 -0
  352. data/spec/unit/pops/serialization/rgen_spec.rb +88 -0
  353. data/spec/unit/pops/serialization/serialization_spec.rb +228 -0
  354. data/spec/unit/pops/types/p_object_type_spec.rb +44 -2
  355. data/spec/unit/pops/types/p_sem_ver_type_spec.rb +42 -0
  356. data/spec/unit/pops/types/p_sensitive_type_spec.rb +139 -0
  357. data/spec/unit/pops/types/p_type_set_type_spec.rb +424 -0
  358. data/spec/unit/pops/types/ruby_generator_spec.rb +497 -181
  359. data/spec/unit/pops/types/type_calculator_spec.rb +10 -4
  360. data/spec/unit/pops/types/type_formatter_spec.rb +1 -1
  361. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +2 -2
  362. data/spec/unit/pops/types/type_parser_spec.rb +1 -1
  363. data/spec/unit/pops/types/types_spec.rb +1 -1
  364. data/spec/unit/pops/validator/validator_spec.rb +18 -1
  365. data/spec/unit/property_spec.rb +48 -11
  366. data/spec/unit/provider/group/windows_adsi_spec.rb +11 -1
  367. data/spec/unit/provider/package/dnf_spec.rb +1 -99
  368. data/spec/unit/provider/package/pacman_spec.rb +4 -4
  369. data/spec/unit/provider/package/pip_spec.rb +14 -0
  370. data/spec/unit/provider/package/pkg_spec.rb +6 -0
  371. data/spec/unit/provider/package/pkgdmg_spec.rb +0 -3
  372. data/spec/unit/provider/package/portage_spec.rb +64 -8
  373. data/spec/unit/provider/package/tdnf_spec.rb +18 -0
  374. data/spec/unit/provider/package/windows/package_spec.rb +4 -1
  375. data/spec/unit/provider/package/windows_spec.rb +8 -2
  376. data/spec/unit/provider/package/yum_spec.rb +6 -377
  377. data/spec/unit/provider/service/base_spec.rb +6 -0
  378. data/spec/unit/provider/service/debian_spec.rb +16 -7
  379. data/spec/unit/provider/service/gentoo_spec.rb +6 -0
  380. data/spec/unit/provider/service/init_spec.rb +7 -0
  381. data/spec/unit/provider/service/launchd_spec.rb +35 -4
  382. data/spec/unit/provider/service/openrc_spec.rb +6 -0
  383. data/spec/unit/provider/service/smf_spec.rb +31 -6
  384. data/spec/unit/provider/service/src_spec.rb +6 -0
  385. data/spec/unit/provider/service/systemd_spec.rb +70 -20
  386. data/spec/unit/provider/service/upstart_spec.rb +6 -0
  387. data/spec/unit/provider/user/aix_spec.rb +7 -0
  388. data/spec/unit/provider/user/directoryservice_spec.rb +30 -1
  389. data/spec/unit/provider/user/windows_adsi_spec.rb +19 -0
  390. data/spec/unit/resource/capability_finder_spec.rb +51 -3
  391. data/spec/unit/resource/catalog_spec.rb +5 -0
  392. data/spec/unit/resource/type_spec.rb +2 -2
  393. data/spec/unit/resource_spec.rb +19 -0
  394. data/spec/unit/settings_spec.rb +13 -0
  395. data/spec/unit/ssl/certificate_authority/interface_spec.rb +176 -10
  396. data/spec/unit/ssl/certificate_authority_spec.rb +63 -22
  397. data/spec/unit/ssl/host_spec.rb +1 -1
  398. data/spec/unit/ssl/oids_spec.rb +24 -21
  399. data/spec/unit/transaction/event_spec.rb +3 -1
  400. data/spec/unit/transaction/persistence_spec.rb +173 -0
  401. data/spec/unit/transaction/report_spec.rb +64 -1
  402. data/spec/unit/transaction/resource_harness_spec.rb +91 -0
  403. data/spec/unit/type/file/content_spec.rb +47 -15
  404. data/spec/unit/type/file_spec.rb +28 -0
  405. data/spec/unit/type/mount_spec.rb +5 -12
  406. data/spec/unit/type/yumrepo_spec.rb +1 -5
  407. data/spec/unit/type_spec.rb +32 -0
  408. data/spec/unit/util/command_line_spec.rb +11 -0
  409. data/spec/unit/util/execution_spec.rb +1 -1
  410. data/spec/unit/util/plist_spec.rb +16 -3
  411. data/spec/unit/util/storage_spec.rb +4 -1
  412. data/spec/unit/util/windows/adsi_spec.rb +23 -2
  413. data/spec/unit/util/windows/file_spec.rb +56 -1
  414. data/spec/unit/util/windows/sid_spec.rb +31 -7
  415. data/spec/unit/util/yaml_spec.rb +12 -0
  416. data/spec/unit/util_spec.rb +87 -20
  417. metadata +91 -48
  418. data/ext/puppetlisten/puppetlisten.rb +0 -77
  419. data/ext/puppetlisten/puppetrun.rb +0 -38
  420. data/lib/puppet/resource/type_collection_helper.rb +0 -7
  421. data/spec/unit/parser/functions/defined_spec.rb +0 -120
  422. data/spec/unit/resource/type_collection_helper_spec.rb +0 -24
@@ -71,7 +71,7 @@ class Puppet::Parser::TypeLoader
71
71
  return result
72
72
  end
73
73
  rescue TypeLoaderError => detail
74
- # I'm not convienced we should just drop these errors, but this
74
+ # I'm not convinced we should just drop these errors, but this
75
75
  # preserves existing behaviours.
76
76
  end
77
77
  end
@@ -158,7 +158,7 @@ module Puppet::Plugins::DataProviders
158
158
  attr_reader :original_path, :path
159
159
 
160
160
  # @param original_path [String] path as found in declaration. May contain interpolation expressions
161
- # @param path [Pathname] the expanded absolue path
161
+ # @param path [Pathname] the expanded absolute path
162
162
  # @api public
163
163
  def initialize(original_path, path)
164
164
  @original_path = original_path
data/lib/puppet/pops.rb CHANGED
@@ -10,10 +10,15 @@ module Puppet
10
10
  #
11
11
  # @api public
12
12
  module Pops
13
+ EMPTY_HASH = {}.freeze
14
+ EMPTY_ARRAY = [].freeze
15
+ EMPTY_STRING = ''.freeze
16
+
13
17
  require 'semantic'
14
18
 
15
19
  require 'puppet/pops/patterns'
16
20
  require 'puppet/pops/utils'
21
+ require 'puppet/pops/puppet_stack'
17
22
 
18
23
  require 'puppet/pops/adaptable'
19
24
  require 'puppet/pops/adapters'
@@ -81,10 +86,14 @@ module Puppet
81
86
  end
82
87
  end
83
88
 
89
+ module Resource
90
+ require 'puppet/pops/resource/resource_type_impl'
91
+ end
84
92
  module Evaluator
85
93
  require 'puppet/pops/evaluator/literal_evaluator'
86
94
  require 'puppet/pops/evaluator/callable_signature'
87
95
  require 'puppet/pops/evaluator/runtime3_converter'
96
+ require 'puppet/pops/evaluator/runtime3_resource_support'
88
97
  require 'puppet/pops/evaluator/runtime3_support'
89
98
  require 'puppet/pops/evaluator/evaluator_impl'
90
99
  require 'puppet/pops/evaluator/epp_evaluator'
@@ -126,6 +135,10 @@ module Puppet
126
135
  module Migration
127
136
  require 'puppet/pops/migration/migration_checker'
128
137
  end
138
+
139
+ module Serialization
140
+ require 'puppet/pops/serialization'
141
+ end
129
142
  end
130
143
 
131
144
  require 'puppet/parser/ast/pops_bridge'
@@ -38,26 +38,19 @@ module Adapters
38
38
  # The locator is always the parent locator, all positioned objects are positioned within their
39
39
  # parent. If a positioned object also has a locator that locator is for its children!
40
40
  #
41
- @locator ||= find_locator(@adapted.eContainer)
41
+ @locator ||= self.class.find_locator(@adapted.eContainer)
42
42
  end
43
43
 
44
- def find_locator(o)
45
- if o.nil?
46
- raise ArgumentError, "InternalError: SourcePosAdapter for something that has no locator among parents"
47
- end
48
- case
49
- when o.is_a?(Model::Program)
50
- return o.locator
51
- # TODO_HEREDOC use case of SubLocator instead
52
- when o.is_a?(Model::SubLocatedExpression) && !(found_locator = o.locator).nil?
53
- return found_locator
54
- when adapter = self.class.get(o)
55
- return adapter.locator
56
- else
57
- find_locator(o.eContainer)
58
- end
44
+ # @api private
45
+ def self.find_locator(o)
46
+ raise ArgumentError, 'InternalError: SourcePosAdapter for something that has no locator among parents' if o.nil?
47
+ found_locator = o.respond_to?(:locator) ? o.locator : nil
48
+ return found_locator unless found_locator.nil?
49
+ adapter = get(o)
50
+ return adapter.locator unless adapter.nil?
51
+ container = o.eContainer
52
+ container.nil? ? nil : find_locator(container)
59
53
  end
60
- private :find_locator
61
54
 
62
55
  def offset
63
56
  @adapted.offset
@@ -71,8 +64,7 @@ module Adapters
71
64
  # @note This is an expensive operation
72
65
  #
73
66
  def line
74
- # Optimization: manual inlining of locator accessor since this method is frequently called
75
- (@locator ||= find_locator(@adapted.eContainer)).line_for_offset(offset)
67
+ locator.line_for_offset(offset)
76
68
  end
77
69
 
78
70
  # Produces the position on the line of the given offset.
@@ -120,33 +112,32 @@ module Adapters
120
112
  # object is adapted with the correct loader.
121
113
  #
122
114
  # @see Utils#find_adapter
123
- #
115
+ # @api private
124
116
  class LoaderAdapter < Adaptable::Adapter
125
- # @return [Loader::Loader] the loader
126
- attr_accessor :loader
117
+ attr_accessor :loader_name
127
118
 
128
119
  # Finds the loader to use when loading originates from the source position of the given argument.
129
120
  #
130
- # @param instance [Model::PopsObject] The model object
131
- # @param scope [Puppet::Parser::Scope] The scope to use
121
+ # @param [Model::PopsObject] instance The model object
122
+ # @param [Puppet::Parser::Scope] scope The scope to use
123
+ # @param [String] file the file from where the model was parsed
132
124
  # @return [Loader,nil] the found loader or `nil` if it could not be found
133
125
  #
134
- def self.loader_for_model_object(model, scope)
135
- # find the loader that loaded the code, or use the private_environment_loader (sees env + all modules)
136
- adapter = Utils.find_adapter(model, self)
137
- return adapter.loader unless adapter.nil?
138
-
126
+ def self.loader_for_model_object(model, scope, file = nil)
139
127
  if scope.nil?
140
128
  loaders = Puppet.lookup(:loaders) { nil }
141
129
  loaders.nil? ? nil : loaders.private_environment_loader
142
130
  else
143
- # Use source location to determine calling module, or use the private_environment_loader (sees env + all modules)
144
- # This is necessary since not all .pp files are loaded by a Loader (see PUP-1833)
145
- adapter = adapt_by_source(scope, model)
146
- adapter.nil? ? scope.compiler.loaders.private_environment_loader : adapter.loader
131
+ loaders = scope.compiler.loaders
132
+ loader_name = loader_name_by_source(scope.environment, model, file)
133
+ loader_name.nil? ? loaders.private_environment_loader : loaders[loader_name]
147
134
  end
148
135
  end
149
136
 
137
+ class PathsAndNameCacheAdapter < Puppet::Pops::Adaptable::Adapter
138
+ attr_accessor :cache, :paths
139
+ end
140
+
150
141
  # Attempts to find the module that `instance` originates from by looking at it's {SourcePosAdapter} and
151
142
  # compare the `locator.file` found there with the module paths given in the environment found in the
152
143
  # given `scope`. If the file is found to be relative to a path, then the first segment of the relative
@@ -157,25 +148,29 @@ module Adapters
157
148
  #
158
149
  # @param scope
159
150
  # @param instance
160
- def self.adapt_by_source(scope, instance)
161
- source_pos = Utils.find_adapter(instance, SourcePosAdapter)
162
- unless source_pos.nil?
163
- mod = find_module_for_file(scope.environment, source_pos.locator.file)
164
- unless mod.nil?
165
- adapter = LoaderAdapter.adapt(source_pos.adapted)
166
- adapter.loader = scope.compiler.loaders.private_loader_for_module(mod.name)
167
- return adapter
168
- end
151
+ # @api private
152
+ def self.loader_name_by_source(environment, instance, file)
153
+ file = find_file(instance) if file.nil?
154
+ return nil if file.nil?
155
+ pn_adapter = PathsAndNameCacheAdapter.adapt(environment) do |a|
156
+ a.paths ||= environment.modulepath.map { |p| Pathname.new(p) }
157
+ a.cache ||= {}
158
+ end
159
+ dir = File.dirname(file)
160
+ pn_adapter.cache.fetch(dir) do |key|
161
+ mod = find_module_for_dir(environment, pn_adapter.paths, dir)
162
+ loader_name = mod.nil? ? nil : "#{mod.name} private"
163
+ pn_adapter.cache[key] = loader_name
169
164
  end
170
- nil
171
165
  end
172
166
 
173
- def self.find_module_for_file(environment, file)
174
- return nil if file.nil?
175
- file_path = Pathname.new(file)
176
- environment.modulepath.each do |path|
167
+ # @api private
168
+ def self.find_module_for_dir(environment, paths, dir)
169
+ return nil if dir.nil?
170
+ file_path = Pathname.new(dir)
171
+ paths.each do |path|
177
172
  begin
178
- relative_path = file_path.relative_path_from(Pathname.new(path)).to_s.split(File::SEPARATOR)
173
+ relative_path = file_path.relative_path_from(path).to_s.split(File::SEPARATOR)
179
174
  rescue ArgumentError
180
175
  # file_path was not relative to the module_path. That's OK.
181
176
  next
@@ -187,7 +182,12 @@ module Adapters
187
182
  end
188
183
  nil
189
184
  end
190
- private_class_method :find_module_for_file
185
+
186
+ # @api private
187
+ def self.find_file(instance)
188
+ source_pos = Utils.find_closest_positioned(instance)
189
+ source_pos.nil? ? nil : source_pos.locator.file
190
+ end
191
191
  end
192
192
  end
193
193
  end
@@ -6,7 +6,7 @@ require 'puppet/pops/binder/scheme_handler/symbolic_scheme'
6
6
  # URI
7
7
  # ---
8
8
  # The URI scheme is `confdir:/[<FQN>]['?' | [?optional]` where FQN is the fully qualified name of the bindings to load.
9
- # The referecence is made optional by using a URI query of `?` or `?optional`.
9
+ # The reference is made optional by using a URI query of `?` or `?optional`.
10
10
  #
11
11
  # @todo
12
12
  # If the file to load is outside of the file system rooted at $confdir (in a gem, or just on the Ruby path), it can not
@@ -9,8 +9,6 @@ class AccessOperator
9
9
  #
10
10
  include Runtime3Support
11
11
 
12
- EMPTY_STRING = ''.freeze
13
-
14
12
  attr_reader :semantic
15
13
 
16
14
  # Initialize with AccessExpression to enable reporting issues
@@ -266,6 +264,19 @@ class AccessOperator
266
264
  end
267
265
  end
268
266
 
267
+ def access_PSensitiveType(o, scope, keys)
268
+ keys.flatten!
269
+ if keys.size == 1
270
+ type = keys[0]
271
+ unless type.is_a?(Types::PAnyType)
272
+ fail(Issues::BAD_TYPE_SLICE_TYPE, @semantic.keys[0], {:base_type => 'Sensitive-Type', :actual => type.class})
273
+ end
274
+ Types::PSensitiveType.new(type)
275
+ else
276
+ fail(Issues::BAD_TYPE_SLICE_ARITY, @semantic, {:base_type => 'Sensitive-Type', :min => 1, :actual => keys.size})
277
+ end
278
+ end
279
+
269
280
  def access_PObjectType(o, scope, keys)
270
281
  keys.flatten!
271
282
  if keys.size == 1
@@ -275,6 +286,15 @@ class AccessOperator
275
286
  end
276
287
  end
277
288
 
289
+ def access_PTypeSetType(o, scope, keys)
290
+ keys.flatten!
291
+ if keys.size == 1
292
+ Types::TypeFactory.type_set(keys[0])
293
+ else
294
+ fail(Issues::BAD_TYPE_SLICE_ARITY, @semantic, {:base_type => 'TypeSet-Type', :min => 1, :actual => keys.size})
295
+ end
296
+ end
297
+
278
298
  def access_PNotUndefType(o, scope, keys)
279
299
  keys.flatten!
280
300
  case keys.size
@@ -597,11 +617,13 @@ class AccessOperator
597
617
  #
598
618
  result = keys.each_with_index.map do |c, i|
599
619
  name = if c.is_a?(Types::PResourceType) && !c.type_name.nil? && c.title.nil?
620
+ strict_check(c, i)
600
621
  # type_name is already downcase. Don't waste time trying to downcase again
601
622
  c.type_name
602
623
  elsif c.is_a?(String)
603
624
  c.downcase
604
625
  elsif c.is_a?(Types::PTypeReferenceType)
626
+ strict_check(c, i)
605
627
  c.type_string.downcase
606
628
  else
607
629
  fail(Issues::ILLEGAL_HOSTCLASS_NAME, @semantic.keys[i], {:name => c})
@@ -634,6 +656,21 @@ class AccessOperator
634
656
  # returns single type as type, else an array of types
635
657
  return result_type_array ? result : result.pop
636
658
  end
659
+
660
+ # PUP-6083 - Using Class[Foo] is deprecated since an arbitrary foo will trigger a "resource not found"
661
+ # @api private
662
+ def strict_check(name, index)
663
+ if Puppet[:strict] != :off
664
+ msg = 'Upper cased class-name in a Class[<class-name>] is deprecated, class-name should be a lowercase string'
665
+ case Puppet[:strict]
666
+ when :error
667
+ fail(Issues::ILLEGAL_HOSTCLASS_NAME, @semantic.keys[index], {:name => name})
668
+ when :warning
669
+ Puppet.warn_once(:deprecation, 'ClassReferenceInUpperCase', msg)
670
+ end
671
+ end
672
+ end
673
+
637
674
  end
638
675
  end
639
676
  end
@@ -18,16 +18,15 @@ class Closure < CallableSignature
18
18
  attr_reader :model
19
19
  attr_reader :enclosing_scope
20
20
 
21
- def initialize(evaluator, model, scope)
21
+ def initialize(evaluator, model)
22
22
  @evaluator = evaluator
23
23
  @model = model
24
- @enclosing_scope = scope
25
24
  end
26
25
 
27
26
  # Evaluates a closure in its enclosing scope after having matched given arguments with parameters (from left to right)
28
27
  # @api public
29
28
  def call(*args)
30
- call_with_scope(@enclosing_scope, args)
29
+ call_with_scope(enclosing_scope, args)
31
30
  end
32
31
 
33
32
  # This method makes a Closure compatible with a Dispatch. This is used when the closure is wrapped in a Function
@@ -35,7 +34,7 @@ class Closure < CallableSignature
35
34
  # checks of the argument type/arity validity).
36
35
  # @api private
37
36
  def invoke(instance, calling_scope, args, &block)
38
- @enclosing_scope.with_global_scope do |global_scope|
37
+ enclosing_scope.with_global_scope do |global_scope|
39
38
  call_with_scope(global_scope, args, &block)
40
39
  end
41
40
  end
@@ -43,8 +42,9 @@ class Closure < CallableSignature
43
42
  # Call closure with argument assignment by name
44
43
  def call_by_name(args_hash, enforce_parameters)
45
44
  if enforce_parameters
45
+ closure_scope = enclosing_scope
46
46
  # Push a temporary parameter scope used while resolving the parameter defaults
47
- @enclosing_scope.with_parameter_scope(closure_name, parameter_names) do |param_scope|
47
+ closure_scope.with_parameter_scope(closure_name, parameter_names) do |param_scope|
48
48
  # Assign all non-nil values, even those that represent non-existent paramaters.
49
49
  args_hash.each { |k, v| param_scope[k] = v unless v.nil? }
50
50
  parameters.each do |p|
@@ -56,7 +56,7 @@ class Closure < CallableSignature
56
56
  # No default. Assign nil if the args_hash included it
57
57
  param_scope[name] = nil if args_hash.include?(name)
58
58
  else
59
- param_scope[name] = param_scope.evaluate(name, p.value, @enclosing_scope, @evaluator)
59
+ param_scope[name] = param_scope.evaluate(name, p.value, closure_scope, @evaluator)
60
60
  end
61
61
  end
62
62
  end
@@ -65,7 +65,7 @@ class Closure < CallableSignature
65
65
  Types::TypeMismatchDescriber.validate_parameters(closure_name, params_struct, args_hash)
66
66
  end
67
67
 
68
- @evaluator.evaluate_block_with_bindings(@enclosing_scope, args_hash, @model.body)
68
+ @evaluator.evaluate_block_with_bindings(enclosing_scope, args_hash, @model.body)
69
69
  end
70
70
 
71
71
  def parameters
@@ -113,15 +113,38 @@ class Closure < CallableSignature
113
113
  CLOSURE_NAME
114
114
  end
115
115
 
116
+ class Dynamic < Closure
117
+ def initialize(evaluator, model, scope)
118
+ @enclosing_scope = scope
119
+ super(evaluator, model)
120
+ end
121
+
122
+ def enclosing_scope
123
+ @enclosing_scope
124
+ end
125
+ end
126
+
116
127
  class Named < Closure
117
- def initialize(name, evaluator, model, scope)
128
+ def initialize(name, evaluator, model)
118
129
  @name = name
119
- super(evaluator, model, scope)
130
+ super(evaluator, model)
120
131
  end
121
132
 
122
133
  def closure_name
123
134
  @name
124
135
  end
136
+
137
+ # The assigned enclosing scope, or global scope if enclosing scope was initialized to nil
138
+ #
139
+ def enclosing_scope
140
+ # Named closures are typically used for puppet functions and they cannot be defined
141
+ # in an enclosing scope as they are cashed and reused. They need to bind to the
142
+ # global scope at time of use rather at time of definition.
143
+ # Unnamed closures are always a runtime construct, they are never bound by a loader
144
+ # and are thus garbage collected at end of a compilation.
145
+ #
146
+ Puppet.lookup(:global_scope) { {} }
147
+ end
125
148
  end
126
149
 
127
150
  private
@@ -196,8 +219,10 @@ class Closure < CallableSignature
196
219
  types = []
197
220
  range = [0, 0]
198
221
  in_optional_parameters = false
222
+ closure_scope = enclosing_scope
223
+
199
224
  parameters.each do |param|
200
- type, param_range = create_param_type(param)
225
+ type, param_range = create_param_type(param, closure_scope)
201
226
 
202
227
  types << type
203
228
 
@@ -221,9 +246,10 @@ class Closure < CallableSignature
221
246
  def create_params_struct
222
247
  type_factory = Types::TypeFactory
223
248
  members = {}
249
+ closure_scope = enclosing_scope
224
250
 
225
251
  parameters.each do |param|
226
- arg_type, param_range = create_param_type(param)
252
+ arg_type, param_range = create_param_type(param, closure_scope)
227
253
  key_type = type_factory.string(nil, param.name.to_s)
228
254
  key_type = type_factory.optional(key_type) unless param.value.nil?
229
255
  members[key_type] = arg_type
@@ -231,9 +257,9 @@ class Closure < CallableSignature
231
257
  type_factory.struct(members)
232
258
  end
233
259
 
234
- def create_param_type(param)
260
+ def create_param_type(param, closure_scope)
235
261
  type = if param.type_expr
236
- @evaluator.evaluate(param.type_expr, @enclosing_scope)
262
+ @evaluator.evaluate(param.type_expr, closure_scope)
237
263
  else
238
264
  Types::PAnyType::DEFAULT
239
265
  end
@@ -19,7 +19,8 @@ class CollectorTransformer
19
19
  fail "Classes cannot be collected"
20
20
  end
21
21
 
22
- resource_type = scope.find_resource_type(type)
22
+ resource_type = Runtime3ResourceSupport.find_resource_type(scope, type)
23
+
23
24
  fail "Resource type #{type} doesn't exist" unless resource_type
24
25
 
25
26
  adapter = Adapters::SourcePosAdapter.adapt(o)
@@ -155,6 +156,10 @@ protected
155
156
  @@evaluator.evaluate(o, scope)
156
157
  end
157
158
 
159
+ def query_LiteralUndef(o, scope)
160
+ nil
161
+ end
162
+
158
163
  def query_QualifiedName(o, scope)
159
164
  @@evaluator.evaluate(o, scope)
160
165
  end
@@ -205,6 +210,10 @@ protected
205
210
  @@evaluator.evaluate(o, scope)
206
211
  end
207
212
 
213
+ def match_LiteralUndef(o, scope)
214
+ nil
215
+ end
216
+
208
217
  def match_ConcatenatedString(o, scope)
209
218
  @@evaluator.evaluate(o, scope)
210
219
  end