puppet 4.0.0 → 4.5.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 (1327) hide show
  1. data/COMMITTERS.md +2 -2
  2. data/CONTRIBUTING.md +10 -10
  3. data/Gemfile +6 -8
  4. data/LICENSE +3 -3
  5. data/README.md +14 -10
  6. data/Rakefile +20 -0
  7. data/conf/auth.conf +2 -2
  8. data/conf/puppet.conf +1 -1
  9. data/ext/README.environment +1 -1
  10. data/ext/build_defaults.yaml +9 -36
  11. data/ext/debian/README.source +1 -1
  12. data/ext/debian/control +1 -1
  13. data/ext/debian/copyright +4 -4
  14. data/ext/debian/puppet.default +0 -5
  15. data/ext/debian/puppet.init +1 -16
  16. data/ext/debian/puppet.logrotate +14 -5
  17. data/ext/debian/puppetmaster.README.debian +11 -9
  18. data/ext/emacs/puppet-mode.el +1 -1
  19. data/ext/envpuppet +2 -2
  20. data/ext/ips/puppetagent.xml +1 -1
  21. data/ext/ips/puppetmaster.xml +1 -1
  22. data/ext/osx/puppet.plist +30 -0
  23. data/ext/project_data.yaml +11 -1
  24. data/ext/puppet-test +3 -3
  25. data/ext/rack/example-passenger-vhost.conf +1 -1
  26. data/ext/redhat/client.init +67 -17
  27. data/ext/redhat/client.sysconfig +1 -10
  28. data/ext/redhat/logrotate +15 -3
  29. data/ext/redhat/puppet.spec.erb +6 -11
  30. data/ext/redhat/server.init +1 -1
  31. data/ext/regexp_nodes/regexp_nodes.rb +1 -1
  32. data/ext/solaris/pkginfo +1 -1
  33. data/ext/solaris/smf/puppet +44 -0
  34. data/ext/solaris/smf/puppet.xml +44 -0
  35. data/ext/suse/client.init +30 -33
  36. data/ext/suse/puppet.spec +2 -2
  37. data/ext/suse/server.init +2 -2
  38. data/ext/systemd/puppet.service +3 -1
  39. data/ext/upload_facts.rb +1 -1
  40. data/ext/windows/puppet_interactive.bat +6 -0
  41. data/ext/windows/puppet_shell.bat +9 -0
  42. data/ext/windows/run_puppet_interactive.bat +9 -0
  43. data/ext/yaml_nodes.rb +1 -1
  44. data/install.rb +51 -59
  45. data/lib/hiera/puppet_function.rb +18 -7
  46. data/lib/hiera/scope.rb +1 -1
  47. data/lib/hiera_puppet.rb +6 -14
  48. data/lib/puppet/agent/locker.rb +11 -2
  49. data/lib/puppet/agent.rb +9 -24
  50. data/lib/puppet/application/agent.rb +39 -19
  51. data/lib/puppet/application/apply.rb +68 -15
  52. data/lib/puppet/application/ca.rb +1 -0
  53. data/lib/puppet/application/cert.rb +17 -1
  54. data/lib/puppet/application/device.rb +9 -4
  55. data/lib/puppet/application/filebucket.rb +79 -5
  56. data/lib/puppet/application/inspect.rb +2 -2
  57. data/lib/puppet/application/lookup.rb +342 -0
  58. data/lib/puppet/application/master.rb +22 -7
  59. data/lib/puppet/application/resource.rb +1 -5
  60. data/lib/puppet/configurer/plugin_handler.rb +6 -2
  61. data/lib/puppet/configurer.rb +116 -31
  62. data/lib/puppet/context/trusted_information.rb +21 -1
  63. data/lib/puppet/context.rb +16 -1
  64. data/lib/puppet/daemon.rb +17 -13
  65. data/lib/puppet/data_binding.rb +4 -2
  66. data/lib/puppet/data_providers/data_adapter.rb +7 -68
  67. data/lib/puppet/data_providers/data_function_support.rb +5 -26
  68. data/lib/puppet/data_providers/function_env_data_provider.rb +0 -10
  69. data/lib/puppet/data_providers/function_module_data_provider.rb +0 -22
  70. data/lib/puppet/data_providers/hiera_config.rb +129 -0
  71. data/lib/puppet/data_providers/hiera_env_data_provider.rb +18 -0
  72. data/lib/puppet/data_providers/hiera_interpolate.rb +19 -0
  73. data/lib/puppet/data_providers/hiera_module_data_provider.rb +23 -0
  74. data/lib/puppet/data_providers/hiera_support.rb +37 -0
  75. data/lib/puppet/data_providers/json_data_provider_factory.rb +24 -0
  76. data/lib/puppet/data_providers/lookup_adapter.rb +247 -0
  77. data/lib/puppet/data_providers/yaml_data_provider_factory.rb +26 -0
  78. data/lib/puppet/data_providers.rb +12 -13
  79. data/lib/puppet/defaults.rb +202 -47
  80. data/lib/puppet/environments.rb +98 -8
  81. data/lib/puppet/error.rb +31 -1
  82. data/lib/puppet/face/config.rb +1 -1
  83. data/lib/puppet/face/epp.rb +1 -1
  84. data/lib/puppet/face/help/man.erb +1 -1
  85. data/lib/puppet/face/module/changes.rb +2 -1
  86. data/lib/puppet/face/module/install.rb +6 -6
  87. data/lib/puppet/face/parser.rb +12 -9
  88. data/lib/puppet/face/plugin.rb +7 -14
  89. data/lib/puppet/face/status.rb +2 -1
  90. data/lib/puppet/feature/cfacter.rb +1 -0
  91. data/lib/puppet/feature/cfpropertylist.rb +3 -0
  92. data/lib/puppet/feature/telnet.rb +9 -0
  93. data/lib/puppet/file_bucket/dipper.rb +58 -2
  94. data/lib/puppet/file_serving/http_metadata.rb +46 -0
  95. data/lib/puppet/file_serving/metadata.rb +30 -9
  96. data/lib/puppet/file_serving/terminus_helper.rb +7 -8
  97. data/lib/puppet/file_serving/terminus_selector.rb +2 -0
  98. data/lib/puppet/file_system/file_impl.rb +6 -2
  99. data/lib/puppet/file_system/memory_impl.rb +5 -1
  100. data/lib/puppet/file_system/uniquefile.rb +3 -3
  101. data/lib/puppet/file_system/windows.rb +12 -16
  102. data/lib/puppet/file_system.rb +15 -2
  103. data/lib/puppet/forge/repository.rb +1 -32
  104. data/lib/puppet/forge.rb +1 -1
  105. data/lib/puppet/functions/assert_type.rb +57 -21
  106. data/lib/puppet/functions/defined.rb +161 -0
  107. data/lib/puppet/functions/dig.rb +39 -0
  108. data/lib/puppet/functions/each.rb +89 -39
  109. data/lib/puppet/functions/epp.rb +29 -37
  110. data/lib/puppet/functions/filter.rb +64 -38
  111. data/lib/puppet/functions/hiera.rb +76 -3
  112. data/lib/puppet/functions/hiera_array.rb +65 -3
  113. data/lib/puppet/functions/hiera_hash.rb +74 -2
  114. data/lib/puppet/functions/hiera_include.rb +77 -4
  115. data/lib/puppet/functions/inline_epp.rb +44 -71
  116. data/lib/puppet/functions/lest.rb +53 -0
  117. data/lib/puppet/functions/lookup.rb +172 -184
  118. data/lib/puppet/functions/map.rb +60 -33
  119. data/lib/puppet/functions/match.rb +30 -12
  120. data/lib/puppet/functions/new.rb +502 -0
  121. data/lib/puppet/functions/reduce.rb +99 -70
  122. data/lib/puppet/functions/regsubst.rb +12 -11
  123. data/lib/puppet/functions/reverse_each.rb +82 -0
  124. data/lib/puppet/functions/scanf.rb +15 -18
  125. data/lib/puppet/functions/slice.rb +22 -36
  126. data/lib/puppet/functions/split.rb +3 -3
  127. data/lib/puppet/functions/step.rb +88 -0
  128. data/lib/puppet/functions/then.rb +74 -0
  129. data/lib/puppet/functions/type.rb +70 -0
  130. data/lib/puppet/functions/versioncmp.rb +36 -0
  131. data/lib/puppet/functions/with.rb +15 -7
  132. data/lib/puppet/functions.rb +149 -13
  133. data/lib/puppet/graph/rb_tree_map.rb +1 -1
  134. data/lib/puppet/indirector/catalog/compiler.rb +196 -9
  135. data/lib/puppet/indirector/catalog/static_compiler.rb +46 -30
  136. data/lib/puppet/indirector/data_binding/none.rb +4 -1
  137. data/lib/puppet/indirector/facts/facter.rb +8 -0
  138. data/lib/puppet/indirector/file_bucket_file/file.rb +58 -1
  139. data/lib/puppet/indirector/file_content/http.rb +15 -0
  140. data/lib/puppet/indirector/file_metadata/http.rb +27 -0
  141. data/lib/puppet/indirector/generic_http.rb +16 -0
  142. data/lib/puppet/indirector/hiera.rb +7 -1
  143. data/lib/puppet/indirector/indirection.rb +12 -3
  144. data/lib/puppet/indirector/json.rb +3 -3
  145. data/lib/puppet/indirector/msgpack.rb +2 -2
  146. data/lib/puppet/indirector/node/exec.rb +1 -1
  147. data/lib/puppet/indirector/node/ldap.rb +1 -1
  148. data/lib/puppet/indirector/request.rb +7 -8
  149. data/lib/puppet/indirector/resource_type/parser.rb +10 -3
  150. data/lib/puppet/indirector/rest.rb +7 -2
  151. data/lib/puppet/indirector/terminus.rb +4 -4
  152. data/lib/puppet/info_service/class_information_service.rb +112 -0
  153. data/lib/puppet/info_service.rb +7 -0
  154. data/lib/puppet/loaders.rb +4 -0
  155. data/lib/puppet/metatype/manager.rb +19 -2
  156. data/lib/puppet/module.rb +26 -17
  157. data/lib/puppet/module_tool/applications/application.rb +1 -1
  158. data/lib/puppet/module_tool/applications/builder.rb +2 -2
  159. data/lib/puppet/module_tool/applications/unpacker.rb +1 -1
  160. data/lib/puppet/module_tool/metadata.rb +32 -9
  161. data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +14 -3
  162. data/lib/puppet/module_tool/skeleton/templates/generator/README.md.erb +42 -38
  163. data/lib/puppet/module_tool/skeleton/templates/generator/Rakefile +19 -4
  164. data/lib/puppet/module_tool/skeleton/templates/generator/{tests → examples}/init.pp.erb +2 -2
  165. data/lib/puppet/module_tool/skeleton/templates/generator/manifests/init.pp.erb +25 -18
  166. data/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +1 -2
  167. data/lib/puppet/module_tool/tar/mini.rb +3 -3
  168. data/lib/puppet/network/auth_config_parser.rb +1 -1
  169. data/lib/puppet/network/authconfig.rb +21 -1
  170. data/lib/puppet/network/authorization.rb +8 -1
  171. data/lib/puppet/network/http/api/indirected_routes.rb +0 -2
  172. data/lib/puppet/network/http/api/master/v3/environment.rb +63 -0
  173. data/lib/puppet/network/http/api/master/v3.rb +7 -1
  174. data/lib/puppet/network/http/factory.rb +8 -4
  175. data/lib/puppet/network/http/pool.rb +9 -0
  176. data/lib/puppet/network/http/rack/rest.rb +10 -1
  177. data/lib/puppet/node/environment.rb +35 -11
  178. data/lib/puppet/node.rb +39 -8
  179. data/lib/puppet/parser/ast/pops_bridge.rb +85 -24
  180. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +64 -0
  181. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +60 -0
  182. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +20 -0
  183. data/lib/puppet/parser/compiler/catalog_validator.rb +33 -0
  184. data/lib/puppet/parser/compiler.rb +305 -15
  185. data/lib/puppet/parser/e4_parser_adapter.rb +13 -12
  186. data/lib/puppet/parser/environment_compiler.rb +164 -0
  187. data/lib/puppet/parser/functions/assert_type.rb +46 -16
  188. data/lib/puppet/parser/functions/defined.rb +105 -44
  189. data/lib/puppet/parser/functions/each.rb +85 -27
  190. data/lib/puppet/parser/functions/epp.rb +29 -37
  191. data/lib/puppet/parser/functions/file.rb +3 -1
  192. data/lib/puppet/parser/functions/filter.rb +59 -23
  193. data/lib/puppet/parser/functions/fqdn_rand.rb +3 -3
  194. data/lib/puppet/parser/functions/hiera.rb +83 -27
  195. data/lib/puppet/parser/functions/hiera_array.rb +71 -28
  196. data/lib/puppet/parser/functions/hiera_hash.rb +81 -30
  197. data/lib/puppet/parser/functions/hiera_include.rb +81 -40
  198. data/lib/puppet/parser/functions/inline_epp.rb +35 -60
  199. data/lib/puppet/parser/functions/inline_template.rb +2 -2
  200. data/lib/puppet/parser/functions/lookup.rb +125 -149
  201. data/lib/puppet/parser/functions/map.rb +55 -20
  202. data/lib/puppet/parser/functions/match.rb +28 -12
  203. data/lib/puppet/parser/functions/reduce.rb +97 -60
  204. data/lib/puppet/parser/functions/scanf.rb +15 -26
  205. data/lib/puppet/parser/functions/slice.rb +17 -24
  206. data/lib/puppet/parser/functions/split.rb +1 -1
  207. data/lib/puppet/parser/functions/with.rb +16 -8
  208. data/lib/puppet/parser/functions.rb +28 -16
  209. data/lib/puppet/parser/resource.rb +119 -26
  210. data/lib/puppet/parser/scope.rb +233 -24
  211. data/lib/puppet/parser/templatewrapper.rb +2 -1
  212. data/lib/puppet/parser.rb +3 -0
  213. data/lib/puppet/plugins/configuration.rb +3 -2
  214. data/lib/puppet/plugins/data_providers/data_provider.rb +336 -0
  215. data/lib/puppet/plugins/data_providers/registry.rb +84 -0
  216. data/lib/puppet/plugins/data_providers.rb +12 -60
  217. data/lib/puppet/pops/adaptable.rb +4 -1
  218. data/lib/puppet/pops/adapters.rb +96 -12
  219. data/lib/puppet/pops/binder/binder.rb +21 -17
  220. data/lib/puppet/pops/binder/binder_issues.rb +8 -6
  221. data/lib/puppet/pops/binder/bindings_checker.rb +12 -8
  222. data/lib/puppet/pops/binder/bindings_composer.rb +16 -12
  223. data/lib/puppet/pops/binder/bindings_factory.rb +108 -104
  224. data/lib/puppet/pops/binder/bindings_label_provider.rb +3 -1
  225. data/lib/puppet/pops/binder/bindings_loader.rb +6 -2
  226. data/lib/puppet/pops/binder/bindings_model.rb +49 -47
  227. data/lib/puppet/pops/binder/bindings_model_meta.rb +2 -2
  228. data/lib/puppet/pops/binder/config/binder_config.rb +1 -1
  229. data/lib/puppet/pops/binder/config/diagnostic_producer.rb +10 -6
  230. data/lib/puppet/pops/binder/injector.rb +55 -50
  231. data/lib/puppet/pops/binder/key_factory.rb +10 -12
  232. data/lib/puppet/pops/binder/producers.rb +67 -62
  233. data/lib/puppet/pops/binder/scheme_handler/module_scheme.rb +68 -9
  234. data/lib/puppet/pops/evaluator/access_operator.rb +189 -138
  235. data/lib/puppet/pops/evaluator/closure.rb +151 -104
  236. data/lib/puppet/pops/evaluator/collector_transformer.rb +35 -25
  237. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -1
  238. data/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +4 -0
  239. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +4 -1
  240. data/lib/puppet/pops/evaluator/compare_operator.rb +87 -10
  241. data/lib/puppet/pops/evaluator/epp_evaluator.rb +16 -10
  242. data/lib/puppet/pops/evaluator/evaluator_impl.rb +204 -111
  243. data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +85 -0
  244. data/lib/puppet/pops/evaluator/literal_evaluator.rb +88 -0
  245. data/lib/puppet/pops/evaluator/relationship_operator.rb +19 -11
  246. data/lib/puppet/pops/evaluator/runtime3_converter.rb +19 -2
  247. data/lib/puppet/pops/evaluator/runtime3_support.rb +95 -44
  248. data/lib/puppet/pops/functions/dispatch.rb +6 -1
  249. data/lib/puppet/pops/functions/dispatcher.rb +10 -4
  250. data/lib/puppet/pops/functions/function.rb +6 -2
  251. data/lib/puppet/pops/issue_reporter.rb +48 -20
  252. data/lib/puppet/pops/issues.rb +194 -17
  253. data/lib/puppet/pops/label_provider.rb +1 -1
  254. data/lib/puppet/pops/loader/base_loader.rb +48 -7
  255. data/lib/puppet/pops/loader/dependency_loader.rb +27 -2
  256. data/lib/puppet/pops/loader/loader.rb +23 -0
  257. data/lib/puppet/pops/loader/loader_paths.rb +82 -6
  258. data/lib/puppet/pops/loader/module_loaders.rb +36 -21
  259. data/lib/puppet/pops/loader/predefined_loader.rb +29 -0
  260. data/lib/puppet/pops/loader/puppet_function_instantiator.rb +83 -0
  261. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +16 -3
  262. data/lib/puppet/pops/loader/runtime3_type_loader.rb +57 -0
  263. data/lib/puppet/pops/loader/static_loader.rb +92 -5
  264. data/lib/puppet/pops/loader/type_definition_instantiator.rb +77 -0
  265. data/lib/puppet/pops/loaders.rb +133 -19
  266. data/lib/puppet/pops/lookup/explainer.rb +509 -0
  267. data/lib/puppet/pops/lookup/interpolation.rb +115 -0
  268. data/lib/puppet/pops/lookup/invocation.rb +119 -0
  269. data/lib/puppet/pops/lookup/sub_lookup.rb +86 -0
  270. data/lib/puppet/pops/lookup.rb +35 -52
  271. data/lib/puppet/pops/merge_strategy.rb +85 -30
  272. data/lib/puppet/pops/migration/migration_checker.rb +54 -0
  273. data/lib/puppet/pops/model/ast_transformer.rb +8 -1
  274. data/lib/puppet/pops/model/factory.rb +242 -158
  275. data/lib/puppet/pops/model/model.rb +25 -8
  276. data/lib/puppet/pops/model/model_label_provider.rb +25 -6
  277. data/lib/puppet/pops/model/model_meta.rb +48 -3
  278. data/lib/puppet/pops/model/model_tree_dumper.rb +30 -0
  279. data/lib/puppet/pops/parser/code_merger.rb +13 -1
  280. data/lib/puppet/pops/parser/egrammar.ra +133 -30
  281. data/lib/puppet/pops/parser/eparser.rb +1738 -1254
  282. data/lib/puppet/pops/parser/epp_support.rb +27 -12
  283. data/lib/puppet/pops/parser/evaluating_parser.rb +27 -13
  284. data/lib/puppet/pops/parser/heredoc_support.rb +19 -14
  285. data/lib/puppet/pops/parser/interpolation_support.rb +7 -1
  286. data/lib/puppet/pops/parser/lexer2.rb +452 -379
  287. data/lib/puppet/pops/parser/lexer_support.rb +132 -25
  288. data/lib/puppet/pops/parser/locator.rb +30 -5
  289. data/lib/puppet/pops/parser/parser_support.rb +49 -37
  290. data/lib/puppet/pops/parser/slurp_support.rb +32 -8
  291. data/lib/puppet/pops/patterns.rb +3 -0
  292. data/lib/puppet/pops/pcore.rb +30 -0
  293. data/lib/puppet/pops/types/class_loader.rb +25 -23
  294. data/lib/puppet/pops/types/enumeration.rb +9 -27
  295. data/lib/puppet/pops/types/implementation_registry.rb +146 -0
  296. data/lib/puppet/pops/types/iterable.rb +308 -0
  297. data/lib/puppet/pops/types/p_object_type.rb +846 -0
  298. data/lib/puppet/pops/types/p_runtime_type.rb +102 -0
  299. data/lib/puppet/pops/types/p_sem_ver_range_type.rb +164 -0
  300. data/lib/puppet/pops/types/p_sem_ver_type.rb +113 -0
  301. data/lib/puppet/pops/types/puppet_object.rb +21 -0
  302. data/lib/puppet/pops/types/recursion_guard.rb +92 -0
  303. data/lib/puppet/pops/types/ruby_generator.rb +258 -0
  304. data/lib/puppet/pops/types/string_converter.rb +922 -0
  305. data/lib/puppet/pops/types/type_acceptor.rb +25 -0
  306. data/lib/puppet/pops/types/type_asserter.rb +21 -19
  307. data/lib/puppet/pops/types/type_assertion_error.rb +1 -0
  308. data/lib/puppet/pops/types/type_calculator.rb +213 -1184
  309. data/lib/puppet/pops/types/type_conversion_error.rb +15 -0
  310. data/lib/puppet/pops/types/type_factory.rb +216 -157
  311. data/lib/puppet/pops/types/type_formatter.rb +569 -0
  312. data/lib/puppet/pops/types/type_mismatch_describer.rb +1001 -0
  313. data/lib/puppet/pops/types/type_parser.rb +332 -279
  314. data/lib/puppet/pops/types/types.rb +2770 -288
  315. data/lib/puppet/pops/utils.rb +11 -10
  316. data/lib/puppet/pops/validation/checker4_0.rb +266 -72
  317. data/lib/puppet/pops/validation/validator_factory_4_0.rb +12 -5
  318. data/lib/puppet/pops/validation.rb +43 -13
  319. data/lib/puppet/pops/visitor.rb +3 -1
  320. data/lib/puppet/pops.rb +29 -24
  321. data/lib/puppet/property/ensure.rb +1 -1
  322. data/lib/puppet/property.rb +1 -1
  323. data/lib/puppet/provider/aixobject.rb +1 -1
  324. data/lib/puppet/provider/augeas/augeas.rb +57 -2
  325. data/lib/puppet/provider/cron/crontab.rb +1 -1
  326. data/lib/puppet/provider/exec/windows.rb +1 -1
  327. data/lib/puppet/provider/exec.rb +6 -1
  328. data/lib/puppet/provider/group/directoryservice.rb +10 -0
  329. data/lib/puppet/provider/group/pw.rb +1 -0
  330. data/lib/puppet/provider/group/windows_adsi.rb +19 -6
  331. data/lib/puppet/provider/macauthorization/macauthorization.rb +10 -9
  332. data/lib/puppet/provider/mount/parsed.rb +159 -2
  333. data/lib/puppet/provider/nameservice/directoryservice.rb +35 -50
  334. data/lib/puppet/provider/package/appdmg.rb +3 -2
  335. data/lib/puppet/provider/package/apt.rb +1 -1
  336. data/lib/puppet/provider/package/dnf.rb +41 -0
  337. data/lib/puppet/provider/package/gem.rb +23 -2
  338. data/lib/puppet/provider/package/nim.rb +1 -1
  339. data/lib/puppet/provider/package/openbsd.rb +7 -7
  340. data/lib/puppet/provider/package/pacman.rb +9 -8
  341. data/lib/puppet/provider/package/pip.rb +80 -20
  342. data/lib/puppet/provider/package/pip3.rb +20 -0
  343. data/lib/puppet/provider/package/pkg.rb +1 -1
  344. data/lib/puppet/provider/package/pkgdmg.rb +7 -4
  345. data/lib/puppet/provider/package/pkgin.rb +3 -3
  346. data/lib/puppet/provider/package/pkgng.rb +143 -0
  347. data/lib/puppet/provider/package/portage.rb +1 -1
  348. data/lib/puppet/provider/package/ports.rb +0 -3
  349. data/lib/puppet/provider/package/puppet_gem.rb +0 -0
  350. data/lib/puppet/provider/package/rpm.rb +120 -14
  351. data/lib/puppet/provider/package/windows/exe_package.rb +10 -9
  352. data/lib/puppet/provider/package/windows/msi_package.rb +4 -4
  353. data/lib/puppet/provider/package/windows/package.rb +9 -1
  354. data/lib/puppet/provider/package/windows.rb +1 -1
  355. data/lib/puppet/provider/package/yum.rb +31 -80
  356. data/lib/puppet/provider/package/zypper.rb +69 -15
  357. data/lib/puppet/provider/package.rb +6 -2
  358. data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +32 -7
  359. data/lib/puppet/provider/service/base.rb +3 -2
  360. data/lib/puppet/provider/service/bsd.rb +8 -8
  361. data/lib/puppet/provider/service/daemontools.rb +3 -3
  362. data/lib/puppet/provider/service/debian.rb +12 -3
  363. data/lib/puppet/provider/service/freebsd.rb +1 -1
  364. data/lib/puppet/provider/service/init.rb +22 -0
  365. data/lib/puppet/provider/service/launchd.rb +41 -18
  366. data/lib/puppet/provider/service/rcng.rb +51 -0
  367. data/lib/puppet/provider/service/redhat.rb +2 -1
  368. data/lib/puppet/provider/service/runit.rb +3 -3
  369. data/lib/puppet/provider/service/smf.rb +48 -4
  370. data/lib/puppet/provider/service/src.rb +27 -0
  371. data/lib/puppet/provider/service/systemd.rb +104 -22
  372. data/lib/puppet/provider/service/upstart.rb +1 -1
  373. data/lib/puppet/provider/sshkey/parsed.rb +20 -10
  374. data/lib/puppet/provider/user/aix.rb +1 -1
  375. data/lib/puppet/provider/user/directoryservice.rb +33 -58
  376. data/lib/puppet/provider/user/openbsd.rb +1 -0
  377. data/lib/puppet/provider/user/pw.rb +1 -0
  378. data/lib/puppet/provider/user/user_role_add.rb +3 -1
  379. data/lib/puppet/provider/user/windows_adsi.rb +45 -2
  380. data/lib/puppet/provider/yumrepo/inifile.rb +6 -3
  381. data/lib/puppet/provider/zfs/zfs.rb +1 -1
  382. data/lib/puppet/provider/zone/solaris.rb +2 -2
  383. data/lib/puppet/provider/zpool/zpool.rb +1 -1
  384. data/lib/puppet/provider.rb +5 -0
  385. data/lib/puppet/reference/configuration.rb +11 -5
  386. data/lib/puppet/reference/indirection.rb +1 -1
  387. data/lib/puppet/reference/providers.rb +2 -3
  388. data/lib/puppet/reference/report.rb +9 -12
  389. data/lib/puppet/reports.rb +5 -1
  390. data/lib/puppet/resource/capability_finder.rb +102 -0
  391. data/lib/puppet/resource/catalog.rb +133 -36
  392. data/lib/puppet/resource/status.rb +19 -3
  393. data/lib/puppet/resource/type.rb +236 -49
  394. data/lib/puppet/resource/type_collection.rb +83 -10
  395. data/lib/puppet/resource.rb +116 -119
  396. data/lib/puppet/settings/base_setting.rb +9 -3
  397. data/lib/puppet/settings/config_file.rb +1 -1
  398. data/lib/puppet/settings/environment_conf.rb +13 -5
  399. data/lib/puppet/settings/file_setting.rb +10 -9
  400. data/lib/puppet/settings/symbolic_enum_setting.rb +17 -0
  401. data/lib/puppet/settings.rb +68 -20
  402. data/lib/puppet/ssl/certificate_authority/interface.rb +2 -2
  403. data/lib/puppet/ssl/certificate_factory.rb +3 -3
  404. data/lib/puppet/ssl/certificate_request.rb +4 -4
  405. data/lib/puppet/ssl/certificate_signer.rb +1 -1
  406. data/lib/puppet/ssl/oids.rb +33 -3
  407. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  408. data/lib/puppet/test/test_helper.rb +16 -5
  409. data/lib/puppet/transaction/additional_resource_generator.rb +89 -8
  410. data/lib/puppet/transaction/report.rb +31 -1
  411. data/lib/puppet/transaction/resource_harness.rb +0 -20
  412. data/lib/puppet/transaction.rb +46 -36
  413. data/lib/puppet/type/augeas.rb +10 -1
  414. data/lib/puppet/type/cron.rb +12 -12
  415. data/lib/puppet/type/exec.rb +27 -18
  416. data/lib/puppet/type/file/checksum_value.rb +53 -0
  417. data/lib/puppet/type/file/content.rb +32 -117
  418. data/lib/puppet/type/file/data_sync.rb +84 -0
  419. data/lib/puppet/type/file/ensure.rb +22 -19
  420. data/lib/puppet/type/file/selcontext.rb +1 -1
  421. data/lib/puppet/type/file/source.rb +121 -34
  422. data/lib/puppet/type/file/target.rb +2 -2
  423. data/lib/puppet/type/file.rb +107 -44
  424. data/lib/puppet/type/filebucket.rb +1 -1
  425. data/lib/puppet/type/group.rb +15 -3
  426. data/lib/puppet/type/interface.rb +8 -3
  427. data/lib/puppet/type/macauthorization.rb +1 -1
  428. data/lib/puppet/type/mount.rb +29 -2
  429. data/lib/puppet/type/package.rb +31 -11
  430. data/lib/puppet/type/schedule.rb +5 -5
  431. data/lib/puppet/type/scheduled_task.rb +13 -0
  432. data/lib/puppet/type/service.rb +24 -0
  433. data/lib/puppet/type/sshkey.rb +5 -3
  434. data/lib/puppet/type/stage.rb +1 -1
  435. data/lib/puppet/type/tidy.rb +6 -4
  436. data/lib/puppet/type/user.rb +55 -19
  437. data/lib/puppet/type/yumrepo.rb +25 -5
  438. data/lib/puppet/type/zone.rb +5 -5
  439. data/lib/puppet/type.rb +95 -18
  440. data/lib/puppet/util/autoload.rb +16 -11
  441. data/lib/puppet/util/checksums.rb +74 -31
  442. data/lib/puppet/util/command_line.rb +4 -0
  443. data/lib/puppet/util/execution.rb +21 -5
  444. data/lib/puppet/util/feature.rb +1 -1
  445. data/lib/puppet/util/http_proxy.rb +132 -0
  446. data/lib/puppet/util/log/destinations.rb +23 -2
  447. data/lib/puppet/util/log.rb +53 -9
  448. data/lib/puppet/util/logging.rb +80 -2
  449. data/lib/puppet/util/monkey_patches.rb +20 -7
  450. data/lib/puppet/util/multi_match.rb +51 -0
  451. data/lib/puppet/util/network_device/cisco/device.rb +24 -6
  452. data/lib/puppet/util/network_device/cisco/interface.rb +21 -9
  453. data/lib/puppet/util/network_device/transport/ssh.rb +7 -3
  454. data/lib/puppet/util/network_device/transport/telnet.rb +39 -36
  455. data/lib/puppet/util/plist.rb +130 -0
  456. data/lib/puppet/util/resource_template.rb +1 -1
  457. data/lib/puppet/util/run_mode.rb +3 -16
  458. data/lib/puppet/util/skip_tags.rb +9 -0
  459. data/lib/puppet/util/splayer.rb +18 -0
  460. data/lib/puppet/util/tagging.rb +7 -1
  461. data/lib/puppet/util/windows/access_control_entry.rb +1 -1
  462. data/lib/puppet/util/windows/access_control_list.rb +3 -3
  463. data/lib/puppet/util/windows/adsi.rb +186 -74
  464. data/lib/puppet/util/windows/api_types.rb +24 -18
  465. data/lib/puppet/util/windows/com.rb +3 -3
  466. data/lib/puppet/util/windows/error.rb +1 -1
  467. data/lib/puppet/util/windows/file.rb +48 -18
  468. data/lib/puppet/util/windows/principal.rb +190 -0
  469. data/lib/puppet/util/windows/process.rb +78 -11
  470. data/lib/puppet/util/windows/registry.rb +22 -16
  471. data/lib/puppet/util/windows/root_certs.rb +5 -5
  472. data/lib/puppet/util/windows/security.rb +37 -36
  473. data/lib/puppet/util/windows/security_descriptor.rb +1 -1
  474. data/lib/puppet/util/windows/sid.rb +84 -15
  475. data/lib/puppet/util/windows/taskscheduler.rb +16 -16
  476. data/lib/puppet/util/windows/user.rb +10 -10
  477. data/lib/puppet/util/windows.rb +5 -0
  478. data/lib/puppet/util.rb +123 -23
  479. data/lib/puppet/vendor/deep_merge/deep_merge.gemspec +1 -1
  480. data/lib/puppet/vendor/pathspec/LICENSE +2 -2
  481. data/lib/puppet/vendor/pathspec/README.md +1 -1
  482. data/lib/puppet/vendor/rgen/README.rdoc +1 -1
  483. data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +14 -0
  484. data/lib/puppet/version.rb +1 -1
  485. data/lib/puppet.rb +30 -1
  486. data/lib/semver.rb +17 -1
  487. data/man/man5/puppet.conf.5 +60 -18
  488. data/man/man8/extlookup2hiera.8 +2 -2
  489. data/man/man8/puppet-agent.8 +6 -3
  490. data/man/man8/puppet-apply.8 +6 -3
  491. data/man/man8/puppet-ca.8 +3 -3
  492. data/man/man8/puppet-catalog.8 +3 -3
  493. data/man/man8/puppet-cert.8 +3 -3
  494. data/man/man8/puppet-certificate.8 +3 -3
  495. data/man/man8/puppet-certificate_request.8 +3 -3
  496. data/man/man8/puppet-certificate_revocation_list.8 +3 -3
  497. data/man/man8/puppet-config.8 +4 -4
  498. data/man/man8/puppet-describe.8 +2 -2
  499. data/man/man8/puppet-device.8 +7 -4
  500. data/man/man8/puppet-doc.8 +2 -2
  501. data/man/man8/puppet-epp.8 +3 -3
  502. data/man/man8/puppet-facts.8 +3 -3
  503. data/man/man8/puppet-file.8 +3 -3
  504. data/man/man8/puppet-filebucket.8 +3 -3
  505. data/man/man8/puppet-help.8 +3 -3
  506. data/man/man8/puppet-inspect.8 +3 -3
  507. data/man/man8/puppet-key.8 +3 -3
  508. data/man/man8/puppet-man.8 +3 -3
  509. data/man/man8/puppet-master.8 +6 -3
  510. data/man/man8/puppet-module.8 +10 -10
  511. data/man/man8/puppet-node.8 +3 -3
  512. data/man/man8/puppet-parser.8 +3 -3
  513. data/man/man8/puppet-plugin.8 +3 -3
  514. data/man/man8/puppet-report.8 +3 -3
  515. data/man/man8/puppet-resource.8 +3 -3
  516. data/man/man8/puppet-resource_type.8 +3 -3
  517. data/man/man8/puppet-status.8 +4 -4
  518. data/man/man8/puppet.8 +2 -2
  519. data/spec/fixtures/module.tar.gz +0 -0
  520. data/spec/fixtures/unit/application/environments/production/data/common.yaml +20 -0
  521. data/spec/fixtures/unit/application/environments/production/environment.conf +1 -0
  522. data/spec/fixtures/unit/application/environments/production/manifests/site.pp +1 -0
  523. data/spec/fixtures/unit/application/environments/puppet_func_provider/environment.conf +1 -0
  524. data/spec/fixtures/unit/application/environments/puppet_func_provider/functions/data.pp +10 -0
  525. data/spec/fixtures/unit/application/environments/puppet_func_provider/manifests/site.pp +1 -0
  526. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/data/bad.json +3 -0
  527. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/environment.conf +2 -0
  528. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/hiera.yaml +5 -0
  529. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/manifests/site.pp +5 -0
  530. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/data/bad.yaml +3 -0
  531. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/environment.conf +2 -0
  532. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/hiera.yaml +5 -0
  533. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/manifests/site.pp +5 -0
  534. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/data/common.yaml +2 -0
  535. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/environment.conf +2 -0
  536. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/manifests/site.pp +1 -0
  537. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/modules/one/data/common.yaml +2 -0
  538. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/modules/one/manifests/init.pp +5 -0
  539. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/modules/one/metadata.json +9 -0
  540. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/first.json +3 -0
  541. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/name.yaml +2 -0
  542. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/second.json +3 -0
  543. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/single.yaml +2 -0
  544. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/third_utf8.json +3 -0
  545. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/utf8.yaml +3 -0
  546. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data2/single.yaml +2 -0
  547. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/environment.conf +2 -0
  548. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/hiera.yaml +22 -0
  549. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/manifests/site.pp +5 -0
  550. data/spec/fixtures/unit/data_providers/environments/hiera_misc/data/common.yaml +46 -0
  551. data/spec/fixtures/unit/data_providers/environments/hiera_misc/environment.conf +2 -0
  552. data/spec/fixtures/unit/data_providers/environments/hiera_misc/manifests/site.pp +1 -0
  553. data/spec/fixtures/unit/data_providers/environments/hiera_misc/modules/one/data/common.yaml +30 -0
  554. data/spec/fixtures/unit/data_providers/environments/hiera_misc/modules/one/manifests/init.pp +13 -0
  555. data/spec/fixtures/unit/data_providers/environments/hiera_misc/modules/one/metadata.json +9 -0
  556. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/common.yaml +4 -0
  557. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/specific.yaml +4 -0
  558. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/environment.conf +2 -0
  559. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/hiera.yaml +7 -0
  560. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/manifests/site.pp +1 -0
  561. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/first.json +3 -0
  562. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/name.yaml +1 -0
  563. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/second.json +3 -0
  564. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/single.yaml +2 -0
  565. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data2/single.yaml +2 -0
  566. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/hiera.yaml +18 -0
  567. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/manifests/init.pp +5 -0
  568. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/metadata.json +9 -0
  569. data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/common.yaml +4 -0
  570. data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/specific.yaml +4 -0
  571. data/spec/fixtures/unit/data_providers/environments/hiera_modules/environment.conf +2 -0
  572. data/spec/fixtures/unit/data_providers/environments/hiera_modules/hiera.yaml +7 -0
  573. data/spec/fixtures/unit/data_providers/environments/hiera_modules/manifests/site.pp +1 -0
  574. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/data/common.yaml +6 -0
  575. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/hiera.yaml +5 -0
  576. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/manifests/init.pp +2 -0
  577. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/metadata.json +9 -0
  578. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/data/common.yaml +4 -0
  579. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/hiera.yaml +5 -0
  580. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/manifests/init.pp +3 -0
  581. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/metadata.json +9 -0
  582. data/spec/fixtures/unit/data_providers/environments/production/lib/puppet/functions/environment/data.rb +3 -1
  583. data/spec/fixtures/unit/data_providers/environments/production/modules/abc/lib/puppet/functions/abc/data.rb +2 -1
  584. data/spec/fixtures/unit/data_providers/environments/production/modules/abc/manifests/init.pp +2 -1
  585. data/spec/fixtures/unit/data_providers/environments/production/modules/xyz/functions/data.pp +6 -0
  586. data/spec/fixtures/unit/data_providers/environments/production/modules/xyz/lib/puppet/bindings/xyz/default.rb +9 -0
  587. data/spec/fixtures/unit/data_providers/environments/production/modules/xyz/manifests/init.pp +9 -0
  588. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_env_data.rb +1 -0
  589. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_module_data.rb +1 -0
  590. data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +1 -0
  591. data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/manifests/init.pp +0 -1
  592. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/data/empty.json +0 -0
  593. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/hiera.yaml +5 -0
  594. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/manifests/init.pp +2 -0
  595. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/metadata.json +9 -0
  596. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_key_json/data/empty_key.json +1 -0
  597. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_key_json/hiera.yaml +5 -0
  598. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_key_json/manifests/init.pp +2 -0
  599. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_key_json/metadata.json +9 -0
  600. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_key_yaml/data/empty_key.yaml +1 -0
  601. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_key_yaml/hiera.yaml +5 -0
  602. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_key_yaml/manifests/init.pp +2 -0
  603. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_key_yaml/metadata.json +9 -0
  604. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/data/empty.yaml +2 -0
  605. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/hiera.yaml +5 -0
  606. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/manifests/init.pp +2 -0
  607. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/metadata.json +9 -0
  608. data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/data/first.json +4 -0
  609. data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/hiera.yaml +8 -0
  610. data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/manifests/init.pp +5 -0
  611. data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/metadata.json +9 -0
  612. data/spec/fixtures/unit/functions/lookup/environments/production/modules/meta/lib/puppet/functions/meta/data.rb +9 -0
  613. data/spec/fixtures/unit/functions/lookup/environments/production/modules/meta/manifests/init.pp +3 -0
  614. data/spec/fixtures/unit/functions/lookup/environments/production/modules/meta/metadata.json +9 -0
  615. data/spec/fixtures/unit/functions/lookup/environments/production/modules/metawcp/lib/puppet/bindings/metawcp/default.rb +10 -0
  616. data/spec/fixtures/unit/functions/lookup/environments/production/modules/metawcp/lib/puppet_x/thallgren/sample_module_data.rb +23 -0
  617. data/spec/fixtures/unit/functions/lookup/environments/production/modules/metawcp/manifests/init.pp +3 -0
  618. data/spec/fixtures/unit/functions/lookup/environments/production/modules/metawcp/metadata.json +9 -0
  619. data/spec/fixtures/unit/module/trailing-comma.json +1 -1
  620. data/spec/fixtures/unit/parser/lexer/subclass_name_duplication.pp +0 -0
  621. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/functions/usee_puppet.pp +3 -0
  622. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/lib/puppet/functions/usee/usee_ruby.rb +6 -0
  623. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/lib/puppet/type/usee_type.rb +5 -0
  624. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/manifests/init.pp +8 -0
  625. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/types/zero.pp +1 -0
  626. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee2/lib/puppet/functions/usee2/callee.rb +5 -0
  627. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet.pp +5 -0
  628. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet_init.pp +5 -0
  629. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_ruby.pp +5 -0
  630. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/caller2.rb +5 -0
  631. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet.rb +5 -0
  632. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet_init.rb +5 -0
  633. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_ruby.rb +5 -0
  634. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/manifests/init.pp +87 -0
  635. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/metadata.json +2 -1
  636. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseeone.pp +1 -0
  637. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseezero.pp +1 -0
  638. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/user/functions/puppetcalled.pp +3 -0
  639. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/user/functions/puppetcaller.pp +3 -0
  640. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/user/functions/puppetcaller4.pp +3 -0
  641. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/user/lib/puppet/functions/user/callingpuppet.rb +5 -0
  642. data/spec/fixtures/unit/pops/loaders/loaders/module_no_lib/modules/modulea/functions/hello.pp +3 -0
  643. data/spec/fixtures/unit/pops/loaders/loaders/module_no_lib/modules/modulea/manifests/init.pp +3 -0
  644. data/spec/fixtures/unit/pops/loaders/loaders/module_no_lib/modules/modulea/metadata.json +10 -0
  645. data/spec/fixtures/unit/pops/loaders/loaders/single_module/modules/modulea/functions/hello.pp +3 -0
  646. data/spec/fixtures/unit/pops/loaders/loaders/single_module/modules/modulea/functions/subspace/hello.pp +3 -0
  647. data/spec/fixtures/unit/pops/loaders/loaders/single_module/modules/modulea/metadata.json +1 -10
  648. data/spec/fixtures/unit/pops/parser/lexer/subclass_name_duplication.pp +0 -0
  649. data/spec/fixtures/unit/provider/mount/parsed/aix.filesystems +93 -85
  650. data/spec/fixtures/unit/provider/mount/parsed/aix.mount +11 -7
  651. data/spec/fixtures/unit/provider/package/pkgng/pkg.info +8 -0
  652. data/spec/fixtures/unit/provider/package/pkgng/pkg.query +1 -0
  653. data/spec/fixtures/unit/provider/package/pkgng/pkg.query_absent +1 -0
  654. data/spec/fixtures/unit/provider/package/pkgng/pkg.version +3 -0
  655. data/spec/fixtures/unit/provider/package/yum/yum-check-update-broken-notices.txt +187 -0
  656. data/spec/fixtures/unit/provider/package/yum/yum-check-update-obsoletes.txt +195 -0
  657. data/spec/fixtures/unit/provider/package/yum/yum-check-update-security.txt +184 -0
  658. data/spec/fixtures/unit/provider/package/zypper/zypper-list-updates-empty.out +3 -0
  659. data/spec/fixtures/unit/provider/service/smf/svcs.out +4 -3
  660. data/spec/fixtures/unit/provider/sshkey/parsed/sample_with_blank_lines +8 -0
  661. data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_get/should_yield_to_the_block.yml +24 -0
  662. data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_head/should_yield_to_the_block.yml +24 -0
  663. data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_post/should_yield_to_the_block.yml +24 -0
  664. 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
  665. 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
  666. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +213 -0
  667. 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
  668. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +197 -0
  669. 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
  670. 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
  671. data/spec/integration/agent/logging_spec.rb +0 -0
  672. data/spec/integration/application/apply_spec.rb +121 -30
  673. data/spec/integration/application/doc_spec.rb +0 -0
  674. data/spec/integration/configurer_spec.rb +0 -0
  675. data/spec/integration/data_binding_spec.rb +195 -0
  676. data/spec/integration/defaults_spec.rb +14 -2
  677. data/spec/integration/faces/ca_spec.rb +0 -0
  678. data/spec/integration/faces/documentation_spec.rb +0 -0
  679. data/spec/integration/faces/plugin_spec.rb +0 -4
  680. data/spec/integration/file_bucket/file_spec.rb +2 -2
  681. data/spec/integration/file_serving/fileset_spec.rb +0 -0
  682. data/spec/integration/file_serving/terminus_helper_spec.rb +0 -0
  683. data/spec/integration/file_system/uniquefile_spec.rb +29 -0
  684. data/spec/integration/indirector/catalog/compiler_spec.rb +0 -0
  685. data/spec/integration/indirector/direct_file_server_spec.rb +0 -0
  686. data/spec/integration/indirector/facts/facter_spec.rb +97 -0
  687. data/spec/integration/indirector/file_content/file_server_spec.rb +0 -0
  688. data/spec/integration/indirector/file_metadata/file_server_spec.rb +0 -0
  689. data/spec/integration/indirector/node/ldap_spec.rb +0 -0
  690. data/spec/integration/module_tool/tar/mini_spec.rb +28 -0
  691. data/spec/integration/network/formats_spec.rb +0 -0
  692. data/spec/integration/node/environment_spec.rb +13 -0
  693. data/spec/integration/node/facts_spec.rb +0 -0
  694. data/spec/integration/node_spec.rb +0 -0
  695. data/spec/integration/parser/catalog_spec.rb +14 -2
  696. data/spec/integration/parser/collection_spec.rb +8 -0
  697. data/spec/integration/parser/compiler_spec.rb +949 -2
  698. data/spec/integration/parser/dynamic_scoping_spec.rb +67 -0
  699. data/spec/integration/parser/functions/require_spec.rb +0 -0
  700. data/spec/integration/parser/parameter_defaults_spec.rb +354 -0
  701. data/spec/integration/parser/resource_expressions_spec.rb +8 -5
  702. data/spec/integration/parser/scope_spec.rb +46 -7
  703. data/spec/integration/parser/undef_param_spec.rb +9 -1
  704. data/spec/integration/provider/mailalias/aliases_spec.rb +0 -0
  705. data/spec/integration/provider/mount_spec.rb +23 -36
  706. data/spec/integration/provider/service/init_spec.rb +0 -0
  707. data/spec/integration/provider/ssh_authorized_key_spec.rb +0 -0
  708. data/spec/integration/provider/yumrepo_spec.rb +1 -1
  709. data/spec/integration/reference/providers_spec.rb +0 -0
  710. data/spec/integration/reports_spec.rb +0 -0
  711. data/spec/integration/resource/catalog_spec.rb +1 -1
  712. data/spec/integration/resource/type_collection_spec.rb +8 -0
  713. data/spec/integration/ssl/certificate_authority_spec.rb +0 -1
  714. data/spec/integration/ssl/certificate_request_spec.rb +0 -1
  715. data/spec/integration/ssl/certificate_revocation_list_spec.rb +0 -1
  716. data/spec/integration/ssl/host_spec.rb +0 -1
  717. data/spec/integration/test/test_helper_spec.rb +28 -0
  718. data/spec/integration/transaction/report_spec.rb +16 -0
  719. data/spec/integration/transaction_spec.rb +52 -2
  720. data/spec/integration/type/exec_spec.rb +0 -0
  721. data/spec/integration/type/file_spec.rb +548 -45
  722. data/spec/integration/type/package_spec.rb +72 -1
  723. data/spec/integration/type/tidy_spec.rb +21 -9
  724. data/spec/integration/type_spec.rb +0 -0
  725. data/spec/integration/util/autoload_spec.rb +0 -0
  726. data/spec/integration/util/execution_spec.rb +22 -0
  727. data/spec/integration/util/rdoc/parser_spec.rb +1 -1
  728. data/spec/integration/util/settings_spec.rb +26 -0
  729. data/spec/integration/util/windows/principal_spec.rb +201 -0
  730. data/spec/integration/util/windows/process_spec.rb +31 -0
  731. data/spec/{unit → integration}/util/windows/registry_spec.rb +91 -1
  732. data/spec/integration/util/windows/security_spec.rb +40 -13
  733. data/spec/integration/util/windows/user_spec.rb +1 -1
  734. data/spec/integration/util_spec.rb +49 -27
  735. data/spec/lib/matchers/include_in_order.rb +2 -3
  736. data/spec/lib/matchers/resource.rb +22 -1
  737. data/spec/lib/puppet/face/1.0.0/huzzah.rb +0 -0
  738. data/spec/lib/puppet/face/basetest.rb +0 -0
  739. data/spec/lib/puppet/face/huzzah.rb +0 -0
  740. data/spec/lib/puppet_spec/compiler.rb +27 -3
  741. data/spec/lib/puppet_spec/files.rb +16 -2
  742. data/spec/lib/puppet_spec/fixtures.rb +0 -0
  743. data/spec/lib/puppet_spec/matchers.rb +6 -4
  744. data/spec/lib/puppet_spec/pops.rb +13 -0
  745. data/spec/lib/puppet_spec/verbose.rb +0 -0
  746. data/spec/shared_behaviours/all_parsedfile_providers.rb +0 -0
  747. data/spec/shared_behaviours/file_server_terminus.rb +0 -0
  748. data/spec/shared_behaviours/file_serving.rb +0 -0
  749. data/spec/shared_behaviours/iterative_functions.rb +9 -9
  750. data/spec/shared_behaviours/memory_terminus.rb +0 -0
  751. data/spec/shared_behaviours/path_parameters.rb +0 -0
  752. data/spec/shared_behaviours/things_that_declare_options.rb +0 -0
  753. data/spec/shared_contexts/types_setup.rb +100 -0
  754. data/spec/spec_helper.rb +7 -0
  755. data/spec/unit/agent/locker_spec.rb +4 -4
  756. data/spec/unit/agent_spec.rb +1 -46
  757. data/spec/unit/application/agent_spec.rb +15 -0
  758. data/spec/unit/application/apply_spec.rb +31 -1
  759. data/spec/unit/application/cert_spec.rb +0 -0
  760. data/spec/unit/application/certificate_spec.rb +0 -0
  761. data/spec/unit/application/config_spec.rb +0 -0
  762. data/spec/unit/application/describe_spec.rb +0 -0
  763. data/spec/unit/application/device_spec.rb +0 -0
  764. data/spec/unit/application/doc_spec.rb +0 -0
  765. data/spec/unit/application/face_base_spec.rb +0 -0
  766. data/spec/unit/application/facts_spec.rb +0 -0
  767. data/spec/unit/application/filebucket_spec.rb +88 -2
  768. data/spec/unit/application/indirection_base_spec.rb +0 -0
  769. data/spec/unit/application/inspect_spec.rb +19 -8
  770. data/spec/unit/application/lookup_spec.rb +387 -0
  771. data/spec/unit/application/master_spec.rb +33 -7
  772. data/spec/unit/application/resource_spec.rb +0 -0
  773. data/spec/unit/application_spec.rb +3 -3
  774. data/spec/unit/appmgmt_spec.rb +666 -0
  775. data/spec/unit/capability_spec.rb +394 -0
  776. data/spec/unit/configurer/downloader_factory_spec.rb +0 -0
  777. data/spec/unit/configurer/downloader_spec.rb +5 -5
  778. data/spec/unit/configurer/fact_handler_spec.rb +0 -0
  779. data/spec/unit/configurer/plugin_handler_spec.rb +42 -13
  780. data/spec/unit/configurer_spec.rb +282 -39
  781. data/spec/unit/confine/exists_spec.rb +0 -0
  782. data/spec/unit/confine/false_spec.rb +0 -0
  783. data/spec/unit/confine/feature_spec.rb +0 -0
  784. data/spec/unit/confine/true_spec.rb +0 -0
  785. data/spec/unit/confine/variable_spec.rb +0 -0
  786. data/spec/unit/confine_collection_spec.rb +0 -0
  787. data/spec/unit/confine_spec.rb +0 -0
  788. data/spec/unit/confiner_spec.rb +0 -0
  789. data/spec/unit/context/trusted_information_spec.rb +24 -1
  790. data/spec/unit/daemon_spec.rb +18 -8
  791. data/spec/unit/data_providers/function_data_provider_spec.rb +28 -1
  792. data/spec/unit/data_providers/hiera_data_provider_spec.rb +378 -0
  793. data/spec/unit/defaults_spec.rb +33 -0
  794. data/spec/unit/environments_spec.rb +26 -4
  795. data/spec/unit/external/pson_spec.rb +0 -0
  796. data/spec/unit/face/catalog_spec.rb +0 -0
  797. data/spec/unit/face/certificate_spec.rb +0 -0
  798. data/spec/unit/face/config_spec.rb +0 -0
  799. data/spec/unit/face/epp_face_spec.rb +2 -2
  800. data/spec/unit/face/facts_spec.rb +0 -0
  801. data/spec/unit/face/file_spec.rb +0 -0
  802. data/spec/unit/face/help_spec.rb +0 -0
  803. data/spec/unit/face/node_spec.rb +1 -1
  804. data/spec/unit/face/parser_spec.rb +43 -2
  805. data/spec/unit/face/plugin_spec.rb +33 -4
  806. data/spec/unit/face_spec.rb +0 -0
  807. data/spec/unit/file_bucket/dipper_spec.rb +210 -1
  808. data/spec/unit/file_bucket/file_spec.rb +0 -0
  809. data/spec/unit/file_serving/base_spec.rb +0 -0
  810. data/spec/unit/file_serving/configuration/parser_spec.rb +25 -30
  811. data/spec/unit/file_serving/configuration_spec.rb +1 -1
  812. data/spec/unit/file_serving/content_spec.rb +0 -0
  813. data/spec/unit/file_serving/fileset_spec.rb +0 -0
  814. data/spec/unit/file_serving/http_metadata_spec.rb +85 -0
  815. data/spec/unit/file_serving/metadata_spec.rb +51 -1
  816. data/spec/unit/file_serving/mount/file_spec.rb +0 -0
  817. data/spec/unit/file_serving/mount/modules_spec.rb +0 -0
  818. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +0 -0
  819. data/spec/unit/file_serving/mount/plugins_spec.rb +0 -0
  820. data/spec/unit/file_serving/mount_spec.rb +0 -0
  821. data/spec/unit/file_serving/terminus_helper_spec.rb +2 -3
  822. data/spec/unit/file_serving/terminus_selector_spec.rb +12 -2
  823. data/spec/unit/file_system/uniquefile_spec.rb +20 -0
  824. data/spec/unit/file_system_spec.rb +145 -0
  825. data/spec/unit/functions/assert_type_spec.rb +48 -8
  826. data/spec/unit/functions/defined_spec.rb +289 -0
  827. data/spec/unit/functions/dig_spec.rb +58 -0
  828. data/spec/unit/functions/epp_spec.rb +17 -9
  829. data/spec/unit/functions/filter_spec.rb +18 -0
  830. data/spec/unit/functions/hiera_spec.rb +10 -8
  831. data/spec/unit/functions/inline_epp_spec.rb +4 -4
  832. data/spec/unit/functions/lest_spec.rb +34 -0
  833. data/spec/unit/functions/lookup_spec.rb +391 -22
  834. data/spec/unit/functions/new_spec.rb +543 -0
  835. data/spec/unit/functions/regsubst_spec.rb +29 -8
  836. data/spec/unit/functions/reverse_each_spec.rb +108 -0
  837. data/spec/unit/functions/scanf_spec.rb +1 -1
  838. data/spec/unit/functions/split_spec.rb +10 -2
  839. data/spec/unit/functions/step_spec.rb +113 -0
  840. data/spec/unit/functions/then_spec.rb +40 -0
  841. data/spec/unit/functions/type_spec.rb +35 -0
  842. data/spec/unit/functions/versioncmp_spec.rb +36 -0
  843. data/spec/unit/functions4_spec.rb +275 -70
  844. data/spec/unit/graph/relationship_graph_spec.rb +0 -0
  845. data/spec/unit/graph/sequential_prioritizer_spec.rb +1 -1
  846. data/spec/unit/graph/simple_graph_spec.rb +0 -0
  847. data/spec/unit/hiera/scope_spec.rb +5 -2
  848. data/spec/unit/hiera_puppet_spec.rb +49 -8
  849. data/spec/unit/indirector/catalog/compiler_spec.rb +752 -8
  850. data/spec/unit/indirector/catalog/json_spec.rb +0 -0
  851. data/spec/unit/indirector/catalog/msgpack_spec.rb +0 -0
  852. data/spec/unit/indirector/catalog/rest_spec.rb +0 -0
  853. data/spec/unit/indirector/catalog/static_compiler_spec.rb +38 -20
  854. data/spec/unit/indirector/catalog/store_configs_spec.rb +0 -0
  855. data/spec/unit/indirector/catalog/yaml_spec.rb +0 -0
  856. data/spec/unit/indirector/certificate/ca_spec.rb +0 -0
  857. data/spec/unit/indirector/certificate/disabled_ca_spec.rb +0 -0
  858. data/spec/unit/indirector/certificate/file_spec.rb +0 -0
  859. data/spec/unit/indirector/certificate/rest_spec.rb +0 -0
  860. data/spec/unit/indirector/certificate_request/ca_spec.rb +0 -0
  861. data/spec/unit/indirector/certificate_request/disabled_ca_spec.rb +0 -0
  862. data/spec/unit/indirector/certificate_request/file_spec.rb +0 -0
  863. data/spec/unit/indirector/certificate_request/rest_spec.rb +0 -0
  864. data/spec/unit/indirector/certificate_revocation_list/ca_spec.rb +0 -0
  865. data/spec/unit/indirector/certificate_revocation_list/disabled_ca_spec.rb +0 -0
  866. data/spec/unit/indirector/certificate_revocation_list/file_spec.rb +0 -0
  867. data/spec/unit/indirector/certificate_revocation_list/rest_spec.rb +0 -0
  868. data/spec/unit/indirector/certificate_status/file_spec.rb +0 -0
  869. data/spec/unit/indirector/certificate_status/rest_spec.rb +0 -0
  870. data/spec/unit/indirector/code_spec.rb +0 -0
  871. data/spec/unit/indirector/data_binding/none_spec.rb +2 -2
  872. data/spec/unit/indirector/direct_file_server_spec.rb +0 -0
  873. data/spec/unit/indirector/envelope_spec.rb +0 -0
  874. data/spec/unit/indirector/exec_spec.rb +0 -0
  875. data/spec/unit/indirector/face_spec.rb +0 -0
  876. data/spec/unit/indirector/facts/facter_spec.rb +8 -0
  877. data/spec/unit/indirector/facts/network_device_spec.rb +0 -0
  878. data/spec/unit/indirector/facts/store_configs_spec.rb +0 -0
  879. data/spec/unit/indirector/facts/yaml_spec.rb +0 -0
  880. data/spec/unit/indirector/file_bucket_file/file_spec.rb +53 -2
  881. data/spec/unit/indirector/file_bucket_file/rest_spec.rb +0 -0
  882. data/spec/unit/indirector/file_content/file_server_spec.rb +0 -0
  883. data/spec/unit/indirector/file_content/file_spec.rb +0 -0
  884. data/spec/unit/indirector/file_content/rest_spec.rb +0 -0
  885. data/spec/unit/indirector/file_metadata/file_server_spec.rb +0 -0
  886. data/spec/unit/indirector/file_metadata/file_spec.rb +0 -0
  887. data/spec/unit/indirector/file_metadata/rest_spec.rb +0 -0
  888. data/spec/unit/indirector/file_server_spec.rb +0 -0
  889. data/spec/unit/indirector/indirection_spec.rb +13 -2
  890. data/spec/unit/indirector/json_spec.rb +1 -1
  891. data/spec/unit/indirector/key/ca_spec.rb +0 -0
  892. data/spec/unit/indirector/key/disabled_ca_spec.rb +0 -0
  893. data/spec/unit/indirector/key/file_spec.rb +0 -0
  894. data/spec/unit/indirector/ldap_spec.rb +0 -0
  895. data/spec/unit/indirector/memory_spec.rb +0 -0
  896. data/spec/unit/indirector/msgpack_spec.rb +11 -1
  897. data/spec/unit/indirector/node/exec_spec.rb +0 -0
  898. data/spec/unit/indirector/node/ldap_spec.rb +0 -0
  899. data/spec/unit/indirector/node/memory_spec.rb +0 -0
  900. data/spec/unit/indirector/node/msgpack_spec.rb +0 -0
  901. data/spec/unit/indirector/node/plain_spec.rb +0 -0
  902. data/spec/unit/indirector/node/rest_spec.rb +0 -0
  903. data/spec/unit/indirector/node/store_configs_spec.rb +0 -0
  904. data/spec/unit/indirector/node/yaml_spec.rb +0 -0
  905. data/spec/unit/indirector/plain_spec.rb +0 -0
  906. data/spec/unit/indirector/report/msgpack_spec.rb +0 -0
  907. data/spec/unit/indirector/report/processor_spec.rb +0 -0
  908. data/spec/unit/indirector/report/rest_spec.rb +0 -0
  909. data/spec/unit/indirector/report/yaml_spec.rb +0 -0
  910. data/spec/unit/indirector/request_spec.rb +8 -8
  911. data/spec/unit/indirector/resource/ral_spec.rb +0 -0
  912. data/spec/unit/indirector/resource/store_configs_spec.rb +0 -0
  913. data/spec/unit/indirector/resource_type/parser_spec.rb +5 -0
  914. data/spec/unit/indirector/resource_type/rest_spec.rb +0 -0
  915. data/spec/unit/indirector/rest_spec.rb +12 -0
  916. data/spec/unit/indirector/ssl_file_spec.rb +1 -1
  917. data/spec/unit/indirector/status/rest_spec.rb +0 -0
  918. data/spec/unit/indirector/store_configs_spec.rb +0 -0
  919. data/spec/unit/indirector/terminus_spec.rb +0 -0
  920. data/spec/unit/indirector/yaml_spec.rb +1 -1
  921. data/spec/unit/indirector_spec.rb +0 -0
  922. data/spec/unit/info_service_spec.rb +298 -0
  923. data/spec/unit/interface/action_builder_spec.rb +0 -0
  924. data/spec/unit/interface/action_manager_spec.rb +0 -0
  925. data/spec/unit/interface/action_spec.rb +0 -0
  926. data/spec/unit/interface/documentation_spec.rb +0 -0
  927. data/spec/unit/interface/face_collection_spec.rb +0 -0
  928. data/spec/unit/interface/option_builder_spec.rb +0 -0
  929. data/spec/unit/interface/option_spec.rb +0 -0
  930. data/spec/unit/interface_spec.rb +0 -0
  931. data/spec/unit/man_spec.rb +0 -0
  932. data/spec/unit/module_spec.rb +42 -27
  933. data/spec/unit/module_tool/application_spec.rb +1 -1
  934. data/spec/unit/module_tool/applications/builder_spec.rb +28 -8
  935. data/spec/unit/module_tool/metadata_spec.rb +31 -2
  936. data/spec/unit/module_tool_spec.rb +0 -0
  937. data/spec/unit/network/auth_config_parser_spec.rb +16 -0
  938. data/spec/unit/network/authconfig_spec.rb +62 -32
  939. data/spec/unit/network/authorization_spec.rb +30 -2
  940. data/spec/unit/network/authstore_spec.rb +2 -2
  941. data/spec/unit/network/format_handler_spec.rb +0 -0
  942. data/spec/unit/network/format_spec.rb +0 -0
  943. data/spec/unit/network/formats_spec.rb +0 -0
  944. data/spec/unit/network/http/api/indirected_routes_spec.rb +21 -13
  945. data/spec/unit/network/http/api/master/v3/environment_spec.rb +60 -0
  946. data/spec/unit/network/http/api/master/v3_spec.rb +0 -0
  947. data/spec/unit/network/http/compression_spec.rb +1 -1
  948. data/spec/unit/network/http/connection_spec.rb +15 -19
  949. data/spec/unit/network/http/factory_spec.rb +14 -0
  950. data/spec/unit/network/http/handler_spec.rb +0 -5
  951. data/spec/unit/network/http/nocache_pool_spec.rb +0 -0
  952. data/spec/unit/network/http/pool_spec.rb +30 -0
  953. data/spec/unit/network/http/rack/rest_spec.rb +7 -0
  954. data/spec/unit/network/http/rack_spec.rb +0 -0
  955. data/spec/unit/network/http/session_spec.rb +0 -0
  956. data/spec/unit/network/http/site_spec.rb +0 -0
  957. data/spec/unit/network/http/webrick/rest_spec.rb +0 -0
  958. data/spec/unit/network/http/webrick_spec.rb +0 -0
  959. data/spec/unit/network/http_pool_spec.rb +0 -0
  960. data/spec/unit/network/http_spec.rb +0 -0
  961. data/spec/unit/network/resolver_spec.rb +0 -0
  962. data/spec/unit/network/rights_spec.rb +3 -3
  963. data/spec/unit/network/server_spec.rb +0 -0
  964. data/spec/unit/node/environment_spec.rb +10 -0
  965. data/spec/unit/node/facts_spec.rb +0 -0
  966. data/spec/unit/node_spec.rb +41 -0
  967. data/spec/unit/other/selinux_spec.rb +0 -0
  968. data/spec/unit/parameter/path_spec.rb +0 -0
  969. data/spec/unit/parameter/value_collection_spec.rb +0 -0
  970. data/spec/unit/parameter/value_spec.rb +0 -0
  971. data/spec/unit/parameter_spec.rb +0 -0
  972. data/spec/unit/parser/ast/leaf_spec.rb +1 -1
  973. data/spec/unit/parser/compiler_spec.rb +103 -2
  974. data/spec/unit/parser/files_spec.rb +0 -0
  975. data/spec/unit/parser/functions/create_resources_spec.rb +2 -2
  976. data/spec/unit/parser/functions/defined_spec.rb +0 -0
  977. data/spec/unit/parser/functions/digest_spec.rb +0 -0
  978. data/spec/unit/parser/functions/fail_spec.rb +0 -0
  979. data/spec/unit/parser/functions/file_spec.rb +7 -1
  980. data/spec/unit/parser/functions/fqdn_rand_spec.rb +6 -2
  981. data/spec/unit/parser/functions/generate_spec.rb +3 -12
  982. data/spec/unit/parser/functions/hiera_spec.rb +0 -0
  983. data/spec/unit/parser/functions/include_spec.rb +0 -0
  984. data/spec/unit/parser/functions/inline_template_spec.rb +0 -0
  985. data/spec/unit/parser/functions/realize_spec.rb +0 -0
  986. data/spec/unit/parser/functions/regsubst_spec.rb +0 -0
  987. data/spec/unit/parser/functions/require_spec.rb +0 -0
  988. data/spec/unit/parser/functions/scanf_spec.rb +0 -0
  989. data/spec/unit/parser/functions/shared.rb +1 -1
  990. data/spec/unit/parser/functions/shellquote_spec.rb +0 -0
  991. data/spec/unit/parser/functions/split_spec.rb +0 -0
  992. data/spec/unit/parser/functions/sprintf_spec.rb +0 -0
  993. data/spec/unit/parser/functions/tag_spec.rb +0 -0
  994. data/spec/unit/parser/functions/template_spec.rb +1 -1
  995. data/spec/unit/parser/functions/versioncmp_spec.rb +0 -0
  996. data/spec/unit/parser/functions_spec.rb +0 -0
  997. data/spec/unit/parser/relationship_spec.rb +0 -0
  998. data/spec/unit/parser/resource/param_spec.rb +0 -0
  999. data/spec/unit/parser/resource_spec.rb +10 -21
  1000. data/spec/unit/parser/scope_spec.rb +84 -13
  1001. data/spec/unit/parser/templatewrapper_spec.rb +1 -1
  1002. data/spec/unit/parser/type_loader_spec.rb +0 -0
  1003. data/spec/unit/pops/binder/config/binder_config_spec.rb +1 -1
  1004. data/spec/unit/pops/binder/injector_spec.rb +3 -3
  1005. data/spec/unit/pops/evaluator/access_ops_spec.rb +52 -17
  1006. data/spec/unit/pops/evaluator/basic_expressions_spec.rb +1 -2
  1007. data/spec/unit/pops/evaluator/comparison_ops_spec.rb +3 -0
  1008. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +125 -36
  1009. data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +4 -4
  1010. data/spec/unit/pops/evaluator/json_strict_literal_evaluator_spec.rb +63 -0
  1011. data/spec/unit/pops/evaluator/literal_evaluator_spec.rb +43 -0
  1012. data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +25 -0
  1013. data/spec/unit/pops/evaluator/variables_spec.rb +2 -2
  1014. data/spec/unit/pops/issues_spec.rb +16 -16
  1015. data/spec/unit/pops/label_provider_spec.rb +5 -1
  1016. data/spec/unit/pops/loaders/dependency_loader_spec.rb +53 -0
  1017. data/spec/unit/pops/loaders/loaders_spec.rb +230 -47
  1018. data/spec/unit/pops/loaders/static_loader_spec.rb +92 -1
  1019. data/spec/unit/pops/lookup/interpolation_spec.rb +313 -0
  1020. data/spec/unit/pops/migration_spec.rb +53 -0
  1021. data/spec/unit/pops/parser/lexer2_spec.rb +326 -6
  1022. data/spec/unit/pops/parser/parse_application_spec.rb +35 -0
  1023. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +23 -0
  1024. data/spec/unit/pops/parser/parse_calls_spec.rb +8 -0
  1025. data/spec/unit/pops/parser/parse_capabilities_spec.rb +40 -0
  1026. data/spec/unit/pops/parser/parse_heredoc_spec.rb +26 -0
  1027. data/spec/unit/pops/parser/parse_site_spec.rb +47 -0
  1028. data/spec/unit/pops/parser/parser_rspec_helper.rb +6 -0
  1029. data/spec/unit/pops/parser/parser_spec.rb +28 -0
  1030. data/spec/unit/pops/parser/source_pos_adapter_spec.rb +26 -0
  1031. data/spec/unit/pops/types/enumeration_spec.rb +13 -12
  1032. data/spec/unit/pops/types/iterable_spec.rb +262 -0
  1033. data/spec/unit/pops/types/p_object_type_spec.rb +1060 -0
  1034. data/spec/unit/pops/types/p_sem_ver_type_spec.rb +285 -0
  1035. data/spec/unit/pops/types/recursion_guard_spec.rb +93 -0
  1036. data/spec/unit/pops/types/ruby_generator_spec.rb +261 -0
  1037. data/spec/unit/pops/types/string_converter_spec.rb +904 -0
  1038. data/spec/unit/pops/types/type_acceptor_spec.rb +105 -0
  1039. data/spec/unit/pops/types/type_asserter_spec.rb +43 -0
  1040. data/spec/unit/pops/types/type_calculator_spec.rb +960 -849
  1041. data/spec/unit/pops/types/type_factory_spec.rb +132 -91
  1042. data/spec/unit/pops/types/type_formatter_spec.rb +352 -0
  1043. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +177 -0
  1044. data/spec/unit/pops/types/type_parser_spec.rb +119 -32
  1045. data/spec/unit/pops/types/types_spec.rb +561 -0
  1046. data/spec/unit/pops/validation_spec.rb +66 -0
  1047. data/spec/unit/pops/validator/validator_spec.rb +303 -17
  1048. data/spec/unit/property/ensure_spec.rb +0 -0
  1049. data/spec/unit/property/keyvalue_spec.rb +0 -0
  1050. data/spec/unit/property/list_spec.rb +0 -0
  1051. data/spec/unit/property/ordered_list_spec.rb +0 -0
  1052. data/spec/unit/property_spec.rb +1 -1
  1053. data/spec/unit/provider/augeas/augeas_spec.rb +59 -0
  1054. data/spec/unit/provider/cisco_spec.rb +0 -0
  1055. data/spec/unit/provider/command_spec.rb +0 -0
  1056. data/spec/unit/provider/cron/crontab_spec.rb +0 -0
  1057. data/spec/unit/provider/cron/parsed_spec.rb +1 -0
  1058. data/spec/unit/provider/exec/posix_spec.rb +0 -0
  1059. data/spec/unit/provider/exec/shell_spec.rb +0 -0
  1060. data/spec/unit/provider/exec/windows_spec.rb +0 -0
  1061. data/spec/unit/provider/exec_spec.rb +0 -0
  1062. data/spec/unit/provider/file/posix_spec.rb +0 -0
  1063. data/spec/unit/provider/file/windows_spec.rb +0 -0
  1064. data/spec/unit/provider/group/directoryservice_spec.rb +33 -0
  1065. data/spec/unit/provider/group/groupadd_spec.rb +0 -0
  1066. data/spec/unit/provider/group/ldap_spec.rb +0 -0
  1067. data/spec/unit/provider/group/pw_spec.rb +0 -0
  1068. data/spec/unit/provider/group/windows_adsi_spec.rb +73 -17
  1069. data/spec/unit/provider/host/parsed_spec.rb +0 -0
  1070. data/spec/unit/provider/interface/cisco_spec.rb +0 -0
  1071. data/spec/unit/provider/ldap_spec.rb +0 -0
  1072. data/spec/unit/provider/macauthorization_spec.rb +5 -2
  1073. data/spec/unit/provider/mcx/mcxcontent_spec.rb +0 -0
  1074. data/spec/unit/provider/mount/parsed_spec.rb +31 -5
  1075. data/spec/unit/provider/mount_spec.rb +0 -0
  1076. data/spec/unit/provider/naginator_spec.rb +0 -0
  1077. data/spec/unit/provider/nameservice/directoryservice_spec.rb +14 -19
  1078. data/spec/unit/provider/nameservice_spec.rb +0 -0
  1079. data/spec/unit/provider/network_device_spec.rb +0 -0
  1080. data/spec/unit/provider/package/aix_spec.rb +0 -0
  1081. data/spec/unit/provider/package/appdmg_spec.rb +3 -3
  1082. data/spec/unit/provider/package/apt_spec.rb +5 -0
  1083. data/spec/unit/provider/package/aptitude_spec.rb +0 -0
  1084. data/spec/unit/provider/package/aptrpm_spec.rb +2 -2
  1085. data/spec/unit/provider/package/base_spec.rb +18 -0
  1086. data/spec/unit/provider/package/dnf_spec.rb +108 -0
  1087. data/spec/unit/provider/package/dpkg_spec.rb +0 -0
  1088. data/spec/unit/provider/package/freebsd_spec.rb +0 -0
  1089. data/spec/unit/provider/package/gem_spec.rb +77 -0
  1090. data/spec/unit/provider/package/hpux_spec.rb +0 -0
  1091. data/spec/unit/provider/package/macports_spec.rb +0 -0
  1092. data/spec/unit/provider/package/nim_spec.rb +6 -6
  1093. data/spec/unit/provider/package/openbsd_spec.rb +0 -0
  1094. data/spec/unit/provider/package/opkg_spec.rb +0 -0
  1095. data/spec/unit/provider/package/pacman_spec.rb +55 -0
  1096. data/spec/unit/provider/package/pip3_spec.rb +22 -0
  1097. data/spec/unit/provider/package/pip_spec.rb +159 -46
  1098. data/spec/unit/provider/package/pkg_spec.rb +0 -0
  1099. data/spec/unit/provider/package/pkgdmg_spec.rb +35 -8
  1100. data/spec/unit/provider/package/pkgin_spec.rb +23 -13
  1101. data/spec/unit/provider/package/pkgng_spec.rb +174 -0
  1102. data/spec/unit/provider/package/pkgutil_spec.rb +0 -0
  1103. data/spec/unit/provider/package/puppet_gem_spec.rb +0 -0
  1104. data/spec/unit/provider/package/rpm_spec.rb +160 -3
  1105. data/spec/unit/provider/package/sun_spec.rb +0 -0
  1106. data/spec/unit/provider/package/windows/exe_package_spec.rb +0 -1
  1107. data/spec/unit/provider/package/windows/msi_package_spec.rb +0 -1
  1108. data/spec/unit/provider/package/windows/package_spec.rb +41 -0
  1109. data/spec/unit/provider/package/windows_spec.rb +0 -0
  1110. data/spec/unit/provider/package/yum_spec.rb +81 -147
  1111. data/spec/unit/provider/package/zypper_spec.rb +64 -19
  1112. data/spec/unit/provider/parsedfile_spec.rb +0 -0
  1113. data/spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb +322 -70
  1114. data/spec/unit/provider/selboolean_spec.rb +0 -0
  1115. data/spec/unit/provider/selmodule_spec.rb +0 -0
  1116. data/spec/unit/provider/service/base_spec.rb +38 -27
  1117. data/spec/unit/provider/service/bsd_spec.rb +130 -0
  1118. data/spec/unit/provider/service/daemontools_spec.rb +0 -0
  1119. data/spec/unit/provider/service/debian_spec.rb +29 -0
  1120. data/spec/unit/provider/service/freebsd_spec.rb +17 -0
  1121. data/spec/unit/provider/service/gentoo_spec.rb +2 -0
  1122. data/spec/unit/provider/service/init_spec.rb +35 -1
  1123. data/spec/unit/provider/service/launchd_spec.rb +89 -21
  1124. data/spec/unit/provider/service/openbsd_spec.rb +1 -0
  1125. data/spec/unit/provider/service/openrc_spec.rb +1 -0
  1126. data/spec/unit/provider/service/openwrt_spec.rb +0 -0
  1127. data/spec/unit/provider/service/rcng_spec.rb +41 -0
  1128. data/spec/unit/provider/service/redhat_spec.rb +9 -1
  1129. data/spec/unit/provider/service/runit_spec.rb +0 -0
  1130. data/spec/unit/provider/service/smf_spec.rb +43 -6
  1131. data/spec/unit/provider/service/src_spec.rb +20 -4
  1132. data/spec/unit/provider/service/systemd_spec.rb +169 -37
  1133. data/spec/unit/provider/service/upstart_spec.rb +58 -0
  1134. data/spec/unit/provider/service/windows_spec.rb +0 -0
  1135. data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +1 -1
  1136. data/spec/unit/provider/sshkey/parsed_spec.rb +42 -18
  1137. data/spec/unit/provider/user/directoryservice_spec.rb +40 -59
  1138. data/spec/unit/provider/user/hpux_spec.rb +0 -0
  1139. data/spec/unit/provider/user/ldap_spec.rb +0 -0
  1140. data/spec/unit/provider/user/openbsd_spec.rb +0 -0
  1141. data/spec/unit/provider/user/pw_spec.rb +0 -0
  1142. data/spec/unit/provider/user/user_role_add_spec.rb +0 -0
  1143. data/spec/unit/provider/user/useradd_spec.rb +0 -0
  1144. data/spec/unit/provider/user/windows_adsi_spec.rb +137 -7
  1145. data/spec/unit/provider/vlan/cisco_spec.rb +0 -0
  1146. data/spec/unit/provider/yumrepo/inifile_spec.rb +16 -0
  1147. data/spec/unit/provider/zfs/zfs_spec.rb +0 -0
  1148. data/spec/unit/provider/zone/solaris_spec.rb +64 -12
  1149. data/spec/unit/provider/zpool/zpool_spec.rb +0 -0
  1150. data/spec/unit/provider_spec.rb +0 -0
  1151. data/spec/unit/puppet_spec.rb +1 -1
  1152. data/spec/unit/relationship_spec.rb +0 -0
  1153. data/spec/unit/reports/http_spec.rb +0 -0
  1154. data/spec/unit/reports/store_spec.rb +0 -0
  1155. data/spec/unit/reports_spec.rb +10 -0
  1156. data/spec/unit/resource/capability_finder_spec.rb +77 -0
  1157. data/spec/unit/resource/catalog_spec.rb +95 -8
  1158. data/spec/unit/resource/status_spec.rb +0 -0
  1159. data/spec/unit/resource/type_collection_helper_spec.rb +0 -0
  1160. data/spec/unit/resource/type_collection_spec.rb +23 -2
  1161. data/spec/unit/resource/type_spec.rb +150 -8
  1162. data/spec/unit/resource_spec.rb +115 -48
  1163. data/spec/unit/settings/directory_setting_spec.rb +0 -0
  1164. data/spec/unit/settings/duration_setting_spec.rb +0 -0
  1165. data/spec/unit/settings/environment_conf_spec.rb +18 -1
  1166. data/spec/unit/settings/file_setting_spec.rb +37 -0
  1167. data/spec/unit/settings/path_setting_spec.rb +0 -0
  1168. data/spec/unit/settings/priority_setting_spec.rb +0 -0
  1169. data/spec/unit/settings_spec.rb +103 -3
  1170. data/spec/unit/ssl/base_spec.rb +0 -0
  1171. data/spec/unit/ssl/certificate_authority/interface_spec.rb +4 -3
  1172. data/spec/unit/ssl/certificate_authority_spec.rb +5 -3
  1173. data/spec/unit/ssl/certificate_factory_spec.rb +0 -0
  1174. data/spec/unit/ssl/certificate_request_spec.rb +0 -0
  1175. data/spec/unit/ssl/certificate_revocation_list_spec.rb +3 -3
  1176. data/spec/unit/ssl/certificate_spec.rb +0 -0
  1177. data/spec/unit/ssl/configuration_spec.rb +0 -0
  1178. data/spec/unit/ssl/host_spec.rb +2 -2
  1179. data/spec/unit/ssl/inventory_spec.rb +0 -0
  1180. data/spec/unit/ssl/key_spec.rb +0 -0
  1181. data/spec/unit/ssl/oids_spec.rb +8 -0
  1182. data/spec/unit/status_spec.rb +0 -0
  1183. data/spec/unit/transaction/additional_resource_generator_spec.rb +120 -32
  1184. data/spec/unit/transaction/event_manager_spec.rb +0 -0
  1185. data/spec/unit/transaction/event_spec.rb +0 -0
  1186. data/spec/unit/transaction/report_spec.rb +51 -1
  1187. data/spec/unit/transaction/resource_harness_spec.rb +0 -47
  1188. data/spec/unit/transaction_spec.rb +12 -0
  1189. data/spec/unit/type/augeas_spec.rb +0 -0
  1190. data/spec/unit/type/component_spec.rb +0 -0
  1191. data/spec/unit/type/computer_spec.rb +0 -0
  1192. data/spec/unit/type/cron_spec.rb +0 -0
  1193. data/spec/unit/type/exec_spec.rb +16 -8
  1194. data/spec/unit/type/file/checksum_spec.rb +6 -0
  1195. data/spec/unit/type/file/checksum_value_spec.rb +286 -0
  1196. data/spec/unit/type/file/content_spec.rb +12 -193
  1197. data/spec/unit/type/file/ctime_spec.rb +0 -0
  1198. data/spec/unit/type/file/ensure_spec.rb +0 -0
  1199. data/spec/unit/type/file/group_spec.rb +0 -0
  1200. data/spec/unit/type/file/mode_spec.rb +0 -0
  1201. data/spec/unit/type/file/mtime_spec.rb +0 -0
  1202. data/spec/unit/type/file/owner_spec.rb +0 -0
  1203. data/spec/unit/type/file/selinux_spec.rb +0 -0
  1204. data/spec/unit/type/file/source_spec.rb +211 -119
  1205. data/spec/unit/type/file/type_spec.rb +0 -0
  1206. data/spec/unit/type/file_spec.rb +133 -34
  1207. data/spec/unit/type/filebucket_spec.rb +0 -0
  1208. data/spec/unit/type/group_spec.rb +0 -0
  1209. data/spec/unit/type/host_spec.rb +4 -4
  1210. data/spec/unit/type/interface_spec.rb +32 -0
  1211. data/spec/unit/type/k5login_spec.rb +0 -0
  1212. data/spec/unit/type/macauthorization_spec.rb +4 -1
  1213. data/spec/unit/type/mailalias_spec.rb +0 -0
  1214. data/spec/unit/type/maillist_spec.rb +0 -0
  1215. data/spec/unit/type/mcx_spec.rb +0 -0
  1216. data/spec/unit/type/mount_spec.rb +59 -10
  1217. data/spec/unit/type/nagios_spec.rb +0 -0
  1218. data/spec/unit/type/noop_metaparam_spec.rb +0 -0
  1219. data/spec/unit/type/package/package_settings_spec.rb +0 -0
  1220. data/spec/unit/type/package_spec.rb +1 -0
  1221. data/spec/unit/type/resources_spec.rb +0 -0
  1222. data/spec/unit/type/schedule_spec.rb +0 -0
  1223. data/spec/unit/type/selboolean_spec.rb +0 -0
  1224. data/spec/unit/type/selmodule_spec.rb +0 -0
  1225. data/spec/unit/type/service_spec.rb +21 -0
  1226. data/spec/unit/type/ssh_authorized_key_spec.rb +0 -0
  1227. data/spec/unit/type/sshkey_spec.rb +0 -0
  1228. data/spec/unit/type/stage_spec.rb +0 -0
  1229. data/spec/unit/type/tidy_spec.rb +4 -4
  1230. data/spec/unit/type/user_spec.rb +14 -7
  1231. data/spec/unit/type/vlan_spec.rb +1 -1
  1232. data/spec/unit/type/whit_spec.rb +0 -0
  1233. data/spec/unit/type/yumrepo_spec.rb +2 -2
  1234. data/spec/unit/type/zfs_spec.rb +0 -0
  1235. data/spec/unit/type/zone_spec.rb +0 -0
  1236. data/spec/unit/type/zpool_spec.rb +0 -0
  1237. data/spec/unit/type_spec.rb +15 -1
  1238. data/spec/unit/util/autoload_spec.rb +0 -0
  1239. data/spec/unit/util/backups_spec.rb +0 -0
  1240. data/spec/unit/util/checksums_spec.rb +0 -0
  1241. data/spec/unit/util/colors_spec.rb +0 -0
  1242. data/spec/unit/util/command_line_spec.rb +0 -0
  1243. data/spec/unit/util/constant_inflector_spec.rb +0 -0
  1244. data/spec/unit/util/diff_spec.rb +0 -0
  1245. data/spec/unit/util/errors_spec.rb +0 -0
  1246. data/spec/unit/util/execution_spec.rb +0 -0
  1247. data/spec/unit/util/execution_stub_spec.rb +0 -0
  1248. data/spec/unit/util/feature_spec.rb +1 -1
  1249. data/spec/unit/util/filetype_spec.rb +1 -1
  1250. data/spec/unit/util/http_proxy_spec.rb +87 -0
  1251. data/spec/unit/util/ldap/connection_spec.rb +0 -0
  1252. data/spec/unit/util/ldap/generator_spec.rb +1 -1
  1253. data/spec/unit/util/ldap/manager_spec.rb +0 -0
  1254. data/spec/unit/util/log/destinations_spec.rb +0 -2
  1255. data/spec/unit/util/log_spec.rb +125 -1
  1256. data/spec/unit/util/logging_spec.rb +69 -0
  1257. data/spec/unit/util/metric_spec.rb +0 -0
  1258. data/spec/unit/util/monkey_patches_spec.rb +79 -3
  1259. data/spec/unit/util/multi_match_spec.rb +39 -0
  1260. data/spec/unit/util/nagios_maker_spec.rb +0 -0
  1261. data/spec/unit/util/network_device/cisco/device_spec.rb +253 -216
  1262. data/spec/unit/util/network_device/cisco/facts_spec.rb +0 -0
  1263. data/spec/unit/util/network_device/cisco/interface_spec.rb +0 -0
  1264. data/spec/unit/util/network_device/config_spec.rb +0 -0
  1265. data/spec/unit/util/network_device/ipcalc_spec.rb +0 -0
  1266. data/spec/unit/util/network_device/transport/base_spec.rb +0 -0
  1267. data/spec/unit/util/network_device/transport/ssh_spec.rb +1 -1
  1268. data/spec/unit/util/network_device/transport/telnet_spec.rb +60 -58
  1269. data/spec/unit/util/network_device_spec.rb +1 -1
  1270. data/spec/unit/util/package_spec.rb +0 -0
  1271. data/spec/unit/util/plist_spec.rb +110 -0
  1272. data/spec/unit/util/posix_spec.rb +0 -0
  1273. data/spec/unit/util/rdoc_spec.rb +0 -0
  1274. data/spec/unit/util/resource_template_spec.rb +2 -2
  1275. data/spec/unit/util/retry_action_spec.rb +0 -0
  1276. data/spec/unit/util/run_mode_spec.rb +27 -3
  1277. data/spec/unit/util/selinux_spec.rb +0 -0
  1278. data/spec/unit/util/splayer_spec.rb +45 -0
  1279. data/spec/unit/util/storage_spec.rb +5 -1
  1280. data/spec/unit/util/suidmanager_spec.rb +0 -0
  1281. data/spec/unit/util/symbolic_file_mode_spec.rb +0 -0
  1282. data/spec/unit/util/tagging_spec.rb +0 -0
  1283. data/spec/unit/util/user_attr_spec.rb +0 -0
  1284. data/spec/unit/util/warnings_spec.rb +0 -0
  1285. data/spec/unit/util/windows/adsi_spec.rb +175 -60
  1286. data/spec/unit/util/windows/api_types_spec.rb +42 -0
  1287. data/spec/unit/util/windows/file_spec.rb +34 -0
  1288. data/spec/unit/util/windows/root_certs_spec.rb +0 -0
  1289. data/spec/unit/util/windows/security_descriptor_spec.rb +3 -3
  1290. data/spec/unit/util/windows/sid_spec.rb +48 -21
  1291. data/spec/unit/util_spec.rb +144 -15
  1292. data/spec/watchr.rb +0 -0
  1293. data/tasks/cfpropertylist.rake +15 -0
  1294. metadata +3427 -2981
  1295. checksums.yaml +0 -7
  1296. data/ext/puppet-nm-dispatcher +0 -13
  1297. data/ext/systemd/puppetmaster.service +0 -11
  1298. data/lib/puppet/pops/evaluator/callable_mismatch_describer.rb +0 -175
  1299. data/lib/puppet/pops/types/types_meta.rb +0 -223
  1300. data/lib/puppet/vendor/load_plist.rb +0 -1
  1301. data/lib/puppet/vendor/plist/CHANGELOG +0 -82
  1302. data/lib/puppet/vendor/plist/MIT-LICENSE +0 -21
  1303. data/lib/puppet/vendor/plist/PUPPET_README.md +0 -6
  1304. data/lib/puppet/vendor/plist/README +0 -36
  1305. data/lib/puppet/vendor/plist/Rakefile +0 -144
  1306. data/lib/puppet/vendor/plist/docs/USAGE +0 -104
  1307. data/lib/puppet/vendor/plist/docs/jamis-template.rb +0 -591
  1308. data/lib/puppet/vendor/plist/lib/plist/generator.rb +0 -224
  1309. data/lib/puppet/vendor/plist/lib/plist/parser.rb +0 -225
  1310. data/lib/puppet/vendor/plist/lib/plist.rb +0 -22
  1311. data/lib/puppet/vendor/plist/test/assets/AlbumData.xml +0 -203
  1312. data/lib/puppet/vendor/plist/test/assets/Cookies.plist +0 -104
  1313. data/lib/puppet/vendor/plist/test/assets/commented.plist +0 -9
  1314. data/lib/puppet/vendor/plist/test/assets/example_data.bin +0 -0
  1315. data/lib/puppet/vendor/plist/test/assets/example_data.jpg +0 -0
  1316. data/lib/puppet/vendor/plist/test/assets/example_data.plist +0 -259
  1317. data/lib/puppet/vendor/plist/test/assets/test_data_elements.plist +0 -24
  1318. data/lib/puppet/vendor/plist/test/assets/test_empty_key.plist +0 -13
  1319. data/lib/puppet/vendor/plist/test/test_data_elements.rb +0 -115
  1320. data/lib/puppet/vendor/plist/test/test_generator.rb +0 -59
  1321. data/lib/puppet/vendor/plist/test/test_generator_basic_types.rb +0 -58
  1322. data/lib/puppet/vendor/plist/test/test_generator_collections.rb +0 -82
  1323. data/lib/puppet/vendor/plist/test/test_parser.rb +0 -90
  1324. data/spec/integration/data_binding.rb +0 -104
  1325. data/spec/integration/provider/package_spec.rb +0 -33
  1326. /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{usee → modules/usee}/lib/puppet/functions/usee/callee.rb +0 -0
  1327. /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/lib/puppet/functions/user/caller.rb +0 -0
@@ -1,92 +1,121 @@
1
- # Applies a parameterized block to each element in a sequence of entries from the first
2
- # argument (_the enumerable_) and returns the last result of the invocation of the parameterized block.
3
- #
4
- # This function takes two mandatory arguments: the first should be an Array, Hash, or something of
5
- # enumerable type, and the last a parameterized block as produced by the puppet syntax:
6
- #
7
- # $a.reduce |$memo, $x| { ... }
8
- # reduce($a) |$memo, $x| { ... }
9
- #
10
- # When the first argument is an Array or someting of an enumerable type, the block is called with each entry in turn.
11
- # When the first argument is a hash each entry is converted to an array with `[key, value]` before being
12
- # fed to the block. An optional 'start memo' value may be supplied as an argument between the array/hash
13
- # and mandatory block.
14
- #
15
- # $a.reduce(start) |$memo, $x| { ... }
16
- # reduce($a, start) |$memo, $x| { ... }
17
- #
18
- # If no 'start memo' is given, the first invocation of the parameterized block will be given the first and second
19
- # elements of the enumeration, and if the enumerable has fewer than 2 elements, the first
20
- # element is produced as the result of the reduction without invocation of the block.
21
- #
22
- # On each subsequent invocation, the produced value of the invoked parameterized block is given as the memo in the
23
- # next invocation.
24
- #
25
- # @example Using reduce
26
- #
27
- # # Reduce an array
28
- # $a = [1,2,3]
29
- # $a.reduce |$memo, $entry| { $memo + $entry }
30
- # #=> 6
31
- #
32
- # # Reduce hash values
33
- # $a = {a => 1, b => 2, c => 3}
34
- # $a.reduce |$memo, $entry| { [sum, $memo[1]+$entry[1]] }
35
- # #=> [sum, 6]
36
- #
37
- # # reverse a string
38
- # "abc".reduce |$memo, $char| { "$char$memo" }
39
- # #=>"cbe"
40
- #
41
- # It is possible to provide a starting 'memo' as an argument.
42
- #
43
- # @example Using reduce with given start 'memo'
44
- #
45
- # # Reduce an array
46
- # $a = [1,2,3]
47
- # $a.reduce(4) |$memo, $entry| { $memo + $entry }
48
- # #=> 10
49
- #
50
- # # Reduce hash values
51
- # $a = {a => 1, b => 2, c => 3}
52
- # $a.reduce([na, 4]) |$memo, $entry| { [sum, $memo[1]+$entry[1]] }
53
- # #=> [sum, 10]
54
- #
55
- # @example Using reduce with an Integer range
56
- #
57
- # Integer[1,4].reduce |$memo, $x| { $memo + $x }
58
- # #=> 10
1
+ # Applies a [lambda](https://docs.puppetlabs.com/puppet/latest/reference/lang_lambdas.html)
2
+ # to every value in a data structure from the first argument, carrying over the returned
3
+ # value of each iteration, and returns the result of the lambda's final iteration. This
4
+ # lets you create a new value or data structure by combining values from the first
5
+ # argument's data structure.
6
+ #
7
+ # This function takes two mandatory arguments, in this order:
8
+ #
9
+ # 1. An array, hash, or other iterable object that the function will iterate over.
10
+ # 2. A lambda, which the function calls for each element in the first argument. It takes
11
+ # two mandatory parameters:
12
+ # 1. A memo value that is overwritten after each iteration with the iteration's result.
13
+ # 2. A second value that is overwritten after each iteration with the next value in the
14
+ # function's first argument.
15
+ #
16
+ # @example Using the `reduce` function
17
+ #
18
+ # `$data.reduce |$memo, $value| { ... }`
19
+ #
20
+ # or
21
+ #
22
+ # `reduce($data) |$memo, $value| { ... }`
23
+ #
24
+ # You can also pass an optional "start memo" value as an argument, such as `start` below:
25
+ #
26
+ # `$data.reduce(start) |$memo, $value| { ... }`
27
+ #
28
+ # or
29
+ #
30
+ # `reduce($data, start) |$memo, $value| { ... }`
31
+ #
32
+ # When the first argument (`$data` in the above example) is an array, Puppet passes each
33
+ # of the data structure's values in turn to the lambda's parameters. When the first
34
+ # argument is a hash, Puppet converts each of the hash's values to an array in the form
35
+ # `[key, value]`.
36
+ #
37
+ # If you pass a start memo value, Puppet executes the lambda with the provided memo value
38
+ # and the data structure's first value. Otherwise, Puppet passes the structure's first two
39
+ # values to the lambda.
40
+ #
41
+ # Puppet calls the lambda for each of the data structure's remaining values. For each
42
+ # call, it passes the result of the previous call as the first parameter ($memo in the
43
+ # above examples) and the next value from the data structure as the second parameter
44
+ # ($value).
45
+ #
46
+ # If the structure has one value, Puppet returns the value and does not call the lambda.
47
+ #
48
+ # @example Using the `reduce` function
49
+ #
50
+ # ~~~ puppet
51
+ # # Reduce the array $data, returning the sum of all values in the array.
52
+ # $data = [1, 2, 3]
53
+ # $sum = $data.reduce |$memo, $value| { $memo + $value }
54
+ # # $sum contains 6
55
+ #
56
+ # # Reduce the array $data, returning the sum of a start memo value and all values in the
57
+ # # array.
58
+ # $data = [1, 2, 3]
59
+ # $sum = $data.reduce(4) |$memo, $value| { $memo + $value }
60
+ # # $sum contains 10
61
+ #
62
+ # # Reduce the hash $data, returning the sum of all values and concatenated string of all
63
+ # # keys.
64
+ # $data = {a => 1, b => 2, c => 3}
65
+ # $combine = $data.reduce |$memo, $value| {
66
+ # $string = "${memo[0]}${value[0]}"
67
+ # $number = $memo[1] + $value[1]
68
+ # [$string, $number]
69
+ # }
70
+ # # $combine contains [abc, 6]
71
+ # ~~~
72
+ #
73
+ # @example Using the `reduce` function with a start memo and two-parameter lambda
74
+ #
75
+ # ~~~ puppet
76
+ # # Reduce the array $data, returning the sum of all values in the array and starting
77
+ # # with $memo set to an arbitrary value instead of $data's first value.
78
+ # $data = [1, 2, 3]
79
+ # $sum = $data.reduce(4) |$memo, $value| { $memo + $value }
80
+ # # At the start of the lambda's first iteration, $memo contains 4 and $value contains 1.
81
+ # # After all iterations, $sum contains 10.
82
+ #
83
+ # # Reduce the hash $data, returning the sum of all values and concatenated string of
84
+ # # all keys, and starting with $memo set to an arbitrary array instead of $data's first
85
+ # # key-value pair.
86
+ # $data = {a => 1, b => 2, c => 3}
87
+ # $combine = $data.reduce( [d, 4] ) |$memo, $value| {
88
+ # $string = "${memo[0]}${value[0]}"
89
+ # $number = $memo[1] + $value[1]
90
+ # [$string, $number]
91
+ # }
92
+ # # At the start of the lambda's first iteration, $memo contains [d, 4] and $value
93
+ # # contains [a, 1].
94
+ # # $combine contains [dabc, 10]
95
+ # ~~~
59
96
  #
60
97
  # @since 4.0.0
61
98
  #
62
99
  Puppet::Functions.create_function(:reduce) do
63
100
 
64
101
  dispatch :reduce_without_memo do
65
- param 'Any', :enumerable
102
+ param 'Iterable', :enumerable
66
103
  block_param 'Callable[2,2]', :block
67
104
  end
68
105
 
69
106
  dispatch :reduce_with_memo do
70
- param 'Any', :enumerable
107
+ param 'Iterable', :enumerable
71
108
  param 'Any', :memo
72
109
  block_param 'Callable[2,2]', :block
73
110
  end
74
111
 
75
112
  def reduce_without_memo(enumerable)
76
- enum = asserted_enumerable(enumerable)
113
+ enum = Puppet::Pops::Types::Iterable.asserted_iterable(self, enumerable)
77
114
  enum.reduce {|memo, x| yield(memo, x) }
78
115
  end
79
116
 
80
117
  def reduce_with_memo(enumerable, given_memo)
81
- enum = asserted_enumerable(enumerable)
118
+ enum = Puppet::Pops::Types::Iterable.asserted_iterable(self, enumerable)
82
119
  enum.reduce(given_memo) {|memo, x| yield(memo, x) }
83
120
  end
84
-
85
- def asserted_enumerable(obj)
86
- unless enum = Puppet::Pops::Types::Enumeration.enumerator(obj)
87
- raise ArgumentError, ("#{self.class.name}(): wrong argument type (#{obj.class}; must be something enumerable.")
88
- end
89
- enum
90
- end
91
-
92
121
  end
@@ -16,9 +16,10 @@
16
16
  # @param regexp [String|Regexp|Type[Regexp]]
17
17
  # The regular expression matching the target string. If you want it anchored at the start
18
18
  # and or end of the string, you must do that with ^ and $ yourself.
19
- # @param replacement [String]
19
+ # @param replacement [String|Hash[String, String]]
20
20
  # Replacement string. Can contain backreferences to what was matched using \\0 (whole match),
21
21
  # \\1 (first set of parentheses), and so on.
22
+ # If the second argument is a Hash, and the matched text is one of its keys, the corresponding value is the replacement string.
22
23
  # @param flags [String]
23
24
  # Optional. String of single letter flags for how the regexp is interpreted (E, I, and M cannot be used
24
25
  # if pattern is a precompiled regexp):
@@ -37,18 +38,18 @@
37
38
  #
38
39
  Puppet::Functions.create_function(:regsubst) do
39
40
  dispatch :regsubst_string do
40
- param 'Variant[Array[String],String]', :target
41
- param 'String', :pattern
42
- param 'String', :replacement
43
- optional_param 'Optional[Pattern[/^[GEIM]*$/]]', :flags
44
- optional_param "Enum['N','E','S','U']", :encoding
41
+ param 'Variant[Array[String],String]', :target
42
+ param 'String', :pattern
43
+ param 'Variant[String,Hash[String,String]]', :replacement
44
+ optional_param 'Optional[Pattern[/^[GEIM]*$/]]', :flags
45
+ optional_param "Enum['N','E','S','U']", :encoding
45
46
  end
46
47
 
47
48
  dispatch :regsubst_regexp do
48
- param 'Variant[Array[String],String]', :target
49
- param 'Variant[Regexp,Type[Regexp]]', :pattern
50
- param 'String', :replacement
51
- optional_param 'Pattern[/^G?$/]', :flags
49
+ param 'Variant[Array[String],String]', :target
50
+ param 'Variant[Regexp,Type[Regexp]]', :pattern
51
+ param 'Variant[String,Hash[String,String]]', :replacement
52
+ optional_param 'Pattern[/^G?$/]', :flags
52
53
  end
53
54
 
54
55
  def regsubst_string(target, pattern, replacement, flags = nil, encoding = nil)
@@ -68,7 +69,7 @@ Puppet::Functions.create_function(:regsubst) do
68
69
  end
69
70
 
70
71
  def regsubst_regexp(target, pattern, replacement, flags = nil)
71
- pattern = pattern.pattern if pattern.is_a?(Puppet::Pops::Types::PRegexpType)
72
+ pattern = (pattern.pattern || '') if pattern.is_a?(Puppet::Pops::Types::PRegexpType)
72
73
  inner_regsubst(target, pattern, replacement, operation = flags == 'G' ? :gsub : :sub)
73
74
  end
74
75
 
@@ -0,0 +1,82 @@
1
+ # Reverses the order of the elements of something that is iterable and optionally runs a
2
+ # [lambda](http://docs.puppetlabs.com/puppet/latest/reference/lang_lambdas.html) for each
3
+ # element.
4
+ #
5
+ # This function takes one to two arguments.
6
+ #
7
+ # 1. An `Iterable` that the function will iterate over.
8
+ # 2. An optional lambda, which the function calls for each element in the first argument. It must
9
+ # request one parameter.
10
+ #
11
+ # @example Using the `reverse_each` function
12
+ #
13
+ # `$data.reverse_each |$parameter| { <PUPPET CODE BLOCK> }`
14
+ #
15
+ # or
16
+ #
17
+ # `$reverse_data = $data.reverse_each`
18
+ #
19
+ # or
20
+ #
21
+ # `reverse_each($data) |$parameter| { <PUPPET CODE BLOCK> }`
22
+ #
23
+ # or
24
+ #
25
+ # `$reverse_data = reverse_each($data)`
26
+ #
27
+ # When no second argument is present, Puppet returns an `Iterable` that represents the reverse
28
+ # order of its first argument. This allows methods on `Iterable` to be chained.
29
+ #
30
+ # When a lamdba is given as the second argument, Puppet iterates the first argument in reverse
31
+ # order and passes each value in turn to the lambda, then returns `undef`.
32
+ #
33
+ # @example Using the `reverse_each` function with an array and a one-parameter lambda
34
+ #
35
+ # ~~~ puppet
36
+ # # Puppet will log a notice for each of the three items in $data in reverse order.
37
+ # $data = [1,2,3]
38
+ # $data.reverse_each |$item| { notice($item) }
39
+ #
40
+ # ~~~
41
+ #
42
+ # When no second argument is present, Puppet returns a new `Iterable` which allows it to
43
+ # be directly chained into another function that takes an `Iterable` as an argument.
44
+ #
45
+ # @example Using the `reverse_each` function chained with a `map` function.
46
+ #
47
+ # # For the array $data, return an array containing each value multiplied by 10 in reverse order
48
+ # $data = [1,2,3]
49
+ # $transformed_data = $data.reverse_each.map |$item| { $item * 10 }
50
+ # # $transformed_data is set to [30,20,10]
51
+ # ~~~
52
+ #
53
+ # @example The same example using `reverse_each` function chained with a `map` in alternative syntax
54
+ #
55
+ # # For the array $data, return an array containing each value multiplied by 10 in reverse order
56
+ # $data = [1,2,3]
57
+ # $transformed_data = map(reverse_each($data)) |$item| { $item * 10 }
58
+ # # $transformed_data is set to [30,20,10]
59
+ # ~~~
60
+ #
61
+ # @since 4.4.0
62
+ #
63
+ Puppet::Functions.create_function(:reverse_each) do
64
+ dispatch :reverse_each do
65
+ param 'Iterable', :iterable
66
+ end
67
+
68
+ dispatch :reverse_each_block do
69
+ param 'Iterable', :iterable
70
+ block_param 'Callable[1,1]', :block
71
+ end
72
+
73
+ def reverse_each(iterable)
74
+ # produces an Iterable
75
+ Puppet::Pops::Types::Iterable.asserted_iterable(self, iterable).reverse_each
76
+ end
77
+
78
+ def reverse_each_block(iterable, &block)
79
+ Puppet::Pops::Types::Iterable.asserted_iterable(self, iterable).reverse_each(&block)
80
+ nil
81
+ end
82
+ end
@@ -1,23 +1,16 @@
1
- # Scans a string and returns an array of one or more converted values as directed by a given format string.args
2
- # See the documenation of Ruby's String::scanf method for details about the supported formats (which
3
- # are similar but not identical to the formats used in Puppet's `sprintf` function.
4
- #
5
- # This function takes two mandatory arguments: the first is the String to convert, and the second
6
- # the format String. A parameterized block may optionally be given, which is called with the result
7
- # that is produced by scanf if no block is present, the result of the block is then returned by
8
- # the function.
9
- #
10
- # The result of the scan is an Array, with each sucessfully scanned and transformed value.args The scanning
11
- # stops if a scan is unsuccesful and the scanned result up to that point is returned. If there was no
12
- # succesful scan at all, the result is an empty Array. The optional code block is typically used to
13
- # assert that the scan was succesful, and either produce the same input, or perform unwrapping of
14
- # the result
15
- #
16
- # @example scanning an integer in string form (result is an array with
17
- # integer, or empty if unsuccessful)
1
+ # Scans a string and returns an array of one or more converted values based on the given format string.
2
+ # See the documenation of Ruby's String#scanf method for details about the supported formats (which
3
+ # are similar but not identical to the formats used in Puppet's `sprintf` function.)
4
+ #
5
+ # This function takes two mandatory arguments: the first is the string to convert, and the second is
6
+ # the format string. The result of the scan is an array, with each sucessfully scanned and transformed value.
7
+ # The scanning stops if a scan is unsuccesful, and the scanned result up to that point is returned. If there
8
+ # was no succesful scan, the result is an empty array.
9
+ #
18
10
  # "42".scanf("%i")
19
11
  #
20
- # @example scanning and processing resulting array to assert result and unwrap
12
+ # You can also optionally pass a lambda to scanf, to do additional validation or processing.
13
+ #
21
14
  #
22
15
  # "42".scanf("%i") |$x| {
23
16
  # unless $x[0] =~ Integer {
@@ -26,6 +19,10 @@
26
19
  # $x[0]
27
20
  # }
28
21
  #
22
+ #
23
+ #
24
+ #
25
+ #
29
26
  # @since 4.0.0
30
27
  #
31
28
  Puppet::Functions.create_function(:scanf) do
@@ -1,51 +1,45 @@
1
- # Applies a parameterized block to each _slice_ of elements in a sequence of selected entries from the first
2
- # argument and returns the first argument, or if no block is given returns a new array with a concatenation of
3
- # the slices.
1
+ # This function takes two mandatory arguments: the first should be an array or hash, and the second specifies
2
+ # the number of elements to include in each slice.
4
3
  #
5
- # This function takes two mandatory arguments: the first, `$a`, should be an Array, Hash, or something of
6
- # enumerable type (integer, Integer range, or String), and the second, `$n`, the number of elements to include
7
- # in each slice. The optional third argument should be a a parameterized block as produced by the puppet syntax:
8
- #
9
- # $a.slice($n) |$x| { ... }
10
- # slice($a) |$x| { ... }
11
- #
12
- # The parameterized block should have either one parameter (receiving an array with the slice), or the same number
13
- # of parameters as specified by the slice size (each parameter receiving its part of the slice).
14
- # In case there are fewer remaining elements than the slice size for the last slice it will contain the remaining
15
- # elements. When the block has multiple parameters, excess parameters are set to undef for an array or
16
- # enumerable type, and to empty arrays for a Hash.
17
- #
18
- # $a.slice(2) |$first, $second| { ... }
19
- #
20
- # When the first argument is a Hash, each `key,value` entry is counted as one, e.g, a slice size of 2 will produce
4
+ # When the first argument is a hash, each key value pair is counted as one. For example, a slice size of 2 will produce
21
5
  # an array of two arrays with key, and value.
22
6
  #
23
- # @example Using slice with Hash
24
- #
25
7
  # $a.slice(2) |$entry| { notice "first ${$entry[0]}, second ${$entry[1]}" }
26
8
  # $a.slice(2) |$first, $second| { notice "first ${first}, second ${second}" }
27
9
  #
28
- # When called without a block, the function produces a concatenated result of the slices.
29
- #
30
- # @example Using slice without a block
10
+ # The function produces a concatenated result of the slices.
31
11
  #
32
12
  # slice([1,2,3,4,5,6], 2) # produces [[1,2], [3,4], [5,6]]
33
13
  # slice(Integer[1,6], 2) # produces [[1,2], [3,4], [5,6]]
34
14
  # slice(4,2) # produces [[0,1], [2,3]]
35
15
  # slice('hello',2) # produces [[h, e], [l, l], [o]]
36
16
  #
17
+ #
18
+ # You can also optionally pass a lambda to slice.
19
+ #
20
+ # $a.slice($n) |$x| { ... }
21
+ # slice($a) |$x| { ... }
22
+ #
23
+ # The lambda should have either one parameter (receiving an array with the slice), or the same number
24
+ # of parameters as specified by the slice size (each parameter receiving its part of the slice).
25
+ # If there are fewer remaining elements than the slice size for the last slice, it will contain the remaining
26
+ # elements. If the lambda has multiple parameters, excess parameters are set to undef for an array, or
27
+ # to empty arrays for a hash.
28
+ #
29
+ # $a.slice(2) |$first, $second| { ... }
30
+ #
37
31
  # @since 4.0.0
38
32
  #
39
33
  Puppet::Functions.create_function(:slice) do
40
34
  dispatch :slice_Hash do
41
35
  param 'Hash[Any, Any]', :hash
42
- param 'Integer[1, default]', :slize_size
36
+ param 'Integer[1, default]', :slice_size
43
37
  optional_block_param
44
38
  end
45
39
 
46
40
  dispatch :slice_Enumerable do
47
- param 'Any', :enumerable
48
- param 'Integer[1, default]', :slize_size
41
+ param 'Iterable', :enumerable
42
+ param 'Integer[1, default]', :slice_size
49
43
  optional_block_param
50
44
  end
51
45
 
@@ -55,7 +49,7 @@ Puppet::Functions.create_function(:slice) do
55
49
  end
56
50
 
57
51
  def slice_Enumerable(enumerable, slice_size, &pblock)
58
- enum = asserted_enumerable(enumerable)
52
+ enum = Puppet::Pops::Types::Iterable.asserted_iterable(self, enumerable)
59
53
  result = slice_Common(enum, slice_size, nil, block_given? ? pblock : nil)
60
54
  block_given? ? enumerable : result
61
55
  end
@@ -114,12 +108,4 @@ Puppet::Functions.create_function(:slice) do
114
108
  end
115
109
  serving_size
116
110
  end
117
-
118
- def asserted_enumerable(obj)
119
- unless enum = Puppet::Pops::Types::Enumeration.enumerator(obj)
120
- raise ArgumentError, ("#{self.class.name}(): wrong argument type (#{obj.class}; must be something enumerable.")
121
- end
122
- enum
123
- end
124
-
125
111
  end
@@ -6,7 +6,7 @@
6
6
  # $string = 'v1.v2:v3.v4'
7
7
  # $array_var1 = split($string, /:/)
8
8
  # $array_var2 = split($string, '[.]')
9
- # $array_var3 = split($string, Regexp('[.:]'))
9
+ # $array_var3 = split($string, Regexp['[.:]'])
10
10
  #
11
11
  # `$array_var1` now holds the result `['v1.v2', 'v3.v4']`,
12
12
  # while `$array_var2` holds `['v1', 'v2:v3', 'v4']`, and
@@ -15,7 +15,7 @@
15
15
  # Note that in the second example, we split on a literal string that contains
16
16
  # a regexp meta-character (.), which must be escaped. A simple
17
17
  # way to do that for a single character is to enclose it in square
18
- # brackets; a backslash will also escape a single character.") do |args|
18
+ # brackets; a backslash will also escape a single character.
19
19
  #
20
20
  Puppet::Functions.create_function(:split) do
21
21
  dispatch :split_String do
@@ -42,6 +42,6 @@ Puppet::Functions.create_function(:split) do
42
42
  end
43
43
 
44
44
  def split_RegexpType(str, pattern)
45
- str.split(pattern.pattern)
45
+ str.split(pattern.regexp)
46
46
  end
47
47
  end
@@ -0,0 +1,88 @@
1
+ # Provides stepping with given interval over elements in an iterable and optionally runs a
2
+ # [lambda](http://docs.puppetlabs.com/puppet/latest/reference/lang_lambdas.html) for each
3
+ # element.
4
+ #
5
+ # This function takes two to three arguments.
6
+ #
7
+ # 1. An 'Iterable' that the function will iterate over.
8
+ # 2. An `Integer` step factor. This must be a positive integer.
9
+ # 3. An optional lambda, which the function calls for each element in the interval. It must
10
+ # request one parameter.
11
+ #
12
+ # @example Using the `step` function
13
+ #
14
+ # `$data.step(<n>) |$parameter| { <PUPPET CODE BLOCK> }`
15
+ #
16
+ # or
17
+ #
18
+ # `$stepped_data = $data.step(<n>)`
19
+ #
20
+ # or
21
+ #
22
+ # `step($data, <n>) |$parameter| { <PUPPET CODE BLOCK> }`
23
+ #
24
+ # or
25
+ #
26
+ # `$stepped_data = step($data, <n>)`
27
+ #
28
+ # When no block is given, Puppet returns an `Iterable` that yields the first element and every nth successor
29
+ # element, from its first argument. This allows functions on iterables to be chained.
30
+ #
31
+ # When a block is given, Puppet iterates and calls the block with the first element and then with
32
+ # every nth successor element. It then returns `undef`.
33
+ #
34
+ # @example Using the `step` function with an array, a step factor, and a one-parameter block
35
+ #
36
+ # ~~~ puppet
37
+ # # For the array $data, call a block with the first element and then with each 3rd successor element
38
+ # $data = [1,2,3,4,5,6,7,8]
39
+ # $data.step(3) |$item| {
40
+ # notice($item)
41
+ # }
42
+ # # Puppet notices the values '1', '4', '7'.
43
+ # ~~~
44
+ #
45
+ # When no block is given, Puppet returns a new `Iterable` which allows it to be directly chained into
46
+ # another function that takes an `Iterable` as an argument.
47
+ #
48
+ # @example Using the `step` function chained with a `map` function.
49
+ #
50
+ # # For the array $data, return an array, set to the first element and each 5th successor element, in reverse
51
+ # # order multiplied by 10
52
+ # $data = Integer[0,20]
53
+ # $transformed_data = $data.step(5).map |$item| { $item * 10 }
54
+ # # $transformed_data contains [0,50,100,150,200]
55
+ # ~~~
56
+ #
57
+ # @example The same example using `step` function chained with a `map` in alternative syntax
58
+ #
59
+ # # For the array $data, return an array, set to the first and each 5th successor, in reverse order, multiplied by 10
60
+ # $data = Integer[0,20]
61
+ # $transformed_data = map(step($data, 5)) |$item| { $item * 10 }
62
+ # # $transformed_data contains [0,50,100,150,200]
63
+ # ~~~
64
+ #
65
+ # @since 4.4.0
66
+ #
67
+ Puppet::Functions.create_function(:step) do
68
+ dispatch :step do
69
+ param 'Iterable', :iterable
70
+ param 'Integer[1]', :step
71
+ end
72
+
73
+ dispatch :step_block do
74
+ param 'Iterable', :iterable
75
+ param 'Integer[1]', :step
76
+ block_param 'Callable[1,1]', :block
77
+ end
78
+
79
+ def step(iterable, step)
80
+ # produces an Iterable
81
+ Puppet::Pops::Types::Iterable.asserted_iterable(self, iterable).step(step)
82
+ end
83
+
84
+ def step_block(iterable, step, &block)
85
+ Puppet::Pops::Types::Iterable.asserted_iterable(self, iterable).step(step, &block)
86
+ nil
87
+ end
88
+ end
@@ -0,0 +1,74 @@
1
+ # Call a [lambda](https://docs.puppet.com/puppet/latest/reference/lang_lambdas.html)
2
+ # with the given argument unless the argument is undef. Return undef if argument is
3
+ # undef, and otherwise the result of giving the argument to the lambda.
4
+ #
5
+ # This is useful to process a sequence of operations where an intermediate
6
+ # result may be undef (which makes the entire sequence undef).
7
+ # The `then` function is especially useful with the function `dig` which
8
+ # performs in a similar way "digging out" a value in a complex structure.
9
+ #
10
+ # @example Using `then`
11
+ #
12
+ # ~~~ puppet
13
+ # $data = {a => { b => [{x => 10, y => 20}, {x => 100, y => 200}]}}
14
+ # notice $data.dig(a, b, 1, x).then |$x| { $x * 2 }
15
+ # ~~~
16
+ #
17
+ # Would notice the value 200
18
+ #
19
+ # Contrast this with:
20
+ #
21
+ # ~~~ puppet
22
+ # $data = {a => { b => [{x => 10, y => 20}, {ex => 100, why => 200}]}}
23
+ # notice $data.dig(a, b, 1, x).then |$x| { $x * 2 }
24
+ # ~~~
25
+ #
26
+ # Which would notice undef since the last lookup of 'x' results in `undef` which
27
+ # is returned (without calling the block).
28
+ #
29
+ # As a result there was no need for conditional logic or a temporary (non local)
30
+ # variable as the result is now either the wanted value (x) multiplied
31
+ # by 2 or `undef`.
32
+ #
33
+ # Calls to `then` can be chained. In the next example, a structure is using an offset that
34
+ # is using 1 as the index to the first element (instead of 0 which is used in the language).
35
+ # We are not sure if user input actually contains an index at all, or if it is
36
+ # outside the range of available names.
37
+ #
38
+ # ~~~ puppet
39
+ # # Names to choose from
40
+ # $names = ['Ringo', 'Paul', 'George', 'John']
41
+ #
42
+ # # structure where 'beatle 2' is wanted (but where the number refers
43
+ # # to 'Paul' because input comes from a source using 1 for the first
44
+ # # element).
45
+ #
46
+ # $data = [202, { beatle => 2 }]
47
+ # $picked = assert_type(String,
48
+ # # the data we are interested in is the second in the array,
49
+ # # a hash, where we want the value of the key 'beatle'
50
+ # $data.dig(1, 'beatle')
51
+ # # and we want the index in $names before the given index
52
+ # .then |$x| { $names[$x-1] }
53
+ # # so we can construct a string with that beatle's name
54
+ # .then |$x| { "Picked Beatle '${x}'" }
55
+ # )
56
+ #
57
+ # ~~~ puppet
58
+ #
59
+ # Would notice "Picked Beatle 'Paul'", and would raise an error if the result
60
+ # was not a String.
61
+ #
62
+ # @since 4.5.0
63
+ #
64
+ Puppet::Functions.create_function(:then) do
65
+ dispatch :then do
66
+ param 'Any', :arg
67
+ block_param 'Callable[1,1]', :block
68
+ end
69
+
70
+ def then(arg)
71
+ return nil if arg.nil?
72
+ yield(arg)
73
+ end
74
+ end