puppet 4.10.12 → 5.0.0

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

Potentially problematic release.


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

Files changed (1112) hide show
  1. data/CONTRIBUTING.md +32 -15
  2. data/Gemfile +31 -14
  3. data/MAINTAINERS +0 -5
  4. data/README.md +11 -11
  5. data/Rakefile +2 -1
  6. data/conf/auth.conf +21 -0
  7. data/conf/fileserver.conf +7 -12
  8. data/conf/hiera.yaml +11 -0
  9. data/ext/debian/puppet-common.install +0 -1
  10. data/ext/debian/puppet-common.manpages +0 -2
  11. data/ext/hiera/hiera.yaml +15 -0
  12. data/ext/logcheck/puppet +1 -1
  13. data/ext/project_data.yaml +4 -9
  14. data/ext/puppet-test +0 -24
  15. data/ext/rack/config.ru +2 -2
  16. data/ext/redhat/puppet.spec.erb +0 -3
  17. data/ext/windows/service/daemon.rb +8 -14
  18. data/install.rb +1 -1
  19. data/lib/hiera/puppet_function.rb +1 -1
  20. data/lib/puppet.rb +7 -5
  21. data/lib/puppet/agent.rb +29 -38
  22. data/lib/puppet/agent/disabler.rb +3 -3
  23. data/lib/puppet/agent/locker.rb +3 -3
  24. data/lib/puppet/application.rb +12 -29
  25. data/lib/puppet/application/agent.rb +20 -18
  26. data/lib/puppet/application/apply.rb +22 -18
  27. data/lib/puppet/application/cert.rb +2 -7
  28. data/lib/puppet/application/config.rb +0 -1
  29. data/lib/puppet/application/describe.rb +1 -1
  30. data/lib/puppet/application/device.rb +94 -76
  31. data/lib/puppet/application/doc.rb +6 -6
  32. data/lib/puppet/application/face_base.rb +8 -13
  33. data/lib/puppet/application/filebucket.rb +12 -29
  34. data/lib/puppet/application/help.rb +0 -1
  35. data/lib/puppet/application/lookup.rb +106 -101
  36. data/lib/puppet/application/master.rb +14 -22
  37. data/lib/puppet/application/resource.rb +13 -10
  38. data/lib/puppet/application_support.rb +1 -6
  39. data/lib/puppet/configurer.rb +33 -45
  40. data/lib/puppet/configurer/downloader.rb +2 -2
  41. data/lib/puppet/configurer/fact_handler.rb +13 -4
  42. data/lib/puppet/context.rb +5 -5
  43. data/lib/puppet/context/trusted_information.rb +1 -1
  44. data/lib/puppet/defaults.rb +18 -131
  45. data/lib/puppet/environments.rb +1 -1
  46. data/lib/puppet/error.rb +1 -1
  47. data/lib/puppet/external/nagios/grammar.ry +1 -1
  48. data/lib/puppet/external/nagios/parser.rb +1 -1
  49. data/lib/puppet/external/pson/common.rb +4 -0
  50. data/lib/puppet/face/ca.rb +49 -42
  51. data/lib/puppet/face/catalog.rb +1 -1
  52. data/lib/puppet/face/catalog/select.rb +4 -4
  53. data/lib/puppet/face/certificate.rb +20 -20
  54. data/lib/puppet/face/config.rb +9 -22
  55. data/lib/puppet/face/epp.rb +59 -61
  56. data/lib/puppet/face/facts.rb +4 -4
  57. data/lib/puppet/face/generate.rb +8 -8
  58. data/lib/puppet/face/help.rb +7 -7
  59. data/lib/puppet/face/key.rb +2 -2
  60. data/lib/puppet/face/man.rb +5 -5
  61. data/lib/puppet/face/module.rb +2 -2
  62. data/lib/puppet/face/module/build.rb +7 -7
  63. data/lib/puppet/face/module/changes.rb +6 -6
  64. data/lib/puppet/face/module/generate.rb +24 -24
  65. data/lib/puppet/face/module/install.rb +13 -9
  66. data/lib/puppet/face/module/list.rb +16 -12
  67. data/lib/puppet/face/module/search.rb +4 -4
  68. data/lib/puppet/face/module/uninstall.rb +13 -10
  69. data/lib/puppet/face/module/upgrade.rb +11 -7
  70. data/lib/puppet/face/node.rb +5 -5
  71. data/lib/puppet/face/node/clean.rb +8 -8
  72. data/lib/puppet/face/parser.rb +16 -16
  73. data/lib/puppet/face/plugin.rb +6 -6
  74. data/lib/puppet/face/report.rb +9 -9
  75. data/lib/puppet/face/resource.rb +12 -12
  76. data/lib/puppet/face/status.rb +4 -4
  77. data/lib/puppet/feature/base.rb +3 -2
  78. data/lib/puppet/feature/eventlog.rb +1 -1
  79. data/lib/puppet/file_bucket/dipper.rb +9 -9
  80. data/lib/puppet/file_bucket/file.rb +4 -17
  81. data/lib/puppet/file_serving/base.rb +3 -3
  82. data/lib/puppet/file_serving/configuration.rb +3 -3
  83. data/lib/puppet/file_serving/configuration/parser.rb +12 -12
  84. data/lib/puppet/file_serving/content.rb +1 -1
  85. data/lib/puppet/file_serving/fileset.rb +7 -5
  86. data/lib/puppet/file_serving/http_metadata.rb +1 -1
  87. data/lib/puppet/file_serving/metadata.rb +7 -7
  88. data/lib/puppet/file_serving/mount.rb +1 -1
  89. data/lib/puppet/file_serving/mount/file.rb +6 -6
  90. data/lib/puppet/file_serving/mount/modules.rb +1 -1
  91. data/lib/puppet/file_serving/terminus_selector.rb +1 -1
  92. data/lib/puppet/file_system/file_impl.rb +2 -2
  93. data/lib/puppet/file_system/memory_impl.rb +1 -1
  94. data/lib/puppet/file_system/path_pattern.rb +6 -6
  95. data/lib/puppet/file_system/uniquefile.rb +2 -2
  96. data/lib/puppet/file_system/windows.rb +3 -3
  97. data/lib/puppet/forge.rb +8 -14
  98. data/lib/puppet/forge/errors.rb +12 -12
  99. data/lib/puppet/forge/repository.rb +1 -1
  100. data/lib/puppet/functions.rb +17 -45
  101. data/lib/puppet/functions/annotate.rb +108 -0
  102. data/lib/puppet/functions/binary_file.rb +1 -1
  103. data/lib/puppet/functions/call.rb +42 -0
  104. data/lib/puppet/functions/defined.rb +4 -4
  105. data/lib/puppet/functions/dig.rb +1 -1
  106. data/lib/puppet/functions/each.rb +4 -10
  107. data/lib/puppet/functions/epp.rb +0 -3
  108. data/lib/puppet/functions/hiera_include.rb +1 -1
  109. data/lib/puppet/functions/hocon_data.rb +2 -2
  110. data/lib/puppet/functions/json_data.rb +1 -1
  111. data/lib/puppet/functions/lookup.rb +2 -2
  112. data/lib/puppet/functions/map.rb +3 -13
  113. data/lib/puppet/functions/match.rb +2 -2
  114. data/lib/puppet/functions/reduce.rb +0 -31
  115. data/lib/puppet/functions/require.rb +1 -1
  116. data/lib/puppet/functions/slice.rb +3 -3
  117. data/lib/puppet/functions/strftime.rb +10 -2
  118. data/lib/puppet/functions/unique.rb +132 -0
  119. data/lib/puppet/generate/models/type/property.rb +1 -1
  120. data/lib/puppet/generate/type.rb +12 -12
  121. data/lib/puppet/graph/relationship_graph.rb +4 -7
  122. data/lib/puppet/graph/simple_graph.rb +45 -66
  123. data/lib/puppet/indirector.rb +2 -2
  124. data/lib/puppet/indirector/catalog/compiler.rb +58 -44
  125. data/lib/puppet/indirector/catalog/json.rb +18 -0
  126. data/lib/puppet/indirector/certificate/disabled_ca.rb +1 -1
  127. data/lib/puppet/indirector/certificate_request/ca.rb +3 -3
  128. data/lib/puppet/indirector/certificate_request/disabled_ca.rb +1 -1
  129. data/lib/puppet/indirector/certificate_revocation_list/disabled_ca.rb +1 -1
  130. data/lib/puppet/indirector/certificate_status/file.rb +6 -6
  131. data/lib/puppet/indirector/exec.rb +2 -2
  132. data/lib/puppet/indirector/face.rb +18 -18
  133. data/lib/puppet/indirector/file_bucket_file/file.rb +10 -9
  134. data/lib/puppet/indirector/file_metadata/http.rb +1 -1
  135. data/lib/puppet/indirector/file_server.rb +10 -2
  136. data/lib/puppet/indirector/hiera.rb +5 -3
  137. data/lib/puppet/indirector/indirection.rb +16 -18
  138. data/lib/puppet/indirector/json.rb +11 -12
  139. data/lib/puppet/indirector/key/disabled_ca.rb +1 -1
  140. data/lib/puppet/indirector/key/file.rb +2 -2
  141. data/lib/puppet/indirector/ldap.rb +6 -5
  142. data/lib/puppet/indirector/memory.rb +1 -1
  143. data/lib/puppet/indirector/msgpack.rb +8 -7
  144. data/lib/puppet/indirector/node/exec.rb +8 -6
  145. data/lib/puppet/indirector/node/ldap.rb +9 -7
  146. data/lib/puppet/indirector/node/plain.rb +2 -1
  147. data/lib/puppet/indirector/node/write_only_yaml.rb +6 -1
  148. data/lib/puppet/indirector/node/yaml.rb +0 -9
  149. data/lib/puppet/indirector/report/processor.rb +2 -2
  150. data/lib/puppet/indirector/report/rest.rb +13 -0
  151. data/lib/puppet/indirector/request.rb +11 -23
  152. data/lib/puppet/indirector/resource/ral.rb +1 -1
  153. data/lib/puppet/indirector/resource/validator.rb +1 -1
  154. data/lib/puppet/indirector/rest.rb +28 -10
  155. data/lib/puppet/indirector/ssl_file.rb +9 -9
  156. data/lib/puppet/indirector/terminus.rb +3 -3
  157. data/lib/puppet/indirector/yaml.rb +5 -5
  158. data/lib/puppet/info_service/class_information_service.rb +4 -5
  159. data/lib/puppet/interface.rb +2 -7
  160. data/lib/puppet/interface/face_collection.rb +6 -1
  161. data/lib/puppet/module.rb +10 -35
  162. data/lib/puppet/module_tool.rb +7 -3
  163. data/lib/puppet/module_tool/applications/application.rb +8 -9
  164. data/lib/puppet/module_tool/applications/builder.rb +5 -6
  165. data/lib/puppet/module_tool/applications/checksummer.rb +2 -2
  166. data/lib/puppet/module_tool/applications/installer.rb +11 -10
  167. data/lib/puppet/module_tool/applications/searcher.rb +1 -1
  168. data/lib/puppet/module_tool/applications/uninstaller.rb +2 -1
  169. data/lib/puppet/module_tool/applications/unpacker.rb +3 -3
  170. data/lib/puppet/module_tool/applications/upgrader.rb +10 -9
  171. data/lib/puppet/module_tool/contents_description.rb +1 -1
  172. data/lib/puppet/module_tool/dependency.rb +0 -1
  173. data/lib/puppet/module_tool/errors/installer.rb +22 -22
  174. data/lib/puppet/module_tool/errors/shared.rb +44 -42
  175. data/lib/puppet/module_tool/errors/uninstaller.rb +13 -9
  176. data/lib/puppet/module_tool/errors/upgrader.rb +11 -11
  177. data/lib/puppet/module_tool/install_directory.rb +1 -1
  178. data/lib/puppet/module_tool/installed_modules.rb +3 -3
  179. data/lib/puppet/module_tool/local_tarball.rb +4 -4
  180. data/lib/puppet/module_tool/metadata.rb +16 -13
  181. data/lib/puppet/module_tool/shared_behaviors.rb +6 -6
  182. data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +1 -1
  183. data/lib/puppet/module_tool/skeleton/templates/generator/README.md.erb +10 -4
  184. data/lib/puppet/module_tool/skeleton/templates/generator/Rakefile +2 -2
  185. data/lib/puppet/module_tool/tar.rb +2 -1
  186. data/lib/puppet/module_tool/tar/mini.rb +4 -57
  187. data/lib/puppet/network/auth_config_parser.rb +12 -11
  188. data/lib/puppet/network/authconfig.rb +2 -2
  189. data/lib/puppet/network/authstore.rb +2 -2
  190. data/lib/puppet/network/format.rb +7 -7
  191. data/lib/puppet/network/format_handler.rb +12 -9
  192. data/lib/puppet/network/format_support.rb +11 -5
  193. data/lib/puppet/network/formats.rb +38 -27
  194. data/lib/puppet/network/http/api/indirected_routes.rb +72 -33
  195. data/lib/puppet/network/http/api/master/v3/environment.rb +33 -14
  196. data/lib/puppet/network/http/compression.rb +10 -7
  197. data/lib/puppet/network/http/connection.rb +19 -23
  198. data/lib/puppet/network/http/error.rb +14 -10
  199. data/lib/puppet/network/http/factory.rb +0 -12
  200. data/lib/puppet/network/http/handler.rb +8 -4
  201. data/lib/puppet/network/http/issues.rb +1 -0
  202. data/lib/puppet/network/http/pool.rb +1 -1
  203. data/lib/puppet/network/http/rack.rb +2 -2
  204. data/lib/puppet/network/http/rack/rest.rb +1 -1
  205. data/lib/puppet/network/http/request.rb +34 -20
  206. data/lib/puppet/network/http/response.rb +13 -1
  207. data/lib/puppet/network/http/webrick.rb +8 -6
  208. data/lib/puppet/network/http/webrick/rest.rb +2 -2
  209. data/lib/puppet/network/rights.rb +6 -6
  210. data/lib/puppet/network/server.rb +2 -2
  211. data/lib/puppet/node.rb +25 -23
  212. data/lib/puppet/node/environment.rb +21 -4
  213. data/lib/puppet/node/facts.rb +0 -14
  214. data/lib/puppet/parameter.rb +3 -28
  215. data/lib/puppet/parameter/package_options.rb +1 -1
  216. data/lib/puppet/parameter/path.rb +3 -3
  217. data/lib/puppet/parameter/value_collection.rb +4 -4
  218. data/lib/puppet/parser/ast/leaf.rb +1 -1
  219. data/lib/puppet/parser/ast/node.rb +1 -1
  220. data/lib/puppet/parser/ast/pops_bridge.rb +3 -3
  221. data/lib/puppet/parser/ast/resource.rb +1 -1
  222. data/lib/puppet/parser/ast/resource_instance.rb +1 -1
  223. data/lib/puppet/parser/ast/resourceparam.rb +1 -1
  224. data/lib/puppet/parser/compiler.rb +44 -117
  225. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +2 -2
  226. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +6 -9
  227. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +1 -1
  228. data/lib/puppet/parser/e4_parser_adapter.rb +1 -2
  229. data/lib/puppet/parser/environment_compiler.rb +13 -15
  230. data/lib/puppet/parser/functions.rb +6 -6
  231. data/lib/puppet/parser/functions/assert_type.rb +1 -1
  232. data/lib/puppet/parser/functions/binary_file.rb +1 -1
  233. data/lib/puppet/parser/functions/break.rb +1 -1
  234. data/lib/puppet/parser/functions/contain.rb +1 -1
  235. data/lib/puppet/parser/functions/create_resources.rb +3 -3
  236. data/lib/puppet/parser/functions/defined.rb +1 -1
  237. data/lib/puppet/parser/functions/dig.rb +1 -1
  238. data/lib/puppet/parser/functions/each.rb +1 -1
  239. data/lib/puppet/parser/functions/epp.rb +1 -4
  240. data/lib/puppet/parser/functions/file.rb +1 -1
  241. data/lib/puppet/parser/functions/filter.rb +1 -1
  242. data/lib/puppet/parser/functions/find_file.rb +1 -1
  243. data/lib/puppet/parser/functions/generate.rb +5 -4
  244. data/lib/puppet/parser/functions/hiera_include.rb +1 -1
  245. data/lib/puppet/parser/functions/include.rb +2 -1
  246. data/lib/puppet/parser/functions/inline_epp.rb +1 -1
  247. data/lib/puppet/parser/functions/inline_template.rb +1 -1
  248. data/lib/puppet/parser/functions/lest.rb +1 -1
  249. data/lib/puppet/parser/functions/map.rb +1 -1
  250. data/lib/puppet/parser/functions/match.rb +1 -1
  251. data/lib/puppet/parser/functions/new.rb +45 -30
  252. data/lib/puppet/parser/functions/next.rb +1 -1
  253. data/lib/puppet/parser/functions/reduce.rb +1 -1
  254. data/lib/puppet/parser/functions/require.rb +1 -1
  255. data/lib/puppet/parser/functions/return.rb +2 -23
  256. data/lib/puppet/parser/functions/reverse_each.rb +1 -1
  257. data/lib/puppet/parser/functions/slice.rb +1 -1
  258. data/lib/puppet/parser/functions/sprintf.rb +3 -17
  259. data/lib/puppet/parser/functions/step.rb +1 -1
  260. data/lib/puppet/parser/functions/strftime.rb +1 -1
  261. data/lib/puppet/parser/functions/then.rb +1 -1
  262. data/lib/puppet/parser/functions/type.rb +1 -1
  263. data/lib/puppet/parser/functions/with.rb +1 -1
  264. data/lib/puppet/parser/parser_factory.rb +0 -30
  265. data/lib/puppet/parser/relationship.rb +49 -20
  266. data/lib/puppet/parser/resource.rb +31 -30
  267. data/lib/puppet/parser/resource/param.rb +0 -3
  268. data/lib/puppet/parser/scope.rb +122 -168
  269. data/lib/puppet/parser/templatewrapper.rb +2 -2
  270. data/lib/puppet/parser/type_loader.rb +1 -1
  271. data/lib/puppet/plugins/configuration.rb +15 -67
  272. data/lib/puppet/plugins/syntax_checkers.rb +6 -11
  273. data/lib/puppet/pops.rb +7 -37
  274. data/lib/puppet/pops/adaptable.rb +8 -3
  275. data/lib/puppet/pops/adapters.rb +23 -83
  276. data/lib/puppet/pops/evaluator/access_operator.rb +10 -39
  277. data/lib/puppet/pops/evaluator/collector_transformer.rb +7 -12
  278. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +1 -1
  279. data/lib/puppet/pops/evaluator/compare_operator.rb +7 -7
  280. data/lib/puppet/pops/evaluator/epp_evaluator.rb +1 -1
  281. data/lib/puppet/pops/evaluator/evaluator_impl.rb +46 -38
  282. data/lib/puppet/pops/evaluator/external_syntax_support.rb +2 -9
  283. data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +0 -2
  284. data/lib/puppet/pops/evaluator/puppet_proc.rb +1 -1
  285. data/lib/puppet/pops/evaluator/relationship_operator.rb +26 -9
  286. data/lib/puppet/pops/evaluator/runtime3_converter.rb +17 -1
  287. data/lib/puppet/pops/evaluator/runtime3_support.rb +13 -30
  288. data/lib/puppet/pops/functions/dispatch.rb +1 -6
  289. data/lib/puppet/pops/issues.rb +182 -162
  290. data/lib/puppet/pops/loader/base_loader.rb +2 -2
  291. data/lib/puppet/pops/loader/gem_support.rb +2 -2
  292. data/lib/puppet/pops/loader/module_loaders.rb +59 -8
  293. data/lib/puppet/pops/loader/predefined_loader.rb +1 -6
  294. data/lib/puppet/pops/loader/puppet_function_instantiator.rb +8 -8
  295. data/lib/puppet/pops/loader/puppet_resource_type_impl_instantiator.rb +9 -10
  296. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +3 -3
  297. data/lib/puppet/pops/loader/static_loader.rb +33 -64
  298. data/lib/puppet/pops/loader/type_definition_instantiator.rb +7 -7
  299. data/lib/puppet/pops/loader/typed_name.rb +5 -0
  300. data/lib/puppet/pops/loaders.rb +15 -5
  301. data/lib/puppet/pops/lookup.rb +4 -2
  302. data/lib/puppet/pops/lookup/context.rb +1 -1
  303. data/lib/puppet/pops/lookup/data_provider.rb +3 -18
  304. data/lib/puppet/pops/lookup/global_data_provider.rb +1 -1
  305. data/lib/puppet/pops/lookup/hiera_config.rb +12 -35
  306. data/lib/puppet/pops/lookup/interpolation.rb +1 -0
  307. data/lib/puppet/pops/lookup/invocation.rb +1 -1
  308. data/lib/puppet/pops/lookup/lookup_adapter.rb +20 -64
  309. data/lib/puppet/pops/lookup/lookup_key.rb +1 -1
  310. data/lib/puppet/pops/lookup/module_data_provider.rb +1 -1
  311. data/lib/puppet/pops/lookup/sub_lookup.rb +2 -1
  312. data/lib/puppet/pops/merge_strategy.rb +1 -1
  313. data/lib/puppet/pops/model/ast.pp +692 -0
  314. data/lib/puppet/pops/model/ast.rb +4833 -0
  315. data/lib/puppet/pops/model/ast_transformer.rb +9 -10
  316. data/lib/puppet/pops/model/factory.rb +454 -527
  317. data/lib/puppet/pops/model/model_label_provider.rb +3 -2
  318. data/lib/puppet/pops/model/model_tree_dumper.rb +9 -8
  319. data/lib/puppet/pops/parser/egrammar.ra +66 -60
  320. data/lib/puppet/pops/parser/eparser.rb +1483 -1578
  321. data/lib/puppet/pops/parser/evaluating_parser.rb +5 -5
  322. data/lib/puppet/pops/parser/heredoc_support.rb +1 -1
  323. data/lib/puppet/pops/parser/interpolation_support.rb +4 -4
  324. data/lib/puppet/pops/parser/lexer2.rb +7 -33
  325. data/lib/puppet/pops/parser/locator.rb +39 -16
  326. data/lib/puppet/pops/parser/parser_support.rb +25 -29
  327. data/lib/puppet/pops/patterns.rb +1 -2
  328. data/lib/puppet/pops/pcore.rb +26 -19
  329. data/lib/puppet/pops/resource/param.rb +1 -1
  330. data/lib/puppet/pops/resource/resource_type_impl.rb +2 -2
  331. data/lib/puppet/pops/serialization.rb +25 -1
  332. data/lib/puppet/pops/serialization/abstract_writer.rb +9 -1
  333. data/lib/puppet/pops/serialization/deserializer.rb +1 -1
  334. data/lib/puppet/pops/serialization/from_data_converter.rb +181 -0
  335. data/lib/puppet/pops/serialization/json.rb +4 -4
  336. data/lib/puppet/pops/serialization/json_path.rb +126 -0
  337. data/lib/puppet/pops/serialization/object.rb +5 -5
  338. data/lib/puppet/pops/serialization/serializer.rb +23 -9
  339. data/lib/puppet/pops/serialization/to_data_converter.rb +292 -0
  340. data/lib/puppet/pops/time/timespan.rb +11 -11
  341. data/lib/puppet/pops/time/timestamp.rb +8 -8
  342. data/lib/puppet/pops/types/annotatable.rb +7 -7
  343. data/lib/puppet/pops/types/annotation.rb +71 -0
  344. data/lib/puppet/pops/types/class_loader.rb +4 -6
  345. data/lib/puppet/pops/types/enumeration.rb +2 -2
  346. data/lib/puppet/pops/types/iterable.rb +2 -4
  347. data/lib/puppet/pops/types/p_binary_type.rb +7 -1
  348. data/lib/puppet/pops/types/p_meta_type.rb +16 -12
  349. data/lib/puppet/pops/types/p_object_type.rb +135 -96
  350. data/lib/puppet/pops/types/p_runtime_type.rb +1 -1
  351. data/lib/puppet/pops/types/p_sem_ver_range_type.rb +6 -2
  352. data/lib/puppet/pops/types/p_timespan_type.rb +55 -4
  353. data/lib/puppet/pops/types/p_type_set_type.rb +42 -34
  354. data/lib/puppet/pops/types/puppet_object.rb +13 -3
  355. data/lib/puppet/pops/types/ruby_generator.rb +291 -127
  356. data/lib/puppet/pops/types/ruby_method.rb +31 -0
  357. data/lib/puppet/pops/types/string_converter.rb +107 -30
  358. data/lib/puppet/pops/types/type_calculator.rb +56 -94
  359. data/lib/puppet/pops/types/type_factory.rb +34 -6
  360. data/lib/puppet/pops/types/type_formatter.rb +64 -16
  361. data/lib/puppet/pops/types/type_mismatch_describer.rb +13 -22
  362. data/lib/puppet/pops/types/type_parser.rb +28 -13
  363. data/lib/puppet/pops/types/type_set_reference.rb +6 -6
  364. data/lib/puppet/pops/types/types.rb +169 -245
  365. data/lib/puppet/pops/utils.rb +0 -24
  366. data/lib/puppet/pops/validation.rb +3 -9
  367. data/lib/puppet/pops/validation/checker4_0.rb +86 -76
  368. data/lib/puppet/pops/validation/validator_factory_4_0.rb +0 -1
  369. data/lib/puppet/pops/visitor.rb +21 -0
  370. data/lib/puppet/property.rb +17 -14
  371. data/lib/puppet/property/ensure.rb +3 -3
  372. data/lib/puppet/property/list.rb +1 -10
  373. data/lib/puppet/provider.rb +2 -0
  374. data/lib/puppet/provider/aixobject.rb +7 -7
  375. data/lib/puppet/provider/augeas/augeas.rb +37 -37
  376. data/lib/puppet/provider/command.rb +1 -1
  377. data/lib/puppet/provider/cron/crontab.rb +2 -2
  378. data/lib/puppet/provider/exec.rb +4 -4
  379. data/lib/puppet/provider/exec/posix.rb +4 -4
  380. data/lib/puppet/provider/exec/windows.rb +3 -3
  381. data/lib/puppet/provider/file/posix.rb +5 -5
  382. data/lib/puppet/provider/file/windows.rb +4 -4
  383. data/lib/puppet/provider/group/aix.rb +2 -2
  384. data/lib/puppet/provider/group/groupadd.rb +2 -2
  385. data/lib/puppet/provider/group/pw.rb +1 -1
  386. data/lib/puppet/provider/group/windows_adsi.rb +7 -4
  387. data/lib/puppet/provider/host/parsed.rb +1 -1
  388. data/lib/puppet/provider/macauthorization/macauthorization.rb +9 -9
  389. data/lib/puppet/provider/maillist/mailman.rb +2 -2
  390. data/lib/puppet/provider/mcx/mcxcontent.rb +3 -3
  391. data/lib/puppet/provider/mount.rb +2 -1
  392. data/lib/puppet/provider/mount/parsed.rb +10 -8
  393. data/lib/puppet/provider/naginator.rb +1 -1
  394. data/lib/puppet/provider/nameservice.rb +8 -10
  395. data/lib/puppet/provider/nameservice/directoryservice.rb +11 -11
  396. data/lib/puppet/provider/network_device.rb +2 -1
  397. data/lib/puppet/provider/package/aix.rb +6 -6
  398. data/lib/puppet/provider/package/appdmg.rb +2 -2
  399. data/lib/puppet/provider/package/apple.rb +1 -1
  400. data/lib/puppet/provider/package/apt.rb +4 -4
  401. data/lib/puppet/provider/package/aptitude.rb +1 -1
  402. data/lib/puppet/provider/package/aptrpm.rb +2 -2
  403. data/lib/puppet/provider/package/blastwave.rb +4 -4
  404. data/lib/puppet/provider/package/dnf.rb +1 -1
  405. data/lib/puppet/provider/package/dpkg.rb +3 -3
  406. data/lib/puppet/provider/package/fink.rb +3 -3
  407. data/lib/puppet/provider/package/freebsd.rb +1 -1
  408. data/lib/puppet/provider/package/gem.rb +6 -6
  409. data/lib/puppet/provider/package/hpux.rb +1 -1
  410. data/lib/puppet/provider/package/nim.rb +15 -12
  411. data/lib/puppet/provider/package/openbsd.rb +4 -4
  412. data/lib/puppet/provider/package/opkg.rb +1 -1
  413. data/lib/puppet/provider/package/pacman.rb +9 -9
  414. data/lib/puppet/provider/package/pkg.rb +9 -9
  415. data/lib/puppet/provider/package/pkgdmg.rb +4 -4
  416. data/lib/puppet/provider/package/pkgin.rb +3 -3
  417. data/lib/puppet/provider/package/pkgng.rb +1 -1
  418. data/lib/puppet/provider/package/pkgutil.rb +6 -6
  419. data/lib/puppet/provider/package/portage.rb +167 -59
  420. data/lib/puppet/provider/package/ports.rb +3 -3
  421. data/lib/puppet/provider/package/portupgrade.rb +4 -4
  422. data/lib/puppet/provider/package/rpm.rb +7 -4
  423. data/lib/puppet/provider/package/rug.rb +1 -1
  424. data/lib/puppet/provider/package/sun.rb +3 -2
  425. data/lib/puppet/provider/package/up2date.rb +1 -1
  426. data/lib/puppet/provider/package/urpmi.rb +1 -1
  427. data/lib/puppet/provider/package/windows.rb +4 -4
  428. data/lib/puppet/provider/package/windows/package.rb +3 -3
  429. data/lib/puppet/provider/package/yum.rb +5 -6
  430. data/lib/puppet/provider/package/zypper.rb +1 -1
  431. data/lib/puppet/provider/parsedfile.rb +1 -1
  432. data/lib/puppet/provider/service/base.rb +8 -21
  433. data/lib/puppet/provider/service/smf.rb +2 -2
  434. data/lib/puppet/provider/service/systemd.rb +1 -2
  435. data/lib/puppet/provider/service/upstart.rb +1 -3
  436. data/lib/puppet/provider/user/aix.rb +2 -2
  437. data/lib/puppet/provider/user/ldap.rb +1 -1
  438. data/lib/puppet/provider/user/windows_adsi.rb +1 -1
  439. data/lib/puppet/provider/yumrepo/inifile.rb +3 -3
  440. data/lib/puppet/provider/zfs/zfs.rb +1 -5
  441. data/lib/puppet/reference/configuration.rb +0 -2
  442. data/lib/puppet/reference/indirection.rb +1 -1
  443. data/lib/puppet/reference/metaparameter.rb +1 -1
  444. data/lib/puppet/reference/providers.rb +6 -6
  445. data/lib/puppet/reference/type.rb +2 -2
  446. data/lib/puppet/relationship.rb +7 -9
  447. data/lib/puppet/reports/http.rb +8 -6
  448. data/lib/puppet/resource.rb +75 -134
  449. data/lib/puppet/resource/capability_finder.rb +1 -1
  450. data/lib/puppet/resource/catalog.rb +26 -34
  451. data/lib/puppet/resource/status.rb +13 -24
  452. data/lib/puppet/resource/type.rb +13 -61
  453. data/lib/puppet/resource/type_collection.rb +29 -23
  454. data/lib/puppet/settings.rb +1 -1
  455. data/lib/puppet/settings/array_setting.rb +1 -1
  456. data/lib/puppet/settings/autosign_setting.rb +1 -1
  457. data/lib/puppet/settings/boolean_setting.rb +1 -1
  458. data/lib/puppet/settings/config_file.rb +2 -2
  459. data/lib/puppet/settings/duration_setting.rb +1 -1
  460. data/lib/puppet/settings/enum_setting.rb +1 -1
  461. data/lib/puppet/settings/environment_conf.rb +2 -10
  462. data/lib/puppet/settings/file_setting.rb +2 -2
  463. data/lib/puppet/settings/priority_setting.rb +1 -1
  464. data/lib/puppet/settings/server_list_setting.rb +1 -1
  465. data/lib/puppet/settings/symbolic_enum_setting.rb +1 -1
  466. data/lib/puppet/settings/terminus_setting.rb +1 -1
  467. data/lib/puppet/settings/ttl_setting.rb +2 -2
  468. data/lib/puppet/ssl/base.rb +2 -2
  469. data/lib/puppet/ssl/certificate_authority.rb +21 -21
  470. data/lib/puppet/ssl/certificate_authority/interface.rb +13 -13
  471. data/lib/puppet/ssl/certificate_factory.rb +2 -2
  472. data/lib/puppet/ssl/certificate_request.rb +14 -14
  473. data/lib/puppet/ssl/certificate_request_attributes.rb +3 -3
  474. data/lib/puppet/ssl/certificate_revocation_list.rb +3 -3
  475. data/lib/puppet/ssl/host.rb +29 -29
  476. data/lib/puppet/ssl/inventory.rb +1 -1
  477. data/lib/puppet/ssl/key.rb +1 -1
  478. data/lib/puppet/ssl/oids.rb +5 -5
  479. data/lib/puppet/ssl/validator/default_validator.rb +3 -4
  480. data/lib/puppet/syntax_checkers/base64.rb +7 -7
  481. data/lib/puppet/syntax_checkers/json.rb +5 -5
  482. data/lib/puppet/test/test_helper.rb +0 -4
  483. data/lib/puppet/transaction.rb +38 -23
  484. data/lib/puppet/transaction/additional_resource_generator.rb +4 -3
  485. data/lib/puppet/transaction/event.rb +19 -8
  486. data/lib/puppet/transaction/event_manager.rb +6 -6
  487. data/lib/puppet/transaction/persistence.rb +6 -6
  488. data/lib/puppet/transaction/report.rb +34 -47
  489. data/lib/puppet/transaction/resource_harness.rb +14 -12
  490. data/lib/puppet/type.rb +9 -7
  491. data/lib/puppet/type/augeas.rb +2 -2
  492. data/lib/puppet/type/cron.rb +14 -31
  493. data/lib/puppet/type/exec.rb +16 -16
  494. data/lib/puppet/type/file.rb +21 -22
  495. data/lib/puppet/type/file/content.rb +1 -1
  496. data/lib/puppet/type/file/group.rb +3 -3
  497. data/lib/puppet/type/file/mode.rb +6 -6
  498. data/lib/puppet/type/file/owner.rb +3 -3
  499. data/lib/puppet/type/file/selcontext.rb +18 -1
  500. data/lib/puppet/type/file/source.rb +5 -1
  501. data/lib/puppet/type/filebucket.rb +3 -8
  502. data/lib/puppet/type/group.rb +2 -2
  503. data/lib/puppet/type/host.rb +6 -6
  504. data/lib/puppet/type/interface.rb +1 -1
  505. data/lib/puppet/type/k5login.rb +1 -1
  506. data/lib/puppet/type/macauthorization.rb +1 -1
  507. data/lib/puppet/type/mailalias.rb +2 -18
  508. data/lib/puppet/type/maillist.rb +1 -1
  509. data/lib/puppet/type/mount.rb +8 -8
  510. data/lib/puppet/type/notify.rb +2 -0
  511. data/lib/puppet/type/package.rb +5 -5
  512. data/lib/puppet/type/resources.rb +6 -6
  513. data/lib/puppet/type/schedule.rb +9 -9
  514. data/lib/puppet/type/scheduled_task.rb +9 -8
  515. data/lib/puppet/type/service.rb +1 -1
  516. data/lib/puppet/type/ssh_authorized_key.rb +3 -19
  517. data/lib/puppet/type/sshkey.rb +4 -4
  518. data/lib/puppet/type/tidy.rb +16 -19
  519. data/lib/puppet/type/user.rb +35 -70
  520. data/lib/puppet/type/yumrepo.rb +8 -8
  521. data/lib/puppet/type/zone.rb +7 -7
  522. data/lib/puppet/type/zpool.rb +3 -3
  523. data/lib/puppet/util.rb +16 -12
  524. data/lib/puppet/util/at_fork.rb +35 -0
  525. data/lib/puppet/util/at_fork/noop.rb +18 -0
  526. data/lib/puppet/util/at_fork/solaris.rb +158 -0
  527. data/lib/puppet/util/autoload.rb +2 -2
  528. data/lib/puppet/util/backups.rb +6 -6
  529. data/lib/puppet/util/classgen.rb +4 -4
  530. data/lib/puppet/util/command_line.rb +4 -4
  531. data/lib/puppet/util/command_line/puppet_option_parser.rb +3 -3
  532. data/lib/puppet/util/command_line/trollop.rb +31 -31
  533. data/lib/puppet/util/diff.rb +1 -1
  534. data/lib/puppet/util/errors.rb +4 -4
  535. data/lib/puppet/util/execution.rb +9 -9
  536. data/lib/puppet/util/feature.rb +5 -5
  537. data/lib/puppet/util/fileparsing.rb +8 -8
  538. data/lib/puppet/util/filetype.rb +15 -15
  539. data/lib/puppet/util/http_proxy.rb +7 -15
  540. data/lib/puppet/util/inifile.rb +4 -4
  541. data/lib/puppet/util/instance_loader.rb +1 -1
  542. data/lib/puppet/util/json_lockfile.rb +4 -4
  543. data/lib/puppet/util/ldap/connection.rb +2 -2
  544. data/lib/puppet/util/ldap/manager.rb +2 -2
  545. data/lib/puppet/util/limits.rb +1 -1
  546. data/lib/puppet/util/log.rb +23 -16
  547. data/lib/puppet/util/log/destinations.rb +10 -16
  548. data/lib/puppet/util/logging.rb +11 -8
  549. data/lib/puppet/util/metric.rb +9 -6
  550. data/lib/puppet/util/monkey_patches.rb +27 -66
  551. data/lib/puppet/util/network_device.rb +1 -1
  552. data/lib/puppet/util/network_device/cisco/device.rb +7 -7
  553. data/lib/puppet/util/network_device/cisco/interface.rb +1 -1
  554. data/lib/puppet/util/network_device/config.rb +6 -6
  555. data/lib/puppet/util/network_device/transport/ssh.rb +6 -6
  556. data/lib/puppet/util/plist.rb +4 -2
  557. data/lib/puppet/util/posix.rb +5 -5
  558. data/lib/puppet/util/profiler/wall_clock.rb +1 -1
  559. data/lib/puppet/util/provider_features.rb +1 -1
  560. data/lib/puppet/util/psych_support.rb +3 -11
  561. data/lib/puppet/util/rdoc.rb +4 -4
  562. data/lib/puppet/util/reference.rb +14 -7
  563. data/lib/puppet/util/resource_template.rb +1 -1
  564. data/lib/puppet/util/retry_action.rb +2 -2
  565. data/lib/puppet/util/selinux.rb +54 -12
  566. data/lib/puppet/util/splayer.rb +1 -1
  567. data/lib/puppet/util/storage.rb +5 -5
  568. data/lib/puppet/util/suidmanager.rb +4 -4
  569. data/lib/puppet/util/symbolic_file_mode.rb +9 -9
  570. data/lib/puppet/util/tag_set.rb +1 -4
  571. data/lib/puppet/util/tagging.rb +2 -2
  572. data/lib/puppet/util/windows.rb +2 -0
  573. data/lib/puppet/util/windows/adsi.rb +19 -16
  574. data/lib/puppet/util/windows/api_types.rb +7 -11
  575. data/lib/puppet/util/windows/com.rb +4 -4
  576. data/lib/puppet/util/windows/error.rb +2 -2
  577. data/lib/puppet/util/windows/eventlog.rb +192 -0
  578. data/lib/puppet/util/windows/file.rb +13 -96
  579. data/lib/puppet/util/windows/principal.rb +6 -7
  580. data/lib/puppet/util/windows/process.rb +6 -14
  581. data/lib/puppet/util/windows/registry.rb +11 -11
  582. data/lib/puppet/util/windows/root_certs.rb +1 -1
  583. data/lib/puppet/util/windows/security.rb +14 -14
  584. data/lib/puppet/util/windows/sid.rb +13 -66
  585. data/lib/puppet/util/windows/taskscheduler.rb +62 -62
  586. data/lib/puppet/util/windows/user.rb +6 -6
  587. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet.rb +2 -10
  588. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/gem_version.rb +1 -1
  589. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/version.rb +122 -114
  590. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/version_range.rb +678 -342
  591. data/lib/puppet/vendor/semantic_puppet/{lib/semantic_puppet/locales → locales}/config.yaml +0 -0
  592. data/lib/puppet/version.rb +1 -1
  593. data/locales/config.yaml +1 -1
  594. data/locales/puppet.pot +7847 -112
  595. data/man/man5/puppet.conf.5 +55 -296
  596. data/man/man8/puppet-agent.8 +10 -32
  597. data/man/man8/puppet-apply.8 +6 -21
  598. data/man/man8/puppet-ca.8 +34 -48
  599. data/man/man8/puppet-catalog.8 +4 -4
  600. data/man/man8/puppet-cert.8 +6 -23
  601. data/man/man8/puppet-certificate.8 +28 -44
  602. data/man/man8/puppet-certificate_request.8 +4 -4
  603. data/man/man8/puppet-certificate_revocation_list.8 +4 -4
  604. data/man/man8/puppet-config.8 +5 -5
  605. data/man/man8/puppet-describe.8 +3 -3
  606. data/man/man8/puppet-device.8 +13 -23
  607. data/man/man8/puppet-doc.8 +5 -5
  608. data/man/man8/puppet-epp.8 +10 -16
  609. data/man/man8/puppet-facts.8 +4 -4
  610. data/man/man8/puppet-filebucket.8 +6 -63
  611. data/man/man8/puppet-help.8 +4 -4
  612. data/man/man8/puppet-inspect.8 +5 -8
  613. data/man/man8/puppet-key.8 +4 -4
  614. data/man/man8/puppet-man.8 +5 -5
  615. data/man/man8/puppet-master.8 +5 -5
  616. data/man/man8/puppet-module.8 +13 -22
  617. data/man/man8/puppet-node.8 +4 -4
  618. data/man/man8/puppet-parser.8 +4 -4
  619. data/man/man8/puppet-plugin.8 +4 -4
  620. data/man/man8/puppet-report.8 +4 -4
  621. data/man/man8/puppet-resource.8 +8 -4
  622. data/man/man8/puppet-status.8 +5 -5
  623. data/man/man8/puppet.8 +3 -12
  624. data/spec/fixtures/unit/application/environments/production/data/common.yaml +0 -2
  625. data/spec/fixtures/unit/data_providers/environments/production/modules/abc/metadata.json +9 -0
  626. data/spec/fixtures/unit/data_providers/environments/production/modules/xyz/metadata.json +9 -0
  627. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/abc/metadata.json +9 -0
  628. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/bad_data/metadata.json +9 -0
  629. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/bca/metadata.json +9 -0
  630. data/spec/integration/agent/logging_spec.rb +0 -2
  631. data/spec/integration/application/apply_spec.rb +19 -23
  632. data/spec/integration/application/lookup_spec.rb +0 -21
  633. data/spec/integration/configurer_spec.rb +1 -1
  634. data/spec/integration/defaults_spec.rb +2 -2
  635. data/spec/integration/file_bucket/file_spec.rb +5 -20
  636. data/spec/integration/indirector/file_content/file_server_spec.rb +1 -0
  637. data/spec/integration/indirector/file_metadata/file_server_spec.rb +1 -0
  638. data/spec/integration/parser/catalog_spec.rb +1 -1
  639. data/spec/integration/parser/class_spec.rb +6 -6
  640. data/spec/integration/parser/compiler_spec.rb +184 -142
  641. data/spec/integration/parser/dynamic_scoping_spec.rb +0 -1
  642. data/spec/integration/parser/pcore_resource_spec.rb +1 -1
  643. data/spec/integration/parser/scope_spec.rb +53 -4
  644. data/spec/integration/provider/cron/crontab_spec.rb +0 -1
  645. data/spec/integration/resource/catalog_spec.rb +0 -4
  646. data/spec/integration/transaction/report_spec.rb +2 -2
  647. data/spec/integration/transaction_spec.rb +4 -37
  648. data/spec/integration/type/package_spec.rb +7 -1
  649. data/spec/integration/util/execution_spec.rb +0 -8
  650. data/spec/integration/util/windows/adsi_spec.rb +1 -86
  651. data/spec/integration/util/windows/principal_spec.rb +1 -10
  652. data/spec/integration/util/windows/process_spec.rb +0 -45
  653. data/spec/lib/matchers/json.rb +3 -3
  654. data/spec/lib/puppet/indirector_testing.rb +4 -0
  655. data/spec/lib/puppet_spec/compiler.rb +1 -1
  656. data/spec/lib/puppet_spec/modules.rb +2 -2
  657. data/spec/lib/puppet_spec/network.rb +10 -6
  658. data/spec/shared_contexts/types_setup.rb +28 -9
  659. data/spec/spec_helper.rb +0 -11
  660. data/spec/unit/agent_spec.rb +12 -34
  661. data/spec/unit/application/agent_spec.rb +16 -0
  662. data/spec/unit/application/apply_spec.rb +37 -13
  663. data/spec/unit/application/cert_spec.rb +1 -40
  664. data/spec/unit/application/config_spec.rb +0 -4
  665. data/spec/unit/application/describe_spec.rb +19 -0
  666. data/spec/unit/application/device_spec.rb +41 -2
  667. data/spec/unit/application/face_base_spec.rb +6 -6
  668. data/spec/unit/application/lookup_spec.rb +1 -31
  669. data/spec/unit/application/master_spec.rb +22 -6
  670. data/spec/unit/application/resource_spec.rb +17 -0
  671. data/spec/unit/application_spec.rb +0 -24
  672. data/spec/unit/capability_spec.rb +2 -6
  673. data/spec/unit/configurer/fact_handler_spec.rb +74 -41
  674. data/spec/unit/configurer/plugin_handler_spec.rb +13 -19
  675. data/spec/unit/configurer_spec.rb +36 -33
  676. data/spec/unit/defaults_spec.rb +0 -44
  677. data/spec/unit/environments_spec.rb +0 -15
  678. data/spec/unit/face/config_spec.rb +2 -1
  679. data/spec/unit/face/epp_face_spec.rb +0 -9
  680. data/spec/unit/face/module/list_spec.rb +60 -0
  681. data/spec/unit/file_bucket/file_spec.rb +3 -3
  682. data/spec/unit/file_serving/http_metadata_spec.rb +1 -1
  683. data/spec/unit/file_serving/metadata_spec.rb +14 -9
  684. data/spec/unit/forge/forge_spec.rb +2 -2
  685. data/spec/unit/forge_spec.rb +0 -105
  686. data/spec/unit/functions/annotate_spec.rb +175 -0
  687. data/spec/unit/functions/break_spec.rb +52 -83
  688. data/spec/unit/functions/call_spec.rb +77 -0
  689. data/spec/unit/functions/contain_spec.rb +1 -1
  690. data/spec/unit/functions/defined_spec.rb +2 -2
  691. data/spec/unit/functions/epp_spec.rb +0 -10
  692. data/spec/unit/functions/hiera_spec.rb +0 -5
  693. data/spec/unit/functions/lookup_fixture_spec.rb +1 -6
  694. data/spec/unit/functions/lookup_spec.rb +4 -97
  695. data/spec/unit/functions/new_spec.rb +1 -1
  696. data/spec/unit/functions/unique_spec.rb +111 -0
  697. data/spec/unit/functions4_spec.rb +2 -43
  698. data/spec/unit/graph/relationship_graph_spec.rb +0 -15
  699. data/spec/unit/graph/simple_graph_spec.rb +58 -55
  700. data/spec/unit/indirector/catalog/compiler_spec.rb +206 -174
  701. data/spec/unit/indirector/catalog/json_spec.rb +50 -1
  702. data/spec/unit/indirector/facts/facter_spec.rb +1 -2
  703. data/spec/unit/indirector/file_bucket_file/file_spec.rb +4 -4
  704. data/spec/unit/indirector/file_server_spec.rb +17 -2
  705. data/spec/unit/indirector/indirection_spec.rb +3 -60
  706. data/spec/unit/indirector/json_spec.rb +27 -6
  707. data/spec/unit/indirector/node/exec_spec.rb +12 -12
  708. data/spec/unit/indirector/node/ldap_spec.rb +29 -8
  709. data/spec/unit/indirector/node/plain_spec.rb +16 -6
  710. data/spec/unit/indirector/node/write_only_yaml_spec.rb +12 -0
  711. data/spec/unit/indirector/report/processor_spec.rb +2 -2
  712. data/spec/unit/indirector/report/rest_spec.rb +29 -3
  713. data/spec/unit/indirector/request_spec.rb +0 -45
  714. data/spec/unit/indirector/rest_spec.rb +57 -15
  715. data/spec/unit/interface/face_collection_spec.rb +7 -7
  716. data/spec/unit/interface_spec.rb +0 -12
  717. data/spec/unit/module_spec.rb +10 -31
  718. data/spec/unit/module_tool/applications/installer_spec.rb +0 -1
  719. data/spec/unit/module_tool/applications/upgrader_spec.rb +0 -1
  720. data/spec/unit/module_tool/tar/mini_spec.rb +5 -34
  721. data/spec/unit/network/format_handler_spec.rb +11 -11
  722. data/spec/unit/network/format_spec.rb +9 -0
  723. data/spec/unit/network/formats_spec.rb +322 -138
  724. data/spec/unit/network/http/api/indirected_routes_spec.rb +62 -52
  725. data/spec/unit/network/http/api/master/v3/environment_spec.rb +128 -2
  726. data/spec/unit/network/http/api/master/v3_spec.rb +1 -1
  727. data/spec/unit/network/http/api_spec.rb +1 -1
  728. data/spec/unit/network/http/compression_spec.rb +105 -88
  729. data/spec/unit/network/http/error_spec.rb +1 -2
  730. data/spec/unit/network/http/factory_spec.rb +9 -38
  731. data/spec/unit/network/http/handler_spec.rb +8 -12
  732. data/spec/unit/network/http/request_spec.rb +110 -0
  733. data/spec/unit/network/http/response_spec.rb +108 -0
  734. data/spec/unit/network/http/webrick_spec.rb +29 -30
  735. data/spec/unit/node/facts_spec.rb +13 -13
  736. data/spec/unit/node_spec.rb +33 -10
  737. data/spec/unit/parameter_spec.rb +73 -5
  738. data/spec/unit/parser/ast/leaf_spec.rb +4 -3
  739. data/spec/unit/parser/compiler_spec.rb +1 -1
  740. data/spec/unit/parser/environment_compiler_spec.rb +0 -2
  741. data/spec/unit/parser/functions/sprintf_spec.rb +0 -26
  742. data/spec/unit/parser/resource_spec.rb +86 -24
  743. data/spec/unit/parser/scope_spec.rb +4 -81
  744. data/spec/unit/pops/benchmark_spec.rb +8 -26
  745. data/spec/unit/pops/containment_spec.rb +0 -26
  746. data/spec/unit/pops/evaluator/access_ops_spec.rb +103 -103
  747. data/spec/unit/pops/evaluator/arithmetic_ops_spec.rb +59 -6
  748. data/spec/unit/pops/evaluator/basic_expressions_spec.rb +5 -5
  749. data/spec/unit/pops/evaluator/comparison_ops_spec.rb +26 -26
  750. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +19 -7
  751. data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +7 -7
  752. data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +36 -1
  753. data/spec/unit/pops/evaluator/string_interpolation_spec.rb +10 -10
  754. data/spec/unit/pops/evaluator/variables_spec.rb +1 -1
  755. data/spec/unit/pops/factory_rspec_helper.rb +0 -4
  756. data/spec/unit/pops/factory_spec.rb +83 -83
  757. data/spec/unit/pops/loaders/loaders_spec.rb +69 -1
  758. data/spec/unit/pops/loaders/static_loader_spec.rb +3 -7
  759. data/spec/unit/pops/model/model_spec.rb +10 -10
  760. data/spec/unit/pops/parser/epp_parser_spec.rb +1 -1
  761. data/spec/unit/pops/parser/lexer2_spec.rb +4 -59
  762. data/spec/unit/pops/parser/{source_pos_adapter_spec.rb → locator_spec.rb} +9 -11
  763. data/spec/unit/pops/parser/parse_application_spec.rb +0 -3
  764. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +4 -4
  765. data/spec/unit/pops/parser/parse_capabilities_spec.rb +0 -3
  766. data/spec/unit/pops/parser/parse_containers_spec.rb +17 -19
  767. data/spec/unit/pops/parser/parse_site_spec.rb +0 -3
  768. data/spec/unit/pops/parser/parser_spec.rb +8 -10
  769. data/spec/unit/pops/resource/resource_type_impl_spec.rb +1 -3
  770. data/spec/unit/pops/serialization/serialization_spec.rb +87 -1
  771. data/spec/unit/pops/serialization/to_from_hr_spec.rb +494 -0
  772. data/spec/unit/pops/time/timestamp_spec.rb +13 -0
  773. data/spec/unit/pops/types/iterable_spec.rb +1 -1
  774. data/spec/unit/pops/types/p_object_type_spec.rb +99 -13
  775. data/spec/unit/pops/types/p_timestamp_type_spec.rb +8 -8
  776. data/spec/unit/pops/types/p_type_set_type_spec.rb +1 -9
  777. data/spec/unit/pops/types/ruby_generator_spec.rb +57 -20
  778. data/spec/unit/pops/types/string_converter_spec.rb +78 -30
  779. data/spec/unit/pops/types/type_acceptor_spec.rb +2 -2
  780. data/spec/unit/pops/types/type_calculator_spec.rb +207 -123
  781. data/spec/unit/pops/types/type_factory_spec.rb +9 -9
  782. data/spec/unit/pops/types/type_formatter_spec.rb +32 -19
  783. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +0 -9
  784. data/spec/unit/pops/types/type_parser_spec.rb +6 -6
  785. data/spec/unit/pops/types/types_spec.rb +42 -2
  786. data/spec/unit/pops/validator/validator_spec.rb +25 -86
  787. data/spec/unit/pops/visitor_spec.rb +1 -1
  788. data/spec/unit/property/list_spec.rb +2 -2
  789. data/spec/unit/provider/augeas/augeas_spec.rb +1 -1
  790. data/spec/unit/provider/group/windows_adsi_spec.rb +22 -79
  791. data/spec/unit/provider/package/aix_spec.rb +0 -8
  792. data/spec/unit/provider/package/portage_spec.rb +103 -17
  793. data/spec/unit/provider/package/rpm_spec.rb +14 -1
  794. data/spec/unit/provider/package/yum_spec.rb +0 -10
  795. data/spec/unit/provider/service/base_spec.rb +0 -20
  796. data/spec/unit/provider/service/smf_spec.rb +4 -2
  797. data/spec/unit/provider/service/systemd_spec.rb +1 -15
  798. data/spec/unit/provider/user/directoryservice_spec.rb +7 -7
  799. data/spec/unit/provider/user/windows_adsi_spec.rb +4 -4
  800. data/spec/unit/provider/zfs/zfs_spec.rb +1 -7
  801. data/spec/unit/puppet_spec.rb +2 -3
  802. data/spec/unit/relationship_spec.rb +15 -36
  803. data/spec/unit/reports/http_spec.rb +11 -8
  804. data/spec/unit/resource/catalog_spec.rb +47 -49
  805. data/spec/unit/resource/status_spec.rb +114 -103
  806. data/spec/unit/resource/type_collection_spec.rb +5 -5
  807. data/spec/unit/resource/type_spec.rb +4 -71
  808. data/spec/unit/resource_spec.rb +30 -34
  809. data/spec/unit/settings_spec.rb +4 -2
  810. data/spec/unit/ssl/host_spec.rb +34 -34
  811. data/spec/unit/status_spec.rb +7 -7
  812. data/spec/unit/transaction/event_spec.rb +18 -15
  813. data/spec/unit/transaction/report_spec.rb +100 -81
  814. data/spec/unit/transaction/resource_harness_spec.rb +3 -3
  815. data/spec/unit/transaction_spec.rb +53 -8
  816. data/spec/unit/type/file/group_spec.rb +2 -2
  817. data/spec/unit/type/file/mode_spec.rb +9 -9
  818. data/spec/unit/type/file/owner_spec.rb +2 -2
  819. data/spec/unit/type/file/selinux_spec.rb +2 -0
  820. data/spec/unit/type/file/source_spec.rb +13 -0
  821. data/spec/unit/type/nagios_spec.rb +1 -21
  822. data/spec/unit/type/ssh_authorized_key_spec.rb +2 -2
  823. data/spec/unit/type/tidy_spec.rb +0 -14
  824. data/spec/unit/type/user_spec.rb +2 -4
  825. data/spec/unit/util/at_fork_spec.rb +150 -0
  826. data/spec/unit/util/execution_spec.rb +31 -2
  827. data/spec/unit/util/http_proxy_spec.rb +0 -37
  828. data/spec/unit/util/log/destinations_spec.rb +5 -6
  829. data/spec/unit/util/log_spec.rb +62 -17
  830. data/spec/unit/util/metric_spec.rb +9 -2
  831. data/spec/unit/util/monkey_patches_spec.rb +6 -188
  832. data/spec/unit/util/run_mode_spec.rb +17 -10
  833. data/spec/unit/util/tag_set_spec.rb +2 -2
  834. data/spec/unit/util/tagging_spec.rb +55 -0
  835. data/spec/unit/util/windows/adsi_spec.rb +27 -31
  836. data/spec/unit/util/windows/api_types_spec.rb +0 -51
  837. data/spec/unit/util/windows/eventlog_spec.rb +123 -0
  838. data/spec/unit/util/windows/sid_spec.rb +15 -86
  839. data/spec/unit/util_spec.rb +7 -1
  840. data/tasks/benchmark.rake +3 -3
  841. data/tasks/cfpropertylist.rake +1 -1
  842. data/tasks/generate_ast_model.rake +78 -0
  843. data/tasks/manpages.rake +1 -1
  844. data/tasks/parallel.rake +7 -12
  845. metadata +3436 -3695
  846. checksums.yaml +0 -7
  847. data/bin/extlookup2hiera +0 -56
  848. data/ext/emacs/puppet-mode-init.el +0 -6
  849. data/ext/emacs/puppet-mode.el +0 -433
  850. data/ext/vim/README +0 -3
  851. data/ext/vim/ftdetect/puppet.vim +0 -2
  852. data/ext/vim/ftplugin/puppet.vim +0 -94
  853. data/ext/vim/indent/puppet.vim +0 -76
  854. data/ext/vim/syntax/puppet.vim +0 -115
  855. data/lib/puppet/application/file.rb +0 -4
  856. data/lib/puppet/application/inspect.rb +0 -184
  857. data/lib/puppet/application/resource_type.rb +0 -7
  858. data/lib/puppet/data_providers.rb +0 -34
  859. data/lib/puppet/data_providers/data_adapter.rb +0 -37
  860. data/lib/puppet/data_providers/data_function_support.rb +0 -32
  861. data/lib/puppet/data_providers/function_env_data_provider.rb +0 -26
  862. data/lib/puppet/data_providers/function_module_data_provider.rb +0 -24
  863. data/lib/puppet/data_providers/hiera_config.rb +0 -151
  864. data/lib/puppet/data_providers/hiera_env_data_provider.rb +0 -25
  865. data/lib/puppet/data_providers/hiera_interpolate.rb +0 -21
  866. data/lib/puppet/data_providers/hiera_module_data_provider.rb +0 -30
  867. data/lib/puppet/data_providers/hiera_support.rb +0 -42
  868. data/lib/puppet/data_providers/json_data_provider_factory.rb +0 -38
  869. data/lib/puppet/data_providers/yaml_data_provider_factory.rb +0 -40
  870. data/lib/puppet/face/file.rb +0 -50
  871. data/lib/puppet/face/file/download.rb +0 -56
  872. data/lib/puppet/face/file/store.rb +0 -21
  873. data/lib/puppet/face/resource_type.rb +0 -84
  874. data/lib/puppet/feature/cfacter.rb +0 -15
  875. data/lib/puppet/feature/external_facts.rb +0 -5
  876. data/lib/puppet/indirector/catalog/static_compiler.rb +0 -232
  877. data/lib/puppet/indirector/resource_type.rb +0 -5
  878. data/lib/puppet/indirector/resource_type/parser.rb +0 -108
  879. data/lib/puppet/indirector/resource_type/rest.rb +0 -7
  880. data/lib/puppet/parser/yaml_trimmer.rb +0 -7
  881. data/lib/puppet/plugins/binding_schemes.rb +0 -140
  882. data/lib/puppet/plugins/data_providers.rb +0 -45
  883. data/lib/puppet/plugins/data_providers/data_provider.rb +0 -406
  884. data/lib/puppet/plugins/data_providers/registry.rb +0 -51
  885. data/lib/puppet/pops/binder/binder.rb +0 -398
  886. data/lib/puppet/pops/binder/binder_issues.rb +0 -124
  887. data/lib/puppet/pops/binder/bindings_checker.rb +0 -201
  888. data/lib/puppet/pops/binder/bindings_composer.rb +0 -181
  889. data/lib/puppet/pops/binder/bindings_factory.rb +0 -813
  890. data/lib/puppet/pops/binder/bindings_label_provider.rb +0 -45
  891. data/lib/puppet/pops/binder/bindings_loader.rb +0 -87
  892. data/lib/puppet/pops/binder/bindings_model.rb +0 -70
  893. data/lib/puppet/pops/binder/bindings_model_dumper.rb +0 -215
  894. data/lib/puppet/pops/binder/bindings_model_meta.rb +0 -215
  895. data/lib/puppet/pops/binder/bindings_validator_factory.rb +0 -28
  896. data/lib/puppet/pops/binder/config/binder_config.rb +0 -107
  897. data/lib/puppet/pops/binder/config/binder_config_checker.rb +0 -142
  898. data/lib/puppet/pops/binder/config/diagnostic_producer.rb +0 -36
  899. data/lib/puppet/pops/binder/config/issues.rb +0 -90
  900. data/lib/puppet/pops/binder/injector.rb +0 -771
  901. data/lib/puppet/pops/binder/injector_entry.rb +0 -57
  902. data/lib/puppet/pops/binder/key_factory.rb +0 -65
  903. data/lib/puppet/pops/binder/producers.rb +0 -831
  904. data/lib/puppet/pops/binder/scheme_handler/confdir_scheme.rb +0 -34
  905. data/lib/puppet/pops/binder/scheme_handler/module_scheme.rb +0 -143
  906. data/lib/puppet/pops/binder/scheme_handler/symbolic_scheme.rb +0 -53
  907. data/lib/puppet/pops/binder/system_bindings.rb +0 -60
  908. data/lib/puppet/pops/containment.rb +0 -104
  909. data/lib/puppet/pops/model/model.rb +0 -131
  910. data/lib/puppet/pops/model/model_meta.rb +0 -629
  911. data/lib/puppet/pops/serialization/rgen.rb +0 -152
  912. data/lib/puppet/vendor/load_rgen.rb +0 -2
  913. data/lib/puppet/vendor/rgen/CHANGELOG +0 -197
  914. data/lib/puppet/vendor/rgen/MIT-LICENSE +0 -20
  915. data/lib/puppet/vendor/rgen/PUPPET_README.md +0 -6
  916. data/lib/puppet/vendor/rgen/README.rdoc +0 -78
  917. data/lib/puppet/vendor/rgen/Rakefile +0 -41
  918. data/lib/puppet/vendor/rgen/TODO +0 -41
  919. data/lib/puppet/vendor/rgen/anounce.txt +0 -61
  920. data/lib/puppet/vendor/rgen/design_rationale.txt +0 -71
  921. data/lib/puppet/vendor/rgen/lib/ea_support/ea_support.rb +0 -54
  922. data/lib/puppet/vendor/rgen/lib/ea_support/id_store.rb +0 -32
  923. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel.rb +0 -562
  924. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel_ext.rb +0 -45
  925. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel_generator.rb +0 -43
  926. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_to_uml13.rb +0 -103
  927. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_to_uml13_ea.rb +0 -89
  928. data/lib/puppet/vendor/rgen/lib/metamodels/uml13_metamodel.rb +0 -559
  929. data/lib/puppet/vendor/rgen/lib/metamodels/uml13_metamodel_ext.rb +0 -26
  930. data/lib/puppet/vendor/rgen/lib/mmgen/metamodel_generator.rb +0 -20
  931. data/lib/puppet/vendor/rgen/lib/mmgen/mm_ext/ecore_mmgen_ext.rb +0 -91
  932. data/lib/puppet/vendor/rgen/lib/mmgen/mmgen.rb +0 -28
  933. data/lib/puppet/vendor/rgen/lib/mmgen/templates/annotations.tpl +0 -37
  934. data/lib/puppet/vendor/rgen/lib/mmgen/templates/metamodel_generator.tpl +0 -172
  935. data/lib/puppet/vendor/rgen/lib/rgen/array_extensions.rb +0 -45
  936. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore.rb +0 -218
  937. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_builder_methods.rb +0 -81
  938. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_ext.rb +0 -69
  939. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_interface.rb +0 -47
  940. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_to_ruby.rb +0 -167
  941. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ruby_to_ecore.rb +0 -91
  942. data/lib/puppet/vendor/rgen/lib/rgen/environment.rb +0 -129
  943. data/lib/puppet/vendor/rgen/lib/rgen/fragment/dump_file_cache.rb +0 -63
  944. data/lib/puppet/vendor/rgen/lib/rgen/fragment/fragmented_model.rb +0 -140
  945. data/lib/puppet/vendor/rgen/lib/rgen/fragment/model_fragment.rb +0 -289
  946. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/abstract_instantiator.rb +0 -66
  947. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/abstract_xml_instantiator.rb +0 -66
  948. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/default_xml_instantiator.rb +0 -117
  949. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/ecore_xml_instantiator.rb +0 -169
  950. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_instantiator.rb +0 -126
  951. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_parser.rb +0 -331
  952. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_parser.y +0 -94
  953. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/nodebased_xml_instantiator.rb +0 -137
  954. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/qualified_name_resolver.rb +0 -97
  955. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/reference_resolver.rb +0 -128
  956. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/resolution_helper.rb +0 -47
  957. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/xmi11_instantiator.rb +0 -168
  958. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder.rb +0 -224
  959. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/builder_extensions.rb +0 -556
  960. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/builder_runtime.rb +0 -174
  961. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/constant_order_helper.rb +0 -89
  962. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/data_types.rb +0 -77
  963. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/intermediate/annotation.rb +0 -30
  964. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/intermediate/feature.rb +0 -168
  965. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/mm_multiple.rb +0 -23
  966. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/module_extension.rb +0 -42
  967. data/lib/puppet/vendor/rgen/lib/rgen/model_builder.rb +0 -32
  968. data/lib/puppet/vendor/rgen/lib/rgen/model_builder/builder_context.rb +0 -334
  969. data/lib/puppet/vendor/rgen/lib/rgen/model_builder/model_serializer.rb +0 -225
  970. data/lib/puppet/vendor/rgen/lib/rgen/model_builder/reference_resolver.rb +0 -156
  971. data/lib/puppet/vendor/rgen/lib/rgen/serializer/json_serializer.rb +0 -121
  972. data/lib/puppet/vendor/rgen/lib/rgen/serializer/opposite_reference_filter.rb +0 -18
  973. data/lib/puppet/vendor/rgen/lib/rgen/serializer/qualified_name_provider.rb +0 -47
  974. data/lib/puppet/vendor/rgen/lib/rgen/serializer/xmi11_serializer.rb +0 -116
  975. data/lib/puppet/vendor/rgen/lib/rgen/serializer/xmi20_serializer.rb +0 -71
  976. data/lib/puppet/vendor/rgen/lib/rgen/serializer/xml_serializer.rb +0 -98
  977. data/lib/puppet/vendor/rgen/lib/rgen/template_language.rb +0 -297
  978. data/lib/puppet/vendor/rgen/lib/rgen/template_language/directory_template_container.rb +0 -83
  979. data/lib/puppet/vendor/rgen/lib/rgen/template_language/output_handler.rb +0 -87
  980. data/lib/puppet/vendor/rgen/lib/rgen/template_language/template_container.rb +0 -234
  981. data/lib/puppet/vendor/rgen/lib/rgen/template_language/template_helper.rb +0 -26
  982. data/lib/puppet/vendor/rgen/lib/rgen/transformer.rb +0 -475
  983. data/lib/puppet/vendor/rgen/lib/rgen/util/auto_class_creator.rb +0 -61
  984. data/lib/puppet/vendor/rgen/lib/rgen/util/cached_glob.rb +0 -67
  985. data/lib/puppet/vendor/rgen/lib/rgen/util/file_cache_map.rb +0 -124
  986. data/lib/puppet/vendor/rgen/lib/rgen/util/file_change_detector.rb +0 -84
  987. data/lib/puppet/vendor/rgen/lib/rgen/util/method_delegation.rb +0 -114
  988. data/lib/puppet/vendor/rgen/lib/rgen/util/model_comparator.rb +0 -68
  989. data/lib/puppet/vendor/rgen/lib/rgen/util/model_comparator_base.rb +0 -142
  990. data/lib/puppet/vendor/rgen/lib/rgen/util/model_dumper.rb +0 -29
  991. data/lib/puppet/vendor/rgen/lib/rgen/util/name_helper.rb +0 -42
  992. data/lib/puppet/vendor/rgen/lib/rgen/util/pattern_matcher.rb +0 -329
  993. data/lib/puppet/vendor/rgen/lib/transformers/ecore_to_uml13.rb +0 -79
  994. data/lib/puppet/vendor/rgen/lib/transformers/uml13_to_ecore.rb +0 -127
  995. data/lib/puppet/vendor/rgen/test/array_extensions_test.rb +0 -64
  996. data/lib/puppet/vendor/rgen/test/ea_instantiator_test.rb +0 -35
  997. data/lib/puppet/vendor/rgen/test/ea_serializer_test.rb +0 -23
  998. data/lib/puppet/vendor/rgen/test/ecore_self_test.rb +0 -54
  999. data/lib/puppet/vendor/rgen/test/environment_test.rb +0 -90
  1000. data/lib/puppet/vendor/rgen/test/json_test.rb +0 -171
  1001. data/lib/puppet/vendor/rgen/test/metamodel_builder_test.rb +0 -1482
  1002. data/lib/puppet/vendor/rgen/test/metamodel_from_ecore_test.rb +0 -57
  1003. data/lib/puppet/vendor/rgen/test/metamodel_order_test.rb +0 -131
  1004. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test.rb +0 -98
  1005. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/TestModel.rb +0 -70
  1006. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/houseMetamodel.ecore +0 -42
  1007. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/houseMetamodel_from_ecore.rb +0 -44
  1008. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/using_builtin_types.ecore +0 -9
  1009. data/lib/puppet/vendor/rgen/test/method_delegation_test.rb +0 -178
  1010. data/lib/puppet/vendor/rgen/test/model_builder/builder_context_test.rb +0 -59
  1011. data/lib/puppet/vendor/rgen/test/model_builder/builder_test.rb +0 -242
  1012. data/lib/puppet/vendor/rgen/test/model_builder/ecore_original.rb +0 -163
  1013. data/lib/puppet/vendor/rgen/test/model_builder/ecore_original_regenerated.rb +0 -163
  1014. data/lib/puppet/vendor/rgen/test/model_builder/reference_resolver_test.rb +0 -156
  1015. data/lib/puppet/vendor/rgen/test/model_builder/serializer_test.rb +0 -94
  1016. data/lib/puppet/vendor/rgen/test/model_builder/statemachine_metamodel.rb +0 -42
  1017. data/lib/puppet/vendor/rgen/test/model_builder/test_model/statemachine1.rb +0 -23
  1018. data/lib/puppet/vendor/rgen/test/model_builder_test.rb +0 -6
  1019. data/lib/puppet/vendor/rgen/test/model_fragment_test.rb +0 -30
  1020. data/lib/puppet/vendor/rgen/test/output_handler_test.rb +0 -58
  1021. data/lib/puppet/vendor/rgen/test/qualified_name_provider_test.rb +0 -48
  1022. data/lib/puppet/vendor/rgen/test/qualified_name_resolver_test.rb +0 -102
  1023. data/lib/puppet/vendor/rgen/test/reference_resolver_test.rb +0 -117
  1024. data/lib/puppet/vendor/rgen/test/rgen_test.rb +0 -26
  1025. data/lib/puppet/vendor/rgen/test/template_language_test.rb +0 -163
  1026. data/lib/puppet/vendor/rgen/test/template_language_test/expected_result1.txt +0 -29
  1027. data/lib/puppet/vendor/rgen/test/template_language_test/expected_result2.txt +0 -9
  1028. data/lib/puppet/vendor/rgen/test/template_language_test/expected_result3.txt +0 -4
  1029. data/lib/puppet/vendor/rgen/test/template_language_test/indentStringTestDefaultIndent.out +0 -1
  1030. data/lib/puppet/vendor/rgen/test/template_language_test/indentStringTestTabIndent.out +0 -1
  1031. data/lib/puppet/vendor/rgen/test/template_language_test/templates/callback_indent_test/a.tpl +0 -12
  1032. data/lib/puppet/vendor/rgen/test/template_language_test/templates/callback_indent_test/b.tpl +0 -5
  1033. data/lib/puppet/vendor/rgen/test/template_language_test/templates/code/array.tpl +0 -11
  1034. data/lib/puppet/vendor/rgen/test/template_language_test/templates/content/author.tpl +0 -7
  1035. data/lib/puppet/vendor/rgen/test/template_language_test/templates/content/chapter.tpl +0 -5
  1036. data/lib/puppet/vendor/rgen/test/template_language_test/templates/define_local_test/local.tpl +0 -8
  1037. data/lib/puppet/vendor/rgen/test/template_language_test/templates/define_local_test/test.tpl +0 -8
  1038. data/lib/puppet/vendor/rgen/test/template_language_test/templates/evaluate_test/test.tpl +0 -7
  1039. data/lib/puppet/vendor/rgen/test/template_language_test/templates/indent_string_test.tpl +0 -12
  1040. data/lib/puppet/vendor/rgen/test/template_language_test/templates/index/c/cmod.tpl +0 -1
  1041. data/lib/puppet/vendor/rgen/test/template_language_test/templates/index/chapter.tpl +0 -3
  1042. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_backslash_r_test.tpl +0 -5
  1043. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/no_indent.tpl +0 -3
  1044. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/sub1/no_indent.tpl +0 -3
  1045. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test.tpl +0 -24
  1046. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test2.tpl +0 -13
  1047. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test3.tpl +0 -10
  1048. data/lib/puppet/vendor/rgen/test/template_language_test/templates/null_context_test.tpl +0 -17
  1049. data/lib/puppet/vendor/rgen/test/template_language_test/templates/root.tpl +0 -31
  1050. data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/sub1.tpl +0 -9
  1051. data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/sub1/sub1.tpl +0 -3
  1052. data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/test.tpl +0 -4
  1053. data/lib/puppet/vendor/rgen/test/template_language_test/testout.txt +0 -29
  1054. data/lib/puppet/vendor/rgen/test/testmodel/class_model_checker.rb +0 -119
  1055. data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel.eap +0 -0
  1056. data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel.xml +0 -1029
  1057. data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel_partial.xml +0 -317
  1058. data/lib/puppet/vendor/rgen/test/testmodel/ecore_model_checker.rb +0 -101
  1059. data/lib/puppet/vendor/rgen/test/testmodel/manual_testmodel.xml +0 -22
  1060. data/lib/puppet/vendor/rgen/test/testmodel/object_model_checker.rb +0 -67
  1061. data/lib/puppet/vendor/rgen/test/transformer_test.rb +0 -254
  1062. data/lib/puppet/vendor/rgen/test/util/file_cache_map_test.rb +0 -99
  1063. data/lib/puppet/vendor/rgen/test/util/pattern_matcher_test.rb +0 -97
  1064. data/lib/puppet/vendor/rgen/test/util_test.rb +0 -5
  1065. data/lib/puppet/vendor/rgen/test/xml_instantiator_test.rb +0 -160
  1066. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_ecore_model_checker.rb +0 -94
  1067. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_ecore_instantiator.rb +0 -53
  1068. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_metamodel.rb +0 -49
  1069. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_to_ecore.rb +0 -75
  1070. data/lib/puppet/vendor/rgen_patch.rb +0 -132
  1071. data/lib/semver.rb +0 -146
  1072. data/man/man8/extlookup2hiera.8 +0 -10
  1073. data/man/man8/puppet-file.8 +0 -189
  1074. data/man/man8/puppet-generate.8 +0 -84
  1075. data/man/man8/puppet-lookup.8 +0 -87
  1076. data/man/man8/puppet-resource_type.8 +0 -188
  1077. data/spec/fixtures/unit/data_providers/environments/production/modules/abc/lib/puppet/bindings/abc/default.rb +0 -9
  1078. data/spec/fixtures/unit/data_providers/environments/production/modules/xyz/lib/puppet/bindings/xyz/default.rb +0 -9
  1079. data/spec/fixtures/unit/data_providers/environments/sample/environment.conf +0 -2
  1080. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/hiera.yaml +0 -5
  1081. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/lib/puppet/bindings/backend/default.rb +0 -9
  1082. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/lib/puppet_x/backend/special_data_provider_factory.rb +0 -23
  1083. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/manifests/init.pp +0 -5
  1084. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/metadata.json +0 -9
  1085. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet/bindings/dataprovider/default.rb +0 -54
  1086. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_env_data.rb +0 -33
  1087. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_module_data.rb +0 -33
  1088. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/manifests/init.pp +0 -5
  1089. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/abc/lib/puppet/bindings/abc/default.rb +0 -9
  1090. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/bad_data/lib/puppet/bindings/bad_data/default.rb +0 -9
  1091. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/bca/lib/puppet/bindings/bca/default.rb +0 -9
  1092. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/metawcp/lib/puppet/bindings/metawcp/default.rb +0 -10
  1093. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/metawcp/lib/puppet_x/thallgren/sample_module_data.rb +0 -23
  1094. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/metawcp/manifests/init.pp +0 -3
  1095. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/metawcp/metadata.json +0 -9
  1096. data/spec/fixtures/unit/provider/package/yum/yum-check-update-plugin-output.txt +0 -36
  1097. data/spec/fixtures/unit/provider/service/base/ps_ef.mixed_encoding +0 -3
  1098. data/spec/unit/application/inspect_spec.rb +0 -316
  1099. data/spec/unit/data_providers/custom_data_provider_spec.rb +0 -50
  1100. data/spec/unit/face/file_spec.rb +0 -14
  1101. data/spec/unit/indirector/catalog/static_compiler_spec.rb +0 -255
  1102. data/spec/unit/indirector/resource_type/parser_spec.rb +0 -259
  1103. data/spec/unit/indirector/resource_type/rest_spec.rb +0 -14
  1104. data/spec/unit/pops/binder/binder_spec.rb +0 -43
  1105. data/spec/unit/pops/binder/bindings_checker_spec.rb +0 -155
  1106. data/spec/unit/pops/binder/bindings_composer_spec.rb +0 -64
  1107. data/spec/unit/pops/binder/bindings_validator_factory_spec.rb +0 -18
  1108. data/spec/unit/pops/binder/config/binder_config_spec.rb +0 -42
  1109. data/spec/unit/pops/binder/injector_spec.rb +0 -768
  1110. data/spec/unit/pops/parser/rgen_sanitycheck_spec.rb +0 -23
  1111. data/spec/unit/pops/serialization/rgen_spec.rb +0 -88
  1112. data/spec/unit/semver_spec.rb +0 -546
@@ -1,14 +0,0 @@
1
- #! /usr/bin/env ruby
2
- require 'spec_helper'
3
-
4
- require 'puppet/indirector/resource_type/rest'
5
-
6
- describe Puppet::Indirector::ResourceType::Rest do
7
- it "should be registered with the resource_type indirection" do
8
- expect(Puppet::Indirector::Terminus.terminus_class(:resource_type, :rest)).to equal(Puppet::Indirector::ResourceType::Rest)
9
- end
10
-
11
- it "should be a subclass of Puppet::Indirector::Rest" do
12
- expect(Puppet::Indirector::ResourceType::Rest.superclass).to eq(Puppet::Indirector::REST)
13
- end
14
- end
@@ -1,43 +0,0 @@
1
- require 'spec_helper'
2
- require 'puppet/pops'
3
-
4
- module BinderSpecModule
5
- def factory()
6
- Puppet::Pops::Binder::BindingsFactory
7
- end
8
-
9
- def injector(binder)
10
- Puppet::Pops::Binder::Injector.new(binder)
11
- end
12
-
13
- def binder()
14
- Puppet::Pops::Binder::Binder.new()
15
- end
16
-
17
- def test_layer_with_empty_bindings
18
- factory.named_layer('test-layer', factory.named_bindings('test').model)
19
- end
20
- end
21
-
22
- describe 'Binder' do
23
- include BinderSpecModule
24
-
25
- # TODO: Test binder + parent binder
26
- context 'when defining layers' do
27
-
28
- # it 'redefinition is not allowed' do
29
- # expect do
30
- # b = binder()
31
- # b.define_layers(factory.layered_bindings(test_layer_with_empty_bindings))
32
- # b.define_layers(factory.layered_bindings(test_layer_with_empty_bindings))
33
- # end.to raise_error(/Cannot redefine its content/)
34
- # end
35
- #
36
- # it 'a binder should report being configured when layers have been defined' do
37
- # b = binder()
38
- # b.configured?().should == false
39
- # b.define_layers(factory.layered_bindings(test_layer_with_empty_bindings))
40
- # b.configured?().should == true
41
- # end
42
- end
43
- end
@@ -1,155 +0,0 @@
1
- require 'spec_helper'
2
- require 'puppet/pops'
3
- require 'puppet_spec/pops'
4
-
5
- describe 'The bindings checker' do
6
-
7
- include PuppetSpec::Pops
8
-
9
- Issues = Puppet::Pops::Binder::BinderIssues
10
- Bindings = Puppet::Pops::Binder::Bindings
11
- TypeFactory = Puppet::Pops::Types::TypeFactory
12
- let (:acceptor) { Puppet::Pops::Validation::Acceptor.new() }
13
-
14
- let (:binding) { Bindings::Binding.new() }
15
-
16
- let (:ok_binding) {
17
- b = Bindings::Binding.new()
18
- b.producer = Bindings::ConstantProducerDescriptor.new()
19
- b.producer.value = 'some value'
20
- b.type = TypeFactory.string()
21
- b
22
- }
23
-
24
- def validate(binding)
25
- Puppet::Pops::Binder::BindingsValidatorFactory.new().validator(acceptor).validate(binding)
26
- end
27
-
28
- def bindings(*args)
29
- b = Bindings::Bindings.new()
30
- b.bindings = args
31
- b
32
- end
33
-
34
- def named_bindings(name, *args)
35
- b = Bindings::NamedBindings.new()
36
- b.name = name
37
- b.bindings = args
38
- b
39
- end
40
-
41
- def layer(name, *bindings)
42
- l = Bindings::NamedLayer.new()
43
- l.name = name
44
- l.bindings = bindings
45
- l
46
- end
47
-
48
- def layered_bindings(*layers)
49
- b = Bindings::LayeredBindings.new()
50
- b.layers = layers
51
- b
52
- end
53
-
54
- def array_multibinding()
55
- b = Bindings::Multibinding.new()
56
- b.producer = Bindings::ArrayMultibindProducerDescriptor.new()
57
- b.type = TypeFactory.array_of_data()
58
- b
59
- end
60
-
61
- def bad_array_multibinding()
62
- b = array_multibinding()
63
- b.type = TypeFactory.hash_of_data() # intentionally wrong!
64
- b
65
- end
66
-
67
- def hash_multibinding()
68
- b = Bindings::Multibinding.new()
69
- b.producer = Bindings::HashMultibindProducerDescriptor.new()
70
- b.type = TypeFactory.hash_of_data()
71
- b
72
- end
73
-
74
- def bad_hash_multibinding()
75
- b = hash_multibinding()
76
- b.type = TypeFactory.array_of_data() # intentionally wrong!
77
- b
78
- end
79
-
80
- it 'should complain about missing producer and type' do
81
- validate(binding())
82
- expect(acceptor).to have_issue(Issues::MISSING_PRODUCER)
83
- expect(acceptor).to have_issue(Issues::MISSING_TYPE)
84
- end
85
-
86
- context 'when checking array multibinding' do
87
- it 'should complain about non array producers' do
88
- validate(bad_array_multibinding())
89
- expect(acceptor).to have_issue(Issues::MULTIBIND_INCOMPATIBLE_TYPE)
90
- end
91
- end
92
-
93
- context 'when checking hash multibinding' do
94
- it 'should complain about non hash producers' do
95
- validate(bad_hash_multibinding())
96
- expect(acceptor).to have_issue(Issues::MULTIBIND_INCOMPATIBLE_TYPE)
97
- end
98
- end
99
-
100
- context 'when checking bindings' do
101
- it 'should not accept zero bindings' do
102
- validate(bindings())
103
- expect(acceptor).to have_issue(Issues::MISSING_BINDINGS)
104
- end
105
-
106
- it 'should accept non-zero bindings' do
107
- validate(bindings(ok_binding))
108
- expect(acceptor.errors_or_warnings?).to eq(false)
109
- end
110
-
111
- it 'should check contained bindings' do
112
- validate(bindings(bad_array_multibinding()))
113
- expect(acceptor).to have_issue(Issues::MULTIBIND_INCOMPATIBLE_TYPE)
114
- end
115
- end
116
-
117
- context 'when checking named bindings' do
118
- it 'should accept named bindings' do
119
- validate(named_bindings('garfield', ok_binding))
120
- expect(acceptor.errors_or_warnings?).to eq(false)
121
- end
122
-
123
- it 'should not accept unnamed bindings' do
124
- validate(named_bindings(nil, ok_binding))
125
- expect(acceptor).to have_issue(Issues::MISSING_BINDINGS_NAME)
126
- end
127
-
128
- it 'should do generic bindings check' do
129
- validate(named_bindings('garfield'))
130
- expect(acceptor).to have_issue(Issues::MISSING_BINDINGS)
131
- end
132
- end
133
-
134
- context 'when checking layered bindings' do
135
- it 'should not accept zero layers' do
136
- validate(layered_bindings())
137
- expect(acceptor).to have_issue(Issues::MISSING_LAYERS)
138
- end
139
-
140
- it 'should accept non-zero layers' do
141
- validate(layered_bindings(layer('foo', named_bindings('bar', ok_binding))))
142
- expect(acceptor.errors_or_warnings?).to eq(false)
143
- end
144
-
145
- it 'should not accept unnamed layers' do
146
- validate(layered_bindings(layer(nil, named_bindings('bar', ok_binding))))
147
- expect(acceptor).to have_issue(Issues::MISSING_LAYER_NAME)
148
- end
149
-
150
- it 'should accept layers without bindings' do
151
- validate(layered_bindings(layer('foo')))
152
- expect(acceptor).not_to have_issue(Issues::MISSING_BINDINGS_IN_LAYER)
153
- end
154
- end
155
- end
@@ -1,64 +0,0 @@
1
- require 'spec_helper'
2
- require 'puppet/pops'
3
- require 'puppet_spec/pops'
4
- require 'puppet/plugins'
5
-
6
- describe 'BinderComposer' do
7
- include PuppetSpec::Pops
8
-
9
- def config_dir(config_name)
10
- my_fixture(config_name)
11
- end
12
-
13
- let(:acceptor) { Puppet::Pops::Validation::Acceptor.new() }
14
- let(:diag) { Puppet::Pops::Binder::Config::DiagnosticProducer.new(acceptor) }
15
- let(:issues) { Puppet::Pops::Binder::Config::Issues }
16
- let(:node) { Puppet::Node.new('localhost') }
17
- let(:compiler) { Puppet::Parser::Compiler.new(node)}
18
- let(:scope) { Puppet::Parser::Scope.new(compiler) }
19
- let(:parser) { Puppet::Pops::Parser::Parser.new() }
20
- let(:factory) { Puppet::Pops::Binder::BindingsFactory }
21
-
22
- it 'should load default config if no config file exists' do
23
- diagnostics = diag
24
- composer = Puppet::Pops::Binder::BindingsComposer.new()
25
- composer.compose(scope)
26
- end
27
-
28
- context "when loading a complete configuration with modules" do
29
- let(:config_directory) { config_dir('ok') }
30
-
31
- it 'should load everything without errors' do
32
- Puppet.settings[:confdir] = config_directory
33
- Puppet.settings[:libdir] = File.join(config_directory, 'lib')
34
-
35
- environments = Puppet::Environments::Static.new(Puppet::Node::Environment.create(:production, [File.join(config_directory, 'modules')]))
36
- Puppet.override(:environments => environments, :current_environment => environments.get('production')) do
37
- # this ensure the binder is active at the right time
38
- # (issues with getting a /dev/null path for "confdir" / "libdir")
39
- raise "Binder not active" unless scope.compiler.activate_binder
40
-
41
- diagnostics = diag
42
- composer = Puppet::Pops::Binder::BindingsComposer.new()
43
- the_scope = scope
44
- the_scope['fqdn'] = 'localhost'
45
- the_scope['environment'] = 'production'
46
- layered_bindings = composer.compose(scope)
47
- # puts Puppet::Pops::Binder::BindingsModelDumper.new().dump(layered_bindings)
48
- binder = Puppet::Pops::Binder::Binder.new(layered_bindings)
49
- injector = Puppet::Pops::Binder::Injector.new(binder)
50
- expect(injector.lookup(scope, 'awesome_x')).to be == 'golden'
51
- expect(injector.lookup(scope, 'good_x')).to be == 'golden'
52
- expect(injector.lookup(scope, 'rotten_x')).to be == nil
53
- expect(injector.lookup(scope, 'the_meaning_of_life')).to be == 42
54
- expect(injector.lookup(scope, 'has_funny_hat')).to be == 'the pope'
55
- expect(injector.lookup(scope, 'all your base')).to be == 'are belong to us'
56
- expect(injector.lookup(scope, 'env_meaning_of_life')).to be == 'production thinks it is 42'
57
- expect(injector.lookup(scope, '::quick::brown::fox')).to be == 'echo: quick brown fox'
58
- end
59
- end
60
- end
61
-
62
- # TODO: test error conditions (see BinderConfigChecker for what to test)
63
-
64
- end
@@ -1,18 +0,0 @@
1
- require 'spec_helper'
2
- require 'puppet/pops'
3
-
4
- describe 'The bindings validator factory' do
5
- let(:factory) { Puppet::Pops::Binder::BindingsValidatorFactory.new() }
6
-
7
- it 'should instantiate a BindingsValidatorFactory' do
8
- expect(factory.class).to eq(Puppet::Pops::Binder::BindingsValidatorFactory)
9
- end
10
-
11
- it 'should produce label_provider of class BindingsLabelProvider' do
12
- expect(factory.label_provider.class).to eq(Puppet::Pops::Binder::BindingsLabelProvider)
13
- end
14
-
15
- it 'should produce validator of class BindingsChecker' do
16
- expect(factory.validator(Puppet::Pops::Validation::Acceptor.new()).class).to eq(Puppet::Pops::Binder::BindingsChecker)
17
- end
18
- end
@@ -1,42 +0,0 @@
1
- require 'spec_helper'
2
- require 'puppet/pops'
3
- require 'puppet_spec/pops'
4
-
5
- describe 'BinderConfig' do
6
- include PuppetSpec::Pops
7
-
8
- let(:acceptor) { Puppet::Pops::Validation::Acceptor.new() }
9
- let(:diag) { Puppet::Pops::Binder::Config::DiagnosticProducer.new(acceptor) }
10
- let(:issues) { Puppet::Pops::Binder::Config::Issues }
11
-
12
- it 'should load default config if no config file exists' do
13
- diagnostics = diag
14
- config = Puppet::Pops::Binder::Config::BinderConfig.new(diagnostics)
15
- expect(acceptor.errors?()).to be == false
16
- expect(config.layering_config[0]['name']).to be == 'site'
17
- expect(config.layering_config[0]['include']).to be == ['confdir:/default?optional']
18
- expect(config.layering_config[1]['name']).to be == 'modules'
19
- expect(config.layering_config[1]['include']).to be == ['module:/*::default', 'module:/*::metadata']
20
- end
21
-
22
- it 'should load binder_config.yaml if it exists in confdir)' do
23
- Puppet::Pops::Binder::Config::BinderConfig.any_instance.stubs(:confdir).returns(my_fixture("/ok/"))
24
- config = Puppet::Pops::Binder::Config::BinderConfig.new(diag)
25
- expect(acceptor.errors?()).to be == false
26
- expect(config.layering_config[0]['name']).to be == 'site'
27
- expect(config.layering_config[0]['include']).to be == 'confdir:/'
28
- expect(config.layering_config[1]['name']).to be == 'modules'
29
- expect(config.layering_config[1]['include']).to be == 'module:/*::test/'
30
- expect(config.layering_config[1]['exclude']).to be == 'module:/bad::test/'
31
- end
32
-
33
- it 'should correctly set values to default if not defined in bunder_config.yml)' do
34
- Puppet::Pops::Binder::Config::BinderConfig.any_instance.stubs(:confdir).returns(my_fixture("/nolayer/"))
35
- config = Puppet::Pops::Binder::Config::BinderConfig.new(diag)
36
- expect(acceptor.errors?()).to be == false
37
- expect(config.layering_config[0]['name']).to be == 'site'
38
- end
39
-
40
- # TODO: test error conditions (see BinderConfigChecker for what to test)
41
-
42
- end
@@ -1,768 +0,0 @@
1
- require 'spec_helper'
2
- require 'puppet/pops'
3
-
4
- module InjectorSpecModule
5
- def injector(binder)
6
- Puppet::Pops::Binder::Injector.new(binder)
7
- end
8
-
9
- def factory
10
- Puppet::Pops::Binder::BindingsFactory
11
- end
12
-
13
- def test_layer_with_empty_bindings
14
- factory.named_layer('test-layer', factory.named_bindings('test').model)
15
- end
16
-
17
- def test_layer_with_bindings(*bindings)
18
- factory.named_layer('test-layer', *bindings)
19
- end
20
-
21
- def null_scope()
22
- nil
23
- end
24
-
25
- def type_calculator
26
- Puppet::Pops::Types::TypeCalculator
27
- end
28
-
29
- def type_factory
30
- Puppet::Pops::Types::TypeFactory
31
- end
32
-
33
- # Returns a binder
34
- #
35
- def configured_binder
36
- b = Puppet::Pops::Binder::Binder.new()
37
- b
38
- end
39
-
40
- class TestDuck
41
- end
42
-
43
- class Daffy < TestDuck
44
- end
45
-
46
-
47
- class AngryDuck < TestDuck
48
- # Supports assisted inject, returning a Donald duck as the default impl of Duck
49
- def self.inject(injector, scope, binding, *args)
50
- Donald.new()
51
- end
52
- end
53
-
54
- class Donald < AngryDuck
55
- end
56
-
57
- class ArneAnka < AngryDuck
58
- attr_reader :label
59
-
60
- def initialize()
61
- @label = 'A Swedish angry cartoon duck'
62
- end
63
- end
64
-
65
- class ScroogeMcDuck < TestDuck
66
- attr_reader :fortune
67
-
68
- # Supports assisted inject, returning an ScroogeMcDuck with 1$ fortune or first arg in args
69
- # Note that when injected (via instance producer, or implict assisted inject, the inject method
70
- # always wins.
71
- def self.inject(injector, scope, binding, *args)
72
- self.new(args[0].nil? ? 1 : args[0])
73
- end
74
-
75
- def initialize(fortune)
76
- @fortune = fortune
77
- end
78
- end
79
-
80
- class NamedDuck < TestDuck
81
- attr_reader :name
82
- def initialize(name)
83
- @name = name
84
- end
85
- end
86
-
87
- # Test custom producer that on each produce returns a duck that is twice as rich as its predecessor
88
- class ScroogeProducer < Puppet::Pops::Binder::Producers::Producer
89
- attr_reader :next_capital
90
- def initialize
91
- @next_capital = 100
92
- end
93
- def produce(scope)
94
- ScroogeMcDuck.new(@next_capital *= 2)
95
- end
96
- end
97
- end
98
-
99
- describe 'Injector' do
100
- include InjectorSpecModule
101
-
102
- let(:bindings) { factory.named_bindings('test') }
103
- let(:scope) { null_scope()}
104
- let(:binder) { Puppet::Pops::Binder::Binder }
105
-
106
- let(:lbinder) do
107
- binder.new(layered_bindings)
108
- end
109
-
110
- def duck_type
111
- # create distinct instances
112
- type_factory.ruby(InjectorSpecModule::TestDuck)
113
- end
114
-
115
- let(:layered_bindings) { factory.layered_bindings(test_layer_with_bindings(bindings.model)) }
116
-
117
- context 'When created' do
118
- it 'should not raise an error if binder is configured' do
119
- expect { injector(lbinder) }.to_not raise_error
120
- end
121
-
122
- it 'should create an empty injector given an empty binder' do
123
- expect { binder.new(layered_bindings) }.to_not raise_exception
124
- end
125
-
126
- it "should be possible to reference the TypeCalculator" do
127
- expect(injector(lbinder).type_calculator.is_a?(Puppet::Pops::Types::TypeCalculator)).to eq(true)
128
- end
129
-
130
- it "should be possible to reference the KeyFactory" do
131
- expect(injector(lbinder).key_factory.is_a?(Puppet::Pops::Binder::KeyFactory)).to eq(true)
132
- end
133
-
134
- it "can be created using a model" do
135
- bindings.bind.name('a_string').to('42')
136
- injector = Puppet::Pops::Binder::Injector.create_from_model(layered_bindings)
137
- expect(injector.lookup(scope, 'a_string')).to eq('42')
138
- end
139
-
140
- it 'can be created using a block' do
141
- injector = Puppet::Pops::Binder::Injector.create('test') do
142
- bind.name('a_string').to('42')
143
- end
144
- expect(injector.lookup(scope, 'a_string')).to eq('42')
145
- end
146
-
147
- it 'can be created using a hash' do
148
- injector = Puppet::Pops::Binder::Injector.create_from_hash('test', 'a_string' => '42')
149
- expect(injector.lookup(scope, 'a_string')).to eq('42')
150
- end
151
-
152
- it 'can be created using an overriding injector with block' do
153
- injector = Puppet::Pops::Binder::Injector.create('test') do
154
- bind.name('a_string').to('42')
155
- end
156
- injector2 = injector.override('override') do
157
- bind.name('a_string').to('43')
158
- end
159
- expect(injector.lookup(scope, 'a_string')).to eq('42')
160
- expect(injector2.lookup(scope, 'a_string')).to eq('43')
161
- end
162
-
163
- it 'can be created using an overriding injector with hash' do
164
- injector = Puppet::Pops::Binder::Injector.create_from_hash('test', 'a_string' => '42')
165
- injector2 = injector.override_with_hash('override', 'a_string' => '43')
166
- expect(injector.lookup(scope, 'a_string')).to eq('42')
167
- expect(injector2.lookup(scope, 'a_string')).to eq('43')
168
- end
169
-
170
- it "can be created using an overriding injector with a model" do
171
- injector = Puppet::Pops::Binder::Injector.create_from_hash('test', 'a_string' => '42')
172
- bindings.bind.name('a_string').to('43')
173
- injector2 = injector.override_with_model(layered_bindings)
174
- expect(injector.lookup(scope, 'a_string')).to eq('42')
175
- expect(injector2.lookup(scope, 'a_string')).to eq('43')
176
- end
177
- end
178
-
179
- context "When looking up objects" do
180
- it 'lookup(scope, name) finds bound object of type Data with given name' do
181
- bindings.bind().name('a_string').to('42')
182
- expect(injector(lbinder).lookup(scope, 'a_string')).to eq('42')
183
- end
184
-
185
- context 'a block transforming the result can be given' do
186
- it 'that transform a found value given scope and value' do
187
- bindings.bind().name('a_string').to('42')
188
- expect(injector(lbinder).lookup(scope, 'a_string') {|zcope, val| val + '42' }).to eq('4242')
189
- end
190
-
191
- it 'that transform a found value given only value' do
192
- bindings.bind().name('a_string').to('42')
193
- expect(injector(lbinder).lookup(scope, 'a_string') {|val| val + '42' }).to eq('4242')
194
- end
195
-
196
- it 'that produces a default value when entry is missing' do
197
- bindings.bind().name('a_string').to('42')
198
- expect(injector(lbinder).lookup(scope, 'a_non_existing_string') {|val| val ? (raise Error, "Should not happen") : '4242' }).to eq('4242')
199
- end
200
- end
201
-
202
- context "and class is not bound" do
203
- it "assisted inject kicks in for classes with zero args constructor" do
204
- duck_type = type_factory.ruby(InjectorSpecModule::Daffy)
205
- injector = injector(lbinder)
206
- expect(injector.lookup(scope, duck_type).is_a?(InjectorSpecModule::Daffy)).to eq(true)
207
- expect(injector.lookup_producer(scope, duck_type).produce(scope).is_a?(InjectorSpecModule::Daffy)).to eq(true)
208
- end
209
-
210
- it "assisted inject produces same instance on lookup but not on lookup producer" do
211
- duck_type = type_factory.ruby(InjectorSpecModule::Daffy)
212
- injector = injector(lbinder)
213
- d1 = injector.lookup(scope, duck_type)
214
- d2 = injector.lookup(scope, duck_type)
215
- expect(d1.equal?(d2)).to eq(true)
216
-
217
- d1 = injector.lookup_producer(scope, duck_type).produce(scope)
218
- d2 = injector.lookup_producer(scope, duck_type).produce(scope)
219
- expect(d1.equal?(d2)).to eq(false)
220
- end
221
-
222
- it "assisted inject kicks in for classes with a class inject method" do
223
- duck_type = type_factory.ruby(InjectorSpecModule::ScroogeMcDuck)
224
- injector = injector(lbinder)
225
- # Do not pass any arguments, the ScroogeMcDuck :inject method should pick 1 by default
226
- # This tests zero args passed
227
- expect(injector.lookup(scope, duck_type).fortune).to eq(1)
228
- expect(injector.lookup_producer(scope, duck_type).produce(scope).fortune).to eq(1)
229
- end
230
-
231
- it "assisted inject selects the inject method if it exists over a zero args constructor" do
232
- injector = injector(lbinder)
233
- duck_type = type_factory.ruby(InjectorSpecModule::AngryDuck)
234
- expect(injector.lookup(scope, duck_type).is_a?(InjectorSpecModule::Donald)).to eq(true)
235
- expect(injector.lookup_producer(scope, duck_type).produce(scope).is_a?(InjectorSpecModule::Donald)).to eq(true)
236
- end
237
-
238
- it "assisted inject selects the zero args constructor if injector is from a superclass" do
239
- injector = injector(lbinder)
240
- duck_type = type_factory.ruby(InjectorSpecModule::ArneAnka)
241
- expect(injector.lookup(scope, duck_type).is_a?(InjectorSpecModule::ArneAnka)).to eq(true)
242
- expect(injector.lookup_producer(scope, duck_type).produce(scope).is_a?(InjectorSpecModule::ArneAnka)).to eq(true)
243
- end
244
- end
245
-
246
- context "and multiple layers are in use" do
247
- it "a higher layer shadows anything in a lower layer" do
248
- bindings1 = factory.named_bindings('test1')
249
- bindings1.bind().name('a_string').to('bad stuff')
250
- lower_layer = factory.named_layer('lower-layer', bindings1.model)
251
-
252
- bindings2 = factory.named_bindings('test2')
253
- bindings2.bind().name('a_string').to('good stuff')
254
- higher_layer = factory.named_layer('higher-layer', bindings2.model)
255
-
256
- injector = injector(binder.new(factory.layered_bindings(higher_layer, lower_layer)))
257
- expect(injector.lookup(scope,'a_string')).to eq('good stuff')
258
- end
259
-
260
- it "a higher layer may not shadow a lower layer binding that is final" do
261
- bindings1 = factory.named_bindings('test1')
262
- bindings1.bind().final.name('a_string').to('required stuff')
263
- lower_layer = factory.named_layer('lower-layer', bindings1.model)
264
-
265
- bindings2 = factory.named_bindings('test2')
266
- bindings2.bind().name('a_string').to('contraband')
267
- higher_layer = factory.named_layer('higher-layer', bindings2.model)
268
- expect {
269
- injector = injector(binder.new(factory.layered_bindings(higher_layer, lower_layer)))
270
- }.to raise_error(/Override of final binding not allowed/)
271
- end
272
- end
273
-
274
- context "and dealing with Data types" do
275
- let(:lbinder) { binder.new(layered_bindings) }
276
-
277
- it "should treat all data as same type w.r.t. key" do
278
- bindings.bind().name('a_string').to('42')
279
- bindings.bind().name('an_int').to(43)
280
- bindings.bind().name('a_float').to(3.14)
281
- bindings.bind().name('a_boolean').to(true)
282
- bindings.bind().name('an_array').to([1,2,3])
283
- bindings.bind().name('a_hash').to({'a'=>1,'b'=>2,'c'=>3})
284
-
285
- injector = injector(lbinder)
286
- expect(injector.lookup(scope,'a_string')).to eq('42')
287
- expect(injector.lookup(scope,'an_int')).to eq(43)
288
- expect(injector.lookup(scope,'a_float')).to eq(3.14)
289
- expect(injector.lookup(scope,'a_boolean')).to eq(true)
290
- expect(injector.lookup(scope,'an_array')).to eq([1,2,3])
291
- expect(injector.lookup(scope,'a_hash')).to eq({'a'=>1,'b'=>2,'c'=>3})
292
- end
293
-
294
- it "should provide type-safe lookup of given type/name" do
295
- bindings.bind().string().name('a_string').to('42')
296
- bindings.bind().integer().name('an_int').to(43)
297
- bindings.bind().float().name('a_float').to(3.14)
298
- bindings.bind().boolean().name('a_boolean').to(true)
299
- bindings.bind().array_of_data().name('an_array').to([1,2,3])
300
- bindings.bind().hash_of_data().name('a_hash').to({'a'=>1,'b'=>2,'c'=>3})
301
-
302
- injector = injector(lbinder)
303
-
304
- # Check lookup using implied Data type
305
- expect(injector.lookup(scope,'a_string')).to eq('42')
306
- expect(injector.lookup(scope,'an_int')).to eq(43)
307
- expect(injector.lookup(scope,'a_float')).to eq(3.14)
308
- expect(injector.lookup(scope,'a_boolean')).to eq(true)
309
- expect(injector.lookup(scope,'an_array')).to eq([1,2,3])
310
- expect(injector.lookup(scope,'a_hash')).to eq({'a'=>1,'b'=>2,'c'=>3})
311
-
312
- # Check lookup using expected type
313
- expect(injector.lookup(scope,type_factory.string(), 'a_string')).to eq('42')
314
- expect(injector.lookup(scope,type_factory.integer(), 'an_int')).to eq(43)
315
- expect(injector.lookup(scope,type_factory.float(),'a_float')).to eq(3.14)
316
- expect(injector.lookup(scope,type_factory.boolean(),'a_boolean')).to eq(true)
317
- expect(injector.lookup(scope,type_factory.array_of_data(),'an_array')).to eq([1,2,3])
318
- expect(injector.lookup(scope,type_factory.hash_of_data(),'a_hash')).to eq({'a'=>1,'b'=>2,'c'=>3})
319
-
320
- # Check lookup using wrong type
321
- expect { injector.lookup(scope,type_factory.integer(), 'a_string')}.to raise_error(/Type error/)
322
- expect { injector.lookup(scope,type_factory.string(), 'an_int')}.to raise_error(/Type error/)
323
- expect { injector.lookup(scope,type_factory.string(),'a_float')}.to raise_error(/Type error/)
324
- expect { injector.lookup(scope,type_factory.string(),'a_boolean')}.to raise_error(/Type error/)
325
- expect { injector.lookup(scope,type_factory.string(),'an_array')}.to raise_error(/Type error/)
326
- expect { injector.lookup(scope,type_factory.string(),'a_hash')}.to raise_error(/Type error/)
327
- end
328
- end
329
- end
330
-
331
- context "When looking up producer" do
332
- it 'the value is produced by calling produce(scope)' do
333
- bindings.bind().name('a_string').to('42')
334
- expect(injector(lbinder).lookup_producer(scope, 'a_string').produce(scope)).to eq('42')
335
- end
336
-
337
- context 'a block transforming the result can be given' do
338
- it 'that transform a found value given scope and producer' do
339
- bindings.bind().name('a_string').to('42')
340
- expect(injector(lbinder).lookup_producer(scope, 'a_string') {|zcope, p| p.produce(zcope) + '42' }).to eq('4242')
341
- end
342
-
343
- it 'that transform a found value given only producer' do
344
- bindings.bind().name('a_string').to('42')
345
- expect(injector(lbinder).lookup_producer(scope, 'a_string') {|p| p.produce(scope) + '42' }).to eq('4242')
346
- end
347
-
348
- it 'that can produce a default value when entry is not found' do
349
- bindings.bind().name('a_string').to('42')
350
- expect(injector(lbinder).lookup_producer(scope, 'a_non_existing_string') {|p| p ? (raise Error,"Should not happen") : '4242' }).to eq('4242')
351
- end
352
- end
353
- end
354
-
355
- context "When dealing with singleton vs. non singleton" do
356
- it "should produce the same instance when producer is a singleton" do
357
- bindings.bind().name('a_string').to('42')
358
- injector = injector(lbinder)
359
- a = injector.lookup(scope, 'a_string')
360
- b = injector.lookup(scope, 'a_string')
361
- expect(a.equal?(b)).to eq(true)
362
- end
363
-
364
- it "should produce different instances when producer is a non singleton producer" do
365
- bindings.bind().name('a_string').to_series_of('42')
366
- injector = injector(lbinder)
367
- a = injector.lookup(scope, 'a_string')
368
- b = injector.lookup(scope, 'a_string')
369
- expect(a).to eq('42')
370
- expect(b).to eq('42')
371
- expect(a.equal?(b)).to eq(false)
372
- end
373
- end
374
-
375
- context "When using the lookup producer" do
376
- it "should lookup again to produce a value" do
377
- bindings.bind().name('a_string').to_lookup_of('another_string')
378
- bindings.bind().name('another_string').to('hello')
379
- expect(injector(lbinder).lookup(scope, 'a_string')).to eq('hello')
380
- end
381
-
382
- it "should produce nil if looked up key does not exist" do
383
- bindings.bind().name('a_string').to_lookup_of('non_existing')
384
- expect(injector(lbinder).lookup(scope, 'a_string')).to eq(nil)
385
- end
386
-
387
- it "should report an error if lookup loop is detected" do
388
- bindings.bind().name('a_string').to_lookup_of('a_string')
389
- expect { injector(lbinder).lookup(scope, 'a_string') }.to raise_error(/Lookup loop/)
390
- end
391
- end
392
-
393
- context "When using the hash lookup producer" do
394
- it "should lookup a key in looked up hash" do
395
- data_hash = type_factory.hash_of_data()
396
- bindings.bind().name('a_string').to_hash_lookup_of(data_hash, 'a_hash', 'huey')
397
- bindings.bind().name('a_hash').to({'huey' => 'red', 'dewey' => 'blue', 'louie' => 'green'})
398
- expect(injector(lbinder).lookup(scope, 'a_string')).to eq('red')
399
- end
400
-
401
- it "should produce nil if looked up entry does not exist" do
402
- data_hash = type_factory.hash_of_data()
403
- bindings.bind().name('a_string').to_hash_lookup_of(data_hash, 'non_existing_entry', 'huey')
404
- bindings.bind().name('a_hash').to({'huey' => 'red', 'dewey' => 'blue', 'louie' => 'green'})
405
- expect(injector(lbinder).lookup(scope, 'a_string')).to eq(nil)
406
- end
407
- end
408
-
409
- context "When using the first found producer" do
410
- it "should lookup until it finds a value, but not further" do
411
- bindings.bind().name('a_string').to_first_found('b_string', 'c_string', 'g_string')
412
- bindings.bind().name('c_string').to('hello')
413
- bindings.bind().name('g_string').to('Oh, mrs. Smith...')
414
- expect(injector(lbinder).lookup(scope, 'a_string')).to eq('hello')
415
- end
416
-
417
- it "should lookup until it finds a value using mix of type and name, but not further" do
418
- bindings.bind().name('a_string').to_first_found('b_string', [type_factory.string, 'c_string'], 'g_string')
419
- bindings.bind().name('c_string').to('hello')
420
- bindings.bind().name('g_string').to('Oh, mrs. Smith...')
421
- expect(injector(lbinder).lookup(scope, 'a_string')).to eq('hello')
422
- end
423
- end
424
-
425
- context "When producing instances" do
426
- it "should lookup an instance of a class without arguments" do
427
- bindings.bind().type(duck_type).name('the_duck').to(InjectorSpecModule::Daffy)
428
- expect(injector(lbinder).lookup(scope, duck_type, 'the_duck').is_a?(InjectorSpecModule::Daffy)).to eq(true)
429
- end
430
-
431
- it "should lookup an instance of a class with arguments" do
432
- bindings.bind().type(duck_type).name('the_duck').to(InjectorSpecModule::ScroogeMcDuck, 1234)
433
- injector = injector(lbinder)
434
-
435
- the_duck = injector.lookup(scope, duck_type, 'the_duck')
436
- expect(the_duck.is_a?(InjectorSpecModule::ScroogeMcDuck)).to eq(true)
437
- expect(the_duck.fortune).to eq(1234)
438
- end
439
-
440
- it "singleton producer should not be recreated between lookups" do
441
- bindings.bind().type(duck_type).name('the_duck').to_producer(InjectorSpecModule::ScroogeProducer)
442
- injector = injector(lbinder)
443
-
444
- the_duck = injector.lookup(scope, duck_type, 'the_duck')
445
- expect(the_duck.is_a?(InjectorSpecModule::ScroogeMcDuck)).to eq(true)
446
- expect(the_duck.fortune).to eq(200)
447
-
448
- # singleton, do it again to get next value in series - it is the producer that is a singleton
449
- # not the produced value
450
- the_duck = injector.lookup(scope, duck_type, 'the_duck')
451
- expect(the_duck.is_a?(InjectorSpecModule::ScroogeMcDuck)).to eq(true)
452
- expect(the_duck.fortune).to eq(400)
453
-
454
- duck_producer = injector.lookup_producer(scope, duck_type, 'the_duck')
455
- expect(duck_producer.produce(scope).fortune).to eq(800)
456
- end
457
-
458
- it "series of producers should recreate producer on each lookup and lookup_producer" do
459
- bindings.bind().type(duck_type).name('the_duck').to_producer_series(InjectorSpecModule::ScroogeProducer)
460
- injector = injector(lbinder)
461
-
462
- duck_producer = injector.lookup_producer(scope, duck_type, 'the_duck')
463
- expect(duck_producer.produce(scope).fortune()).to eq(200)
464
- expect(duck_producer.produce(scope).fortune()).to eq(400)
465
-
466
- # series, each lookup gets a new producer (initialized to produce 200)
467
- duck_producer = injector.lookup_producer(scope, duck_type, 'the_duck')
468
- expect(duck_producer.produce(scope).fortune()).to eq(200)
469
- expect(duck_producer.produce(scope).fortune()).to eq(400)
470
-
471
- expect(injector.lookup(scope, duck_type, 'the_duck').fortune()).to eq(200)
472
- expect(injector.lookup(scope, duck_type, 'the_duck').fortune()).to eq(200)
473
- end
474
- end
475
-
476
- context "When working with multibind" do
477
- context "of hash kind" do
478
- it "a multibind produces contributed items keyed by their bound key-name" do
479
- hash_of_duck = type_factory.hash_of(duck_type)
480
- multibind_id = "ducks"
481
-
482
- bindings.multibind(multibind_id).type(hash_of_duck).name('donalds_nephews')
483
- bindings.bind.in_multibind(multibind_id).type(duck_type).name('nephew1').to(InjectorSpecModule::NamedDuck, 'Huey')
484
- bindings.bind.in_multibind(multibind_id).type(duck_type).name('nephew2').to(InjectorSpecModule::NamedDuck, 'Dewey')
485
- bindings.bind.in_multibind(multibind_id).type(duck_type).name('nephew3').to(InjectorSpecModule::NamedDuck, 'Louie')
486
-
487
- injector = injector(lbinder)
488
- the_ducks = injector.lookup(scope, hash_of_duck, "donalds_nephews")
489
- expect(the_ducks.size).to eq(3)
490
- expect(the_ducks['nephew1'].name).to eq('Huey')
491
- expect(the_ducks['nephew2'].name).to eq('Dewey')
492
- expect(the_ducks['nephew3'].name).to eq('Louie')
493
- end
494
-
495
- it "is an error to not bind contribution with a name" do
496
- hash_of_duck = type_factory.hash_of(duck_type)
497
- multibind_id = "ducks"
498
-
499
- bindings.multibind(multibind_id).type(hash_of_duck).name('donalds_nephews')
500
- # missing name
501
- bindings.bind.in_multibind(multibind_id).type(duck_type).to(InjectorSpecModule::NamedDuck, 'Huey')
502
- bindings.bind.in_multibind(multibind_id).type(duck_type).to(InjectorSpecModule::NamedDuck, 'Dewey')
503
-
504
- expect {
505
- the_ducks = injector(lbinder).lookup(scope, hash_of_duck, "donalds_nephews")
506
- }.to raise_error(/must have a name/)
507
- end
508
-
509
- it "is an error to bind with duplicate key when using default (priority) conflict resolution" do
510
- hash_of_duck = type_factory.hash_of(duck_type)
511
- multibind_id = "ducks"
512
-
513
- bindings.multibind(multibind_id).type(hash_of_duck).name('donalds_nephews')
514
- # missing name
515
- bindings.bind.in_multibind(multibind_id).type(duck_type).name('foo').to(InjectorSpecModule::NamedDuck, 'Huey')
516
- bindings.bind.in_multibind(multibind_id).type(duck_type).name('foo').to(InjectorSpecModule::NamedDuck, 'Dewey')
517
-
518
- expect {
519
- the_ducks = injector(lbinder).lookup(scope, hash_of_duck, "donalds_nephews")
520
- }.to raise_error(/Duplicate key/)
521
- end
522
-
523
- it "is not an error to bind with duplicate key when using (ignore) conflict resolution" do
524
- hash_of_duck = type_factory.hash_of(duck_type)
525
- multibind_id = "ducks"
526
-
527
- bindings.multibind(multibind_id).type(hash_of_duck).name('donalds_nephews').producer_options(:conflict_resolution => :ignore)
528
- bindings.bind.in_multibind(multibind_id).type(duck_type).name('foo').to(InjectorSpecModule::NamedDuck, 'Huey')
529
- bindings.bind.in_multibind(multibind_id).type(duck_type).name('foo').to(InjectorSpecModule::NamedDuck, 'Dewey')
530
-
531
- expect {
532
- the_ducks = injector(lbinder).lookup(scope, hash_of_duck, "donalds_nephews")
533
- }.to_not raise_error
534
- end
535
-
536
- it "should produce detailed type error message" do
537
- hash_of_integer = type_factory.hash_of(type_factory.integer())
538
-
539
- multibind_id = "ints"
540
- mb = bindings.multibind(multibind_id).type(hash_of_integer).name('donalds_family')
541
- bindings.bind.in_multibind(multibind_id).name('nephew').to('Huey')
542
-
543
- expect { ducks = injector(lbinder).lookup(scope, 'donalds_family')
544
- }.to raise_error(%r{expected: Integer, got: String})
545
- end
546
-
547
- it "should be possible to combine hash multibind contributions with append on conflict" do
548
- # This case uses a multibind of individual strings, but combines them
549
- # into an array bound to a hash key
550
- # (There are other ways to do this - e.g. have the multibind lookup a multibind
551
- # of array type to which nephews are contributed).
552
- #
553
- hash_of_data = type_factory.hash_of_data()
554
- multibind_id = "ducks"
555
- mb = bindings.multibind(multibind_id).type(hash_of_data).name('donalds_family')
556
- mb.producer_options(:conflict_resolution => :append)
557
-
558
- bindings.bind.in_multibind(multibind_id).name('nephews').to('Huey')
559
- bindings.bind.in_multibind(multibind_id).name('nephews').to('Dewey')
560
- bindings.bind.in_multibind(multibind_id).name('nephews').to('Louie')
561
- bindings.bind.in_multibind(multibind_id).name('uncles').to('Scrooge McDuck')
562
- bindings.bind.in_multibind(multibind_id).name('uncles').to('Ludwig Von Drake')
563
-
564
- ducks = injector(lbinder).lookup(scope, 'donalds_family')
565
-
566
- expect(ducks['nephews']).to eq(['Huey', 'Dewey', 'Louie'])
567
- expect(ducks['uncles']).to eq(['Scrooge McDuck', 'Ludwig Von Drake'])
568
- end
569
-
570
- it "should be possible to combine hash multibind contributions with append, flat, and uniq, on conflict" do
571
- # This case uses a multibind of individual strings, but combines them
572
- # into an array bound to a hash key
573
- # (There are other ways to do this - e.g. have the multibind lookup a multibind
574
- # of array type to which nephews are contributed).
575
- #
576
- hash_of_data = type_factory.hash_of_data()
577
- multibind_id = "ducks"
578
- mb = bindings.multibind(multibind_id).type(hash_of_data).name('donalds_family')
579
- mb.producer_options(:conflict_resolution => :append, :flatten => true, :uniq => true)
580
-
581
- bindings.bind.in_multibind(multibind_id).name('nephews').to('Huey')
582
- bindings.bind.in_multibind(multibind_id).name('nephews').to('Huey')
583
- bindings.bind.in_multibind(multibind_id).name('nephews').to('Dewey')
584
- bindings.bind.in_multibind(multibind_id).name('nephews').to(['Huey', ['Louie'], 'Dewey'])
585
- bindings.bind.in_multibind(multibind_id).name('uncles').to('Scrooge McDuck')
586
- bindings.bind.in_multibind(multibind_id).name('uncles').to('Ludwig Von Drake')
587
-
588
- ducks = injector(lbinder).lookup(scope, 'donalds_family')
589
-
590
- expect(ducks['nephews']).to eq(['Huey', 'Dewey', 'Louie'])
591
- expect(ducks['uncles']).to eq(['Scrooge McDuck', 'Ludwig Von Drake'])
592
- end
593
-
594
- it "should fail attempts to append, perform uniq or flatten on type incompatible multibind hash" do
595
- hash_of_integer = type_factory.hash_of(type_factory.integer())
596
- ids = ["ducks1", "ducks2", "ducks3"]
597
- mb = bindings.multibind(ids[0]).type(hash_of_integer).name('broken_family0')
598
- mb.producer_options(:conflict_resolution => :append)
599
- mb = bindings.multibind(ids[1]).type(hash_of_integer).name('broken_family1')
600
- mb.producer_options(:flatten => :true)
601
- mb = bindings.multibind(ids[2]).type(hash_of_integer).name('broken_family2')
602
- mb.producer_options(:uniq => :true)
603
-
604
- injector = injector(binder.new(factory.layered_bindings(test_layer_with_bindings(bindings.model))))
605
- expect { injector.lookup(scope, 'broken_family0')}.to raise_error(/:conflict_resolution => :append/)
606
- expect { injector.lookup(scope, 'broken_family1')}.to raise_error(/:flatten/)
607
- expect { injector.lookup(scope, 'broken_family2')}.to raise_error(/:uniq/)
608
- end
609
-
610
- it "a higher priority contribution wins when resolution is :merge" do
611
- # THIS TEST MAY DEPEND ON HASH ORDER SINCE PRIORITY BASED ON CATEGORY IS REMOVED
612
- hash_of_data = type_factory.hash_of_data()
613
- multibind_id = "hashed_ducks"
614
-
615
- bindings.multibind(multibind_id).type(hash_of_data).name('donalds_nephews').producer_options(:conflict_resolution => :merge)
616
-
617
- mb1 = bindings.bind.in_multibind(multibind_id)
618
- mb1.name('nephew').to({'name' => 'Huey', 'is' => 'winner'})
619
-
620
- mb2 = bindings.bind.in_multibind(multibind_id)
621
- mb2.name('nephew').to({'name' => 'Dewey', 'is' => 'looser', 'has' => 'cap'})
622
-
623
- the_ducks = injector(binder.new(layered_bindings)).lookup(scope, "donalds_nephews");
624
- expect(the_ducks['nephew']['name']).to eq('Huey')
625
- expect(the_ducks['nephew']['is']).to eq('winner')
626
- expect(the_ducks['nephew']['has']).to eq('cap')
627
- end
628
- end
629
-
630
- context "of array kind" do
631
- it "an array multibind produces contributed items, names are allowed but ignored" do
632
- array_of_duck = type_factory.array_of(duck_type)
633
- multibind_id = "ducks"
634
-
635
- bindings.multibind(multibind_id).type(array_of_duck).name('donalds_nephews')
636
- # one with name (ignored, expect no error)
637
- bindings.bind.in_multibind(multibind_id).type(duck_type).name('nephew1').to(InjectorSpecModule::NamedDuck, 'Huey')
638
- # two without name
639
- bindings.bind.in_multibind(multibind_id).type(duck_type).to(InjectorSpecModule::NamedDuck, 'Dewey')
640
- bindings.bind.in_multibind(multibind_id).type(duck_type).to(InjectorSpecModule::NamedDuck, 'Louie')
641
-
642
- the_ducks = injector(lbinder).lookup(scope, array_of_duck, "donalds_nephews")
643
- expect(the_ducks.size).to eq(3)
644
- expect(the_ducks.collect {|d| d.name }.sort).to eq(['Dewey', 'Huey', 'Louie'])
645
- end
646
-
647
- it "should be able to make result contain only unique entries" do
648
- # This case uses a multibind of individual strings, and combines them
649
- # into an array of unique values
650
- #
651
- array_of_data = type_factory.array_of_data()
652
- multibind_id = "ducks"
653
- mb = bindings.multibind(multibind_id).type(array_of_data).name('donalds_family')
654
- # turn off priority on named to not trigger conflict as all additions have the same precedence
655
- # (could have used the default for unnamed and add unnamed entries).
656
- mb.producer_options(:priority_on_named => false, :uniq => true)
657
-
658
- bindings.bind.in_multibind(multibind_id).name('nephews').to('Huey')
659
- bindings.bind.in_multibind(multibind_id).name('nephews').to('Dewey')
660
- bindings.bind.in_multibind(multibind_id).name('nephews').to('Dewey') # duplicate
661
- bindings.bind.in_multibind(multibind_id).name('nephews').to('Louie')
662
- bindings.bind.in_multibind(multibind_id).name('nephews').to('Louie') # duplicate
663
- bindings.bind.in_multibind(multibind_id).name('nephews').to('Louie') # duplicate
664
-
665
- ducks = injector(lbinder).lookup(scope, 'donalds_family')
666
- expect(ducks).to eq(['Huey', 'Dewey', 'Louie'])
667
- end
668
-
669
- it "should be able to contribute elements and arrays of elements and flatten 1 level" do
670
- # This case uses a multibind of individual strings and arrays, and combines them
671
- # into an array of flattened
672
- #
673
- array_of_string = type_factory.array_of(type_factory.string())
674
-
675
- multibind_id = "ducks"
676
- mb = bindings.multibind(multibind_id).type(array_of_string).name('donalds_family')
677
- # flatten one level
678
- mb.producer_options(:flatten => 1)
679
-
680
- bindings.bind.in_multibind(multibind_id).to('Huey')
681
- bindings.bind.in_multibind(multibind_id).to('Dewey')
682
- bindings.bind.in_multibind(multibind_id).to('Louie') # duplicate
683
- bindings.bind.in_multibind(multibind_id).to(['Huey', 'Dewey', 'Louie'])
684
-
685
- ducks = injector(lbinder).lookup(scope, 'donalds_family')
686
- expect(ducks).to eq(['Huey', 'Dewey', 'Louie', 'Huey', 'Dewey', 'Louie'])
687
- end
688
-
689
- it "should produce detailed type error message" do
690
- array_of_integer = type_factory.array_of(type_factory.integer())
691
-
692
- multibind_id = "ints"
693
- mb = bindings.multibind(multibind_id).type(array_of_integer).name('donalds_family')
694
- bindings.bind.in_multibind(multibind_id).to('Huey')
695
-
696
- expect { ducks = injector(lbinder).lookup(scope, 'donalds_family')
697
- }.to raise_error(%r{expected: Integer, or Array\[Integer\], got: String})
698
- end
699
- end
700
-
701
- context "When using multibind in multibind" do
702
- it "a hash multibind can be contributed to another" do
703
- hash_of_data = type_factory.hash_of_data()
704
- mb1_id = 'data1'
705
- mb2_id = 'data2'
706
- top = bindings.multibind(mb1_id).type(hash_of_data).name("top")
707
- detail = bindings.multibind(mb2_id).type(hash_of_data).name("detail").in_multibind(mb1_id)
708
-
709
- bindings.bind.in_multibind(mb1_id).name('a').to(10)
710
- bindings.bind.in_multibind(mb1_id).name('b').to(20)
711
- bindings.bind.in_multibind(mb2_id).name('a').to(30)
712
- bindings.bind.in_multibind(mb2_id).name('b').to(40)
713
- expect( injector(lbinder).lookup(scope, "top") ).to eql({'detail' => {'a' => 30, 'b' => 40}, 'a' => 10, 'b' => 20})
714
- end
715
- end
716
-
717
- context "When looking up entries requiring evaluation" do
718
- let(:node) { Puppet::Node.new('localhost') }
719
- let(:compiler) { Puppet::Parser::Compiler.new(node)}
720
- let(:scope) { Puppet::Parser::Scope.new(compiler) }
721
- let(:parser) { Puppet::Pops::Parser::Parser.new() }
722
-
723
- it "should be possible to lookup a concatenated string" do
724
- scope['duck'] = 'Donald Fauntleroy Duck'
725
- expr = parser.parse_string('"Hello $duck"').current()
726
- bindings.bind.name('the_duck').to(expr)
727
- expect(injector(lbinder).lookup(scope, 'the_duck')).to eq('Hello Donald Fauntleroy Duck')
728
- end
729
-
730
- it "should be possible to post process lookup with a puppet lambda" do
731
- model = parser.parse_string('fake() |$value| {$value + 1 }').current
732
- bindings.bind.name('an_int').to(42).producer_options( :transformer => model.body.lambda)
733
- expect(injector(lbinder).lookup(scope, 'an_int')).to eq(43)
734
- end
735
-
736
- it "should be possible to post process lookup with a ruby proc" do
737
- transformer = lambda {|value| value + 1 }
738
- bindings.bind.name('an_int').to(42).producer_options( :transformer => transformer)
739
- expect(injector(lbinder).lookup(scope, 'an_int')).to eq(43)
740
- end
741
- end
742
- end
743
-
744
- context "When there are problems with configuration" do
745
- let(:lbinder) { binder.new(layered_bindings) }
746
-
747
- it "reports error for surfacing abstract bindings" do
748
- bindings.bind.abstract.name('an_int')
749
- expect{injector(lbinder).lookup(scope, 'an_int') }.to raise_error(/The abstract binding .* was not overridden/)
750
- end
751
-
752
- it "does not report error for abstract binding that is ovrridden" do
753
- bindings.bind.abstract.name('an_int')
754
- bindings.bind.override.name('an_int').to(142)
755
- expect{ injector(lbinder).lookup(scope, 'an_int') }.to_not raise_error
756
- end
757
-
758
- it "reports error for overriding binding that does not override" do
759
- bindings.bind.override.name('an_int').to(42)
760
- expect{injector(lbinder).lookup(scope, 'an_int') }.to raise_error(/Binding with unresolved 'override' detected/)
761
- end
762
-
763
- it "reports error for binding without producer" do
764
- bindings.bind.name('an_int')
765
- expect{injector(lbinder).lookup(scope, 'an_int') }.to raise_error(/Binding without producer/)
766
- end
767
- end
768
- end