puppet 3.6.2 → 3.7.0

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

Potentially problematic release.


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

Files changed (751) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +2 -3
  3. data/Gemfile +14 -10
  4. data/README.md +1 -1
  5. data/ext/build_defaults.yaml +16 -1
  6. data/ext/debian/control +3 -2
  7. data/ext/debian/puppet-common.dirs +1 -0
  8. data/ext/debian/puppet-common.postinst +8 -8
  9. data/ext/debian/puppet-common.postrm +2 -1
  10. data/ext/project_data.yaml +16 -12
  11. data/ext/rack/example-passenger-vhost.conf +2 -2
  12. data/ext/redhat/puppet.spec.erb +6 -3
  13. data/ext/windows/service/daemon.rb +47 -41
  14. data/install.rb +1 -1
  15. data/lib/puppet.rb +34 -24
  16. data/lib/puppet/application.rb +34 -1
  17. data/lib/puppet/application/agent.rb +9 -8
  18. data/lib/puppet/application/apply.rb +14 -5
  19. data/lib/puppet/application/doc.rb +4 -11
  20. data/lib/puppet/application/master.rb +19 -17
  21. data/lib/puppet/application/queue.rb +1 -1
  22. data/lib/puppet/application/resource.rb +0 -1
  23. data/lib/puppet/configurer.rb +39 -2
  24. data/lib/puppet/configurer/downloader.rb +5 -10
  25. data/lib/puppet/configurer/downloader_factory.rb +34 -0
  26. data/lib/puppet/configurer/plugin_handler.rb +11 -17
  27. data/lib/puppet/defaults.rb +244 -119
  28. data/lib/puppet/environments.rb +8 -0
  29. data/lib/puppet/external/nagios/base.rb +1 -1
  30. data/lib/puppet/external/pson/pure/generator.rb +1 -8
  31. data/lib/puppet/face/ca.rb +7 -0
  32. data/lib/puppet/face/file/download.rb +5 -2
  33. data/lib/puppet/face/file/store.rb +1 -1
  34. data/lib/puppet/face/instrumentation_data.rb +2 -1
  35. data/lib/puppet/face/instrumentation_listener.rb +2 -1
  36. data/lib/puppet/face/instrumentation_probe.rb +2 -1
  37. data/lib/puppet/face/module/build.rb +2 -2
  38. data/lib/puppet/face/module/generate.rb +20 -12
  39. data/lib/puppet/face/module/install.rb +4 -3
  40. data/lib/puppet/face/module/uninstall.rb +7 -0
  41. data/lib/puppet/face/module/upgrade.rb +11 -3
  42. data/lib/puppet/face/node/clean.rb +1 -1
  43. data/lib/puppet/face/parser.rb +99 -7
  44. data/lib/puppet/feature/base.rb +18 -12
  45. data/lib/puppet/feature/cfacter.rb +14 -0
  46. data/lib/puppet/feature/pe_license.rb +4 -0
  47. data/lib/puppet/file_bucket/dipper.rb +19 -12
  48. data/lib/puppet/file_bucket/file.rb +73 -10
  49. data/lib/puppet/file_serving/configuration/parser.rb +3 -3
  50. data/lib/puppet/file_system.rb +1 -1
  51. data/lib/puppet/file_system/file19.rb +41 -0
  52. data/lib/puppet/file_system/file19windows.rb +0 -1
  53. data/lib/puppet/file_system/uniquefile.rb +190 -0
  54. data/lib/puppet/forge.rb +34 -7
  55. data/lib/puppet/forge/errors.rb +5 -6
  56. data/lib/puppet/forge/repository.rb +14 -2
  57. data/lib/puppet/functions.rb +19 -12
  58. data/lib/puppet/functions/assert_type.rb +27 -10
  59. data/lib/puppet/functions/each.rb +111 -0
  60. data/lib/puppet/functions/epp.rb +54 -0
  61. data/lib/puppet/functions/filter.rb +113 -0
  62. data/lib/puppet/functions/inline_epp.rb +88 -0
  63. data/lib/puppet/functions/map.rb +97 -0
  64. data/lib/puppet/functions/match.rb +102 -0
  65. data/lib/puppet/functions/reduce.rb +94 -0
  66. data/lib/puppet/functions/slice.rb +126 -0
  67. data/lib/puppet/functions/with.rb +23 -0
  68. data/lib/puppet/indirector/catalog/compiler.rb +4 -4
  69. data/lib/puppet/indirector/data_binding/hiera.rb +2 -45
  70. data/lib/puppet/indirector/facts/couch.rb +3 -1
  71. data/lib/puppet/indirector/facts/facter.rb +52 -65
  72. data/lib/puppet/indirector/file_bucket_file/file.rb +6 -3
  73. data/lib/puppet/indirector/hiera.rb +48 -0
  74. data/lib/puppet/indirector/indirection.rb +1 -1
  75. data/lib/puppet/indirector/request.rb +9 -3
  76. data/lib/puppet/indirector/resource/ral.rb +1 -1
  77. data/lib/puppet/indirector/rest.rb +7 -3
  78. data/lib/puppet/loaders.rb +0 -1
  79. data/lib/puppet/module.rb +2 -1
  80. data/lib/puppet/module_tool.rb +2 -0
  81. data/lib/puppet/module_tool/applications/application.rb +4 -5
  82. data/lib/puppet/module_tool/applications/builder.rb +64 -5
  83. data/lib/puppet/module_tool/applications/uninstaller.rb +3 -2
  84. data/lib/puppet/module_tool/applications/unpacker.rb +14 -0
  85. data/lib/puppet/module_tool/applications/upgrader.rb +23 -13
  86. data/lib/puppet/module_tool/dependency.rb +12 -0
  87. data/lib/puppet/module_tool/errors/shared.rb +1 -1
  88. data/lib/puppet/module_tool/errors/upgrader.rb +20 -0
  89. data/lib/puppet/module_tool/installed_modules.rb +6 -1
  90. data/lib/puppet/module_tool/metadata.rb +53 -3
  91. data/lib/puppet/module_tool/modulefile.rb +1 -1
  92. data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +7 -0
  93. data/lib/puppet/module_tool/skeleton/templates/generator/manifests/init.pp.erb +1 -1
  94. data/lib/puppet/module_tool/skeleton/templates/generator/spec/spec_helper.rb +1 -17
  95. data/lib/puppet/module_tool/tar/mini.rb +20 -2
  96. data/lib/puppet/network/http.rb +5 -0
  97. data/lib/puppet/network/http/api/v1.rb +2 -2
  98. data/lib/puppet/network/http/api/v2/environments.rb +15 -1
  99. data/lib/puppet/network/http/connection.rb +54 -68
  100. data/lib/puppet/network/http/factory.rb +44 -0
  101. data/lib/puppet/network/http/handler.rb +12 -6
  102. data/lib/puppet/network/http/nocache_pool.rb +21 -0
  103. data/lib/puppet/network/http/pool.rb +120 -0
  104. data/lib/puppet/network/http/rack/rest.rb +3 -1
  105. data/lib/puppet/network/http/session.rb +17 -0
  106. data/lib/puppet/network/http/site.rb +39 -0
  107. data/lib/puppet/network/http/webrick/rest.rb +3 -1
  108. data/lib/puppet/network/http_pool.rb +3 -4
  109. data/lib/puppet/node.rb +19 -6
  110. data/lib/puppet/node/environment.rb +34 -8
  111. data/lib/puppet/parser/ast/collection.rb +4 -0
  112. data/lib/puppet/parser/ast/collexpr.rb +1 -1
  113. data/lib/puppet/parser/ast/node.rb +5 -0
  114. data/lib/puppet/parser/ast/pops_bridge.rb +49 -6
  115. data/lib/puppet/parser/compiler.rb +66 -38
  116. data/lib/puppet/parser/e4_parser_adapter.rb +2 -2
  117. data/lib/puppet/parser/files.rb +76 -33
  118. data/lib/puppet/parser/functions.rb +1 -7
  119. data/lib/puppet/parser/functions/assert_type.rb +31 -0
  120. data/lib/puppet/parser/functions/contain.rb +15 -5
  121. data/lib/puppet/parser/functions/create_resources.rb +5 -1
  122. data/lib/puppet/parser/functions/digest.rb +5 -0
  123. data/lib/puppet/parser/functions/each.rb +46 -107
  124. data/lib/puppet/parser/functions/epp.rb +13 -9
  125. data/lib/puppet/parser/functions/file.rb +20 -12
  126. data/lib/puppet/parser/functions/filter.rb +32 -88
  127. data/lib/puppet/parser/functions/include.rb +12 -24
  128. data/lib/puppet/parser/functions/inline_epp.rb +9 -12
  129. data/lib/puppet/parser/functions/lookup.rb +1 -1
  130. data/lib/puppet/parser/functions/map.rb +30 -83
  131. data/lib/puppet/parser/functions/match.rb +28 -0
  132. data/lib/puppet/parser/functions/reduce.rb +69 -98
  133. data/lib/puppet/parser/functions/require.rb +13 -5
  134. data/lib/puppet/parser/functions/search.rb +6 -1
  135. data/lib/puppet/parser/functions/slice.rb +35 -103
  136. data/lib/puppet/parser/functions/template.rb +12 -5
  137. data/lib/puppet/parser/functions/with.rb +21 -0
  138. data/lib/puppet/parser/lexer.rb +1 -1
  139. data/lib/puppet/parser/parser_factory.rb +21 -33
  140. data/lib/puppet/parser/resource.rb +2 -3
  141. data/lib/puppet/parser/scope.rb +85 -15
  142. data/lib/puppet/pops.rb +9 -11
  143. data/lib/puppet/pops/adapters.rb +2 -1
  144. data/lib/puppet/pops/binder/bindings_checker.rb +4 -4
  145. data/lib/puppet/pops/binder/bindings_factory.rb +6 -6
  146. data/lib/puppet/pops/binder/bindings_label_provider.rb +1 -1
  147. data/lib/puppet/pops/binder/bindings_loader.rb +2 -2
  148. data/lib/puppet/pops/binder/bindings_model.rb +58 -191
  149. data/lib/puppet/pops/binder/bindings_model_dumper.rb +1 -1
  150. data/lib/puppet/pops/binder/bindings_model_meta.rb +215 -0
  151. data/lib/puppet/pops/binder/injector.rb +9 -9
  152. data/lib/puppet/pops/binder/key_factory.rb +2 -2
  153. data/lib/puppet/pops/binder/lookup.rb +14 -6
  154. data/lib/puppet/pops/binder/producers.rb +9 -12
  155. data/lib/puppet/pops/evaluator/access_operator.rb +35 -29
  156. data/lib/puppet/pops/evaluator/callable_mismatch_describer.rb +175 -0
  157. data/lib/puppet/pops/evaluator/callable_signature.rb +1 -2
  158. data/lib/puppet/pops/evaluator/closure.rb +151 -35
  159. data/lib/puppet/pops/evaluator/compare_operator.rb +26 -22
  160. data/lib/puppet/pops/evaluator/epp_evaluator.rb +16 -15
  161. data/lib/puppet/pops/evaluator/evaluator_impl.rb +277 -229
  162. data/lib/puppet/pops/evaluator/relationship_operator.rb +3 -2
  163. data/lib/puppet/pops/evaluator/runtime3_support.rb +86 -53
  164. data/lib/puppet/pops/functions/dispatch.rb +9 -4
  165. data/lib/puppet/pops/functions/dispatcher.rb +2 -169
  166. data/lib/puppet/pops/issue_reporter.rb +14 -6
  167. data/lib/puppet/pops/issues.rb +96 -21
  168. data/lib/puppet/pops/loader/base_loader.rb +3 -3
  169. data/lib/puppet/pops/loader/loader.rb +1 -1
  170. data/lib/puppet/pops/loader/loader_paths.rb +2 -21
  171. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +1 -1
  172. data/lib/puppet/pops/loader/static_loader.rb +12 -2
  173. data/lib/puppet/pops/model/ast_transformer.rb +4 -24
  174. data/lib/puppet/pops/model/factory.rb +72 -10
  175. data/lib/puppet/pops/model/model.rb +82 -574
  176. data/lib/puppet/pops/model/model_label_provider.rb +4 -2
  177. data/lib/puppet/pops/model/model_meta.rb +576 -0
  178. data/lib/puppet/pops/model/model_tree_dumper.rb +27 -5
  179. data/lib/puppet/pops/parser/egrammar.ra +209 -221
  180. data/lib/puppet/pops/parser/eparser.rb +1459 -1431
  181. data/lib/puppet/pops/parser/evaluating_parser.rb +15 -75
  182. data/lib/puppet/pops/parser/lexer2.rb +14 -10
  183. data/lib/puppet/pops/parser/lexer_support.rb +6 -0
  184. data/lib/puppet/pops/parser/locator.rb +1 -1
  185. data/lib/puppet/pops/parser/parser_support.rb +31 -49
  186. data/lib/puppet/pops/patterns.rb +10 -10
  187. data/lib/puppet/pops/semantic_error.rb +1 -1
  188. data/lib/puppet/pops/types/class_loader.rb +24 -13
  189. data/lib/puppet/pops/types/type_calculator.rb +188 -87
  190. data/lib/puppet/pops/types/type_factory.rb +79 -53
  191. data/lib/puppet/pops/types/type_parser.rb +22 -16
  192. data/lib/puppet/pops/types/types.rb +283 -392
  193. data/lib/puppet/pops/types/types_meta.rb +223 -0
  194. data/lib/puppet/pops/utils.rb +16 -14
  195. data/lib/puppet/pops/validation/checker4_0.rb +264 -18
  196. data/lib/puppet/pops/validation/validator_factory_4_0.rb +0 -1
  197. data/lib/puppet/pops/visitor.rb +0 -103
  198. data/lib/puppet/provider/exec.rb +10 -1
  199. data/lib/puppet/provider/file/windows.rb +3 -4
  200. data/lib/puppet/provider/group/windows_adsi.rb +10 -10
  201. data/lib/puppet/provider/nameservice/directoryservice.rb +3 -4
  202. data/lib/puppet/provider/package/apt.rb +5 -1
  203. data/lib/puppet/provider/package/gem.rb +7 -3
  204. data/lib/puppet/provider/package/openbsd.rb +84 -7
  205. data/lib/puppet/provider/package/pacman.rb +29 -4
  206. data/lib/puppet/provider/package/rpm.rb +5 -7
  207. data/lib/puppet/provider/package/sun.rb +5 -1
  208. data/lib/puppet/provider/package/windows.rb +6 -1
  209. data/lib/puppet/provider/package/windows/exe_package.rb +1 -1
  210. data/lib/puppet/provider/package/windows/msi_package.rb +1 -1
  211. data/lib/puppet/provider/package/windows/package.rb +13 -1
  212. data/lib/puppet/provider/package/yum.rb +7 -3
  213. data/lib/puppet/provider/package/zypper.rb +5 -1
  214. data/lib/puppet/provider/parsedfile.rb +17 -1
  215. data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +6 -12
  216. data/lib/puppet/provider/service/freebsd.rb +12 -12
  217. data/lib/puppet/provider/service/init.rb +5 -0
  218. data/lib/puppet/provider/service/launchd.rb +0 -3
  219. data/lib/puppet/provider/service/openbsd.rb +8 -7
  220. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +2 -2
  221. data/lib/puppet/provider/sshkey/parsed.rb +5 -0
  222. data/lib/puppet/provider/user/user_role_add.rb +5 -4
  223. data/lib/puppet/provider/user/windows_adsi.rb +8 -8
  224. data/lib/puppet/provider/zone/solaris.rb +1 -1
  225. data/lib/puppet/reference/metaparameter.rb +8 -6
  226. data/lib/puppet/reports/store.rb +4 -9
  227. data/lib/puppet/resource.rb +75 -11
  228. data/lib/puppet/resource/catalog.rb +9 -7
  229. data/lib/puppet/resource/type.rb +27 -0
  230. data/lib/puppet/settings.rb +61 -41
  231. data/lib/puppet/settings/base_setting.rb +9 -3
  232. data/lib/puppet/settings/environment_conf.rb +32 -4
  233. data/lib/puppet/settings/file_setting.rb +9 -1
  234. data/lib/puppet/settings/priority_setting.rb +5 -5
  235. data/lib/puppet/ssl.rb +1 -0
  236. data/lib/puppet/ssl/certificate_authority.rb +15 -6
  237. data/lib/puppet/ssl/certificate_authority/autosign_command.rb +2 -1
  238. data/lib/puppet/ssl/host.rb +3 -2
  239. data/lib/puppet/ssl/inventory.rb +11 -6
  240. data/lib/puppet/ssl/validator/default_validator.rb +1 -0
  241. data/lib/puppet/ssl/validator/no_validator.rb +3 -0
  242. data/lib/puppet/transaction.rb +29 -0
  243. data/lib/puppet/transaction/resource_harness.rb +16 -3
  244. data/lib/puppet/type.rb +71 -49
  245. data/lib/puppet/type/exec.rb +36 -8
  246. data/lib/puppet/type/file.rb +56 -16
  247. data/lib/puppet/type/file/content.rb +3 -3
  248. data/lib/puppet/type/file/mode.rb +12 -3
  249. data/lib/puppet/type/file/source.rb +4 -1
  250. data/lib/puppet/type/group.rb +1 -1
  251. data/lib/puppet/type/mount.rb +1 -3
  252. data/lib/puppet/type/resources.rb +59 -35
  253. data/lib/puppet/type/ssh_authorized_key.rb +54 -16
  254. data/lib/puppet/type/sshkey.rb +1 -1
  255. data/lib/puppet/type/user.rb +17 -11
  256. data/lib/puppet/type/yumrepo.rb +59 -8
  257. data/lib/puppet/type/zone.rb +3 -6
  258. data/lib/puppet/util.rb +64 -55
  259. data/lib/puppet/util/autoload.rb +2 -2
  260. data/lib/puppet/util/colors.rb +61 -19
  261. data/lib/puppet/util/command_line.rb +21 -4
  262. data/lib/puppet/util/execution.rb +41 -29
  263. data/lib/puppet/util/feature.rb +15 -4
  264. data/lib/puppet/util/filetype.rb +6 -2
  265. data/lib/puppet/util/http_proxy.rb +29 -2
  266. data/lib/puppet/util/lockfile.rb +1 -1
  267. data/lib/puppet/util/log/destinations.rb +7 -3
  268. data/lib/puppet/util/logging.rb +44 -14
  269. data/lib/puppet/util/pidlock.rb +11 -5
  270. data/lib/puppet/util/posix.rb +21 -31
  271. data/lib/puppet/util/profiler.rb +17 -9
  272. data/lib/puppet/util/profiler/aggregate.rb +85 -0
  273. data/lib/puppet/util/profiler/around_profiler.rb +67 -0
  274. data/lib/puppet/util/profiler/logging.rb +12 -11
  275. data/lib/puppet/util/profiler/wall_clock.rb +7 -6
  276. data/lib/puppet/util/rdoc.rb +8 -1
  277. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +1 -1
  278. data/lib/puppet/util/suidmanager.rb +1 -8
  279. data/lib/puppet/util/windows.rb +14 -3
  280. data/lib/puppet/util/windows/access_control_list.rb +4 -4
  281. data/lib/puppet/util/{adsi.rb → windows/adsi.rb} +99 -37
  282. data/lib/puppet/util/windows/api_types.rb +255 -0
  283. data/lib/puppet/util/windows/com.rb +224 -0
  284. data/lib/puppet/util/windows/error.rb +72 -5
  285. data/lib/puppet/util/windows/file.rb +254 -132
  286. data/lib/puppet/util/windows/process.rb +293 -177
  287. data/lib/puppet/util/windows/registry.rb +12 -2
  288. data/lib/puppet/util/windows/root_certs.rb +16 -9
  289. data/lib/puppet/util/windows/security.rb +501 -232
  290. data/lib/puppet/util/windows/sid.rb +80 -36
  291. data/lib/puppet/util/windows/string.rb +2 -0
  292. data/lib/puppet/util/windows/taskscheduler.rb +1241 -0
  293. data/lib/puppet/util/windows/user.rb +241 -57
  294. data/lib/puppet/vendor.rb +3 -1
  295. data/lib/puppet/vendor/load_pathspec.rb +1 -0
  296. data/lib/puppet/vendor/load_rgen.rb +1 -0
  297. data/lib/puppet/vendor/pathspec/CHANGELOG.md +2 -0
  298. data/lib/puppet/vendor/pathspec/LICENSE +201 -0
  299. data/lib/puppet/vendor/pathspec/PUPPET_README.md +6 -0
  300. data/lib/puppet/vendor/pathspec/README.md +53 -0
  301. data/lib/puppet/vendor/pathspec/lib/pathspec.rb +121 -0
  302. data/lib/puppet/vendor/pathspec/lib/pathspec/gitignorespec.rb +275 -0
  303. data/lib/puppet/vendor/pathspec/lib/pathspec/regexspec.rb +17 -0
  304. data/lib/puppet/vendor/pathspec/lib/pathspec/spec.rb +14 -0
  305. data/lib/puppet/vendor/require_vendored.rb +2 -0
  306. data/lib/puppet/vendor/rgen/CHANGELOG +197 -0
  307. data/lib/puppet/vendor/rgen/MIT-LICENSE +20 -0
  308. data/lib/puppet/vendor/rgen/PUPPET_README.md +6 -0
  309. data/lib/puppet/vendor/rgen/README.rdoc +78 -0
  310. data/lib/puppet/vendor/rgen/Rakefile +41 -0
  311. data/lib/puppet/vendor/rgen/TODO +41 -0
  312. data/lib/puppet/vendor/rgen/anounce.txt +61 -0
  313. data/lib/puppet/vendor/rgen/design_rationale.txt +71 -0
  314. data/lib/puppet/vendor/rgen/lib/ea_support/ea_support.rb +54 -0
  315. data/lib/puppet/vendor/rgen/lib/ea_support/id_store.rb +32 -0
  316. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel.rb +562 -0
  317. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel_ext.rb +45 -0
  318. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel_generator.rb +43 -0
  319. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_to_uml13.rb +103 -0
  320. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_to_uml13_ea.rb +89 -0
  321. data/lib/puppet/vendor/rgen/lib/metamodels/uml13_metamodel.rb +559 -0
  322. data/lib/puppet/vendor/rgen/lib/metamodels/uml13_metamodel_ext.rb +26 -0
  323. data/lib/puppet/vendor/rgen/lib/mmgen/metamodel_generator.rb +20 -0
  324. data/lib/puppet/vendor/rgen/lib/mmgen/mm_ext/ecore_mmgen_ext.rb +91 -0
  325. data/lib/puppet/vendor/rgen/lib/mmgen/mmgen.rb +28 -0
  326. data/lib/puppet/vendor/rgen/lib/mmgen/templates/annotations.tpl +37 -0
  327. data/lib/puppet/vendor/rgen/lib/mmgen/templates/metamodel_generator.tpl +172 -0
  328. data/lib/puppet/vendor/rgen/lib/rgen/array_extensions.rb +45 -0
  329. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore.rb +218 -0
  330. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_builder_methods.rb +81 -0
  331. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_ext.rb +69 -0
  332. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_interface.rb +47 -0
  333. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_to_ruby.rb +167 -0
  334. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ruby_to_ecore.rb +91 -0
  335. data/lib/puppet/vendor/rgen/lib/rgen/environment.rb +129 -0
  336. data/lib/puppet/vendor/rgen/lib/rgen/fragment/dump_file_cache.rb +63 -0
  337. data/lib/puppet/vendor/rgen/lib/rgen/fragment/fragmented_model.rb +140 -0
  338. data/lib/puppet/vendor/rgen/lib/rgen/fragment/model_fragment.rb +289 -0
  339. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/abstract_instantiator.rb +66 -0
  340. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/abstract_xml_instantiator.rb +66 -0
  341. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/default_xml_instantiator.rb +117 -0
  342. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/ecore_xml_instantiator.rb +169 -0
  343. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_instantiator.rb +126 -0
  344. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_parser.rb +331 -0
  345. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_parser.y +94 -0
  346. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/nodebased_xml_instantiator.rb +137 -0
  347. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/qualified_name_resolver.rb +97 -0
  348. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/reference_resolver.rb +128 -0
  349. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/resolution_helper.rb +47 -0
  350. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/xmi11_instantiator.rb +168 -0
  351. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder.rb +224 -0
  352. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/builder_extensions.rb +556 -0
  353. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/builder_runtime.rb +174 -0
  354. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/constant_order_helper.rb +89 -0
  355. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/data_types.rb +77 -0
  356. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/intermediate/annotation.rb +30 -0
  357. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/intermediate/feature.rb +168 -0
  358. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/mm_multiple.rb +23 -0
  359. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/module_extension.rb +42 -0
  360. data/lib/puppet/vendor/rgen/lib/rgen/model_builder.rb +32 -0
  361. data/lib/puppet/vendor/rgen/lib/rgen/model_builder/builder_context.rb +334 -0
  362. data/lib/puppet/vendor/rgen/lib/rgen/model_builder/model_serializer.rb +225 -0
  363. data/lib/puppet/vendor/rgen/lib/rgen/model_builder/reference_resolver.rb +156 -0
  364. data/lib/puppet/vendor/rgen/lib/rgen/serializer/json_serializer.rb +121 -0
  365. data/lib/puppet/vendor/rgen/lib/rgen/serializer/opposite_reference_filter.rb +18 -0
  366. data/lib/puppet/vendor/rgen/lib/rgen/serializer/qualified_name_provider.rb +47 -0
  367. data/lib/puppet/vendor/rgen/lib/rgen/serializer/xmi11_serializer.rb +116 -0
  368. data/lib/puppet/vendor/rgen/lib/rgen/serializer/xmi20_serializer.rb +71 -0
  369. data/lib/puppet/vendor/rgen/lib/rgen/serializer/xml_serializer.rb +98 -0
  370. data/lib/puppet/vendor/rgen/lib/rgen/template_language.rb +297 -0
  371. data/lib/puppet/vendor/rgen/lib/rgen/template_language/directory_template_container.rb +83 -0
  372. data/lib/puppet/vendor/rgen/lib/rgen/template_language/output_handler.rb +87 -0
  373. data/lib/puppet/vendor/rgen/lib/rgen/template_language/template_container.rb +234 -0
  374. data/lib/puppet/vendor/rgen/lib/rgen/template_language/template_helper.rb +26 -0
  375. data/lib/puppet/vendor/rgen/lib/rgen/transformer.rb +475 -0
  376. data/lib/puppet/vendor/rgen/lib/rgen/util/auto_class_creator.rb +61 -0
  377. data/lib/puppet/vendor/rgen/lib/rgen/util/cached_glob.rb +67 -0
  378. data/lib/puppet/vendor/rgen/lib/rgen/util/file_cache_map.rb +124 -0
  379. data/lib/puppet/vendor/rgen/lib/rgen/util/file_change_detector.rb +84 -0
  380. data/lib/puppet/vendor/rgen/lib/rgen/util/method_delegation.rb +114 -0
  381. data/lib/puppet/vendor/rgen/lib/rgen/util/model_comparator.rb +68 -0
  382. data/lib/puppet/vendor/rgen/lib/rgen/util/model_comparator_base.rb +142 -0
  383. data/lib/puppet/vendor/rgen/lib/rgen/util/model_dumper.rb +29 -0
  384. data/lib/puppet/vendor/rgen/lib/rgen/util/name_helper.rb +42 -0
  385. data/lib/puppet/vendor/rgen/lib/rgen/util/pattern_matcher.rb +329 -0
  386. data/lib/puppet/vendor/rgen/lib/transformers/ecore_to_uml13.rb +79 -0
  387. data/lib/puppet/vendor/rgen/lib/transformers/uml13_to_ecore.rb +127 -0
  388. data/lib/puppet/vendor/rgen/test/array_extensions_test.rb +64 -0
  389. data/lib/puppet/vendor/rgen/test/ea_instantiator_test.rb +35 -0
  390. data/lib/puppet/vendor/rgen/test/ea_serializer_test.rb +23 -0
  391. data/lib/puppet/vendor/rgen/test/ecore_self_test.rb +54 -0
  392. data/lib/puppet/vendor/rgen/test/environment_test.rb +90 -0
  393. data/lib/puppet/vendor/rgen/test/json_test.rb +171 -0
  394. data/lib/puppet/vendor/rgen/test/metamodel_builder_test.rb +1482 -0
  395. data/lib/puppet/vendor/rgen/test/metamodel_from_ecore_test.rb +57 -0
  396. data/lib/puppet/vendor/rgen/test/metamodel_order_test.rb +131 -0
  397. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test.rb +98 -0
  398. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/TestModel.rb +70 -0
  399. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/houseMetamodel.ecore +42 -0
  400. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/houseMetamodel_from_ecore.rb +44 -0
  401. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/using_builtin_types.ecore +9 -0
  402. data/lib/puppet/vendor/rgen/test/method_delegation_test.rb +178 -0
  403. data/lib/puppet/vendor/rgen/test/model_builder/builder_context_test.rb +59 -0
  404. data/lib/puppet/vendor/rgen/test/model_builder/builder_test.rb +242 -0
  405. data/lib/puppet/vendor/rgen/test/model_builder/ecore_original.rb +163 -0
  406. data/lib/puppet/vendor/rgen/test/model_builder/ecore_original_regenerated.rb +163 -0
  407. data/lib/puppet/vendor/rgen/test/model_builder/reference_resolver_test.rb +156 -0
  408. data/lib/puppet/vendor/rgen/test/model_builder/serializer_test.rb +94 -0
  409. data/lib/puppet/vendor/rgen/test/model_builder/statemachine_metamodel.rb +42 -0
  410. data/lib/puppet/vendor/rgen/test/model_builder/test_model/statemachine1.rb +23 -0
  411. data/lib/puppet/vendor/rgen/test/model_builder_test.rb +6 -0
  412. data/lib/puppet/vendor/rgen/test/model_fragment_test.rb +30 -0
  413. data/lib/puppet/vendor/rgen/test/output_handler_test.rb +58 -0
  414. data/lib/puppet/vendor/rgen/test/qualified_name_provider_test.rb +48 -0
  415. data/lib/puppet/vendor/rgen/test/qualified_name_resolver_test.rb +102 -0
  416. data/lib/puppet/vendor/rgen/test/reference_resolver_test.rb +117 -0
  417. data/lib/puppet/vendor/rgen/test/rgen_test.rb +26 -0
  418. data/lib/puppet/vendor/rgen/test/template_language_test.rb +163 -0
  419. data/lib/puppet/vendor/rgen/test/template_language_test/expected_result1.txt +29 -0
  420. data/lib/puppet/vendor/rgen/test/template_language_test/expected_result2.txt +9 -0
  421. data/lib/puppet/vendor/rgen/test/template_language_test/expected_result3.txt +4 -0
  422. data/lib/puppet/vendor/rgen/test/template_language_test/indentStringTestDefaultIndent.out +1 -0
  423. data/lib/puppet/vendor/rgen/test/template_language_test/indentStringTestTabIndent.out +1 -0
  424. data/lib/puppet/vendor/rgen/test/template_language_test/templates/callback_indent_test/a.tpl +12 -0
  425. data/lib/puppet/vendor/rgen/test/template_language_test/templates/callback_indent_test/b.tpl +5 -0
  426. data/lib/puppet/vendor/rgen/test/template_language_test/templates/code/array.tpl +11 -0
  427. data/lib/puppet/vendor/rgen/test/template_language_test/templates/content/author.tpl +7 -0
  428. data/lib/puppet/vendor/rgen/test/template_language_test/templates/content/chapter.tpl +5 -0
  429. data/lib/puppet/vendor/rgen/test/template_language_test/templates/define_local_test/local.tpl +8 -0
  430. data/lib/puppet/vendor/rgen/test/template_language_test/templates/define_local_test/test.tpl +8 -0
  431. data/lib/puppet/vendor/rgen/test/template_language_test/templates/evaluate_test/test.tpl +7 -0
  432. data/lib/puppet/vendor/rgen/test/template_language_test/templates/indent_string_test.tpl +12 -0
  433. data/lib/puppet/vendor/rgen/test/template_language_test/templates/index/c/cmod.tpl +1 -0
  434. data/lib/puppet/vendor/rgen/test/template_language_test/templates/index/chapter.tpl +3 -0
  435. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_backslash_r_test.tpl +5 -0
  436. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/no_indent.tpl +3 -0
  437. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/sub1/no_indent.tpl +3 -0
  438. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test.tpl +24 -0
  439. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test2.tpl +13 -0
  440. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test3.tpl +10 -0
  441. data/lib/puppet/vendor/rgen/test/template_language_test/templates/null_context_test.tpl +17 -0
  442. data/lib/puppet/vendor/rgen/test/template_language_test/templates/root.tpl +31 -0
  443. data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/sub1.tpl +9 -0
  444. data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/sub1/sub1.tpl +3 -0
  445. data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/test.tpl +4 -0
  446. data/lib/puppet/vendor/rgen/test/template_language_test/testout.txt +29 -0
  447. data/lib/puppet/vendor/rgen/test/testmodel/class_model_checker.rb +119 -0
  448. data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel.eap +0 -0
  449. data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel.xml +1029 -0
  450. data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel_partial.xml +317 -0
  451. data/lib/puppet/vendor/rgen/test/testmodel/ecore_model_checker.rb +101 -0
  452. data/lib/puppet/vendor/rgen/test/testmodel/manual_testmodel.xml +22 -0
  453. data/lib/puppet/vendor/rgen/test/testmodel/object_model_checker.rb +67 -0
  454. data/lib/puppet/vendor/rgen/test/transformer_test.rb +254 -0
  455. data/lib/puppet/vendor/rgen/test/util/file_cache_map_test.rb +99 -0
  456. data/lib/puppet/vendor/rgen/test/util/pattern_matcher_test.rb +97 -0
  457. data/lib/puppet/vendor/rgen/test/util_test.rb +5 -0
  458. data/lib/puppet/vendor/rgen/test/xml_instantiator_test.rb +160 -0
  459. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_ecore_model_checker.rb +94 -0
  460. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_ecore_instantiator.rb +53 -0
  461. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_metamodel.rb +49 -0
  462. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_to_ecore.rb +75 -0
  463. data/lib/puppet/vendor/safe_yaml/PUPPET_README.md +6 -0
  464. data/lib/puppet/vendor/semantic/PUPPET_README.md +6 -0
  465. data/lib/puppet/version.rb +1 -1
  466. data/spec/fixtures/integration/node/environment/sitedir2/00_a.pp +2 -0
  467. data/spec/fixtures/integration/node/environment/sitedir2/02_folder/01_b.pp +6 -0
  468. data/spec/fixtures/integration/node/environment/sitedir2/03_c.pp +1 -0
  469. data/spec/fixtures/integration/node/environment/sitedir2/04_include.pp +2 -0
  470. data/spec/fixtures/releases/jamtur01-apache/manifests/vhost.pp +1 -1
  471. data/spec/fixtures/unit/indirector/hiera/global.yaml +10 -0
  472. data/spec/fixtures/unit/indirector/hiera/invalid.yaml +1 -0
  473. data/spec/fixtures/unit/parser/functions/create_resources/foo/manifests/init.pp +3 -0
  474. data/spec/fixtures/unit/parser/functions/create_resources/foo/manifests/wrongdefine.pp +3 -0
  475. data/spec/fixtures/unit/parser/lexer/argumentdefaults.pp +2 -2
  476. data/spec/fixtures/unit/parser/lexer/casestatement.pp +14 -14
  477. data/spec/fixtures/unit/parser/lexer/classheirarchy.pp +3 -3
  478. data/spec/fixtures/unit/parser/lexer/classincludes.pp +3 -3
  479. data/spec/fixtures/unit/parser/lexer/classpathtest.pp +1 -1
  480. data/spec/fixtures/unit/parser/lexer/collection_override.pp +1 -1
  481. data/spec/fixtures/unit/parser/lexer/componentrequire.pp +2 -2
  482. data/spec/fixtures/unit/parser/lexer/deepclassheirarchy.pp +5 -5
  483. data/spec/fixtures/unit/parser/lexer/defineoverrides.pp +2 -2
  484. data/spec/fixtures/unit/parser/lexer/filecreate.pp +2 -2
  485. data/spec/fixtures/unit/parser/lexer/ifexpression.pp +1 -1
  486. data/spec/fixtures/unit/parser/lexer/implicititeration.pp +4 -4
  487. data/spec/fixtures/unit/parser/lexer/multipleinstances.pp +3 -3
  488. data/spec/fixtures/unit/parser/lexer/multisubs.pp +2 -2
  489. data/spec/fixtures/unit/parser/lexer/namevartest.pp +2 -2
  490. data/spec/fixtures/unit/parser/lexer/simpledefaults.pp +1 -1
  491. data/spec/fixtures/unit/pops/parser/lexer/argumentdefaults.pp +1 -1
  492. data/spec/fixtures/unit/pops/parser/lexer/casestatement.pp +14 -14
  493. data/spec/fixtures/unit/pops/parser/lexer/classheirarchy.pp +3 -3
  494. data/spec/fixtures/unit/pops/parser/lexer/classincludes.pp +3 -3
  495. data/spec/fixtures/unit/pops/parser/lexer/classpathtest.pp +1 -1
  496. data/spec/fixtures/unit/pops/parser/lexer/collection_override.pp +1 -1
  497. data/spec/fixtures/unit/pops/parser/lexer/componentrequire.pp +2 -2
  498. data/spec/fixtures/unit/pops/parser/lexer/deepclassheirarchy.pp +5 -5
  499. data/spec/fixtures/unit/pops/parser/lexer/defineoverrides.pp +2 -2
  500. data/spec/fixtures/unit/pops/parser/lexer/filecreate.pp +2 -2
  501. data/spec/fixtures/unit/pops/parser/lexer/ifexpression.pp +1 -1
  502. data/spec/fixtures/unit/pops/parser/lexer/implicititeration.pp +4 -4
  503. data/spec/fixtures/unit/pops/parser/lexer/multipleinstances.pp +3 -3
  504. data/spec/fixtures/unit/pops/parser/lexer/multisubs.pp +2 -2
  505. data/spec/fixtures/unit/pops/parser/lexer/namevartest.pp +2 -2
  506. data/spec/fixtures/unit/pops/parser/lexer/simpledefaults.pp +1 -1
  507. data/spec/fixtures/unit/provider/package/gem/gem-list-single-package +4 -0
  508. data/spec/fixtures/unit/type/user/authorized_keys +1 -1
  509. data/spec/integration/agent/logging_spec.rb +4 -0
  510. data/spec/integration/application/doc_spec.rb +4 -3
  511. data/spec/integration/configurer_spec.rb +0 -14
  512. data/spec/integration/defaults_spec.rb +26 -0
  513. data/spec/integration/environments/default_manifest_spec.rb +274 -0
  514. data/spec/integration/faces/documentation_spec.rb +0 -4
  515. data/spec/integration/file_bucket/file_spec.rb +21 -0
  516. data/spec/integration/indirector/catalog/compiler_spec.rb +0 -2
  517. data/spec/integration/indirector/catalog/queue_spec.rb +0 -2
  518. data/spec/integration/indirector/facts/facter_spec.rb +1 -1
  519. data/spec/integration/indirector/file_content/file_server_spec.rb +2 -2
  520. data/spec/integration/node/environment_spec.rb +24 -8
  521. data/spec/integration/parser/catalog_spec.rb +10 -10
  522. data/spec/integration/parser/class_spec.rb +37 -0
  523. data/spec/integration/parser/collector_spec.rb +234 -75
  524. data/spec/integration/parser/compiler_spec.rb +385 -401
  525. data/spec/integration/parser/conditionals_spec.rb +117 -0
  526. data/spec/integration/parser/future_compiler_spec.rb +359 -8
  527. data/spec/integration/parser/node_spec.rb +185 -0
  528. data/spec/integration/parser/resource_expressions_spec.rb +286 -0
  529. data/spec/integration/parser/ruby_manifest_spec.rb +0 -4
  530. data/spec/integration/parser/scope_spec.rb +94 -151
  531. data/spec/integration/provider/cron/crontab_spec.rb +137 -148
  532. data/spec/integration/ssl/certificate_authority_spec.rb +26 -0
  533. data/spec/integration/ssl/certificate_request_spec.rb +0 -6
  534. data/spec/integration/ssl/certificate_revocation_list_spec.rb +0 -2
  535. data/spec/integration/ssl/host_spec.rb +0 -2
  536. data/spec/integration/transaction_spec.rb +16 -0
  537. data/spec/integration/type/file_spec.rb +14 -13
  538. data/spec/integration/type/nagios_spec.rb +6 -15
  539. data/spec/integration/type/sshkey_spec.rb +22 -0
  540. data/spec/integration/type/tidy_spec.rb +3 -0
  541. data/spec/integration/type/user_spec.rb +8 -3
  542. data/spec/integration/util/autoload_spec.rb +6 -6
  543. data/spec/integration/util/rdoc/parser_spec.rb +7 -0
  544. data/spec/integration/util/windows/process_spec.rb +12 -0
  545. data/spec/integration/util/windows/security_spec.rb +36 -35
  546. data/spec/integration/util/windows/user_spec.rb +75 -9
  547. data/spec/integration/util_spec.rb +2 -2
  548. data/spec/lib/matchers/resource.rb +1 -0
  549. data/spec/lib/puppet_spec/compiler.rb +15 -2
  550. data/spec/lib/puppet_spec/files.rb +10 -0
  551. data/spec/lib/puppet_spec/language.rb +74 -0
  552. data/spec/lib/puppet_spec/matchers.rb +59 -32
  553. data/spec/lib/puppet_spec/module_tool/stub_source.rb +3 -0
  554. data/spec/shared_behaviours/hiera_indirections.rb +99 -0
  555. data/spec/shared_behaviours/iterative_functions.rb +69 -0
  556. data/spec/unit/application/apply_spec.rb +4 -2
  557. data/spec/unit/application/doc_spec.rb +17 -13
  558. data/spec/unit/application/master_spec.rb +35 -27
  559. data/spec/unit/application/resource_spec.rb +0 -5
  560. data/spec/unit/configurer/downloader_factory_spec.rb +96 -0
  561. data/spec/unit/configurer/downloader_spec.rb +3 -24
  562. data/spec/unit/configurer/plugin_handler_spec.rb +22 -22
  563. data/spec/unit/configurer_spec.rb +0 -4
  564. data/spec/unit/defaults_spec.rb +30 -0
  565. data/spec/unit/face/config_spec.rb +2 -1
  566. data/spec/unit/face/module/build_spec.rb +2 -2
  567. data/spec/unit/face/module/install_spec.rb +8 -8
  568. data/spec/unit/face/parser_spec.rb +71 -33
  569. data/spec/unit/file_bucket/file_spec.rb +2 -2
  570. data/spec/unit/file_system/uniquefile_spec.rb +184 -0
  571. data/spec/unit/forge/errors_spec.rb +4 -6
  572. data/spec/unit/forge/module_release_spec.rb +178 -89
  573. data/spec/unit/forge/repository_spec.rb +110 -2
  574. data/spec/unit/forge_spec.rb +39 -3
  575. data/spec/unit/functions/assert_type_spec.rb +22 -3
  576. data/spec/unit/{parser/methods → functions}/each_spec.rb +21 -1
  577. data/spec/unit/{parser/functions → functions}/epp_spec.rb +61 -9
  578. data/spec/unit/{parser/methods → functions}/filter_spec.rb +34 -38
  579. data/spec/unit/{parser/functions → functions}/inline_epp_spec.rb +18 -3
  580. data/spec/unit/functions/map_spec.rb +169 -0
  581. data/spec/unit/functions/match_spec.rb +57 -0
  582. data/spec/unit/{parser/methods → functions}/reduce_spec.rb +23 -5
  583. data/spec/unit/{parser/methods → functions}/slice_spec.rb +34 -21
  584. data/spec/unit/functions/with_spec.rb +35 -0
  585. data/spec/unit/functions4_spec.rb +7 -8
  586. data/spec/unit/indirector/catalog/compiler_spec.rb +0 -2
  587. data/spec/unit/indirector/catalog/static_compiler_spec.rb +11 -0
  588. data/spec/unit/indirector/data_binding/hiera_spec.rb +1 -96
  589. data/spec/unit/indirector/facts/facter_spec.rb +69 -102
  590. data/spec/unit/indirector/hiera_spec.rb +17 -0
  591. data/spec/unit/indirector/request_spec.rb +2 -4
  592. data/spec/unit/indirector/resource/ral_spec.rb +5 -0
  593. data/spec/unit/indirector/resource_type/parser_spec.rb +17 -12
  594. data/spec/unit/indirector/rest_spec.rb +36 -6
  595. data/spec/unit/interface/face_collection_spec.rb +2 -2
  596. data/spec/unit/module_tool/applications/builder_spec.rb +364 -14
  597. data/spec/unit/module_tool/applications/uninstaller_spec.rb +22 -0
  598. data/spec/unit/module_tool/applications/unpacker_spec.rb +40 -0
  599. data/spec/unit/module_tool/applications/upgrader_spec.rb +22 -0
  600. data/spec/unit/module_tool/installed_modules_spec.rb +49 -0
  601. data/spec/unit/module_tool/metadata_spec.rb +72 -4
  602. data/spec/unit/module_tool/tar/mini_spec.rb +2 -1
  603. data/spec/unit/network/authentication_spec.rb +4 -0
  604. data/spec/unit/network/http/api/v2/environments_spec.rb +24 -3
  605. data/spec/unit/network/http/connection_spec.rb +127 -92
  606. data/spec/unit/network/http/factory_spec.rb +82 -0
  607. data/spec/unit/network/http/handler_spec.rb +23 -13
  608. data/spec/unit/network/http/nocache_pool_spec.rb +43 -0
  609. data/spec/unit/network/http/pool_spec.rb +269 -0
  610. data/spec/unit/network/http/rack/rest_spec.rb +1 -1
  611. data/spec/unit/network/http/session_spec.rb +43 -0
  612. data/spec/unit/network/http/site_spec.rb +90 -0
  613. data/spec/unit/network/http/webrick_spec.rb +1 -1
  614. data/spec/unit/network/http_pool_spec.rb +9 -6
  615. data/spec/unit/network/http_spec.rb +10 -0
  616. data/spec/unit/node/environment_spec.rb +54 -0
  617. data/spec/unit/node_spec.rb +3 -5
  618. data/spec/unit/parser/compiler_spec.rb +9 -2
  619. data/spec/unit/parser/files_spec.rb +19 -0
  620. data/spec/unit/parser/functions/contain_spec.rb +51 -0
  621. data/spec/unit/parser/functions/create_resources_spec.rb +8 -1
  622. data/spec/unit/parser/functions/digest_spec.rb +31 -0
  623. data/spec/unit/parser/functions/file_spec.rb +48 -5
  624. data/spec/unit/parser/functions/include_spec.rb +15 -1
  625. data/spec/unit/parser/functions/realize_spec.rb +43 -35
  626. data/spec/unit/parser/functions/require_spec.rb +19 -5
  627. data/spec/unit/parser/functions/search_spec.rb +5 -0
  628. data/spec/unit/parser/functions/shared.rb +82 -0
  629. data/spec/unit/parser/functions_spec.rb +1 -1
  630. data/spec/unit/parser/lexer_spec.rb +10 -1
  631. data/spec/unit/parser/type_loader_spec.rb +0 -1
  632. data/spec/unit/pops/benchmark_spec.rb +1 -1
  633. data/spec/unit/pops/binder/bindings_composer_spec.rb +24 -22
  634. data/spec/unit/pops/binder/injector_spec.rb +8 -6
  635. data/spec/unit/pops/evaluator/access_ops_spec.rb +3 -3
  636. data/spec/unit/pops/evaluator/comparison_ops_spec.rb +7 -4
  637. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +250 -30
  638. data/spec/unit/pops/evaluator/logical_ops_spec.rb +2 -2
  639. data/spec/unit/pops/evaluator/variables_spec.rb +0 -105
  640. data/spec/unit/pops/issues_spec.rb +170 -0
  641. data/spec/unit/pops/loaders/dependency_loader_spec.rb +17 -0
  642. data/spec/unit/pops/loaders/loader_paths_spec.rb +4 -15
  643. data/spec/unit/pops/loaders/loaders_spec.rb +31 -11
  644. data/spec/unit/pops/loaders/module_loaders_spec.rb +0 -29
  645. data/spec/unit/pops/loaders/static_loader_spec.rb +6 -0
  646. data/spec/unit/pops/parser/epp_parser_spec.rb +38 -9
  647. data/spec/unit/pops/parser/evaluating_parser_spec.rb +0 -1
  648. data/spec/unit/pops/parser/lexer2_spec.rb +21 -4
  649. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +5 -0
  650. data/spec/unit/pops/parser/parse_calls_spec.rb +6 -3
  651. data/spec/unit/pops/parser/parse_conditionals_spec.rb +12 -5
  652. data/spec/unit/pops/parser/parse_containers_spec.rb +62 -7
  653. data/spec/unit/pops/parser/parse_resource_spec.rb +155 -73
  654. data/spec/unit/pops/parser/parser_spec.rb +16 -0
  655. data/spec/unit/pops/parser/parsing_typed_parameters_spec.rb +72 -0
  656. data/spec/unit/pops/transformer/transform_calls_spec.rb +1 -1
  657. data/spec/unit/pops/types/type_calculator_spec.rb +254 -57
  658. data/spec/unit/pops/types/type_factory_spec.rb +8 -3
  659. data/spec/unit/pops/types/type_parser_spec.rb +26 -5
  660. data/spec/unit/pops/validator/validator_spec.rb +143 -27
  661. data/spec/unit/provider/exec/posix_spec.rb +22 -14
  662. data/spec/unit/provider/exec/shell_spec.rb +2 -2
  663. data/spec/unit/provider/file/windows_spec.rb +7 -7
  664. data/spec/unit/provider/group/windows_adsi_spec.rb +17 -17
  665. data/spec/unit/provider/package/gem_spec.rb +10 -0
  666. data/spec/unit/provider/package/openbsd_spec.rb +66 -9
  667. data/spec/unit/provider/package/pacman_spec.rb +90 -71
  668. data/spec/unit/provider/package/windows/package_spec.rb +21 -6
  669. data/spec/unit/provider/package/yum_spec.rb +1 -0
  670. data/spec/unit/provider/parsedfile_spec.rb +1 -1
  671. data/spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb +9 -9
  672. data/spec/unit/provider/service/openbsd_spec.rb +26 -2
  673. data/spec/unit/provider/service/upstart_spec.rb +12 -1
  674. data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +6 -0
  675. data/spec/unit/provider/user/user_role_add_spec.rb +23 -1
  676. data/spec/unit/provider/user/windows_adsi_spec.rb +17 -17
  677. data/spec/unit/reports/store_spec.rb +0 -16
  678. data/spec/unit/resource/catalog_spec.rb +0 -5
  679. data/spec/unit/resource_spec.rb +2 -2
  680. data/spec/unit/settings/autosign_setting_spec.rb +2 -2
  681. data/spec/unit/settings/environment_conf_spec.rb +77 -10
  682. data/spec/unit/settings/file_setting_spec.rb +5 -4
  683. data/spec/unit/settings/priority_setting_spec.rb +4 -4
  684. data/spec/unit/settings_spec.rb +41 -3
  685. data/spec/unit/ssl/certificate_authority_spec.rb +25 -2
  686. data/spec/unit/ssl/inventory_spec.rb +13 -0
  687. data/spec/unit/ssl/validator_spec.rb +0 -1
  688. data/spec/unit/transaction/resource_harness_spec.rb +64 -0
  689. data/spec/unit/transaction_spec.rb +98 -47
  690. data/spec/unit/type/cron_spec.rb +3 -3
  691. data/spec/unit/type/exec_spec.rb +9 -0
  692. data/spec/unit/type/file/content_spec.rb +54 -71
  693. data/spec/unit/type/file/mode_spec.rb +26 -1
  694. data/spec/unit/type/file/source_spec.rb +26 -4
  695. data/spec/unit/type/file_spec.rb +3 -3
  696. data/spec/unit/type/nagios_spec.rb +12 -3
  697. data/spec/unit/type/resources_spec.rb +64 -30
  698. data/spec/unit/type/user_spec.rb +1 -1
  699. data/spec/unit/type/yumrepo_spec.rb +136 -0
  700. data/spec/unit/type/zone_spec.rb +44 -1
  701. data/spec/unit/type_spec.rb +20 -0
  702. data/spec/unit/util/colors_spec.rb +14 -8
  703. data/spec/unit/util/command_line_spec.rb +11 -7
  704. data/spec/unit/util/execution_spec.rb +35 -42
  705. data/spec/unit/util/feature_spec.rb +12 -0
  706. data/spec/unit/util/http_proxy_spec.rb +43 -1
  707. data/spec/unit/util/log/destinations_spec.rb +45 -1
  708. data/spec/unit/util/logging_spec.rb +38 -0
  709. data/spec/unit/util/pidlock_spec.rb +37 -1
  710. data/spec/unit/util/profiler/aggregate_spec.rb +59 -0
  711. data/spec/unit/util/profiler/around_profiler_spec.rb +61 -0
  712. data/spec/unit/util/profiler/logging_spec.rb +18 -29
  713. data/spec/unit/util/profiler/wall_clock_spec.rb +1 -1
  714. data/spec/unit/util/profiler_spec.rb +55 -0
  715. data/spec/unit/util/queue_spec.rb +0 -1
  716. data/spec/unit/util/rdoc/parser_spec.rb +14 -6
  717. data/spec/unit/util/tagging_spec.rb +1 -1
  718. data/spec/unit/util/windows/access_control_entry_spec.rb +1 -1
  719. data/spec/unit/util/{adsi_spec.rb → windows/adsi_spec.rb} +111 -108
  720. data/spec/unit/util/windows/api_types_spec.rb +28 -0
  721. data/spec/unit/util/windows/registry_spec.rb +7 -6
  722. data/spec/unit/util/windows/sid_spec.rb +3 -6
  723. data/spec/unit/util/windows/string_spec.rb +4 -0
  724. data/spec/unit/util/zaml_spec.rb +5 -1
  725. data/tasks/benchmark.rake +40 -5
  726. data/tasks/parser.rake +16 -2
  727. data/tasks/yard.rake +1 -1
  728. metadata +296 -68
  729. data/lib/puppet/file_system/tempfile.rb +0 -20
  730. data/lib/puppet/parser/e_parser_adapter.rb +0 -119
  731. data/lib/puppet/parser/functions/collect.rb +0 -15
  732. data/lib/puppet/parser/functions/select.rb +0 -15
  733. data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +0 -109
  734. data/lib/puppet/pops/parser/lexer.rb +0 -753
  735. data/lib/puppet/pops/parser/makefile +0 -6
  736. data/lib/puppet/pops/validation/checker3_1.rb +0 -558
  737. data/lib/puppet/pops/validation/validator_factory_3_1.rb +0 -31
  738. data/lib/puppet/util/profiler/none.rb +0 -8
  739. data/spec/unit/face/certificate_request_spec.rb +0 -7
  740. data/spec/unit/face/certificate_revocation_list_spec.rb +0 -7
  741. data/spec/unit/face/key_spec.rb +0 -7
  742. data/spec/unit/face/report_spec.rb +0 -7
  743. data/spec/unit/face/resource_spec.rb +0 -7
  744. data/spec/unit/face/resource_type_spec.rb +0 -7
  745. data/spec/unit/file_system/tempfile_spec.rb +0 -48
  746. data/spec/unit/parser/eparser_adapter_spec.rb +0 -407
  747. data/spec/unit/parser/methods/map_spec.rb +0 -184
  748. data/spec/unit/parser/methods/shared.rb +0 -45
  749. data/spec/unit/pops/parser/lexer_spec.rb +0 -840
  750. data/spec/unit/pops/transformer/transform_resource_spec.rb +0 -185
  751. data/spec/unit/util/profiler/none_spec.rb +0 -12
@@ -110,6 +110,10 @@ class Puppet::Pops::Model::ModelTreeDumper < Puppet::Pops::Model::TreeDumper
110
110
  [o.attribute_name, o.operator, do_dump(o.value_expr)]
111
111
  end
112
112
 
113
+ def dump_AttributesOperation o
114
+ ['* =>', do_dump(o.expr)]
115
+ end
116
+
113
117
  def dump_LiteralList o
114
118
  ["[]"] + o.values.collect {|x| do_dump(x)}
115
119
  end
@@ -182,8 +186,15 @@ class Puppet::Pops::Model::ModelTreeDumper < Puppet::Pops::Model::TreeDumper
182
186
  ['-', do_dump(o.expr)]
183
187
  end
184
188
 
189
+ def dump_UnfoldExpression o
190
+ ['unfold', do_dump(o.expr)]
191
+ end
192
+
185
193
  def dump_BlockExpression o
186
- ["block"] + o.statements.collect {|x| do_dump(x) }
194
+ result = ["block", :indent]
195
+ o.statements.each {|x| result << :break; result << do_dump(x) }
196
+ result << :dedent << :break
197
+ result
187
198
  end
188
199
 
189
200
  # Interpolated strings are shown as (cat seg0 seg1 ... segN)
@@ -238,7 +249,8 @@ class Puppet::Pops::Model::ModelTreeDumper < Puppet::Pops::Model::TreeDumper
238
249
  end
239
250
 
240
251
  def dump_ResourceOverrideExpression o
241
- result = ["override", do_dump(o.resources), :indent]
252
+ form = o.form == :regular ? '' : o.form.to_s + "-"
253
+ result = [form+"override", do_dump(o.resources), :indent]
242
254
  o.operations.each do |p|
243
255
  result << :break << do_dump(p)
244
256
  end
@@ -246,11 +258,20 @@ class Puppet::Pops::Model::ModelTreeDumper < Puppet::Pops::Model::TreeDumper
246
258
  result
247
259
  end
248
260
 
261
+ def dump_ReservedWord o
262
+ [ 'reserved', o.word ]
263
+ end
264
+
249
265
  # Produces parameters as name, or (= name value)
250
266
  def dump_Parameter o
251
- name_part = "#{o.name}"
252
- if o.value
267
+ name_prefix = o.captures_rest ? '*' : ''
268
+ name_part = "#{name_prefix}#{o.name}"
269
+ if o.value && o.type_expr
270
+ ["=t", do_dump(o.type_expr), name_part, do_dump(o.value)]
271
+ elsif o.value
253
272
  ["=", name_part, do_dump(o.value)]
273
+ elsif o.type_expr
274
+ ["t", do_dump(o.type_expr), name_part]
254
275
  else
255
276
  name_part
256
277
  end
@@ -345,7 +366,8 @@ class Puppet::Pops::Model::ModelTreeDumper < Puppet::Pops::Model::TreeDumper
345
366
  end
346
367
 
347
368
  def dump_ResourceDefaultsExpression o
348
- result = ["resource-defaults", do_dump(o.type_ref), :indent]
369
+ form = o.form == :regular ? '' : o.form.to_s + "-"
370
+ result = [form+"resource-defaults", do_dump(o.type_ref), :indent]
349
371
  o.operations.each do |p|
350
372
  result << :break << do_dump(p)
351
373
  end
@@ -20,6 +20,7 @@ token NUMBER
20
20
  token HEREDOC SUBLOCATE
21
21
  token RENDER_STRING RENDER_EXPR EPP_START EPP_END EPP_END_TRIM
22
22
  token FUNCTION
23
+ token PRIVATE ATTR TYPE
23
24
  token LOW
24
25
 
25
26
  prechigh
@@ -28,15 +29,14 @@ prechigh
28
29
  left PIPE
29
30
  left LPAREN
30
31
  left RPAREN
31
- left AT ATAT
32
32
  left DOT
33
- left CALL
34
33
  nonassoc EPP_START
35
34
  left LBRACK LISTSTART
36
35
  left RBRACK
37
36
  left QMARK
38
37
  left LCOLLECT LLCOLLECT
39
38
  right NOT
39
+ nonassoc SPLAT
40
40
  nonassoc UMINUS
41
41
  left IN
42
42
  left MATCH NOMATCH
@@ -47,13 +47,12 @@ prechigh
47
47
  left GREATEREQUAL GREATERTHAN LESSTHAN LESSEQUAL
48
48
  left AND
49
49
  left OR
50
- right APPENDS DELETES EQUALS
51
50
  left LBRACE
52
51
  left SELBRACE
53
52
  left RBRACE
53
+ right AT ATAT
54
+ right APPENDS DELETES EQUALS
54
55
  left IN_EDGE OUT_EDGE IN_EDGE_SUB OUT_EDGE_SUB
55
- left TITLE_COLON
56
- left CASE_COLON
57
56
  left FARROW
58
57
  left COMMA
59
58
  nonassoc RENDER_EXPR
@@ -62,44 +61,137 @@ prechigh
62
61
  preclow
63
62
 
64
63
  rule
65
- # Produces [Model::BlockExpression, Model::Expression, nil] depending on multiple statements, single statement or empty
64
+ # Produces [Model::Program] with a body containing what was parsed
66
65
  program
67
- : statements { result = create_program(Factory.block_or_expression(*val[0])) }
66
+ : statements { result = create_program(Factory.block_or_expression(*val[0])) }
68
67
  | epp_expression { result = create_program(Factory.block_or_expression(*val[0])) }
69
- | nil
68
+ | { result = create_empty_program() }
70
69
 
71
70
  # Produces a semantic model (non validated, but semantically adjusted).
72
71
  statements
73
72
  : syntactic_statements { result = transform_calls(val[0]) }
74
73
 
75
- # Change may have issues with nil; i.e. program is a sequence of nils/nops
76
- # Simplified from original which had validation for top level constructs - see statement rule
74
+ # Collects sequence of elements into a list that the statements rule can transform
75
+ # (Needed because language supports function calls without parentheses around arguments).
77
76
  # Produces Array<Model::Expression>
77
+ #
78
78
  syntactic_statements
79
79
  : syntactic_statement { result = [val[0]]}
80
80
  | syntactic_statements SEMIC syntactic_statement { result = val[0].push val[2] }
81
81
  | syntactic_statements syntactic_statement { result = val[0].push val[1] }
82
82
 
83
83
  # Produce a single expression or Array of expression
84
+ # This exists to handle multiple arguments to non parenthesized function call. If e is expression,
85
+ # the a program can consists of e [e,e,e] where the first may be a name of a function to call.
86
+ #
84
87
  syntactic_statement
85
- : any_expression { result = val[0] }
86
- | syntactic_statement COMMA any_expression { result = aryfy(val[0]).push val[2] }
88
+ : assignment =LOW { result = val[0] }
89
+ | syntactic_statement COMMA assignment =LOW { result = aryfy(val[0]).push val[2] }
90
+
91
+ # Assignment (is right recursive since assignment is right associative)
92
+ assignment
93
+ : relationship =LOW
94
+ | relationship EQUALS assignment { result = val[0].set(val[2]) ; loc result, val[1] }
95
+ | relationship APPENDS assignment { result = val[0].plus_set(val[2]) ; loc result, val[1] }
96
+ | relationship DELETES assignment { result = val[0].minus_set(val[2]); loc result, val[1] }
97
+
98
+ assignments
99
+ : assignment { result = [val[0]] }
100
+ | assignments COMMA assignment { result = val[0].push(val[2]) }
101
+
102
+ relationship
103
+ : resource =LOW
104
+ | relationship IN_EDGE resource { result = val[0].relop(val[1][:value], val[2]); loc result, val[1] }
105
+ | relationship IN_EDGE_SUB resource { result = val[0].relop(val[1][:value], val[2]); loc result, val[1] }
106
+ | relationship OUT_EDGE resource { result = val[0].relop(val[1][:value], val[2]); loc result, val[1] }
107
+ | relationship OUT_EDGE_SUB resource { result = val[0].relop(val[1][:value], val[2]); loc result, val[1] }
108
+
109
+ #-- RESOURCE
110
+ #
111
+ resource
112
+ : expression = LOW
87
113
 
88
- any_expression
89
- : relationship_expression
114
+ #---VIRTUAL
115
+ | AT resource {
116
+ result = val[1]
117
+ unless Factory.set_resource_form(result, :virtual)
118
+ # This is equivalent to a syntax error - additional semantic restrictions apply
119
+ error val[0], "Virtual (@) can only be applied to a Resource Expression"
120
+ end
121
+ # relocate the result
122
+ loc result, val[0], val[1]
123
+ }
90
124
 
91
- relationship_expression
92
- : resource_expression =LOW { result = val[0] }
93
- | relationship_expression IN_EDGE relationship_expression { result = val[0].relop(val[1][:value], val[2]); loc result, val[1] }
94
- | relationship_expression IN_EDGE_SUB relationship_expression { result = val[0].relop(val[1][:value], val[2]); loc result, val[1] }
95
- | relationship_expression OUT_EDGE relationship_expression { result = val[0].relop(val[1][:value], val[2]); loc result, val[1] }
96
- | relationship_expression OUT_EDGE_SUB relationship_expression { result = val[0].relop(val[1][:value], val[2]); loc result, val[1] }
125
+ #---EXPORTED
126
+ | ATAT resource {
127
+ result = val[1]
128
+ unless Factory.set_resource_form(result, :exported)
129
+ # This is equivalent to a syntax error - additional semantic restrictions apply
130
+ error val[0], "Exported (@@) can only be applied to a Resource Expression"
131
+ end
132
+ # relocate the result
133
+ loc result, val[0], val[1]
134
+ }
97
135
 
98
- #---EXPRESSION
136
+ #---RESOURCE TITLED 3x and 4x
137
+ | resource LBRACE expression COLON attribute_operations additional_resource_bodies RBRACE {
138
+ bodies = [Factory.RESOURCE_BODY(val[2], val[4])] + val[5]
139
+ result = Factory.RESOURCE(val[0], bodies)
140
+ loc result, val[0], val[6]
141
+ }
142
+
143
+ #---CLASS RESOURCE
144
+ | CLASS LBRACE resource_bodies endsemi RBRACE {
145
+ result = Factory.RESOURCE(Factory.fqn(token_text(val[0])), val[2])
146
+ loc result, val[0], val[4]
147
+ }
148
+
149
+ # --RESOURCE 3X Expression
150
+ # Handles both 3x overrides and defaults (i.e. single resource_body without title colon)
151
+ # Slated for possible deprecation since it requires transformation and mix static/evaluation check
152
+ #
153
+ | resource LBRACE attribute_operations endcomma RBRACE {
154
+ result = case Factory.resource_shape(val[0])
155
+ when :resource, :class
156
+ # This catches deprecated syntax.
157
+ # If the attribute operations does not include +>, then the found expression
158
+ # is actually a LEFT followed by LITERAL_HASH
159
+ #
160
+ unless tmp = transform_resource_wo_title(val[0], val[2])
161
+ error val[1], "Syntax error resource body without title or hash with +>"
162
+ end
163
+ tmp
164
+ when :defaults
165
+ Factory.RESOURCE_DEFAULTS(val[0], val[2])
166
+ when :override
167
+ # This was only done for override in original - TODO should it be here at all
168
+ Factory.RESOURCE_OVERRIDE(val[0], val[2])
169
+ else
170
+ error val[0], "Expression is not valid as a resource, resource-default, or resource-override"
171
+ end
172
+ loc result, val[0], val[4]
173
+ }
174
+
175
+ resource_body
176
+ : expression COLON attribute_operations endcomma { result = Factory.RESOURCE_BODY(val[0], val[2]) }
177
+
178
+ resource_bodies
179
+ : resource_body =HIGH { result = [val[0]] }
180
+ | resource_bodies SEMIC resource_body =HIGH { result = val[0].push val[2] }
181
+
182
+ # This is a rule for the intermediate state where RACC has seen enough tokens to understand that
183
+ # what is expressed is a Resource Expression, it now has to get to the finishing line
184
+ #
185
+ additional_resource_bodies
186
+ : endcomma { result = [] }
187
+ | endcomma SEMIC { result = [] }
188
+ | endcomma SEMIC resource_bodies endsemi { result = val[2] }
189
+
190
+ #-- EXPRESSION
99
191
  #
100
- # Produces Model::Expression
101
192
  expression
102
- : higher_precedence
193
+ : primary_expression
194
+ | call_function_expression
103
195
  | expression LBRACK expressions RBRACK =LBRACK { result = val[0][*val[2]] ; loc result, val[0], val[3] }
104
196
  | expression IN expression { result = val[0].in val[2] ; loc result, val[1] }
105
197
  | expression MATCH expression { result = val[0] =~ val[2] ; loc result, val[1] }
@@ -112,6 +204,7 @@ expression
112
204
  | expression LSHIFT expression { result = val[0] << val[2] ; loc result, val[1] }
113
205
  | expression RSHIFT expression { result = val[0] >> val[2] ; loc result, val[1] }
114
206
  | MINUS expression =UMINUS { result = val[1].minus() ; loc result, val[0] }
207
+ | TIMES expression =SPLAT { result = val[1].unfold() ; loc result, val[0] }
115
208
  | expression NOTEQUAL expression { result = val[0].ne val[2] ; loc result, val[1] }
116
209
  | expression ISEQUAL expression { result = val[0] == val[2] ; loc result, val[1] }
117
210
  | expression GREATERTHAN expression { result = val[0] > val[2] ; loc result, val[1] }
@@ -121,28 +214,22 @@ expression
121
214
  | NOT expression { result = val[1].not ; loc result, val[0] }
122
215
  | expression AND expression { result = val[0].and val[2] ; loc result, val[1] }
123
216
  | expression OR expression { result = val[0].or val[2] ; loc result, val[1] }
124
- | expression EQUALS expression { result = val[0].set(val[2]) ; loc result, val[1] }
125
- | expression APPENDS expression { result = val[0].plus_set(val[2]) ; loc result, val[1] }
126
- | expression DELETES expression { result = val[0].minus_set(val[2]); loc result, val[1] }
127
217
  | expression QMARK selector_entries { result = val[0].select(*val[2]) ; loc result, val[0] }
128
- | LPAREN expression RPAREN { result = val[1].paren() ; loc result, val[0] }
218
+ | LPAREN assignment RPAREN { result = val[1].paren() ; loc result, val[0] }
219
+
129
220
 
130
221
  #---EXPRESSIONS
131
- # (e.g. argument list)
222
+ # (i.e. "argument list")
132
223
  #
133
224
  # This expression list can not contain function calls without parentheses around arguments
134
225
  # Produces Array<Model::Expression>
226
+ #
135
227
  expressions
136
228
  : expression { result = [val[0]] }
137
229
  | expressions COMMA expression { result = val[0].push(val[2]) }
138
230
 
139
- # These go through a chain of left recursion, ending with primary_expression
140
- higher_precedence
141
- : call_function_expression
142
-
143
231
  primary_expression
144
- : literal_expression
145
- | variable
232
+ : variable
146
233
  | call_method_with_lambda_expression
147
234
  | collection_expression
148
235
  | case_expression
@@ -152,61 +239,54 @@ primary_expression
152
239
  | hostclass_expression
153
240
  | node_definition_expression
154
241
  | epp_render_expression
155
- | function_definition
156
-
157
- # Allways have the same value
158
- literal_expression
159
- : array
160
- | boolean
161
- | default
242
+ | reserved_word
243
+ | array
162
244
  | hash
163
245
  | regex
164
- | text_or_name
165
- | number
246
+ | quotedtext
166
247
  | type
167
- | undef
248
+ | NUMBER { result = Factory.NUMBER(val[0][:value]) ; loc result, val[0] }
249
+ | BOOLEAN { result = Factory.literal(val[0][:value]) ; loc result, val[0] }
250
+ | DEFAULT { result = Factory.literal(:default) ; loc result, val[0] }
251
+ | UNDEF { result = Factory.literal(:undef) ; loc result, val[0] }
252
+ | NAME { result = Factory.QNAME_OR_NUMBER(val[0][:value]) ; loc result, val[0] }
168
253
 
169
- text_or_name
170
- : name { result = val[0] }
171
- | quotedtext { result = val[0] }
172
254
 
173
255
  #---CALL FUNCTION
174
256
  #
175
257
  # Produces Model::CallNamedFunction
176
258
 
177
259
  call_function_expression
178
- : primary_expression LPAREN expressions endcomma RPAREN {
260
+ : expression LPAREN assignments endcomma RPAREN {
179
261
  result = Factory.CALL_NAMED(val[0], true, val[2])
180
262
  loc result, val[0], val[4]
181
263
  }
182
- | primary_expression LPAREN RPAREN {
264
+ | expression LPAREN RPAREN {
183
265
  result = Factory.CALL_NAMED(val[0], true, [])
184
266
  loc result, val[0], val[2]
185
267
  }
186
- | primary_expression LPAREN expressions endcomma RPAREN lambda {
268
+ | expression LPAREN assignments endcomma RPAREN lambda {
187
269
  result = Factory.CALL_NAMED(val[0], true, val[2])
188
270
  loc result, val[0], val[4]
189
271
  result.lambda = val[5]
190
272
  }
191
- | primary_expression LPAREN RPAREN lambda {
273
+ | expression LPAREN RPAREN lambda {
192
274
  result = Factory.CALL_NAMED(val[0], true, [])
193
275
  loc result, val[0], val[2]
194
276
  result.lambda = val[3]
195
277
  }
196
- | primary_expression = LOW { result = val[0] }
197
278
 
198
279
  #---CALL METHOD
199
280
  #
200
281
  call_method_with_lambda_expression
201
282
  : call_method_expression =LOW { result = val[0] }
202
- | call_method_expression lambda { result = val[0]; val[0].lambda = val[1] }
283
+ | call_method_expression lambda { result = val[0]; val[0].lambda = val[1] }
203
284
 
204
285
  call_method_expression
205
- : named_access LPAREN expressions RPAREN { result = Factory.CALL_METHOD(val[0], val[2]); loc result, val[1], val[3] }
286
+ : named_access LPAREN assignments RPAREN { result = Factory.CALL_METHOD(val[0], val[2]); loc result, val[1], val[3] }
206
287
  | named_access LPAREN RPAREN { result = Factory.CALL_METHOD(val[0], []); loc result, val[1], val[3] }
207
288
  | named_access =LOW { result = Factory.CALL_METHOD(val[0], []); loc result, val[0] }
208
289
 
209
- # TODO: It may be of value to access named elements of types too
210
290
  named_access
211
291
  : expression DOT NAME {
212
292
  result = val[0].dot(Factory.fqn(val[2][:value]))
@@ -215,31 +295,25 @@ call_method_with_lambda_expression
215
295
 
216
296
  #---LAMBDA
217
297
  #
218
- # This is a temporary switch while experimenting with concrete syntax
219
- # One should be picked for inclusion in puppet.
220
-
221
- # Lambda with parameters to the left of the body
222
298
  lambda
223
299
  : lambda_parameter_list lambda_rest {
224
- result = Factory.LAMBDA(val[0], val[1])
225
- # loc result, val[1] # TODO
300
+ result = Factory.LAMBDA(val[0][:value], val[1][:value])
301
+ loc result, val[0][:start], val[1][:end]
226
302
  }
227
303
 
228
304
  lambda_rest
229
- : LBRACE statements RBRACE { result = val[1] }
230
- | LBRACE RBRACE { result = nil }
305
+ : LBRACE statements RBRACE { result = {:end => val[2], :value =>val[1] } }
306
+ | LBRACE RBRACE { result = {:end => val[1], :value => nil } }
307
+
231
308
 
232
- # Produces Array<Model::Parameter>
233
309
  lambda_parameter_list
234
- : PIPE PIPE { result = [] }
235
- | PIPE parameters endcomma PIPE { result = val[1] }
310
+ : PIPE PIPE { result = {:start => val[0], :value => [] } }
311
+ | PIPE parameters endcomma PIPE { result = {:start => val[0], :value => val[1] } }
236
312
 
237
313
  #---CONDITIONALS
238
- #
239
314
 
240
315
  #--IF
241
316
  #
242
- # Produces Model::IfExpression
243
317
  if_expression
244
318
  : IF if_part {
245
319
  result = val[1]
@@ -274,8 +348,6 @@ if_expression
274
348
 
275
349
  #--UNLESS
276
350
  #
277
- # Changed from Puppet 3x where there is no else part on unless
278
- #
279
351
  unless_expression
280
352
  : UNLESS expression LBRACE statements RBRACE unless_else {
281
353
  result = Factory.UNLESS(val[1], Factory.block_or_expression(*val[3]), val[5])
@@ -301,7 +373,6 @@ unless_expression
301
373
 
302
374
  #--- CASE EXPRESSION
303
375
  #
304
- # Produces Model::CaseExpression
305
376
  case_expression
306
377
  : CASE expression LBRACE case_options RBRACE {
307
378
  result = Factory.CASE(val[1], *val[3])
@@ -311,20 +382,17 @@ case_expression
311
382
  # Produces Array<Model::CaseOption>
312
383
  case_options
313
384
  : case_option { result = [val[0]] }
314
- | case_options case_option { result = val[0].push val[1] }
385
+ | case_options case_option { result = val[0].push val[1] }
315
386
 
316
387
  # Produced Model::CaseOption (aka When)
317
388
  case_option
318
- : expressions case_colon LBRACE statements RBRACE {
319
- result = Factory.WHEN(val[0], val[3])
320
- loc result, val[1], val[4]
321
- }
322
- | expressions case_colon LBRACE RBRACE = LOW {
323
- result = Factory.WHEN(val[0], nil)
324
- loc result, val[1], val[3]
389
+ : expressions COLON LBRACE options_statements RBRACE {
390
+ result = Factory.WHEN(val[0], val[3]); loc result, val[1], val[4]
325
391
  }
326
392
 
327
- case_colon: COLON =CASE_COLON { result = val[0] }
393
+ options_statements
394
+ : nil
395
+ | statements
328
396
 
329
397
  # This special construct is required or racc will produce the wrong result when the selector entry
330
398
  # LHS is generalized to any expression (LBRACE looks like a hash). Thus it is not possible to write
@@ -348,108 +416,11 @@ case_expression
348
416
  selector_entry
349
417
  : expression FARROW expression { result = Factory.MAP(val[0], val[2]) ; loc result, val[1] }
350
418
 
351
- #---RESOURCE
352
- #
353
- # Produces [Model::ResourceExpression, Model::ResourceDefaultsExpression]
354
-
355
- # The resource expression parses a generalized syntax and then selects the correct
356
- # resulting model based on the combinatoin of the LHS and what follows.
357
- # It also handled exported and virtual resources, and the class case
358
- #
359
- resource_expression
360
- : expression =LOW {
361
- result = val[0]
362
- }
363
- | at expression LBRACE resourceinstances endsemi RBRACE {
364
- result = case Factory.resource_shape(val[1])
365
- when :resource, :class
366
- tmp = Factory.RESOURCE(Factory.fqn(token_text(val[1])), val[3])
367
- tmp.form = val[0]
368
- tmp
369
- when :defaults
370
- error val[1], "A resource default can not be virtual or exported"
371
- when :override
372
- error val[1], "A resource override can not be virtual or exported"
373
- else
374
- error val[1], "Expression is not valid as a resource, resource-default, or resource-override"
375
- end
376
- loc result, val[1], val[4]
377
- }
378
- | at expression LBRACE attribute_operations endcomma RBRACE {
379
- result = case Factory.resource_shape(val[1])
380
- when :resource, :class, :defaults, :override
381
- error val[1], "Defaults are not virtualizable"
382
- else
383
- error val[1], "Expression is not valid as a resource, resource-default, or resource-override"
384
- end
385
- }
386
- | expression LBRACE resourceinstances endsemi RBRACE {
387
- result = case Factory.resource_shape(val[0])
388
- when :resource, :class
389
- Factory.RESOURCE(Factory.fqn(token_text(val[0])), val[2])
390
- when :defaults
391
- error val[1], "A resource default can not specify a resource name"
392
- when :override
393
- error val[1], "A resource override does not allow override of name of resource"
394
- else
395
- error val[1], "Expression is not valid as a resource, resource-default, or resource-override"
396
- end
397
- loc result, val[0], val[4]
398
- }
399
- | expression LBRACE attribute_operations endcomma RBRACE {
400
- result = case Factory.resource_shape(val[0])
401
- when :resource, :class
402
- # This catches deprecated syntax.
403
- # If the attribute operations does not include +>, then the found expression
404
- # is actually a LEFT followed by LITERAL_HASH
405
- #
406
- unless tmp = transform_resource_wo_title(val[0], val[2])
407
- error val[1], "Syntax error resource body without title or hash with +>"
408
- end
409
- tmp
410
- when :defaults
411
- Factory.RESOURCE_DEFAULTS(val[0], val[2])
412
- when :override
413
- # This was only done for override in original - TODO shuld it be here at all
414
- Factory.RESOURCE_OVERRIDE(val[0], val[2])
415
- else
416
- error val[0], "Expression is not valid as a resource, resource-default, or resource-override"
417
- end
418
- loc result, val[0], val[4]
419
- }
420
- | at CLASS LBRACE resourceinstances endsemi RBRACE {
421
- result = Factory.RESOURCE(Factory.fqn(token_text(val[1])), val[3])
422
- result.form = val[0]
423
- loc result, val[1], val[5]
424
- }
425
- | CLASS LBRACE resourceinstances endsemi RBRACE {
426
- result = Factory.RESOURCE(Factory.fqn(token_text(val[0])), val[2])
427
- loc result, val[0], val[4]
428
- }
429
-
430
- resourceinst
431
- : expression title_colon attribute_operations endcomma { result = Factory.RESOURCE_BODY(val[0], val[2]) }
432
-
433
- title_colon : COLON =TITLE_COLON { result = val[0] }
434
-
435
- resourceinstances
436
- : resourceinst { result = [val[0]] }
437
- | resourceinstances SEMIC resourceinst { result = val[0].push val[2] }
438
-
439
- # Produces Symbol corresponding to resource form
440
- #
441
- at
442
- : AT { result = :virtual }
443
- | AT AT { result = :exported }
444
- | ATAT { result = :exported }
445
-
446
419
  #---COLLECTION
447
420
  #
448
421
  # A Collection is a predicate applied to a set of objects with an implied context (used variables are
449
422
  # attributes of the object.
450
- # i.e. this is equivalent for source.select(QUERY).apply(ATTRIBUTE_OPERATIONS)
451
- #
452
- # Produces Model::CollectExpression
423
+ # i.e. this is equivalent to source.select(QUERY).apply(ATTRIBUTE_OPERATIONS)
453
424
  #
454
425
  collection_expression
455
426
  : expression collect_query LBRACE attribute_operations endcomma RBRACE {
@@ -469,11 +440,7 @@ collection_expression
469
440
  : nil
470
441
  | expression
471
442
 
472
- #---ATTRIBUTE OPERATIONS
473
- #
474
- # (Not an expression)
475
- #
476
- # Produces Array<Model::AttributeOperation>
443
+ #---ATTRIBUTE OPERATIONS (Not an expression)
477
444
  #
478
445
  attribute_operations
479
446
  : { result = [] }
@@ -486,7 +453,7 @@ attribute_operations
486
453
  attribute_name
487
454
  : NAME
488
455
  | keyword
489
- | BOOLEAN
456
+ # | BOOLEAN
490
457
 
491
458
  # In this version, illegal combinations are validated instead of producing syntax errors
492
459
  # (Can give nicer error message "+> is not applicable to...")
@@ -501,6 +468,9 @@ attribute_operations
501
468
  result = Factory.ATTRIBUTE_OP(val[0][:value], :'+>', val[2])
502
469
  loc result, val[0], val[2]
503
470
  }
471
+ | TIMES FARROW expression {
472
+ result = Factory.ATTRIBUTES_OP(val[2]) ; loc result, val[0], val[2]
473
+ }
504
474
 
505
475
  #---DEFINE
506
476
  #
@@ -557,13 +527,13 @@ hostclass_expression
557
527
  # Produces Model::NodeDefinition
558
528
  #
559
529
  node_definition_expression
560
- : NODE hostnames nodeparent LBRACE statements RBRACE {
561
- result = add_definition(Factory.NODE(val[1], val[2], val[4]))
562
- loc result, val[0], val[5]
530
+ : NODE hostnames endcomma nodeparent LBRACE statements RBRACE {
531
+ result = add_definition(Factory.NODE(val[1], val[3], val[5]))
532
+ loc result, val[0], val[6]
563
533
  }
564
- | NODE hostnames nodeparent LBRACE RBRACE {
565
- result = add_definition(Factory.NODE(val[1], val[2], nil))
566
- loc result, val[0], val[4]
534
+ | NODE hostnames endcomma nodeparent LBRACE RBRACE {
535
+ result = add_definition(Factory.NODE(val[1], val[3], nil))
536
+ loc result, val[0], val[5]
567
537
  }
568
538
 
569
539
  # Hostnames is not a list of names, it is a list of name matchers (including a Regexp).
@@ -578,14 +548,18 @@ node_definition_expression
578
548
  # Produces a LiteralExpression (string, :default, or regexp)
579
549
  # String with interpolation is validated for better error message
580
550
  hostname
581
- : dotted_name { result = val[0] }
582
- | quotedtext { result = val[0] }
551
+ : dotted_name
552
+ | quotedtext
583
553
  | DEFAULT { result = Factory.literal(:default); loc result, val[0] }
584
554
  | regex
585
555
 
586
556
  dotted_name
587
- : NAME { result = Factory.literal(val[0][:value]); loc result, val[0] }
588
- | dotted_name DOT NAME { result = Factory.concat(val[0], '.', val[2][:value]); loc result, val[0], val[2] }
557
+ : name_or_number { result = Factory.literal(val[0][:value]); loc result, val[0] }
558
+ | dotted_name DOT name_or_number { result = Factory.concat(val[0], '.', val[2][:value]); loc result, val[0], val[2] }
559
+
560
+ name_or_number
561
+ : NAME
562
+ | NUMBER
589
563
 
590
564
  # Produces Expression, since hostname is an Expression
591
565
  nodeparent
@@ -594,8 +568,7 @@ node_definition_expression
594
568
 
595
569
  #---FUNCTION DEFINITION
596
570
  #
597
- function_definition
598
- : FUNCTION { result = Factory.QNAME(val[0][:value]) ; loc result, val[0] }
571
+ #function_definition
599
572
  # For now the function word will just be reserved, in the future it will
600
573
  # produce a function definition
601
574
  # FUNCTION classname parameter_list LBRACE opt_statements RBRACE {
@@ -607,7 +580,7 @@ function_definition
607
580
  # Produces String
608
581
  # TODO: The error that "class" is not a valid classname is bad - classname rule is also used for other things
609
582
  classname
610
- : NAME { result = val[0] }
583
+ : NAME
611
584
  | CLASS { error val[0], "'class' is not a valid classname" }
612
585
 
613
586
  # Produces Array<Model::Parameter>
@@ -623,32 +596,48 @@ parameters
623
596
 
624
597
  # Produces Model::Parameter
625
598
  parameter
599
+ : untyped_parameter
600
+ | typed_parameter
601
+
602
+ untyped_parameter
603
+ : regular_parameter
604
+ | splat_parameter
605
+
606
+ regular_parameter
626
607
  : VARIABLE EQUALS expression { result = Factory.PARAM(val[0][:value], val[2]) ; loc result, val[0] }
627
608
  | VARIABLE { result = Factory.PARAM(val[0][:value]); loc result, val[0] }
628
609
 
629
- #--RESTRICTED EXPRESSIONS
630
- # i.e. where one could have expected an expression, but the set is limited
610
+ splat_parameter
611
+ : TIMES regular_parameter { result = val[1]; val[1].captures_rest() }
631
612
 
632
- ## What is allowed RHS of match operators (see expression)
633
- #match_rvalue
634
- # : regex
635
- # | text_or_name
613
+ typed_parameter
614
+ : parameter_type untyped_parameter { val[1].type_expr(val[0]) ; result = val[1] }
615
+
616
+ parameter_type
617
+ : type { result = val[0] }
618
+ | type LBRACK expressions RBRACK { result = val[0][*val[2]] ; loc result, val[0], val[3] }
636
619
 
637
620
  #--VARIABLE
638
621
  #
639
622
  variable
640
623
  : VARIABLE { result = Factory.fqn(val[0][:value]).var ; loc result, val[0] }
641
624
 
625
+ #---RESERVED WORDS
626
+ #
627
+ reserved_word
628
+ : FUNCTION { result = Factory.RESERVED(val[0][:value]) ; loc result, val[0] }
629
+ | PRIVATE { result = Factory.RESERVED(val[0][:value]) ; loc result, val[0] }
630
+ | TYPE { result = Factory.RESERVED(val[0][:value]) ; loc result, val[0] }
631
+ | ATTR { result = Factory.RESERVED(val[0][:value]) ; loc result, val[0] }
632
+
642
633
  #---LITERALS (dynamic and static)
643
634
  #
644
635
 
645
636
  array
646
- : LBRACK expressions RBRACK { result = Factory.LIST(val[1]); loc result, val[0], val[2] }
647
- | LBRACK expressions COMMA RBRACK { result = Factory.LIST(val[1]); loc result, val[0], val[3] }
648
- | LBRACK RBRACK { result = Factory.literal([]) ; loc result, val[0] }
649
- | LISTSTART expressions RBRACK { result = Factory.LIST(val[1]); loc result, val[0], val[2] }
650
- | LISTSTART expressions COMMA RBRACK { result = Factory.LIST(val[1]); loc result, val[0], val[3] }
651
- | LISTSTART RBRACK { result = Factory.literal([]) ; loc result, val[0] }
637
+ : LISTSTART assignments endcomma RBRACK { result = Factory.LIST(val[1]); loc result, val[0], val[3] }
638
+ | LISTSTART RBRACK { result = Factory.literal([]) ; loc result, val[0] }
639
+ | LBRACK assignments endcomma RBRACK { result = Factory.LIST(val[1]); loc result, val[0], val[3] }
640
+ | LBRACK RBRACK { result = Factory.literal([]) ; loc result, val[0] }
652
641
 
653
642
  hash
654
643
  : LBRACE hashpairs RBRACE { result = Factory.HASH(val[1]); loc result, val[0], val[2] }
@@ -660,7 +649,7 @@ hash
660
649
  | hashpairs COMMA hashpair { result = val[0].push val[2] }
661
650
 
662
651
  hashpair
663
- : expression FARROW expression { result = Factory.KEY_ENTRY(val[0], val[2]); loc result, val[1] }
652
+ : assignment FARROW assignment { result = Factory.KEY_ENTRY(val[0], val[2]); loc result, val[1] }
664
653
 
665
654
  quotedtext
666
655
  : string
@@ -676,7 +665,7 @@ dqpre : DQPRE { result = Factory.literal(val[0][:valu
676
665
  dqpost : DQPOST { result = Factory.literal(val[0][:value]); loc result, val[0] }
677
666
  dqmid : DQMID { result = Factory.literal(val[0][:value]); loc result, val[0] }
678
667
  dqrval : text_expression dqtail { result = [val[0]] + val[1] }
679
- text_expression : expression { result = Factory.TEXT(val[0]) }
668
+ text_expression : assignment { result = Factory.TEXT(val[0]) }
680
669
 
681
670
  dqtail
682
671
  : dqpost { result = [val[0]] }
@@ -690,7 +679,11 @@ sublocated_text
690
679
  | SUBLOCATE dq_string { result = Factory.SUBLOCATE(val[0], val[1]); loc result, val[0] }
691
680
 
692
681
  epp_expression
693
- : EPP_START epp_parameters_list statements { result = Factory.EPP(val[1], val[2]); loc result, val[0] }
682
+ : EPP_START epp_parameters_list optional_statements { result = Factory.EPP(val[1], val[2]); loc result, val[0] }
683
+
684
+ optional_statements
685
+ :
686
+ | statements
694
687
 
695
688
  epp_parameters_list
696
689
  : =LOW{ result = nil }
@@ -706,16 +699,7 @@ epp_end
706
699
  : EPP_END
707
700
  | EPP_END_TRIM
708
701
 
709
- number : NUMBER { result = Factory.NUMBER(val[0][:value]) ; loc result, val[0] }
710
- name : NAME { result = Factory.QNAME_OR_NUMBER(val[0][:value]) ; loc result, val[0] }
711
702
  type : CLASSREF { result = Factory.QREF(val[0][:value]) ; loc result, val[0] }
712
- undef : UNDEF { result = Factory.literal(:undef); loc result, val[0] }
713
- default : DEFAULT { result = Factory.literal(:default); loc result, val[0] }
714
-
715
- # Assumes lexer produces a Boolean value for booleans, or this will go wrong and produce a literal string
716
- # with the text 'true'.
717
- #TODO: could be changed to a specific boolean literal factory method to prevent this possible glitch.
718
- boolean : BOOLEAN { result = Factory.literal(val[0][:value]) ; loc result, val[0] }
719
703
 
720
704
  regex
721
705
  : REGEX { result = Factory.literal(val[0][:value]); loc result, val[0] }
@@ -745,6 +729,10 @@ keyword
745
729
  | OR
746
730
  | UNDEF
747
731
  | UNLESS
732
+ | TYPE
733
+ | ATTR
734
+ | FUNCTION
735
+ | PRIVATE
748
736
 
749
737
  nil
750
738
  : { result = nil}