puppet 4.3.0 → 4.4.0

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 (560) hide show
  1. checksums.yaml +7 -0
  2. data/COMMITTERS.md +2 -2
  3. data/CONTRIBUTING.md +6 -6
  4. data/LICENSE +1 -1
  5. data/README.md +8 -9
  6. data/conf/auth.conf +2 -2
  7. data/ext/README.environment +1 -1
  8. data/ext/build_defaults.yaml +1 -1
  9. data/ext/debian/README.source +1 -1
  10. data/ext/debian/control +1 -1
  11. data/ext/debian/copyright +4 -4
  12. data/ext/debian/puppetmaster.README.debian +11 -9
  13. data/ext/emacs/puppet-mode.el +1 -1
  14. data/ext/envpuppet +2 -2
  15. data/ext/ips/puppetagent.xml +1 -1
  16. data/ext/ips/puppetmaster.xml +1 -1
  17. data/ext/project_data.yaml +8 -0
  18. data/ext/puppet-test +3 -3
  19. data/ext/rack/example-passenger-vhost.conf +1 -1
  20. data/ext/redhat/puppet.spec.erb +2 -2
  21. data/ext/regexp_nodes/regexp_nodes.rb +1 -1
  22. data/ext/solaris/pkginfo +1 -1
  23. data/ext/solaris/smf/puppet.xml +1 -1
  24. data/ext/suse/puppet.spec +2 -2
  25. data/ext/upload_facts.rb +1 -1
  26. data/ext/windows/puppet_interactive.bat +6 -0
  27. data/ext/windows/puppet_shell.bat +9 -0
  28. data/ext/windows/run_puppet_interactive.bat +9 -0
  29. data/ext/yaml_nodes.rb +1 -1
  30. data/install.rb +30 -20
  31. data/lib/hiera/scope.rb +1 -1
  32. data/lib/puppet/agent.rb +1 -1
  33. data/lib/puppet/application/agent.rb +4 -2
  34. data/lib/puppet/application/apply.rb +7 -4
  35. data/lib/puppet/application/cert.rb +1 -1
  36. data/lib/puppet/application/device.rb +1 -1
  37. data/lib/puppet/application/filebucket.rb +1 -1
  38. data/lib/puppet/application/inspect.rb +1 -1
  39. data/lib/puppet/application/lookup.rb +45 -47
  40. data/lib/puppet/application/master.rb +2 -2
  41. data/lib/puppet/application/resource.rb +1 -1
  42. data/lib/puppet/configurer.rb +100 -22
  43. data/lib/puppet/data_providers/hiera_config.rb +28 -3
  44. data/lib/puppet/data_providers/hiera_interpolate.rb +30 -15
  45. data/lib/puppet/data_providers/hiera_support.rb +1 -1
  46. data/lib/puppet/data_providers/json_data_provider_factory.rb +2 -2
  47. data/lib/puppet/data_providers/lookup_adapter.rb +73 -26
  48. data/lib/puppet/data_providers/yaml_data_provider_factory.rb +2 -2
  49. data/lib/puppet/defaults.rb +69 -22
  50. data/lib/puppet/environments.rb +3 -1
  51. data/lib/puppet/face/config.rb +1 -1
  52. data/lib/puppet/face/epp.rb +1 -1
  53. data/lib/puppet/face/help/man.erb +1 -1
  54. data/lib/puppet/face/module/install.rb +6 -6
  55. data/lib/puppet/face/parser.rb +12 -9
  56. data/lib/puppet/face/status.rb +2 -1
  57. data/lib/puppet/feature/cfpropertylist.rb +3 -0
  58. data/lib/puppet/feature/telnet.rb +9 -0
  59. data/lib/puppet/file_serving/http_metadata.rb +46 -0
  60. data/lib/puppet/file_serving/metadata.rb +18 -2
  61. data/lib/puppet/file_serving/terminus_selector.rb +2 -0
  62. data/lib/puppet/file_system/file_impl.rb +2 -2
  63. data/lib/puppet/file_system/memory_impl.rb +1 -1
  64. data/lib/puppet/file_system/uniquefile.rb +1 -1
  65. data/lib/puppet/file_system.rb +2 -2
  66. data/lib/puppet/forge/repository.rb +1 -31
  67. data/lib/puppet/forge.rb +1 -1
  68. data/lib/puppet/functions/assert_type.rb +9 -9
  69. data/lib/puppet/functions/each.rb +5 -13
  70. data/lib/puppet/functions/filter.rb +5 -14
  71. data/lib/puppet/functions/lookup.rb +126 -150
  72. data/lib/puppet/functions/map.rb +6 -14
  73. data/lib/puppet/functions/match.rb +1 -0
  74. data/lib/puppet/functions/reduce.rb +5 -13
  75. data/lib/puppet/functions/reverse_each.rb +82 -0
  76. data/lib/puppet/functions/scanf.rb +15 -18
  77. data/lib/puppet/functions/slice.rb +22 -36
  78. data/lib/puppet/functions/split.rb +2 -2
  79. data/lib/puppet/functions/step.rb +88 -0
  80. data/lib/puppet/functions/type.rb +70 -0
  81. data/lib/puppet/functions.rb +45 -6
  82. data/lib/puppet/graph/rb_tree_map.rb +1 -1
  83. data/lib/puppet/indirector/catalog/compiler.rb +188 -5
  84. data/lib/puppet/indirector/facts/facter.rb +2 -13
  85. data/lib/puppet/indirector/file_content/http.rb +15 -0
  86. data/lib/puppet/indirector/file_metadata/http.rb +27 -0
  87. data/lib/puppet/indirector/generic_http.rb +16 -0
  88. data/lib/puppet/indirector/hiera.rb +3 -1
  89. data/lib/puppet/indirector/indirection.rb +6 -2
  90. data/lib/puppet/indirector/json.rb +2 -2
  91. data/lib/puppet/indirector/node/exec.rb +1 -1
  92. data/lib/puppet/indirector/node/ldap.rb +1 -1
  93. data/lib/puppet/indirector/rest.rb +2 -1
  94. data/lib/puppet/info_service/class_information_service.rb +13 -12
  95. data/lib/puppet/loaders.rb +1 -0
  96. data/lib/puppet/module.rb +6 -2
  97. data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +9 -2
  98. data/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +1 -1
  99. data/lib/puppet/module_tool/skeleton/templates/generator/tests/init.pp.erb +2 -2
  100. data/lib/puppet/module_tool/tar/mini.rb +3 -3
  101. data/lib/puppet/network/http/pool.rb +9 -0
  102. data/lib/puppet/node/environment.rb +11 -2
  103. data/lib/puppet/node.rb +11 -2
  104. data/lib/puppet/parser/ast/pops_bridge.rb +19 -22
  105. data/lib/puppet/parser/compiler.rb +4 -11
  106. data/lib/puppet/parser/environment_compiler.rb +0 -1
  107. data/lib/puppet/parser/functions/fqdn_rand.rb +1 -1
  108. data/lib/puppet/parser/functions/inline_template.rb +1 -1
  109. data/lib/puppet/parser/functions/lookup.rb +128 -149
  110. data/lib/puppet/parser/functions/map.rb +1 -1
  111. data/lib/puppet/parser/functions/match.rb +1 -0
  112. data/lib/puppet/parser/functions/scanf.rb +15 -26
  113. data/lib/puppet/parser/functions/slice.rb +17 -24
  114. data/lib/puppet/parser/functions/split.rb +1 -1
  115. data/lib/puppet/parser/functions.rb +28 -16
  116. data/lib/puppet/parser/resource.rb +19 -17
  117. data/lib/puppet/parser/scope.rb +176 -5
  118. data/lib/puppet/plugins/data_providers/data_provider.rb +56 -14
  119. data/lib/puppet/pops/adaptable.rb +4 -1
  120. data/lib/puppet/pops/adapters.rb +80 -12
  121. data/lib/puppet/pops/binder/binder.rb +21 -17
  122. data/lib/puppet/pops/binder/binder_issues.rb +8 -6
  123. data/lib/puppet/pops/binder/bindings_checker.rb +12 -8
  124. data/lib/puppet/pops/binder/bindings_composer.rb +16 -12
  125. data/lib/puppet/pops/binder/bindings_factory.rb +108 -104
  126. data/lib/puppet/pops/binder/bindings_model.rb +49 -47
  127. data/lib/puppet/pops/binder/config/diagnostic_producer.rb +10 -6
  128. data/lib/puppet/pops/binder/injector.rb +53 -48
  129. data/lib/puppet/pops/binder/key_factory.rb +10 -6
  130. data/lib/puppet/pops/binder/producers.rb +67 -62
  131. data/lib/puppet/pops/evaluator/access_operator.rb +98 -96
  132. data/lib/puppet/pops/evaluator/closure.rb +122 -106
  133. data/lib/puppet/pops/evaluator/collector_transformer.rb +34 -14
  134. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +0 -1
  135. data/lib/puppet/pops/evaluator/compare_operator.rb +13 -9
  136. data/lib/puppet/pops/evaluator/epp_evaluator.rb +9 -8
  137. data/lib/puppet/pops/evaluator/evaluator_impl.rb +78 -76
  138. data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +85 -0
  139. data/lib/puppet/pops/evaluator/relationship_operator.rb +13 -11
  140. data/lib/puppet/pops/evaluator/runtime3_converter.rb +5 -0
  141. data/lib/puppet/pops/evaluator/runtime3_support.rb +47 -42
  142. data/lib/puppet/pops/functions/function.rb +6 -2
  143. data/lib/puppet/pops/issue_reporter.rb +6 -4
  144. data/lib/puppet/pops/issues.rb +50 -11
  145. data/lib/puppet/pops/loader/base_loader.rb +1 -1
  146. data/lib/puppet/pops/loader/loader.rb +1 -1
  147. data/lib/puppet/pops/loader/loader_paths.rb +15 -0
  148. data/lib/puppet/pops/loader/module_loaders.rb +17 -13
  149. data/lib/puppet/pops/loader/puppet_function_instantiator.rb +18 -13
  150. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +16 -3
  151. data/lib/puppet/pops/loader/type_definition_instantiator.rb +55 -0
  152. data/lib/puppet/pops/loaders.rb +51 -9
  153. data/lib/puppet/pops/lookup/explainer.rb +73 -3
  154. data/lib/puppet/pops/lookup/invocation.rb +21 -19
  155. data/lib/puppet/pops/lookup.rb +17 -12
  156. data/lib/puppet/pops/merge_strategy.rb +16 -19
  157. data/lib/puppet/pops/model/factory.rb +179 -157
  158. data/lib/puppet/pops/model/model.rb +17 -8
  159. data/lib/puppet/pops/model/model_label_provider.rb +14 -7
  160. data/lib/puppet/pops/model/model_meta.rb +17 -0
  161. data/lib/puppet/pops/model/model_tree_dumper.rb +8 -0
  162. data/lib/puppet/pops/parser/egrammar.ra +38 -14
  163. data/lib/puppet/pops/parser/eparser.rb +1353 -1276
  164. data/lib/puppet/pops/parser/epp_support.rb +11 -7
  165. data/lib/puppet/pops/parser/evaluating_parser.rb +17 -13
  166. data/lib/puppet/pops/parser/heredoc_support.rb +15 -11
  167. data/lib/puppet/pops/parser/lexer2.rb +428 -403
  168. data/lib/puppet/pops/parser/lexer_support.rb +85 -7
  169. data/lib/puppet/pops/parser/locator.rb +21 -0
  170. data/lib/puppet/pops/parser/parser_support.rb +19 -16
  171. data/lib/puppet/pops/parser/slurp_support.rb +16 -8
  172. data/lib/puppet/pops/types/class_loader.rb +23 -19
  173. data/lib/puppet/pops/types/enumeration.rb +9 -26
  174. data/lib/puppet/pops/types/iterable.rb +308 -0
  175. data/lib/puppet/pops/types/recursion_guard.rb +82 -0
  176. data/lib/puppet/pops/types/type_acceptor.rb +25 -0
  177. data/lib/puppet/pops/types/type_asserter.rb +10 -9
  178. data/lib/puppet/pops/types/type_calculator.rb +140 -387
  179. data/lib/puppet/pops/types/type_factory.rb +91 -57
  180. data/lib/puppet/pops/types/type_formatter.rb +334 -0
  181. data/lib/puppet/pops/types/type_mismatch_describer.rb +226 -59
  182. data/lib/puppet/pops/types/type_parser.rb +159 -112
  183. data/lib/puppet/pops/types/types.rb +2057 -1253
  184. data/lib/puppet/pops/utils.rb +11 -10
  185. data/lib/puppet/pops/validation/checker4_0.rb +115 -63
  186. data/lib/puppet/pops/validation/validator_factory_4_0.rb +8 -4
  187. data/lib/puppet/pops/validation.rb +11 -9
  188. data/lib/puppet/pops.rb +0 -8
  189. data/lib/puppet/provider/aixobject.rb +1 -1
  190. data/lib/puppet/provider/augeas/augeas.rb +1 -1
  191. data/lib/puppet/provider/cron/crontab.rb +1 -1
  192. data/lib/puppet/provider/exec/windows.rb +1 -1
  193. data/lib/puppet/provider/group/windows_adsi.rb +2 -2
  194. data/lib/puppet/provider/macauthorization/macauthorization.rb +10 -9
  195. data/lib/puppet/provider/nameservice/directoryservice.rb +35 -50
  196. data/lib/puppet/provider/package/appdmg.rb +3 -2
  197. data/lib/puppet/provider/package/dnf.rb +1 -1
  198. data/lib/puppet/provider/package/pip.rb +16 -9
  199. data/lib/puppet/provider/package/pip3.rb +1 -1
  200. data/lib/puppet/provider/package/pkg.rb +1 -1
  201. data/lib/puppet/provider/package/pkgdmg.rb +3 -2
  202. data/lib/puppet/provider/package/pkgng.rb +13 -4
  203. data/lib/puppet/provider/package/rpm.rb +0 -1
  204. data/lib/puppet/provider/package/windows.rb +1 -1
  205. data/lib/puppet/provider/package/yum.rb +2 -2
  206. data/lib/puppet/provider/package/zypper.rb +19 -0
  207. data/lib/puppet/provider/service/debian.rb +7 -20
  208. data/lib/puppet/provider/service/init.rb +7 -0
  209. data/lib/puppet/provider/service/launchd.rb +6 -12
  210. data/lib/puppet/provider/service/systemd.rb +9 -2
  211. data/lib/puppet/provider/sshkey/parsed.rb +1 -1
  212. data/lib/puppet/provider/user/aix.rb +1 -1
  213. data/lib/puppet/provider/user/directoryservice.rb +33 -58
  214. data/lib/puppet/provider/user/windows_adsi.rb +2 -2
  215. data/lib/puppet/provider/yumrepo/inifile.rb +6 -3
  216. data/lib/puppet/provider/zfs/zfs.rb +1 -1
  217. data/lib/puppet/provider/zpool/zpool.rb +1 -1
  218. data/lib/puppet/reference/configuration.rb +1 -1
  219. data/lib/puppet/reference/providers.rb +1 -1
  220. data/lib/puppet/resource/capability_finder.rb +20 -13
  221. data/lib/puppet/resource/catalog.rb +60 -3
  222. data/lib/puppet/resource/status.rb +11 -2
  223. data/lib/puppet/resource/type.rb +33 -42
  224. data/lib/puppet/resource.rb +15 -12
  225. data/lib/puppet/settings/config_file.rb +1 -1
  226. data/lib/puppet/settings/environment_conf.rb +13 -5
  227. data/lib/puppet/settings.rb +1 -1
  228. data/lib/puppet/ssl/certificate_factory.rb +3 -3
  229. data/lib/puppet/ssl/certificate_request.rb +4 -4
  230. data/lib/puppet/ssl/certificate_signer.rb +1 -1
  231. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  232. data/lib/puppet/test/test_helper.rb +16 -4
  233. data/lib/puppet/transaction/additional_resource_generator.rb +23 -5
  234. data/lib/puppet/transaction/report.rb +31 -1
  235. data/lib/puppet/transaction/resource_harness.rb +0 -25
  236. data/lib/puppet/transaction.rb +15 -2
  237. data/lib/puppet/type/augeas.rb +1 -1
  238. data/lib/puppet/type/cron.rb +12 -12
  239. data/lib/puppet/type/file/checksum_value.rb +53 -0
  240. data/lib/puppet/type/file/content.rb +26 -111
  241. data/lib/puppet/type/file/data_sync.rb +84 -0
  242. data/lib/puppet/type/file/ensure.rb +17 -14
  243. data/lib/puppet/type/file/selcontext.rb +1 -1
  244. data/lib/puppet/type/file/source.rb +103 -18
  245. data/lib/puppet/type/file.rb +91 -39
  246. data/lib/puppet/type/filebucket.rb +1 -1
  247. data/lib/puppet/type/group.rb +6 -2
  248. data/lib/puppet/type/interface.rb +8 -3
  249. data/lib/puppet/type/macauthorization.rb +1 -1
  250. data/lib/puppet/type/package.rb +6 -0
  251. data/lib/puppet/type/schedule.rb +1 -1
  252. data/lib/puppet/type/stage.rb +1 -1
  253. data/lib/puppet/type/user.rb +19 -17
  254. data/lib/puppet/type/yumrepo.rb +20 -0
  255. data/lib/puppet/type.rb +11 -11
  256. data/lib/puppet/util/autoload.rb +16 -11
  257. data/lib/puppet/util/checksums.rb +74 -31
  258. data/lib/puppet/util/execution.rb +1 -1
  259. data/lib/puppet/util/http_proxy.rb +72 -0
  260. data/lib/puppet/util/log.rb +2 -0
  261. data/lib/puppet/util/logging.rb +43 -1
  262. data/lib/puppet/util/monkey_patches.rb +2 -2
  263. data/lib/puppet/util/multi_match.rb +51 -0
  264. data/lib/puppet/util/network_device/cisco/device.rb +10 -2
  265. data/lib/puppet/util/network_device/cisco/interface.rb +21 -8
  266. data/lib/puppet/util/network_device/transport/ssh.rb +7 -3
  267. data/lib/puppet/util/network_device/transport/telnet.rb +39 -36
  268. data/lib/puppet/util/plist.rb +130 -0
  269. data/lib/puppet/util/resource_template.rb +1 -1
  270. data/lib/puppet/util/run_mode.rb +2 -2
  271. data/lib/puppet/util/skip_tags.rb +9 -0
  272. data/lib/puppet/util/windows/access_control_entry.rb +1 -1
  273. data/lib/puppet/util/windows/access_control_list.rb +3 -3
  274. data/lib/puppet/util/windows/adsi.rb +65 -28
  275. data/lib/puppet/util/windows/api_types.rb +24 -18
  276. data/lib/puppet/util/windows/com.rb +3 -3
  277. data/lib/puppet/util/windows/error.rb +1 -1
  278. data/lib/puppet/util/windows/file.rb +8 -8
  279. data/lib/puppet/util/windows/principal.rb +190 -0
  280. data/lib/puppet/util/windows/process.rb +78 -11
  281. data/lib/puppet/util/windows/registry.rb +22 -16
  282. data/lib/puppet/util/windows/root_certs.rb +5 -5
  283. data/lib/puppet/util/windows/security.rb +33 -35
  284. data/lib/puppet/util/windows/security_descriptor.rb +1 -1
  285. data/lib/puppet/util/windows/sid.rb +84 -15
  286. data/lib/puppet/util/windows/taskscheduler.rb +15 -15
  287. data/lib/puppet/util/windows/user.rb +10 -10
  288. data/lib/puppet/util/windows.rb +4 -0
  289. data/lib/puppet/util.rb +109 -22
  290. data/lib/puppet/vendor/deep_merge/deep_merge.gemspec +1 -1
  291. data/lib/puppet/vendor/pathspec/LICENSE +2 -2
  292. data/lib/puppet/vendor/pathspec/README.md +1 -1
  293. data/lib/puppet/vendor/rgen/README.rdoc +1 -1
  294. data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +14 -0
  295. data/lib/puppet/version.rb +1 -1
  296. data/lib/puppet.rb +17 -0
  297. data/lib/semver.rb +17 -1
  298. data/man/man5/puppet.conf.5 +12 -12
  299. data/man/man8/extlookup2hiera.8 +1 -1
  300. data/man/man8/puppet-agent.8 +2 -2
  301. data/man/man8/puppet-apply.8 +2 -2
  302. data/man/man8/puppet-ca.8 +2 -2
  303. data/man/man8/puppet-catalog.8 +2 -2
  304. data/man/man8/puppet-cert.8 +2 -2
  305. data/man/man8/puppet-certificate.8 +2 -2
  306. data/man/man8/puppet-certificate_request.8 +2 -2
  307. data/man/man8/puppet-certificate_revocation_list.8 +2 -2
  308. data/man/man8/puppet-config.8 +3 -3
  309. data/man/man8/puppet-describe.8 +1 -1
  310. data/man/man8/puppet-device.8 +1 -1
  311. data/man/man8/puppet-doc.8 +1 -1
  312. data/man/man8/puppet-epp.8 +2 -2
  313. data/man/man8/puppet-facts.8 +2 -2
  314. data/man/man8/puppet-file.8 +2 -2
  315. data/man/man8/puppet-filebucket.8 +2 -2
  316. data/man/man8/puppet-help.8 +2 -2
  317. data/man/man8/puppet-inspect.8 +2 -2
  318. data/man/man8/puppet-key.8 +2 -2
  319. data/man/man8/puppet-man.8 +2 -2
  320. data/man/man8/puppet-master.8 +2 -2
  321. data/man/man8/puppet-module.8 +9 -9
  322. data/man/man8/puppet-node.8 +2 -2
  323. data/man/man8/puppet-parser.8 +2 -2
  324. data/man/man8/puppet-plugin.8 +2 -2
  325. data/man/man8/puppet-report.8 +2 -2
  326. data/man/man8/puppet-resource.8 +2 -2
  327. data/man/man8/puppet-resource_type.8 +2 -2
  328. data/man/man8/puppet-status.8 +3 -3
  329. data/man/man8/puppet.8 +1 -1
  330. data/spec/fixtures/module.tar.gz +0 -0
  331. data/spec/fixtures/unit/application/environments/production/data/common.yaml +4 -0
  332. data/spec/fixtures/unit/application/environments/production/manifests/site.pp +1 -0
  333. data/spec/fixtures/unit/application/environments/puppet_func_provider/environment.conf +1 -0
  334. data/spec/fixtures/unit/application/environments/puppet_func_provider/functions/data.pp +10 -0
  335. data/spec/fixtures/unit/application/environments/puppet_func_provider/manifests/site.pp +1 -0
  336. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/common.yaml +4 -0
  337. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/specific.yaml +4 -0
  338. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/hiera.yaml +7 -0
  339. data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/common.yaml +4 -0
  340. data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/specific.yaml +4 -0
  341. data/spec/fixtures/unit/data_providers/environments/hiera_modules/environment.conf +2 -0
  342. data/spec/fixtures/unit/data_providers/environments/hiera_modules/hiera.yaml +7 -0
  343. data/spec/fixtures/unit/data_providers/environments/hiera_modules/manifests/site.pp +1 -0
  344. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/data/common.yaml +6 -0
  345. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/hiera.yaml +5 -0
  346. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/manifests/init.pp +2 -0
  347. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/metadata.json +9 -0
  348. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/data/common.yaml +4 -0
  349. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/hiera.yaml +5 -0
  350. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/manifests/init.pp +3 -0
  351. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/metadata.json +9 -0
  352. data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +1 -0
  353. data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/manifests/init.pp +0 -1
  354. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/data/empty.json +0 -0
  355. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/hiera.yaml +5 -0
  356. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/manifests/init.pp +2 -0
  357. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/metadata.json +9 -0
  358. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/data/empty.yaml +1 -0
  359. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/hiera.yaml +5 -0
  360. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/manifests/init.pp +2 -0
  361. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/metadata.json +9 -0
  362. data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/data/first.json +2 -1
  363. data/spec/fixtures/unit/module/trailing-comma.json +1 -1
  364. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/functions/usee_puppet.pp +3 -0
  365. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/lib/puppet/functions/usee/usee_ruby.rb +6 -0
  366. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/manifests/init.pp +8 -0
  367. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/types/zero.pp +1 -0
  368. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee2/lib/puppet/functions/usee2/callee.rb +5 -0
  369. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet.pp +5 -0
  370. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet_init.pp +5 -0
  371. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_ruby.pp +5 -0
  372. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/caller2.rb +5 -0
  373. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet.rb +5 -0
  374. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet_init.rb +5 -0
  375. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_ruby.rb +5 -0
  376. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/manifests/init.pp +81 -0
  377. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/metadata.json +2 -1
  378. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseeone.pp +1 -0
  379. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseezero.pp +1 -0
  380. data/spec/fixtures/unit/provider/package/yum/yum-check-update-broken-notices.txt +187 -0
  381. data/spec/fixtures/unit/provider/sshkey/parsed/sample_with_blank_lines +8 -0
  382. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +205 -0
  383. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_not_update_if_content_on_disk_is_up-to-date.yml +213 -0
  384. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +213 -0
  385. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +205 -0
  386. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +197 -0
  387. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +205 -0
  388. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +205 -0
  389. data/spec/integration/defaults_spec.rb +14 -2
  390. data/spec/integration/file_system/uniquefile_spec.rb +29 -0
  391. data/spec/integration/module_tool/tar/mini_spec.rb +28 -0
  392. data/spec/integration/node/environment_spec.rb +13 -0
  393. data/spec/integration/parser/collection_spec.rb +8 -0
  394. data/spec/integration/parser/dynamic_scoping_spec.rb +67 -0
  395. data/spec/integration/parser/parameter_defaults_spec.rb +336 -0
  396. data/spec/integration/parser/undef_param_spec.rb +8 -0
  397. data/spec/integration/provider/yumrepo_spec.rb +1 -1
  398. data/spec/integration/test/test_helper_spec.rb +28 -0
  399. data/spec/integration/transaction/report_spec.rb +16 -0
  400. data/spec/integration/transaction_spec.rb +11 -0
  401. data/spec/integration/type/file_spec.rb +194 -4
  402. data/spec/integration/type/package_spec.rb +5 -1
  403. data/spec/integration/type/tidy_spec.rb +21 -9
  404. data/spec/integration/util/execution_spec.rb +22 -0
  405. data/spec/integration/util/windows/principal_spec.rb +201 -0
  406. data/spec/integration/util/windows/process_spec.rb +31 -0
  407. data/spec/{unit → integration}/util/windows/registry_spec.rb +91 -1
  408. data/spec/integration/util/windows/security_spec.rb +8 -8
  409. data/spec/integration/util/windows/user_spec.rb +1 -1
  410. data/spec/integration/util_spec.rb +49 -27
  411. data/spec/lib/puppet_spec/compiler.rb +17 -0
  412. data/spec/lib/puppet_spec/files.rb +2 -2
  413. data/spec/lib/puppet_spec/pops.rb +13 -0
  414. data/spec/shared_behaviours/iterative_functions.rb +1 -1
  415. data/spec/shared_contexts/types_setup.rb +96 -0
  416. data/spec/unit/agent_spec.rb +1 -0
  417. data/spec/unit/application/agent_spec.rb +10 -0
  418. data/spec/unit/application/apply_spec.rb +9 -0
  419. data/spec/unit/application/lookup_spec.rb +138 -28
  420. data/spec/unit/configurer/downloader_spec.rb +5 -5
  421. data/spec/unit/configurer_spec.rb +271 -39
  422. data/spec/unit/data_providers/hiera_data_provider_spec.rb +182 -5
  423. data/spec/unit/data_providers/hiera_interpolation_spec.rb +57 -0
  424. data/spec/unit/defaults_spec.rb +15 -0
  425. data/spec/unit/environments_spec.rb +24 -4
  426. data/spec/unit/face/epp_face_spec.rb +2 -2
  427. data/spec/unit/face/parser_spec.rb +43 -2
  428. data/spec/unit/file_serving/http_metadata_spec.rb +85 -0
  429. data/spec/unit/file_serving/metadata_spec.rb +50 -0
  430. data/spec/unit/file_serving/terminus_selector_spec.rb +12 -2
  431. data/spec/unit/file_system_spec.rb +26 -0
  432. data/spec/unit/functions/assert_type_spec.rb +36 -2
  433. data/spec/unit/functions/defined_spec.rb +2 -2
  434. data/spec/unit/functions/epp_spec.rb +17 -9
  435. data/spec/unit/functions/inline_epp_spec.rb +4 -4
  436. data/spec/unit/functions/lookup_spec.rb +88 -16
  437. data/spec/unit/functions/regsubst_spec.rb +1 -1
  438. data/spec/unit/functions/reverse_each_spec.rb +108 -0
  439. data/spec/unit/functions/step_spec.rb +113 -0
  440. data/spec/unit/functions/type_spec.rb +35 -0
  441. data/spec/unit/functions4_spec.rb +62 -6
  442. data/spec/unit/hiera/scope_spec.rb +5 -2
  443. data/spec/unit/indirector/catalog/compiler_spec.rb +705 -4
  444. data/spec/unit/indirector/file_bucket_file/file_spec.rb +1 -1
  445. data/spec/unit/indirector/indirection_spec.rb +1 -1
  446. data/spec/unit/indirector/json_spec.rb +1 -1
  447. data/spec/unit/info_service_spec.rb +94 -32
  448. data/spec/unit/module_spec.rb +14 -0
  449. data/spec/unit/module_tool/applications/builder_spec.rb +4 -4
  450. data/spec/unit/network/authstore_spec.rb +1 -1
  451. data/spec/unit/network/http/connection_spec.rb +1 -0
  452. data/spec/unit/network/http/pool_spec.rb +30 -0
  453. data/spec/unit/node_spec.rb +8 -0
  454. data/spec/unit/parser/compiler_spec.rb +16 -18
  455. data/spec/unit/parser/scope_spec.rb +28 -11
  456. data/spec/unit/pops/evaluator/access_ops_spec.rb +7 -7
  457. data/spec/unit/pops/evaluator/comparison_ops_spec.rb +3 -0
  458. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +8 -2
  459. data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +4 -4
  460. data/spec/unit/pops/evaluator/json_strict_literal_evaluator_spec.rb +63 -0
  461. data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +6 -0
  462. data/spec/unit/pops/loaders/dependency_loader_spec.rb +53 -0
  463. data/spec/unit/pops/loaders/loaders_spec.rb +127 -2
  464. data/spec/unit/pops/parser/lexer2_spec.rb +118 -3
  465. data/spec/unit/pops/parser/parse_calls_spec.rb +8 -0
  466. data/spec/unit/pops/parser/parser_rspec_helper.rb +5 -0
  467. data/spec/unit/pops/parser/parser_spec.rb +10 -0
  468. data/spec/unit/pops/parser/source_pos_adapter_spec.rb +26 -0
  469. data/spec/unit/pops/types/iterable_spec.rb +262 -0
  470. data/spec/unit/pops/types/recursion_guard_spec.rb +91 -0
  471. data/spec/unit/pops/types/type_acceptor_spec.rb +105 -0
  472. data/spec/unit/pops/types/type_asserter_spec.rb +43 -0
  473. data/spec/unit/pops/types/type_calculator_spec.rb +275 -390
  474. data/spec/unit/pops/types/type_formatter_spec.rb +280 -0
  475. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +152 -0
  476. data/spec/unit/pops/types/type_parser_spec.rb +58 -13
  477. data/spec/unit/pops/types/types_spec.rb +241 -0
  478. data/spec/unit/pops/validator/validator_spec.rb +159 -15
  479. data/spec/unit/provider/cron/parsed_spec.rb +1 -0
  480. data/spec/unit/provider/group/windows_adsi_spec.rb +8 -8
  481. data/spec/unit/provider/macauthorization_spec.rb +5 -2
  482. data/spec/unit/provider/nameservice/directoryservice_spec.rb +14 -19
  483. data/spec/unit/provider/package/appdmg_spec.rb +3 -3
  484. data/spec/unit/provider/package/dnf_spec.rb +16 -0
  485. data/spec/unit/provider/package/pip3_spec.rb +60 -42
  486. data/spec/unit/provider/package/pip_spec.rb +88 -47
  487. data/spec/unit/provider/package/pkgdmg_spec.rb +18 -9
  488. data/spec/unit/provider/package/pkgng_spec.rb +4 -2
  489. data/spec/unit/provider/package/rpm_spec.rb +2 -25
  490. data/spec/unit/provider/package/yum_spec.rb +12 -1
  491. data/spec/unit/provider/package/zypper_spec.rb +14 -0
  492. data/spec/unit/provider/service/debian_spec.rb +6 -24
  493. data/spec/unit/provider/service/init_spec.rb +11 -1
  494. data/spec/unit/provider/service/launchd_spec.rb +18 -25
  495. data/spec/unit/provider/service/systemd_spec.rb +25 -12
  496. data/spec/unit/provider/service/upstart_spec.rb +57 -0
  497. data/spec/unit/provider/sshkey/parsed_spec.rb +20 -19
  498. data/spec/unit/provider/user/directoryservice_spec.rb +40 -59
  499. data/spec/unit/provider/user/windows_adsi_spec.rb +5 -5
  500. data/spec/unit/provider/yumrepo/inifile_spec.rb +16 -0
  501. data/spec/unit/resource/capability_finder_spec.rb +28 -15
  502. data/spec/unit/resource/catalog_spec.rb +33 -1
  503. data/spec/unit/resource/type_spec.rb +149 -7
  504. data/spec/unit/resource_spec.rb +99 -50
  505. data/spec/unit/settings/environment_conf_spec.rb +18 -1
  506. data/spec/unit/ssl/certificate_revocation_list_spec.rb +3 -3
  507. data/spec/unit/transaction/report_spec.rb +27 -0
  508. data/spec/unit/transaction/resource_harness_spec.rb +0 -47
  509. data/spec/unit/transaction_spec.rb +5 -0
  510. data/spec/unit/type/file/checksum_spec.rb +6 -0
  511. data/spec/unit/type/file/checksum_value_spec.rb +286 -0
  512. data/spec/unit/type/file/content_spec.rb +12 -193
  513. data/spec/unit/type/file/source_spec.rb +211 -119
  514. data/spec/unit/type/file_spec.rb +133 -34
  515. data/spec/unit/type/interface_spec.rb +32 -0
  516. data/spec/unit/type/macauthorization_spec.rb +4 -1
  517. data/spec/unit/type/yumrepo_spec.rb +2 -2
  518. data/spec/unit/util/filetype_spec.rb +1 -1
  519. data/spec/unit/util/http_proxy_spec.rb +2 -2
  520. data/spec/unit/util/log/destinations_spec.rb +0 -2
  521. data/spec/unit/util/logging_spec.rb +69 -0
  522. data/spec/unit/util/multi_match_spec.rb +39 -0
  523. data/spec/unit/util/network_device/cisco/device_spec.rb +253 -216
  524. data/spec/unit/util/network_device/transport/telnet_spec.rb +60 -58
  525. data/spec/unit/util/plist_spec.rb +110 -0
  526. data/spec/unit/util/resource_template_spec.rb +2 -2
  527. data/spec/unit/util/run_mode_spec.rb +27 -3
  528. data/spec/unit/util/windows/adsi_spec.rb +46 -38
  529. data/spec/unit/util/windows/api_types_spec.rb +42 -0
  530. data/spec/unit/util/windows/security_descriptor_spec.rb +3 -3
  531. data/spec/unit/util/windows/sid_spec.rb +48 -11
  532. data/spec/unit/util_spec.rb +123 -13
  533. data/tasks/cfpropertylist.rake +15 -0
  534. metadata +3342 -3195
  535. data/lib/puppet/vendor/load_plist.rb +0 -1
  536. data/lib/puppet/vendor/plist/CHANGELOG +0 -82
  537. data/lib/puppet/vendor/plist/MIT-LICENSE +0 -21
  538. data/lib/puppet/vendor/plist/PUPPET_README.md +0 -6
  539. data/lib/puppet/vendor/plist/README +0 -36
  540. data/lib/puppet/vendor/plist/Rakefile +0 -144
  541. data/lib/puppet/vendor/plist/docs/USAGE +0 -104
  542. data/lib/puppet/vendor/plist/docs/jamis-template.rb +0 -591
  543. data/lib/puppet/vendor/plist/lib/plist/generator.rb +0 -224
  544. data/lib/puppet/vendor/plist/lib/plist/parser.rb +0 -225
  545. data/lib/puppet/vendor/plist/lib/plist.rb +0 -22
  546. data/lib/puppet/vendor/plist/test/assets/AlbumData.xml +0 -203
  547. data/lib/puppet/vendor/plist/test/assets/Cookies.plist +0 -104
  548. data/lib/puppet/vendor/plist/test/assets/commented.plist +0 -9
  549. data/lib/puppet/vendor/plist/test/assets/example_data.bin +0 -0
  550. data/lib/puppet/vendor/plist/test/assets/example_data.jpg +0 -0
  551. data/lib/puppet/vendor/plist/test/assets/example_data.plist +0 -259
  552. data/lib/puppet/vendor/plist/test/assets/test_data_elements.plist +0 -24
  553. data/lib/puppet/vendor/plist/test/assets/test_empty_key.plist +0 -13
  554. data/lib/puppet/vendor/plist/test/test_data_elements.rb +0 -115
  555. data/lib/puppet/vendor/plist/test/test_generator.rb +0 -59
  556. data/lib/puppet/vendor/plist/test/test_generator_basic_types.rb +0 -58
  557. data/lib/puppet/vendor/plist/test/test_generator_collections.rb +0 -82
  558. data/lib/puppet/vendor/plist/test/test_parser.rb +0 -90
  559. /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{usee → modules/usee}/lib/puppet/functions/usee/callee.rb +0 -0
  560. /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/lib/puppet/functions/user/caller.rb +0 -0
@@ -1,7 +1,13 @@
1
+
2
+ module Puppet::Pops
3
+ module Parser
4
+
5
+ require 'puppet/util/multi_match'
6
+
1
7
  # This is an integral part of the Lexer. It is broken out into a separate module
2
8
  # for maintainability of the code, and making the various parts of the lexer focused.
3
9
  #
4
- module Puppet::Pops::Parser::LexerSupport
10
+ module LexerSupport
5
11
 
6
12
  # Returns "<eof>" if at end of input, else the following 5 characters with \n \r \t escaped
7
13
  def followed_by
@@ -56,7 +62,7 @@ module Puppet::Pops::Parser::LexerSupport
56
62
  })
57
63
  end
58
64
 
59
- # @param issue [Puppet::Pops::Issues::Issue] the issue
65
+ # @param issue [Issues::Issue] the issue
60
66
  # @param args [Hash<Symbol,String>] Issue arguments
61
67
  # @param pos [Integer]
62
68
  # @return [Puppet::ParseErrorWithIssue] the created error
@@ -75,16 +81,16 @@ module Puppet::Pops::Parser::LexerSupport
75
81
  #
76
82
  def assert_numeric(value, pos)
77
83
  if value =~ /^0[xX]/
78
- lex_error(Puppet::Pops::Issues::INVALID_HEX_NUMBER, {:value => value}, pos) unless value =~ /^0[xX][0-9A-Fa-f]+$/
84
+ lex_error(Issues::INVALID_HEX_NUMBER, {:value => value}, pos) unless value =~ /^0[xX][0-9A-Fa-f]+$/
79
85
 
80
86
  elsif value =~ /^0[^.]/
81
- lex_error(Puppet::Pops::Issues::INVALID_OCTAL_NUMBER, {:value => value}, pos) unless value =~ /^0[0-7]+$/
87
+ lex_error(Issues::INVALID_OCTAL_NUMBER, {:value => value}, pos) unless value =~ /^0[0-7]+$/
82
88
 
83
89
  elsif value =~ /^\d+[eE.]/
84
- lex_error(Puppet::Pops::Issues::INVALID_DECIMAL_NUMBER, {:value => value}, pos) unless value =~ /^\d+(?:\.\d+)?(?:[eE]-?\d+)?$/
90
+ lex_error(Issues::INVALID_DECIMAL_NUMBER, {:value => value}, pos) unless value =~ /^\d+(?:\.\d+)?(?:[eE]-?\d+)?$/
85
91
 
86
92
  else
87
- lex_error(Puppet::Pops::Issues::ILLEGAL_NUMBER, {:value => value}, pos) unless value =~ /^\d+$/
93
+ lex_error(Issues::ILLEGAL_NUMBER, {:value => value}, pos) unless value =~ /^\d+$/
88
94
  end
89
95
  end
90
96
 
@@ -92,7 +98,7 @@ module Puppet::Pops::Parser::LexerSupport
92
98
  # and its position in its source container. There is a cost associated with computing the
93
99
  # line and position on line information.
94
100
  #
95
- class TokenValue < Puppet::Pops::Parser::Locatable
101
+ class TokenValue < Locatable
96
102
  attr_reader :token_array
97
103
  attr_reader :offset
98
104
  attr_reader :locator
@@ -139,4 +145,76 @@ module Puppet::Pops::Parser::LexerSupport
139
145
  #
140
146
  end
141
147
 
148
+
149
+ MM = Puppet::Util::MultiMatch
150
+ MM_ANY = MM::NOT_NIL
151
+
152
+ BOM_UTF_8 = MM.new(0xEF, 0xBB, 0xBF, MM_ANY)
153
+ BOM_UTF_16_1 = MM.new(0xFE, 0xFF, MM_ANY, MM_ANY)
154
+ BOM_UTF_16_2 = MM.new(0xFF, 0xFE, MM_ANY, MM_ANY)
155
+ BOM_UTF_32_1 = MM.new(0x00, 0x00, 0xFE, 0xFF )
156
+ BOM_UTF_32_2 = MM.new(0xFF, 0xFE, 0x00, 0x00 )
157
+
158
+ BOM_UTF_1 = MM.new(0xF7, 0x64, 0x4C, MM_ANY)
159
+ BOM_UTF_EBCDIC = MM.new(0xDD, 0x73, 0x66, 0x73 )
160
+ BOM_SCSU = MM.new(0x0E, 0xFE, 0xFF, MM_ANY)
161
+ BOM_BOCU = MM.new(0xFB, 0xEE, 0x28, MM_ANY)
162
+ BOM_GB_18030 = MM.new(0x84, 0x31, 0x95, 0x33 )
163
+
164
+ LONGEST_BOM = 4
165
+
166
+ def assert_not_bom(content)
167
+ name, size =
168
+ case bom = get_bom(content)
169
+
170
+ when BOM_UTF_32_1, BOM_UTF_32_2
171
+ ['UTF-32', 4]
172
+
173
+ when BOM_GB_18030
174
+ ['GB-18030', 4]
175
+
176
+ when BOM_UTF_EBCDIC
177
+ ['UTF-EBCDIC', 4]
178
+
179
+ when BOM_SCSU
180
+ ['SCSU', 3]
181
+
182
+ when BOM_UTF_8
183
+ ['UTF-8', 3]
184
+
185
+ when BOM_UTF_1
186
+ ['UTF-1', 3]
187
+
188
+ when BOM_BOCU
189
+ ['BOCU', 3]
190
+
191
+ when BOM_UTF_16_1, BOM_UTF_16_2
192
+ ['UTF-16', 2]
193
+
194
+ else
195
+ return
196
+ end
197
+
198
+ lex_error_without_pos(
199
+ Puppet::Pops::Issues::ILLEGAL_BOM,
200
+ { :format_name => name,
201
+ :bytes => "[#{bom.values[0,size].map {|b| "%X" % b}.join(" ")}]"
202
+ })
203
+ end
204
+
205
+ def get_bom(content)
206
+ # get 5 bytes as efficiently as possible (none of the string methods works since a bom consists of
207
+ # illegal characters on most platforms, and there is no get_bytes(n). xplicit calls are faster than
208
+ # looping with a lambda. The get_byte returns nil if there are too few characters, and they
209
+ # are changed to spaces
210
+ MM.new(
211
+ (content.getbyte(0) || ' '),
212
+ (content.getbyte(1) || ' '),
213
+ (content.getbyte(2) || ' '),
214
+ (content.getbyte(3) || ' ')
215
+ )
216
+ end
217
+
218
+ end
219
+ end
142
220
  end
@@ -41,6 +41,15 @@ class Puppet::Pops::Parser::Locator
41
41
  def char_length(offset, end_offset)
42
42
  end
43
43
 
44
+ # Returns the length measured in number of characters from the given start and end byte offseta
45
+ def char_length(offset, end_offset)
46
+ end
47
+
48
+ # Extracts the text from offset with given length (measured in what the locator uses for offset)
49
+ # @returns String - the extracted text
50
+ def extract_text(offset, length)
51
+ end
52
+
44
53
  # Returns the line index - an array of line offsets for the start position of each line, starting at 0 for
45
54
  # the first line.
46
55
  #
@@ -238,6 +247,12 @@ class Puppet::Pops::Parser::Locator
238
247
  end_offset - offset
239
248
  end
240
249
 
250
+ # Extracts the text from char offset with given byte length
251
+ # @returns String - the extracted text
252
+ def extract_text(offset, length)
253
+ string.slice(offset, length)
254
+ end
255
+
241
256
  end
242
257
 
243
258
  # This implementation is for Ruby19 and Ruby20. It uses byteslice to get strings from byte based offsets.
@@ -263,5 +278,11 @@ class Puppet::Pops::Parser::Locator
263
278
  def char_length(offset, end_offset)
264
279
  string.byteslice(offset, end_offset - offset).length
265
280
  end
281
+
282
+ # Extracts the text from byte offset with given byte length
283
+ # @returns String - the extracted text
284
+ def extract_text(offset, length)
285
+ string.byteslice(offset, length)
286
+ end
266
287
  end
267
288
  end
@@ -5,11 +5,13 @@ require 'puppet/resource/type_collection_helper'
5
5
  require 'puppet/resource/type'
6
6
  require 'monitor'
7
7
 
8
+ module Puppet::Pops
9
+ module Parser
8
10
  # Supporting logic for the parser.
9
11
  # This supporting logic has slightly different responsibilities compared to the original Puppet::Parser::Parser.
10
12
  # It is only concerned with parsing.
11
13
  #
12
- class Puppet::Pops::Parser::Parser
14
+ class Parser
13
15
  # Note that the name of the contained class and the file name (currently parser_support.rb)
14
16
  # needs to be different as the class is generated by Racc, and this file (parser_support.rb) is included as a mix in
15
17
  #
@@ -18,8 +20,7 @@ class Puppet::Pops::Parser::Parser
18
20
  # Note that the parser/parser support does not have direct knowledge about the Model.
19
21
  # All model construction/manipulation is made by the Factory.
20
22
  #
21
- Factory = Puppet::Pops::Model::Factory
22
- Model = Puppet::Pops::Model
23
+ Factory = Model::Factory
23
24
 
24
25
  include Puppet::Resource::TypeCollectionHelper
25
26
 
@@ -51,19 +52,19 @@ class Puppet::Pops::Parser::Parser
51
52
  #
52
53
  def error(semantic, message)
53
54
  except = Puppet::ParseError.new(message)
54
- if semantic.is_a?(Puppet::Pops::Parser::LexerSupport::TokenValue)
55
+ if semantic.is_a?(LexerSupport::TokenValue)
55
56
  except.file = semantic[:file];
56
57
  except.line = semantic[:line];
57
58
  except.pos = semantic[:pos];
58
59
  else
59
- semantic = semantic.current() if semantic.is_a?(Puppet::Pops::Model::Factory)
60
+ semantic = semantic.current() if semantic.is_a?(Factory)
60
61
 
61
62
  # Adapt the model so it is possible to get location information.
62
63
  # The model may not have been added to the source tree, so give it the lexer's locator
63
64
  # directly instead of searching for the root Program where the locator is normally stored.
64
65
  #
65
- if semantic.is_a?(Puppet::Pops::Model::Positioned)
66
- adapter = Puppet::Pops::Adapters::SourcePosAdapter.adapt(semantic)
66
+ if semantic.is_a?(Model::Positioned)
67
+ adapter = Adapters::SourcePosAdapter.adapt(semantic)
67
68
  adapter.locator = @lexer.locator
68
69
  else
69
70
  adapter = nil
@@ -87,7 +88,7 @@ class Puppet::Pops::Parser::Parser
87
88
  end
88
89
 
89
90
  def initialize()
90
- @lexer = Puppet::Pops::Parser::Lexer2.new
91
+ @lexer = Lexer2.new
91
92
  @namestack = []
92
93
  @definitions = []
93
94
  end
@@ -100,7 +101,7 @@ class Puppet::Pops::Parser::Parser
100
101
  else
101
102
  value_at = "'#{value[:value]}'"
102
103
  end
103
- error = Puppet::Pops::Issues::SYNTAX_ERROR.format(:where => value_at)
104
+ error = Issues::SYNTAX_ERROR.format(:where => value_at)
104
105
  error = "#{error}, token: #{token}" if @yydebug
105
106
 
106
107
  # Note, old parser had processing of "expected token here" - do not try to reinstate:
@@ -126,7 +127,7 @@ class Puppet::Pops::Parser::Parser
126
127
  file = lexer.file
127
128
  end
128
129
  file = nil unless file.is_a?(String) && !file.empty?
129
- raise Puppet::ParseErrorWithIssue.new(error, file, line, pos, nil, issue_code = Puppet::Pops::Issues::SYNTAX_ERROR.issue_code)
130
+ raise Puppet::ParseErrorWithIssue.new(error, file, line, pos, nil, issue_code = Issues::SYNTAX_ERROR.issue_code)
130
131
  end
131
132
 
132
133
  # Parses a String of pp DSL code.
@@ -137,7 +138,7 @@ class Puppet::Pops::Parser::Parser
137
138
  end
138
139
 
139
140
  # Mark the factory wrapped model object with location information
140
- # @return [Puppet::Pops::Model::Factory] the given factory
141
+ # @return [Factory] the given factory
141
142
  # @api private
142
143
  #
143
144
  def loc(factory, start_locateable, end_locateable = nil)
@@ -145,7 +146,7 @@ class Puppet::Pops::Parser::Parser
145
146
  end
146
147
 
147
148
  # Mark the factory wrapped heredoc model object with location information
148
- # @return [Puppet::Pops::Model::Factory] the given factory
149
+ # @return [Factory] the given factory
149
150
  # @api private
150
151
  #
151
152
  def heredoc_loc(factory, start_locateabke, end_locateable = nil)
@@ -193,10 +194,10 @@ class Puppet::Pops::Parser::Parser
193
194
  #
194
195
  begin
195
196
  Factory.transform_calls(expressions)
196
- rescue Puppet::Pops::Model::Factory::ArgsToNonCallError => e
197
+ rescue Factory::ArgsToNonCallError => e
197
198
  # e.args[1] is the first comma token in the list
198
199
  # e.name_expr is the function name expression
199
- if e.name_expr.is_a?(Puppet::Pops::Model::QualifiedName)
200
+ if e.name_expr.is_a?(Model::QualifiedName)
200
201
  error(e.args[1], "attempt to pass argument list to the function '#{e.name_expr.value}' which cannot be called without parentheses")
201
202
  else
202
203
  error(e.args[1], "illegal comma separated argument list")
@@ -205,8 +206,8 @@ class Puppet::Pops::Parser::Parser
205
206
  end
206
207
 
207
208
  # Transforms a LEFT followed by the result of attribute_operations, this may be a call or an invalid sequence
208
- def transform_resource_wo_title(left, resource)
209
- Factory.transform_resource_wo_title(left, resource)
209
+ def transform_resource_wo_title(left, resource, lbrace_token, rbrace_token)
210
+ Factory.transform_resource_wo_title(left, resource, lbrace_token, rbrace_token)
210
211
  end
211
212
 
212
213
  # Creates a program with the given body.
@@ -249,3 +250,5 @@ class Puppet::Pops::Parser::Parser
249
250
  end
250
251
 
251
252
  end
253
+ end
254
+ end
@@ -1,3 +1,5 @@
1
+ module Puppet::Pops
2
+ module Parser
1
3
  # This module is an integral part of the Lexer.
2
4
  # It defines the string slurping behavior - finding the string and non string parts in interpolated
3
5
  # strings, translating escape sequences in strings to their single character equivalence.
@@ -6,8 +8,8 @@
6
8
  # additional parameter passing and evaluation of conditional logic.
7
9
  # TODO: More detailed performance analysis of excessive character escaping and interpolation.
8
10
  #
9
- module Puppet::Pops::Parser::SlurpSupport
10
- include Puppet::Pops::Parser::LexerSupport
11
+ module SlurpSupport
12
+ include LexerSupport
11
13
 
12
14
  SLURP_SQ_PATTERN = /(?:[^\\]|^|[^\\])(?:[\\]{2})*[']/
13
15
  SLURP_DQ_PATTERN = /(?:[^\\]|^|[^\\])(?:[\\]{2})*(["]|[$]\{?)/
@@ -23,7 +25,7 @@ module Puppet::Pops::Parser::SlurpSupport
23
25
  # skip the leading '
24
26
  @scanner.pos += 1
25
27
  str = slurp(@scanner, SLURP_SQ_PATTERN, SQ_ESCAPES, :ignore_invalid_escapes)
26
- lex_error(Puppet::Pops::Issues::UNCLOSED_QUOTE, :after => "\"'\"", :followed_by => followed_by) unless str
28
+ lex_error(Issues::UNCLOSED_QUOTE, :after => "\"'\"", :followed_by => followed_by) unless str
27
29
  str[0..-2] # strip closing "'" from result
28
30
  end
29
31
 
@@ -32,7 +34,7 @@ module Puppet::Pops::Parser::SlurpSupport
32
34
  last = scn.matched
33
35
  str = slurp(scn, SLURP_DQ_PATTERN, DQ_ESCAPES, false)
34
36
  unless str
35
- lex_error(Puppet::Pops::Issues::UNCLOSED_QUOTE, :after => format_quote(last), :followed_by => followed_by)
37
+ lex_error(Issues::UNCLOSED_QUOTE, :after => format_quote(last), :followed_by => followed_by)
36
38
  end
37
39
 
38
40
  # Terminator may be a single char '"', '$', or two characters '${' group match 1 (scn[1]) from the last slurp holds this
@@ -67,6 +69,10 @@ module Puppet::Pops::Parser::SlurpSupport
67
69
  def slurp(scanner, pattern, escapes, ignore_invalid_escapes)
68
70
  str = scanner.scan_until(pattern) || return
69
71
 
72
+ return str unless str.include?('\\')
73
+
74
+ return str.gsub!(/\\(\\|')/m, '\1') || str if escapes.equal?(SQ_ESCAPES)
75
+
70
76
  # Process unicode escapes first as they require getting 4 hex digits
71
77
  # If later a \u is found it is warned not to be a unicode escape
72
78
  if escapes.include?('u')
@@ -83,16 +89,16 @@ module Puppet::Pops::Parser::SlurpSupport
83
89
  when 'r' ; "\r"
84
90
  when 'n' ; "\n"
85
91
  when 't' ; "\t"
86
- when 's' ; " "
92
+ when 's' ; ' '
87
93
  when 'u'
88
- lex_warning(Puppet::Pops::Issues::ILLEGAL_UNICODE_ESCAPE)
94
+ lex_warning(Issues::ILLEGAL_UNICODE_ESCAPE)
89
95
  "\\u"
90
96
  when "\n" ; ''
91
97
  when "\r\n"; ''
92
98
  else ch
93
99
  end
94
100
  else
95
- lex_warning(Puppet::Pops::Issues::UNRECOGNIZED_ESCAPE, :ch => ch) unless ignore_invalid_escapes
101
+ lex_warning(Issues::UNRECOGNIZED_ESCAPE, :ch => ch) unless ignore_invalid_escapes
96
102
  "\\#{ch}"
97
103
  end
98
104
  }
@@ -101,7 +107,7 @@ module Puppet::Pops::Parser::SlurpSupport
101
107
  # have reached this far... Unfortunately there is no more specific error and a match on message is
102
108
  # required to differentiate from other internal problems.
103
109
  if e.message =~ /invalid byte sequence/
104
- lex_error(Puppet::Pops::Issues::ILLEGAL_UNICODE_ESCAPE)
110
+ lex_error(Issues::ILLEGAL_UNICODE_ESCAPE)
105
111
  else
106
112
  raise e
107
113
  end
@@ -109,3 +115,5 @@ module Puppet::Pops::Parser::SlurpSupport
109
115
  str
110
116
  end
111
117
  end
118
+ end
119
+ end
@@ -1,15 +1,17 @@
1
1
  require 'rgen/metamodel_builder'
2
2
 
3
+ module Puppet::Pops
4
+ module Types
3
5
  # The ClassLoader provides a Class instance given a class name or a meta-type.
4
6
  # If the class is not already loaded, it is loaded using the Puppet Autoloader.
5
7
  # This means it can load a class from a gem, or from puppet modules.
6
8
  #
7
- class Puppet::Pops::Types::ClassLoader
9
+ class ClassLoader
8
10
  @autoloader = Puppet::Util::Autoload.new("ClassLoader", "")
9
11
 
10
12
  # Returns a Class given a fully qualified class name.
11
13
  # Lookup of class is never relative to the calling namespace.
12
- # @param name [String, Array<String>, Array<Symbol>, Puppet::Pops::Types::PAnyType] A fully qualified
14
+ # @param name [String, Array<String>, Array<Symbol>, PAnyType] A fully qualified
13
15
  # class name String (e.g. '::Foo::Bar', 'Foo::Bar'), a PAnyType, or a fully qualified name in Array form where each part
14
16
  # is either a String or a Symbol, e.g. `%w{Puppetx Puppetlabs SomeExtension}`.
15
17
  # @return [Class, nil] the looked up class or nil if no such class is loaded
@@ -24,7 +26,7 @@ class Puppet::Pops::Types::ClassLoader
24
26
  when Array
25
27
  provide_from_name_path(name.join('::'), name)
26
28
 
27
- when Puppet::Pops::Types::PAnyType, Puppet::Pops::Types::PType
29
+ when PAnyType, PType
28
30
  provide_from_type(name)
29
31
 
30
32
  else
@@ -36,38 +38,38 @@ class Puppet::Pops::Types::ClassLoader
36
38
 
37
39
  def self.provide_from_type(type)
38
40
  case type
39
- when Puppet::Pops::Types::PRuntimeType
41
+ when PRuntimeType
40
42
  raise ArgumentError.new("Only Runtime type 'ruby' is supported, got #{type.runtime}") unless type.runtime == :ruby
41
43
  provide_from_string(type.runtime_type_name)
42
44
 
43
- when Puppet::Pops::Types::PBooleanType
45
+ when PBooleanType
44
46
  # There is no other thing to load except this Enum meta type
45
47
  RGen::MetamodelBuilder::MMBase::Boolean
46
48
 
47
- when Puppet::Pops::Types::PType
49
+ when PType
48
50
  # TODO: PType should has a type argument (a PAnyType) so the Class' class could be returned
49
51
  # (but this only matters in special circumstances when meta programming has been used).
50
52
  Class
51
53
 
52
- when Puppet::Pops::Type::POptionalType
54
+ when POptionalType
53
55
  # cannot make a distinction between optional and its type
54
56
  provide_from_type(type.optional_type)
55
57
 
56
58
  # Although not expected to be the first choice for getting a concrete class for these
57
59
  # types, these are of value if the calling logic just has a reference to type.
58
60
  #
59
- when Puppet::Pops::Types::PArrayType ; Array
60
- when Puppet::Pops::Types::PTupleType ; Array
61
- when Puppet::Pops::Types::PHashType ; Hash
62
- when Puppet::Pops::Types::PStructType ; Hash
63
- when Puppet::Pops::Types::PRegexpType ; Regexp
64
- when Puppet::Pops::Types::PIntegerType ; Integer
65
- when Puppet::Pops::Types::PStringType ; String
66
- when Puppet::Pops::Types::PPatternType ; String
67
- when Puppet::Pops::Types::PEnumType ; String
68
- when Puppet::Pops::Types::PFloatType ; Float
69
- when Puppet::Pops::Types::PUndefType ; NilClass
70
- when Puppet::Pops::Types::PCallableType ; Proc
61
+ when PArrayType ; Array
62
+ when PTupleType ; Array
63
+ when PHashType ; Hash
64
+ when PStructType ; Hash
65
+ when PRegexpType ; Regexp
66
+ when PIntegerType ; Integer
67
+ when PStringType ; String
68
+ when PPatternType ; String
69
+ when PEnumType ; String
70
+ when PFloatType ; Float
71
+ when PUndefType ; NilClass
72
+ when PCallableType ; Proc
71
73
  else
72
74
  nil
73
75
  end
@@ -127,3 +129,5 @@ class Puppet::Pops::Types::ClassLoader
127
129
  end
128
130
 
129
131
  end
132
+ end
133
+ end
@@ -1,33 +1,16 @@
1
1
  # The Enumeration class provides default Enumerable::Enumerator creation for Puppet Programming Language
2
2
  # runtime objects that supports the concept of enumeration.
3
3
  #
4
- class Puppet::Pops::Types::Enumeration
5
- # Produces an Enumerable::Enumerator for Array, Hash, Integer, Integer Range, and String.
6
- #
7
- def self.enumerator(o)
8
- @@singleton ||= new
9
- @@singleton.enumerator(o)
10
- end
4
+ module Puppet::Pops::Types
5
+ class Enumeration
6
+ def self.enumerator(o)
7
+ Puppet.deprecation_warning('Enumeration.enumerator is deprecated. Use Iterable.on instead')
8
+ Iterable.on(o)
9
+ end
11
10
 
12
- # Produces an Enumerator for Array, Hash, Integer, Integer Range, and String.
13
- #
14
- def enumerator(o)
15
- case o
16
- when String
17
- x = o.chars
18
- # Ruby 1.9.3 returns an Enumerator, and 2.0.0 an Array
19
- x.is_a?(Array) ? x.each : x
20
- when Integer
21
- o.times
22
- when Array
23
- o.each
24
- when Hash
25
- o.each
26
- when Puppet::Pops::Types::PIntegerType
27
- # Not enumerable if representing an infinite range
28
- o.enumerable? ? o.each : nil
29
- else
30
- nil
11
+ def enumerator(o)
12
+ Puppet.deprecation_warning('Enumeration.enumerator is deprecated. Use Iterable.on instead')
13
+ Iterable.on(o)
31
14
  end
32
15
  end
33
16
  end