puppet 3.1.1 → 3.2.0.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (477) hide show
  1. data/CONTRIBUTING.md +2 -2
  2. data/Gemfile +32 -19
  3. data/README_DEVELOPER.md +332 -14
  4. data/Rakefile +9 -5
  5. data/ext/build_defaults.yaml +2 -3
  6. data/ext/debian/changelog.erb +6 -0
  7. data/ext/debian/control +6 -6
  8. data/ext/envpuppet +4 -4
  9. data/ext/project_data.yaml +1 -0
  10. data/ext/puppet-nm-dispatcher +13 -0
  11. data/ext/redhat/puppet.spec.erb +17 -0
  12. data/ext/suse/client.init +1 -1
  13. data/ext/systemd/puppetagent.service +2 -2
  14. data/ext/systemd/puppetmaster.service +2 -2
  15. data/lib/hiera/scope.rb +29 -11
  16. data/lib/hiera_puppet.rb +1 -3
  17. data/lib/puppet/agent.rb +3 -3
  18. data/lib/puppet/application.rb +2 -2
  19. data/lib/puppet/application/agent.rb +27 -12
  20. data/lib/puppet/application/apply.rb +11 -1
  21. data/lib/puppet/application/describe.rb +1 -1
  22. data/lib/puppet/application/doc.rb +13 -9
  23. data/lib/puppet/application/filebucket.rb +0 -1
  24. data/lib/puppet/application/kick.rb +1 -0
  25. data/lib/puppet/application/master.rb +16 -8
  26. data/lib/puppet/daemon.rb +19 -64
  27. data/lib/puppet/defaults.rb +61 -5
  28. data/lib/puppet/error.rb +15 -4
  29. data/lib/puppet/external/nagios/grammar.ry +1 -1
  30. data/lib/puppet/external/nagios/makefile +1 -1
  31. data/lib/puppet/external/nagios/parser.rb +185 -618
  32. data/lib/puppet/external/pson/pure/parser.rb +47 -1
  33. data/lib/puppet/face/certificate.rb +3 -3
  34. data/lib/puppet/face/module.rb +1 -1
  35. data/lib/puppet/face/module/changes.rb +3 -1
  36. data/lib/puppet/face/module/uninstall.rb +1 -1
  37. data/lib/puppet/face/node/clean.rb +5 -5
  38. data/lib/puppet/feature/base.rb +3 -1
  39. data/lib/puppet/feature/libuser.rb +8 -0
  40. data/lib/puppet/file_serving/fileset.rb +9 -1
  41. data/lib/puppet/forge.rb +28 -5
  42. data/lib/puppet/forge/errors.rb +34 -0
  43. data/lib/puppet/forge/repository.rb +1 -1
  44. data/lib/puppet/indirector.rb +4 -1
  45. data/lib/puppet/indirector/catalog/compiler.rb +37 -30
  46. data/lib/puppet/indirector/facts/inventory_active_record.rb +1 -0
  47. data/lib/puppet/indirector/indirection.rb +28 -15
  48. data/lib/puppet/indirector/rest.rb +18 -10
  49. data/lib/puppet/interface.rb +11 -4
  50. data/lib/puppet/interface/action.rb +1 -3
  51. data/lib/puppet/interface/action_builder.rb +0 -3
  52. data/lib/puppet/interface/action_manager.rb +0 -3
  53. data/lib/puppet/interface/face_collection.rb +0 -2
  54. data/lib/puppet/interface/option.rb +0 -2
  55. data/lib/puppet/interface/option_builder.rb +0 -2
  56. data/lib/puppet/interface/option_manager.rb +0 -2
  57. data/lib/puppet/metatype/manager.rb +1 -1
  58. data/lib/puppet/module_tool.rb +1 -0
  59. data/lib/puppet/module_tool/applications/application.rb +0 -3
  60. data/lib/puppet/module_tool/applications/builder.rb +8 -20
  61. data/lib/puppet/module_tool/applications/checksummer.rb +1 -1
  62. data/lib/puppet/module_tool/applications/installer.rb +1 -0
  63. data/lib/puppet/module_tool/applications/unpacker.rb +3 -11
  64. data/lib/puppet/module_tool/checksums.rb +1 -1
  65. data/lib/puppet/module_tool/errors/installer.rb +18 -1
  66. data/lib/puppet/module_tool/modulefile.rb +2 -2
  67. data/lib/puppet/module_tool/skeleton/templates/generator/Modulefile.erb +1 -1
  68. data/lib/puppet/module_tool/tar.rb +17 -0
  69. data/lib/puppet/module_tool/tar/gnu.rb +9 -0
  70. data/lib/puppet/module_tool/tar/mini.rb +39 -0
  71. data/lib/puppet/module_tool/tar/solaris.rb +5 -0
  72. data/lib/puppet/network/http.rb +1 -0
  73. data/lib/puppet/network/http/connection.rb +9 -23
  74. data/lib/puppet/network/http/handler.rb +38 -7
  75. data/lib/puppet/network/http/rack/rest.rb +14 -3
  76. data/lib/puppet/network/http/webrick.rb +3 -1
  77. data/lib/puppet/network/http/webrick/rest.rb +11 -2
  78. data/lib/puppet/node/environment.rb +3 -1
  79. data/lib/puppet/parameter.rb +32 -29
  80. data/lib/puppet/parameter/package_options.rb +1 -1
  81. data/lib/puppet/parameter/path.rb +1 -1
  82. data/lib/puppet/parameter/value.rb +1 -1
  83. data/lib/puppet/parameter/value_collection.rb +7 -3
  84. data/lib/puppet/parser/ast.rb +3 -1
  85. data/lib/puppet/parser/ast/arithmetic_operator.rb +56 -12
  86. data/lib/puppet/parser/ast/astarray.rb +1 -1
  87. data/lib/puppet/parser/ast/block_expression.rb +41 -0
  88. data/lib/puppet/parser/ast/function.rb +13 -2
  89. data/lib/puppet/parser/ast/lambda.rb +107 -0
  90. data/lib/puppet/parser/ast/leaf.rb +1 -2
  91. data/lib/puppet/parser/ast/method_call.rb +77 -0
  92. data/lib/puppet/parser/ast/vardef.rb +7 -0
  93. data/lib/puppet/parser/compiler.rb +27 -16
  94. data/lib/puppet/parser/e_parser_adapter.rb +120 -0
  95. data/lib/puppet/parser/files.rb +7 -6
  96. data/lib/puppet/parser/functions.rb +10 -8
  97. data/lib/puppet/parser/functions/collect.rb +43 -0
  98. data/lib/puppet/parser/functions/each.rb +96 -0
  99. data/lib/puppet/parser/functions/foreach.rb +96 -0
  100. data/lib/puppet/parser/functions/fqdn_rand.rb +2 -2
  101. data/lib/puppet/parser/functions/hiera.rb +20 -2
  102. data/lib/puppet/parser/functions/hiera_array.rb +21 -2
  103. data/lib/puppet/parser/functions/hiera_hash.rb +23 -2
  104. data/lib/puppet/parser/functions/hiera_include.rb +33 -2
  105. data/lib/puppet/parser/functions/inline_template.rb +4 -4
  106. data/lib/puppet/parser/functions/reduce.rb +74 -0
  107. data/lib/puppet/parser/functions/reject.rb +46 -0
  108. data/lib/puppet/parser/functions/select.rb +46 -0
  109. data/lib/puppet/parser/functions/slice.rb +96 -0
  110. data/lib/puppet/parser/functions/template.rb +2 -2
  111. data/lib/puppet/parser/grammar.ra +7 -4
  112. data/lib/puppet/parser/lexer.rb +10 -0
  113. data/lib/puppet/parser/methods.rb +69 -0
  114. data/lib/puppet/parser/parser.rb +855 -808
  115. data/lib/puppet/parser/parser_factory.rb +62 -0
  116. data/lib/puppet/parser/parser_support.rb +8 -2
  117. data/lib/puppet/parser/scope.rb +153 -47
  118. data/lib/puppet/parser/templatewrapper.rb +28 -21
  119. data/lib/puppet/parser/type_loader.rb +3 -1
  120. data/lib/puppet/pops.rb +40 -0
  121. data/lib/puppet/pops/adaptable.rb +190 -0
  122. data/lib/puppet/pops/adapters.rb +65 -0
  123. data/lib/puppet/pops/containment.rb +37 -0
  124. data/lib/puppet/pops/issues.rb +258 -0
  125. data/lib/puppet/pops/label_provider.rb +71 -0
  126. data/lib/puppet/pops/model/ast_transformer.rb +636 -0
  127. data/lib/puppet/pops/model/ast_tree_dumper.rb +378 -0
  128. data/lib/puppet/pops/model/factory.rb +804 -0
  129. data/lib/puppet/pops/model/model.rb +567 -0
  130. data/lib/puppet/pops/model/model_label_provider.rb +75 -0
  131. data/lib/puppet/pops/model/model_tree_dumper.rb +352 -0
  132. data/lib/puppet/pops/model/tree_dumper.rb +59 -0
  133. data/lib/puppet/pops/parser/egrammar.ra +723 -0
  134. data/lib/puppet/pops/parser/eparser.rb +2300 -0
  135. data/lib/puppet/pops/parser/grammar.ra +746 -0
  136. data/lib/puppet/pops/parser/lexer.rb +842 -0
  137. data/lib/puppet/pops/parser/makefile +13 -0
  138. data/lib/puppet/pops/parser/parser_support.rb +203 -0
  139. data/lib/puppet/pops/patterns.rb +35 -0
  140. data/lib/puppet/pops/utils.rb +104 -0
  141. data/lib/puppet/pops/validation.rb +297 -0
  142. data/lib/puppet/pops/validation/checker3_1.rb +551 -0
  143. data/lib/puppet/pops/validation/validator_factory_3_1.rb +41 -0
  144. data/lib/puppet/pops/visitable.rb +6 -0
  145. data/lib/puppet/pops/visitor.rb +50 -0
  146. data/lib/puppet/property.rb +37 -28
  147. data/lib/puppet/property/ensure.rb +2 -2
  148. data/lib/puppet/property/ordered_list.rb +1 -1
  149. data/lib/puppet/provider.rb +26 -30
  150. data/lib/puppet/provider/aixobject.rb +45 -44
  151. data/lib/puppet/provider/augeas/augeas.rb +0 -1
  152. data/lib/puppet/provider/confiner.rb +1 -1
  153. data/lib/puppet/provider/cron/crontab.rb +107 -67
  154. data/lib/puppet/provider/group/groupadd.rb +59 -3
  155. data/lib/puppet/provider/interface/cisco.rb +4 -4
  156. data/lib/puppet/provider/mount/parsed.rb +1 -1
  157. data/lib/puppet/provider/nameservice.rb +22 -6
  158. data/lib/puppet/provider/nameservice/pw.rb +1 -1
  159. data/lib/puppet/provider/package/aix.rb +28 -4
  160. data/lib/puppet/provider/package/gem.rb +0 -2
  161. data/lib/puppet/provider/package/macports.rb +1 -1
  162. data/lib/puppet/provider/package/nim.rb +249 -4
  163. data/lib/puppet/provider/package/opkg.rb +77 -0
  164. data/lib/puppet/provider/package/pacman.rb +2 -2
  165. data/lib/puppet/provider/package/rpm.rb +30 -16
  166. data/lib/puppet/provider/package/yum.rb +3 -3
  167. data/lib/puppet/provider/parsedfile.rb +80 -3
  168. data/lib/puppet/provider/selmodule/semodule.rb +2 -2
  169. data/lib/puppet/provider/service/debian.rb +0 -4
  170. data/lib/puppet/provider/service/freebsd.rb +2 -2
  171. data/lib/puppet/provider/service/gentoo.rb +0 -9
  172. data/lib/puppet/provider/service/init.rb +27 -2
  173. data/lib/puppet/provider/service/launchd.rb +1 -1
  174. data/lib/puppet/provider/service/openwrt.rb +36 -0
  175. data/lib/puppet/provider/service/redhat.rb +0 -9
  176. data/lib/puppet/provider/service/src.rb +38 -4
  177. data/lib/puppet/provider/service/systemd.rb +2 -2
  178. data/lib/puppet/provider/service/upstart.rb +1 -8
  179. data/lib/puppet/provider/user/aix.rb +4 -10
  180. data/lib/puppet/provider/user/pw.rb +6 -10
  181. data/lib/puppet/provider/user/useradd.rb +129 -31
  182. data/lib/puppet/provider/vlan/cisco.rb +4 -4
  183. data/lib/puppet/reference/function.rb +2 -2
  184. data/lib/puppet/reference/indirection.rb +46 -5
  185. data/lib/puppet/reference/metaparameter.rb +2 -2
  186. data/lib/puppet/reports.rb +5 -5
  187. data/lib/puppet/reports/rrdgraph.rb +4 -4
  188. data/lib/puppet/reports/tagmail.rb +1 -1
  189. data/lib/puppet/resource.rb +1 -1
  190. data/lib/puppet/resource/type.rb +13 -11
  191. data/lib/puppet/scheduler.rb +16 -0
  192. data/lib/puppet/scheduler/job.rb +53 -0
  193. data/lib/puppet/scheduler/scheduler.rb +45 -0
  194. data/lib/puppet/scheduler/splay_job.rb +32 -0
  195. data/lib/puppet/scheduler/timer.rb +13 -0
  196. data/lib/puppet/settings/base_setting.rb +1 -1
  197. data/lib/puppet/simple_graph.rb +4 -4
  198. data/lib/puppet/ssl/base.rb +12 -2
  199. data/lib/puppet/ssl/certificate.rb +4 -1
  200. data/lib/puppet/ssl/certificate_request.rb +4 -1
  201. data/lib/puppet/ssl/certificate_revocation_list.rb +4 -1
  202. data/lib/puppet/ssl/configuration.rb +32 -0
  203. data/lib/puppet/ssl/host.rb +18 -21
  204. data/lib/puppet/ssl/key.rb +4 -1
  205. data/lib/puppet/ssl/validator.rb +116 -0
  206. data/lib/puppet/transaction.rb +1 -1
  207. data/lib/puppet/transaction/event.rb +3 -10
  208. data/lib/puppet/transaction/event_manager.rb +8 -1
  209. data/lib/puppet/transaction/report.rb +17 -16
  210. data/lib/puppet/type.rb +77 -69
  211. data/lib/puppet/type/cron.rb +20 -8
  212. data/lib/puppet/type/exec.rb +9 -3
  213. data/lib/puppet/type/file.rb +95 -21
  214. data/lib/puppet/type/file/content.rb +1 -1
  215. data/lib/puppet/type/file/mode.rb +7 -1
  216. data/lib/puppet/type/file/source.rb +2 -2
  217. data/lib/puppet/type/group.rb +11 -0
  218. data/lib/puppet/type/scheduled_task.rb +5 -1
  219. data/lib/puppet/type/service.rb +1 -1
  220. data/lib/puppet/type/ssh_authorized_key.rb +2 -2
  221. data/lib/puppet/type/user.rb +24 -6
  222. data/lib/puppet/util.rb +12 -2
  223. data/lib/puppet/util/classgen.rb +4 -4
  224. data/lib/puppet/util/colors.rb +55 -0
  225. data/lib/puppet/util/command_line/trollop.rb +4 -4
  226. data/lib/puppet/util/errors.rb +39 -3
  227. data/lib/puppet/util/fileparsing.rb +5 -0
  228. data/lib/puppet/util/filetype.rb +11 -9
  229. data/lib/puppet/util/instrumentation/instrumentable.rb +2 -2
  230. data/lib/puppet/util/libuser.conf +15 -0
  231. data/lib/puppet/util/libuser.rb +12 -0
  232. data/lib/puppet/util/monkey_patches.rb +48 -0
  233. data/lib/puppet/util/network_device.rb +1 -1
  234. data/lib/puppet/util/network_device/base.rb +2 -2
  235. data/lib/puppet/util/network_device/cisco/device.rb +29 -19
  236. data/lib/puppet/util/network_device/config.rb +5 -2
  237. data/lib/puppet/util/network_device/ipcalc.rb +1 -1
  238. data/lib/puppet/util/network_device/transport/ssh.rb +4 -3
  239. data/lib/puppet/util/network_device/transport/telnet.rb +4 -2
  240. data/lib/puppet/util/plugins.rb +4 -4
  241. data/lib/puppet/util/posix.rb +1 -1
  242. data/lib/puppet/util/profiler.rb +28 -0
  243. data/lib/puppet/util/profiler/logging.rb +47 -0
  244. data/lib/puppet/util/profiler/none.rb +8 -0
  245. data/lib/puppet/util/profiler/object_counts.rb +17 -0
  246. data/lib/puppet/util/profiler/wall_clock.rb +34 -0
  247. data/lib/puppet/util/provider_features.rb +1 -1
  248. data/lib/puppet/util/rdoc/parser.rb +5 -5
  249. data/lib/puppet/util/ssl.rb +38 -0
  250. data/lib/puppet/util/subclass_loader.rb +1 -5
  251. data/lib/puppet/util/windows.rb +1 -0
  252. data/lib/puppet/util/windows/process.rb +3 -0
  253. data/lib/puppet/util/windows/root_certs.rb +86 -0
  254. data/lib/puppet/util/windows/security.rb +1 -0
  255. data/lib/puppet/version.rb +1 -1
  256. data/spec/fixtures/integration/provider/cron/crontab/create_normal_entry +19 -0
  257. data/spec/fixtures/integration/provider/cron/crontab/create_special_entry +18 -0
  258. data/spec/fixtures/integration/provider/cron/crontab/crontab_user1 +15 -0
  259. data/spec/fixtures/integration/provider/cron/crontab/crontab_user2 +4 -0
  260. data/spec/fixtures/integration/provider/cron/crontab/modify_entry +13 -0
  261. data/spec/fixtures/integration/provider/cron/crontab/moved_cronjob_input1 +15 -0
  262. data/spec/fixtures/integration/provider/cron/crontab/moved_cronjob_input2 +6 -0
  263. data/spec/fixtures/integration/provider/cron/crontab/remove_named_resource +12 -0
  264. data/spec/fixtures/integration/provider/cron/crontab/remove_unnamed_resource +14 -0
  265. data/spec/fixtures/unit/pops/parser/lexer/aliastest.pp +16 -0
  266. data/spec/fixtures/unit/pops/parser/lexer/append.pp +11 -0
  267. data/spec/fixtures/unit/pops/parser/lexer/argumentdefaults.pp +14 -0
  268. data/spec/fixtures/unit/pops/parser/lexer/arithmetic_expression.pp +8 -0
  269. data/spec/fixtures/unit/pops/parser/lexer/arraytrailingcomma.pp +3 -0
  270. data/spec/fixtures/unit/pops/parser/lexer/casestatement.pp +65 -0
  271. data/spec/fixtures/unit/pops/parser/lexer/classheirarchy.pp +15 -0
  272. data/spec/fixtures/unit/pops/parser/lexer/classincludes.pp +17 -0
  273. data/spec/fixtures/unit/pops/parser/lexer/classpathtest.pp +11 -0
  274. data/spec/fixtures/unit/pops/parser/lexer/collection.pp +10 -0
  275. data/spec/fixtures/unit/pops/parser/lexer/collection_override.pp +8 -0
  276. data/spec/fixtures/unit/pops/parser/lexer/collection_within_virtual_definitions.pp +20 -0
  277. data/spec/fixtures/unit/pops/parser/lexer/componentmetaparams.pp +11 -0
  278. data/spec/fixtures/unit/pops/parser/lexer/componentrequire.pp +8 -0
  279. data/spec/fixtures/unit/pops/parser/lexer/deepclassheirarchy.pp +23 -0
  280. data/spec/fixtures/unit/pops/parser/lexer/defineoverrides.pp +17 -0
  281. data/spec/fixtures/unit/pops/parser/lexer/emptyclass.pp +9 -0
  282. data/spec/fixtures/unit/pops/parser/lexer/emptyexec.pp +3 -0
  283. data/spec/fixtures/unit/pops/parser/lexer/emptyifelse.pp +9 -0
  284. data/spec/fixtures/unit/pops/parser/lexer/falsevalues.pp +3 -0
  285. data/spec/fixtures/unit/pops/parser/lexer/filecreate.pp +11 -0
  286. data/spec/fixtures/unit/pops/parser/lexer/fqdefinition.pp +5 -0
  287. data/spec/fixtures/unit/pops/parser/lexer/fqparents.pp +11 -0
  288. data/spec/fixtures/unit/pops/parser/lexer/funccomma.pp +5 -0
  289. data/spec/fixtures/unit/pops/parser/lexer/hash.pp +33 -0
  290. data/spec/fixtures/unit/pops/parser/lexer/ifexpression.pp +12 -0
  291. data/spec/fixtures/unit/pops/parser/lexer/implicititeration.pp +15 -0
  292. data/spec/fixtures/unit/pops/parser/lexer/multilinecomments.pp +10 -0
  293. data/spec/fixtures/unit/pops/parser/lexer/multipleclass.pp +9 -0
  294. data/spec/fixtures/unit/pops/parser/lexer/multipleinstances.pp +7 -0
  295. data/spec/fixtures/unit/pops/parser/lexer/multisubs.pp +13 -0
  296. data/spec/fixtures/unit/pops/parser/lexer/namevartest.pp +9 -0
  297. data/spec/fixtures/unit/pops/parser/lexer/scopetest.pp +13 -0
  298. data/spec/fixtures/unit/pops/parser/lexer/selectorvalues.pp +49 -0
  299. data/spec/fixtures/unit/pops/parser/lexer/simpledefaults.pp +5 -0
  300. data/spec/fixtures/unit/pops/parser/lexer/simpleselector.pp +38 -0
  301. data/spec/fixtures/unit/pops/parser/lexer/singleary.pp +19 -0
  302. data/spec/fixtures/unit/pops/parser/lexer/singlequote.pp +11 -0
  303. data/spec/fixtures/unit/pops/parser/lexer/singleselector.pp +22 -0
  304. data/spec/fixtures/unit/pops/parser/lexer/subclass_name_duplication.pp +11 -0
  305. data/spec/fixtures/unit/pops/parser/lexer/tag.pp +9 -0
  306. data/spec/fixtures/unit/pops/parser/lexer/tagged.pp +35 -0
  307. data/spec/fixtures/unit/pops/parser/lexer/virtualresources.pp +14 -0
  308. data/spec/fixtures/unit/provider/cron/crontab/single_line.yaml +4 -4
  309. data/spec/fixtures/unit/provider/cron/crontab/vixie_header.txt +3 -0
  310. data/spec/fixtures/unit/provider/cron/parsed/managed +6 -0
  311. data/spec/fixtures/unit/provider/cron/parsed/simple +9 -0
  312. data/spec/fixtures/unit/provider/parsedfile/simple.txt +4 -0
  313. data/spec/fixtures/unit/provider/service/systemd/list_units +18 -0
  314. data/spec/integration/parser/collector_spec.rb +1 -1
  315. data/spec/integration/parser/compiler_spec.rb +252 -227
  316. data/spec/integration/parser/parser_spec.rb +171 -53
  317. data/spec/integration/parser/scope_spec.rb +1 -1
  318. data/spec/integration/provider/cron/crontab_spec.rb +187 -0
  319. data/spec/integration/provider/service/systemd_spec.rb +20 -0
  320. data/spec/integration/type/file_spec.rb +21 -21
  321. data/spec/integration/type/package_spec.rb +1 -1
  322. data/spec/lib/puppet_spec/database.rb +2 -5
  323. data/spec/spec_helper.rb +6 -1
  324. data/spec/unit/application/apply_spec.rb +16 -1
  325. data/spec/unit/application/describe_spec.rb +1 -1
  326. data/spec/unit/application/doc_spec.rb +55 -32
  327. data/spec/unit/application/kick_spec.rb +8 -6
  328. data/spec/unit/application/master_spec.rb +4 -4
  329. data/spec/unit/daemon_spec.rb +1 -1
  330. data/spec/unit/forge/errors_spec.rb +40 -0
  331. data/spec/unit/forge/repository_spec.rb +11 -1
  332. data/spec/unit/forge_spec.rb +13 -3
  333. data/spec/unit/hiera/backend/puppet_backend_spec.rb +1 -0
  334. data/spec/unit/hiera/scope_spec.rb +48 -25
  335. data/spec/unit/indirector/catalog/active_record_spec.rb +6 -3
  336. data/spec/unit/indirector/catalog/compiler_spec.rb +3 -28
  337. data/spec/unit/indirector/catalog/static_compiler_spec.rb +1 -1
  338. data/spec/unit/indirector/facts/inventory_active_record_spec.rb +154 -150
  339. data/spec/unit/indirector/indirection_spec.rb +5 -0
  340. data/spec/unit/indirector/resource/active_record_spec.rb +5 -22
  341. data/spec/unit/indirector_spec.rb +7 -1
  342. data/spec/unit/interface/action_builder_spec.rb +1 -1
  343. data/spec/unit/interface/action_manager_spec.rb +0 -2
  344. data/spec/unit/interface/action_spec.rb +1 -1
  345. data/spec/unit/interface/documentation_spec.rb +0 -2
  346. data/spec/unit/interface/face_collection_spec.rb +1 -1
  347. data/spec/unit/interface/option_builder_spec.rb +1 -1
  348. data/spec/unit/interface/option_spec.rb +0 -1
  349. data/spec/unit/module_spec.rb +17 -19
  350. data/spec/unit/module_tool/application_spec.rb +1 -3
  351. data/spec/unit/module_tool/applications/builder_spec.rb +38 -0
  352. data/spec/unit/module_tool/applications/checksummer_spec.rb +134 -0
  353. data/spec/unit/module_tool/applications/installer_spec.rb +71 -91
  354. data/spec/unit/module_tool/applications/searcher_spec.rb +1 -3
  355. data/spec/unit/module_tool/applications/uninstaller_spec.rb +18 -26
  356. data/spec/unit/module_tool/applications/unpacker_spec.rb +19 -52
  357. data/spec/unit/module_tool/tar/gnu_spec.rb +19 -0
  358. data/spec/unit/module_tool/tar/mini_spec.rb +59 -0
  359. data/spec/unit/module_tool/tar/solaris_spec.rb +19 -0
  360. data/spec/unit/network/http/connection_spec.rb +17 -2
  361. data/spec/unit/network/http/handler_spec.rb +195 -167
  362. data/spec/unit/network/http/rack/rest_spec.rb +26 -4
  363. data/spec/unit/network/http/webrick/rest_spec.rb +28 -1
  364. data/spec/unit/network/http/webrick_spec.rb +12 -3
  365. data/spec/unit/node/environment_spec.rb +421 -404
  366. data/spec/unit/parser/ast/arithmetic_operator_spec.rb +98 -2
  367. data/spec/unit/parser/collector_spec.rb +4 -4
  368. data/spec/unit/parser/compiler_spec.rb +13 -13
  369. data/spec/unit/parser/eparser_adapter_spec.rb +407 -0
  370. data/spec/unit/parser/functions/extlookup_spec.rb +20 -17
  371. data/spec/unit/parser/functions/fqdn_rand_spec.rb +5 -0
  372. data/spec/unit/parser/functions/hiera_include_spec.rb +0 -2
  373. data/spec/unit/parser/functions/hiera_spec.rb +0 -2
  374. data/spec/unit/parser/functions_spec.rb +27 -15
  375. data/spec/unit/parser/methods/collect_spec.rb +110 -0
  376. data/spec/unit/parser/methods/each_spec.rb +91 -0
  377. data/spec/unit/parser/methods/foreach_spec.rb +91 -0
  378. data/spec/unit/parser/methods/reduce_spec.rb +67 -0
  379. data/spec/unit/parser/methods/reject_spec.rb +73 -0
  380. data/spec/unit/parser/methods/select_spec.rb +79 -0
  381. data/spec/unit/parser/methods/shared.rb +61 -0
  382. data/spec/unit/parser/methods/slice_spec.rb +97 -0
  383. data/spec/unit/parser/parser_spec.rb +2 -2
  384. data/spec/unit/parser/scope_spec.rb +39 -16
  385. data/spec/unit/parser/templatewrapper_spec.rb +6 -5
  386. data/spec/unit/parser/type_loader_spec.rb +191 -165
  387. data/spec/unit/pops/adaptable_spec.rb +143 -0
  388. data/spec/unit/pops/containment_spec.rb +25 -0
  389. data/spec/unit/pops/factory_rspec_helper.rb +77 -0
  390. data/spec/unit/pops/factory_spec.rb +329 -0
  391. data/spec/unit/pops/issues_spec.rb +26 -0
  392. data/spec/unit/pops/label_provider_spec.rb +42 -0
  393. data/spec/unit/pops/model/ast_transformer_spec.rb +65 -0
  394. data/spec/unit/pops/model/model_spec.rb +37 -0
  395. data/spec/unit/pops/parser/lexer_spec.rb +884 -0
  396. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +248 -0
  397. data/spec/unit/pops/parser/parse_calls_spec.rb +93 -0
  398. data/spec/unit/pops/parser/parse_conditionals_spec.rb +159 -0
  399. data/spec/unit/pops/parser/parse_containers_spec.rb +175 -0
  400. data/spec/unit/pops/parser/parse_resource_spec.rb +228 -0
  401. data/spec/unit/pops/parser/parser_rspec_helper.rb +11 -0
  402. data/spec/unit/pops/parser/parser_spec.rb +15 -0
  403. data/spec/unit/pops/parser/rgen_sanitycheck_spec.rb +16 -0
  404. data/spec/unit/pops/transformer/transform_basic_expressions_spec.rb +243 -0
  405. data/spec/unit/pops/transformer/transform_calls_spec.rb +80 -0
  406. data/spec/unit/pops/transformer/transform_conditionals_spec.rb +132 -0
  407. data/spec/unit/pops/transformer/transform_containers_spec.rb +182 -0
  408. data/spec/unit/pops/transformer/transform_resource_spec.rb +185 -0
  409. data/spec/unit/pops/transformer/transformer_rspec_helper.rb +27 -0
  410. data/spec/unit/pops/visitor_spec.rb +94 -0
  411. data/spec/unit/property_spec.rb +11 -0
  412. data/spec/unit/provider/augeas/augeas_spec.rb +3 -0
  413. data/spec/unit/provider/cron/crontab_spec.rb +97 -7
  414. data/spec/unit/provider/cron/parsed_spec.rb +325 -0
  415. data/spec/unit/provider/exec/posix_spec.rb +1 -1
  416. data/spec/unit/provider/group/groupadd_spec.rb +33 -3
  417. data/spec/unit/provider/group/pw_spec.rb +5 -5
  418. data/spec/unit/provider/nameservice_spec.rb +304 -0
  419. data/spec/unit/provider/package/aix_spec.rb +53 -11
  420. data/spec/unit/provider/package/aptrpm_spec.rb +6 -0
  421. data/spec/unit/provider/package/gem_spec.rb +6 -11
  422. data/spec/unit/provider/package/nim_spec.rb +216 -7
  423. data/spec/unit/provider/package/opkg_spec.rb +180 -0
  424. data/spec/unit/provider/package/rpm_spec.rb +149 -3
  425. data/spec/unit/provider/package/yum_spec.rb +6 -5
  426. data/spec/unit/provider/parsedfile_spec.rb +122 -28
  427. data/spec/unit/provider/service/freebsd_spec.rb +18 -0
  428. data/spec/unit/provider/service/init_spec.rb +108 -87
  429. data/spec/unit/provider/service/launchd_spec.rb +2 -2
  430. data/spec/unit/provider/service/openwrt_spec.rb +109 -0
  431. data/spec/unit/provider/service/src_spec.rb +117 -41
  432. data/spec/unit/provider/service/systemd_spec.rb +125 -17
  433. data/spec/unit/provider/service/upstart_spec.rb +1 -1
  434. data/spec/unit/provider/user/aix_spec.rb +42 -0
  435. data/spec/unit/provider/user/directoryservice_spec.rb +1 -0
  436. data/spec/unit/provider/user/pw_spec.rb +24 -12
  437. data/spec/unit/provider/user/user_role_add_spec.rb +1 -1
  438. data/spec/unit/provider/user/useradd_spec.rb +179 -15
  439. data/spec/unit/resource/type_spec.rb +3 -3
  440. data/spec/unit/scheduler/job_spec.rb +79 -0
  441. data/spec/unit/scheduler/scheduler_spec.rb +129 -0
  442. data/spec/unit/scheduler/splay_job_spec.rb +35 -0
  443. data/spec/unit/ssl/base_spec.rb +3 -9
  444. data/spec/unit/ssl/certificate_authority_spec.rb +1 -0
  445. data/spec/unit/ssl/certificate_request_spec.rb +3 -1
  446. data/spec/unit/ssl/certificate_spec.rb +3 -1
  447. data/spec/unit/ssl/configuration_spec.rb +74 -0
  448. data/spec/unit/ssl/host_spec.rb +28 -7
  449. data/spec/unit/ssl/validator_spec.rb +311 -0
  450. data/spec/unit/transaction/event_manager_spec.rb +49 -0
  451. data/spec/unit/transaction/event_spec.rb +20 -5
  452. data/spec/unit/transaction/report_spec.rb +8 -0
  453. data/spec/unit/type/cron_spec.rb +9 -0
  454. data/spec/unit/type/exec_spec.rb +11 -0
  455. data/spec/unit/type/file/content_spec.rb +20 -20
  456. data/spec/unit/type/file/mode_spec.rb +6 -0
  457. data/spec/unit/type/file/source_spec.rb +9 -7
  458. data/spec/unit/type/file_spec.rb +22 -3
  459. data/spec/unit/type/service_spec.rb +34 -21
  460. data/spec/unit/type_spec.rb +46 -1
  461. data/spec/unit/util/backups_spec.rb +2 -2
  462. data/spec/unit/util/execution_spec.rb +4 -1
  463. data/spec/unit/util/filetype_spec.rb +6 -0
  464. data/spec/unit/util/monkey_patches_spec.rb +18 -0
  465. data/spec/unit/util/network_device/cisco/device_spec.rb +37 -0
  466. data/spec/unit/util/network_device/config_spec.rb +14 -0
  467. data/spec/unit/util/network_device_spec.rb +3 -3
  468. data/spec/unit/util/profiler/logging_spec.rb +81 -0
  469. data/spec/unit/util/profiler/none_spec.rb +12 -0
  470. data/spec/unit/util/profiler/object_counts_spec.rb +14 -0
  471. data/spec/unit/util/profiler/wall_clock_spec.rb +13 -0
  472. data/spec/unit/util/pson_spec.rb +5 -0
  473. data/spec/unit/util/ssl_spec.rb +51 -0
  474. data/spec/unit/util/windows/root_certs_spec.rb +15 -0
  475. data/spec/unit/util_spec.rb +28 -0
  476. metadata +2593 -2307
  477. data/spec/unit/module_tool/applications/application_spec.rb +0 -19
@@ -0,0 +1,75 @@
1
+ # A provider of labels for model object, producing a human name for the model object.
2
+ # As an example, if object is an ArithmeticExpression with operator +, `#a_an(o)` produces "a '+' Expression",
3
+ # #the(o) produces "the + Expression", and #label produces "+ Expression".
4
+ #
5
+ class Puppet::Pops::Model::ModelLabelProvider < Puppet::Pops::LabelProvider
6
+ def initialize
7
+ @@label_visitor ||= Puppet::Pops::Visitor.new(self,"label",0,0)
8
+ end
9
+
10
+ # Produces a label for the given objects type/operator without article.
11
+ def label o
12
+ @@label_visitor.visit(o)
13
+ end
14
+
15
+ def label_Factory o ; label(o.current) end
16
+ def label_Array o ; "Array Object" end
17
+ def label_LiteralNumber o ; "Literal Number" end
18
+ def label_ArithmeticExpression o ; "'#{o_operator}' expression" end
19
+ def label_AccessExpression o ; "'[]' expression" end
20
+ def label_MatchExpression o ; "'#{o.operator}' expression" end
21
+ def label_CollectExpression o ; label(o.query) end
22
+ def label_ExportedQuery o ; "Exported Query" end
23
+ def label_VirtualQuery o ; "Virtual Query" end
24
+ def label_QueryExpression o ; "Collect Query" end
25
+ def label_ComparisonExpression o ; "'#{o.operator}' expression" end
26
+ def label_AndExpression o ; "'and' expression" end
27
+ def label_OrExpression o ; "'or' expression" end
28
+ def label_InExpression o ; "'in' expression" end
29
+ def label_ImportExpression o ; "'import' expression" end
30
+ def label_InstanceReferences o ; "Resource Reference" end
31
+ def label_AssignmentExpression o ; "'#{o.operator}' expression" end
32
+ def label_AttributeOperation o ; "'#{o.operator}' expression" end
33
+ def label_LiteralList o ; "Array Expression" end
34
+ def label_LiteralHash o ; "Hash Expression" end
35
+ def label_KeyedEntry o ; "Hash Entry" end
36
+ def label_LiteralBoolean o ; "Boolean" end
37
+ def label_LiteralString o ; "String" end
38
+ def label_LiteralText o ; "Text in Interpolated String" end
39
+ def label_LambdaExpression o ; "Lambda" end
40
+ def label_LiteralDefault o ; "'default' expression" end
41
+ def label_LiteralUndef o ; "'undef' expression" end
42
+ def label_LiteralRegularExpression o ; "Regular Expression" end
43
+ def label_Nop o ; "Nop Expression" end
44
+ def label_NamedAccessExpression o ; "'.' expression" end
45
+ def label_NilClass o ; "Nil Object" end
46
+ def label_NotExpression o ; "'not' expression" end
47
+ def label_VariableExpression o ; "Variable" end
48
+ def label_TextExpression o ; "Expression in Interpolated String" end
49
+ def label_UnaryMinusExpression o ; "Unary Minus" end
50
+ def label_BlockExpression o ; "Block Expression" end
51
+ def label_ConcatenatedString o ; "Double Quoted String" end
52
+ def label_HostClassDefinition o ; "Host Class Definition" end
53
+ def label_NodeDefinition o ; "Node Definition" end
54
+ def label_ResourceTypeDefinition o ; "'define' expression" end
55
+ def label_ResourceOverrideExpression o ; "Resource Override" end
56
+ def label_Parameter o ; "Parameter Definition" end
57
+ def label_ParenthesizedExpression o ; "Parenthesized Expression" end
58
+ def label_IfExpression o ; "'if' statement" end
59
+ def label_UnlessExpression o ; "'unless' Statement" end
60
+ def label_CallNamedFunctionExpression o ; "Function Call" end
61
+ def label_CallMethodExpression o ; "Method call" end
62
+ def label_CaseExpression o ; "'case' statement" end
63
+ def label_CaseOption o ; "Case Option" end
64
+ def label_RelationshipExpression o ; "'#{o.operator}' expression" end
65
+ def label_ResourceBody o ; "Resource Instance Definition" end
66
+ def label_ResourceDefaultsExpression o ; "Resource Defaults Expression" end
67
+ def label_ResourceExpression o ; "Resource Statement" end
68
+ def label_SelectorExpression o ; "Selector Expression" end
69
+ def label_SelectorEntry o ; "Selector Option" end
70
+ def label_String o ; "Ruby String" end
71
+ def label_Object o ; "Ruby Object" end
72
+ def label_QualifiedName o ; "Name" end
73
+ def label_QualifiedReference o ; "Type Name" end
74
+
75
+ end
@@ -0,0 +1,352 @@
1
+ # Dumps a Pops::Model in reverse polish notation; i.e. LISP style
2
+ # The intention is to use this for debugging output
3
+ # TODO: BAD NAME - A DUMP is a Ruby Serialization
4
+ #
5
+ class Puppet::Pops::Model::ModelTreeDumper < Puppet::Pops::Model::TreeDumper
6
+ def dump_Array o
7
+ o.collect {|e| do_dump(e) }
8
+ end
9
+
10
+ def dump_LiteralNumber o
11
+ case o.radix
12
+ when 10
13
+ o.value.to_s
14
+ when 8
15
+ "0%o" % o.value
16
+ when 16
17
+ "0x%X" % o.value
18
+ else
19
+ "bad radix:" + o.value.to_s
20
+ end
21
+ end
22
+
23
+ def dump_LiteralValue o
24
+ o.value.to_s
25
+ end
26
+
27
+ def dump_Factory o
28
+ do_dump(o.current)
29
+ end
30
+
31
+ def dump_ArithmeticExpression o
32
+ [o.operator.to_s, do_dump(o.left_expr), do_dump(o.right_expr)]
33
+ end
34
+
35
+ # x[y] prints as (slice x y)
36
+ def dump_AccessExpression o
37
+ if o.keys.size <= 1
38
+ ["slice", do_dump(o.left_expr), do_dump(o.keys[0])]
39
+ else
40
+ ["slice", do_dump(o.left_expr), do_dump(o.keys)]
41
+ end
42
+ end
43
+
44
+ def dump_MatchesExpression o
45
+ [o.operator.to_s, do_dump(o.left_expr), do_dump(o.right_expr)]
46
+ end
47
+
48
+ def dump_CollectExpression o
49
+ result = ["collect", do_dump(o.type_expr), :indent, :break, do_dump(o.query), :indent]
50
+ o.operations do |ao|
51
+ result << :break << do_dump(ao)
52
+ end
53
+ result += [:dedent, :dedent ]
54
+ result
55
+ end
56
+
57
+ def dump_ExportedQuery o
58
+ result = ["<<| |>>"]
59
+ result += dump_QueryExpression(o) unless is_nop?(o.expr)
60
+ result
61
+ end
62
+
63
+ def dump_VirtualQuery o
64
+ result = ["<| |>"]
65
+ result += dump_QueryExpression(o) unless is_nop?(o.expr)
66
+ result
67
+ end
68
+
69
+ def dump_QueryExpression o
70
+ [do_dump(o.expr)]
71
+ end
72
+
73
+ def dump_ComparisonExpression o
74
+ [o.operator.to_s, do_dump(o.left_expr), do_dump(o.right_expr)]
75
+ end
76
+
77
+ def dump_AndExpression o
78
+ ["&&", do_dump(o.left_expr), do_dump(o.right_expr)]
79
+ end
80
+
81
+ def dump_OrExpression o
82
+ ["||", do_dump(o.left_expr), do_dump(o.right_expr)]
83
+ end
84
+
85
+ def dump_InExpression o
86
+ ["in", do_dump(o.left_expr), do_dump(o.right_expr)]
87
+ end
88
+
89
+ def dump_ImportExpression o
90
+ ["import"] + o.files.collect {|f| do_dump(f) }
91
+ end
92
+
93
+ def dump_InstanceReferences o
94
+ ["instances", do_dump(o.type_name)] + o.names.collect {|n| do_dump(n) }
95
+ end
96
+
97
+ def dump_AssignmentExpression o
98
+ [o.operator.to_s, do_dump(o.left_expr), do_dump(o.right_expr)]
99
+ end
100
+
101
+ # Produces (name => expr) or (name +> expr)
102
+ def dump_AttributeOperation o
103
+ [o.attribute_name, o.operator, do_dump(o.value_expr)]
104
+ end
105
+
106
+ def dump_LiteralList o
107
+ ["[]"] + o.values.collect {|x| do_dump(x)}
108
+ end
109
+
110
+ def dump_LiteralHash o
111
+ ["{}"] + o.entries.collect {|x| do_dump(x)}
112
+ end
113
+
114
+ def dump_KeyedEntry o
115
+ [do_dump(o.key), do_dump(o.value)]
116
+ end
117
+
118
+ def dump_MatchExpression o
119
+ [o.operator.to_s, do_dump(o.left_expr), do_dump(o.right_expr)]
120
+ end
121
+
122
+ def dump_LiteralString o
123
+ "'#{o.value}'"
124
+ end
125
+
126
+ def dump_LiteralText o
127
+ o.value
128
+ end
129
+
130
+ def dump_LambdaExpression o
131
+ result = ["lambda"]
132
+ result << ["parameters"] + o.parameters.collect {|p| do_dump(p) } if o.parameters.size() > 0
133
+ if o.body
134
+ result << do_dump(o.body)
135
+ else
136
+ result << []
137
+ end
138
+ result
139
+ end
140
+
141
+ def dump_LiteralDefault o
142
+ ":default"
143
+ end
144
+
145
+ def dump_LiteralUndef o
146
+ ":undef"
147
+ end
148
+
149
+ def dump_LiteralRegularExpression o
150
+ "/#{o.value.source}/"
151
+ end
152
+
153
+ def dump_Nop o
154
+ ":nop"
155
+ end
156
+
157
+ def dump_NamedAccessExpression o
158
+ [".", do_dump(o.left_expr), do_dump(o.right_expr)]
159
+ end
160
+
161
+ def dump_NilClass o
162
+ "()"
163
+ end
164
+
165
+ def dump_NotExpression o
166
+ ['!', dump(o.expr)]
167
+ end
168
+
169
+ def dump_VariableExpression o
170
+ "$#{dump(o.expr)}"
171
+ end
172
+
173
+ # Interpolation (to string) shown as (str expr)
174
+ def dump_TextExpression o
175
+ ["str", do_dump(o.expr)]
176
+ end
177
+
178
+ def dump_UnaryMinusExpression o
179
+ ['-', do_dump(o.expr)]
180
+ end
181
+
182
+ def dump_BlockExpression o
183
+ ["block"] + o.statements.collect {|x| do_dump(x) }
184
+ end
185
+
186
+ # Interpolated strings are shown as (cat seg0 seg1 ... segN)
187
+ def dump_ConcatenatedString o
188
+ ["cat"] + o.segments.collect {|x| do_dump(x)}
189
+ end
190
+
191
+ def dump_HostClassDefinition o
192
+ result = ["class", o.name]
193
+ result << ["inherits", o.parent_class] if o.parent_class
194
+ result << ["parameters"] + o.parameters.collect {|p| do_dump(p) } if o.parameters.size() > 0
195
+ if o.body
196
+ result << do_dump(o.body)
197
+ else
198
+ result << []
199
+ end
200
+ result
201
+ end
202
+
203
+ def dump_NodeDefinition o
204
+ result = ["node"]
205
+ result << ["matches"] + o.host_matches.collect {|m| do_dump(m) }
206
+ result << ["parent", do_dump(o.parent)] if o.parent
207
+ if o.body
208
+ result << do_dump(o.body)
209
+ else
210
+ result << []
211
+ end
212
+ result
213
+ end
214
+
215
+ def dump_ResourceTypeDefinition o
216
+ result = ["define", o.name]
217
+ result << ["parameters"] + o.parameters.collect {|p| do_dump(p) } if o.parameters.size() > 0
218
+ if o.body
219
+ result << do_dump(o.body)
220
+ else
221
+ result << []
222
+ end
223
+ result
224
+ end
225
+
226
+ def dump_ResourceOverrideExpression o
227
+ result = ["override", do_dump(o.resources), :indent]
228
+ o.operations.each do |p|
229
+ result << :break << do_dump(p)
230
+ end
231
+ result << :dedent
232
+ result
233
+ end
234
+
235
+ # Produces parameters as name, or (= name value)
236
+ def dump_Parameter o
237
+ if o.value
238
+ ["=", o.name, do_dump(o.value)]
239
+ else
240
+ o.name
241
+ end
242
+ end
243
+
244
+ def dump_ParenthesizedExpression o
245
+ do_dump(o.expr)
246
+ end
247
+
248
+ def dump_IfExpression o
249
+ result = ["if", do_dump(o.test), :indent, :break,
250
+ ["then", :indent, do_dump(o.then_expr), :dedent]]
251
+ result +=
252
+ [:break,
253
+ ["else", :indent, do_dump(o.else_expr), :dedent],
254
+ :dedent] unless is_nop? o.else_expr
255
+ result
256
+ end
257
+
258
+ def dump_UnlessExpression o
259
+ result = ["unless", do_dump(o.test), :indent, :break,
260
+ ["then", :indent, do_dump(o.then_expr), :dedent]]
261
+ result +=
262
+ [:break,
263
+ ["else", :indent, do_dump(o.else_expr), :dedent],
264
+ :dedent] unless is_nop? o.else_expr
265
+ result
266
+ end
267
+
268
+ # Produces (invoke name args...) when not required to produce an rvalue, and
269
+ # (call name args ... ) otherwise.
270
+ #
271
+ def dump_CallNamedFunctionExpression o
272
+ result = [o.rval_required ? "call" : "invoke", do_dump(o.functor_expr)]
273
+ o.arguments.collect {|a| result << do_dump(a) }
274
+ result
275
+ end
276
+
277
+ # def dump_CallNamedFunctionExpression o
278
+ # result = [o.rval_required ? "call" : "invoke", do_dump(o.functor_expr)]
279
+ # o.arguments.collect {|a| result << do_dump(a) }
280
+ # result
281
+ # end
282
+
283
+ def dump_CallMethodExpression o
284
+ result = [o.rval_required ? "call-method" : "invoke-method", do_dump(o.functor_expr)]
285
+ o.arguments.collect {|a| result << do_dump(a) }
286
+ result << do_dump(o.lambda) if o.lambda
287
+ result
288
+ end
289
+
290
+ def dump_CaseExpression o
291
+ result = ["case", do_dump(o.test), :indent]
292
+ o.options.each do |s|
293
+ result << :break << do_dump(s)
294
+ end
295
+ result << :dedent
296
+ end
297
+
298
+ def dump_CaseOption o
299
+ result = ["when"]
300
+ result << o.values.collect {|x| do_dump(x) }
301
+ result << ["then", do_dump(o.then_expr) ]
302
+ result
303
+ end
304
+
305
+ def dump_RelationshipExpression o
306
+ [o.operator.to_s, do_dump(o.left_expr), do_dump(o.right_expr)]
307
+ end
308
+
309
+ def dump_ResourceBody o
310
+ result = [do_dump(o.title), :indent]
311
+ o.operations.each do |p|
312
+ result << :break << do_dump(p)
313
+ end
314
+ result << :dedent
315
+ result
316
+ end
317
+
318
+ def dump_ResourceDefaultsExpression o
319
+ result = ["resource-defaults", do_dump(o.type_ref), :indent]
320
+ o.operations.each do |p|
321
+ result << :break << do_dump(p)
322
+ end
323
+ result << :dedent
324
+ result
325
+ end
326
+
327
+ def dump_ResourceExpression o
328
+ form = o.form == :regular ? '' : o.form.to_s + "-"
329
+ result = [form+"resource", do_dump(o.type_name), :indent]
330
+ o.bodies.each do |b|
331
+ result << :break << do_dump(b)
332
+ end
333
+ result << :dedent
334
+ result
335
+ end
336
+
337
+ def dump_SelectorExpression o
338
+ ["?", do_dump(o.left_expr)] + o.selectors.collect {|x| do_dump(x) }
339
+ end
340
+
341
+ def dump_SelectorEntry o
342
+ [do_dump(o.matching_expr), "=>", do_dump(o.value_expr)]
343
+ end
344
+
345
+ def dump_Object o
346
+ [o.class.to_s, o.to_s]
347
+ end
348
+
349
+ def is_nop? o
350
+ o.nil? || o.is_a?(Puppet::Pops::Model::Nop)
351
+ end
352
+ end
@@ -0,0 +1,59 @@
1
+ # Base class for formatted textual dump of a "model"
2
+ #
3
+ class Puppet::Pops::Model::TreeDumper
4
+ attr_accessor :indent_count
5
+ def initialize initial_indentation = 0
6
+ @@dump_visitor ||= Puppet::Pops::Visitor.new(nil,"dump",0,0)
7
+ @indent_count = initial_indentation
8
+ end
9
+
10
+ def dump(o)
11
+ format(do_dump(o))
12
+ end
13
+
14
+ def do_dump(o)
15
+ @@dump_visitor.visit_this(self, o)
16
+ end
17
+
18
+ def indent
19
+ " " * indent_count
20
+ end
21
+
22
+ def format(x)
23
+ result = ""
24
+ parts = format_r(x)
25
+ parts.each_index do |i|
26
+ if i > 0
27
+ # separate with space unless previous ends with whitepsace or (
28
+ result << ' ' if parts[i] != ")" && parts[i-1] !~ /.*(?:\s+|\()$/ && parts[i] !~ /\s+/
29
+ end
30
+ result << parts[i]
31
+ end
32
+ result
33
+ end
34
+
35
+ def format_r(x)
36
+ result = []
37
+ case x
38
+ when :break
39
+ result << "\n" + indent
40
+ when :indent
41
+ @indent_count += 1
42
+ when :dedent
43
+ @indent_count -= 1
44
+ when Array
45
+ result << '('
46
+ result += x.collect {|a| format_r(a) }.flatten
47
+ result << ')'
48
+ when Symbol
49
+ result << x.to_s # Allows Symbols in arrays e.g. ["text", =>, "text"]
50
+ else
51
+ result << x
52
+ end
53
+ result
54
+ end
55
+
56
+ def is_nop? o
57
+ o.nil? || o.is_a?(Puppet::Pops::Model::Nop)
58
+ end
59
+ end