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,28 +0,0 @@
1
- # Configures validation suitable for the bindings model
2
- # @api public
3
- #
4
- class Puppet::Pops::Binder::BindingsValidatorFactory < Puppet::Pops::Validation::Factory
5
- Issues = Puppet::Pops::Binder::BinderIssues
6
-
7
- # Produces the checker to use
8
- def checker diagnostic_producer
9
- Puppet::Pops::Binder::BindingsChecker.new(diagnostic_producer)
10
- end
11
-
12
- # Produces the label provider to use
13
- def label_provider
14
- Puppet::Pops::Binder::BindingsLabelProvider.new()
15
- end
16
-
17
- # Produces the severity producer to use
18
- def severity_producer
19
- p = super
20
-
21
- # Configure each issue that should **not** be an error
22
- #
23
- p[Issues::MISSING_BINDINGS] = :warning
24
- p[Issues::MISSING_LAYERS] = :warning
25
-
26
- p
27
- end
28
- end
@@ -1,107 +0,0 @@
1
- module Puppet::Pops::Binder::Config
2
- # Class holding the Binder Configuration
3
- # The configuration is obtained from the file 'binder_config.yaml'
4
- # that must reside in the root directory of the site
5
- # @api public
6
- #
7
- class BinderConfig
8
-
9
- # The layering configuration is an array of layers from most to least significant.
10
- # Each layer is represented by a Hash containing :name and :include and optionally :exclude
11
- #
12
- # @return [Array<Hash<String, String>, Hash<String, Array<String>>]
13
- # @api public
14
- #
15
- attr_reader :layering_config
16
-
17
- # @return <Hash<String, String>] ({}) optional mapping of bindings-scheme to handler class name
18
- attr_reader :scheme_extensions
19
-
20
-
21
- # @return [String] the loaded config file
22
- attr_accessor :config_file
23
-
24
- DEFAULT_LAYERS = [
25
- { 'name' => 'site', 'include' => [ 'confdir:/default?optional'] },
26
- { 'name' => 'modules', 'include' => [ 'module:/*::default', 'module:/*::metadata'] },
27
- ]
28
-
29
- DEFAULT_SCHEME_EXTENSIONS = {}
30
-
31
- def default_config()
32
- # This is hardcoded now, but may be a user supplied default configuration later
33
- {'version' => 1, 'layers' => default_layers }
34
- end
35
-
36
- def confdir()
37
- Puppet.settings[:confdir]
38
- end
39
-
40
- # Creates a new Config. The configuration is loaded from the file 'binder_config.yaml' which
41
- # is expected to be found in confdir.
42
- #
43
- # @param diagnostics [DiagnosticProducer] collector of diagnostics
44
- # @api public
45
- #
46
- def initialize(diagnostics)
47
- @config_file = Puppet.settings[:binder_config]
48
- # if file is stated, it must exist
49
- # otherwise it is optional $confdir/binder_conf.yaml
50
- # and if that fails, the default
51
- case @config_file
52
- when NilClass
53
- # use the config file if it exists
54
- rootdir = confdir
55
- if rootdir.is_a?(String)
56
- expanded_config_file = File.expand_path(File.join(rootdir, '/binder_config.yaml'))
57
- if Puppet::FileSystem.exist?(expanded_config_file)
58
- @config_file = expanded_config_file
59
- end
60
- else
61
- raise ArgumentError, "No Puppet settings 'confdir', or it is not a String"
62
- end
63
- when String
64
- unless Puppet::FileSystem.exist?(@config_file)
65
- raise ArgumentError, "Cannot find the given binder configuration file '#{@config_file}'"
66
- end
67
- else
68
- raise ArgumentError, "The setting binder_config is expected to be a String, got: #{@config_file.class.name}."
69
- end
70
- unless @config_file.is_a?(String) && Puppet::FileSystem.exist?(@config_file)
71
- @config_file = nil # use defaults
72
- end
73
-
74
- validator = BinderConfigChecker.new(diagnostics)
75
- begin
76
- data = @config_file ? YAML.load_file(@config_file) : default_config()
77
- validator.validate(data, @config_file)
78
- rescue Errno::ENOENT
79
- diagnostics.accept(Issues::CONFIG_FILE_NOT_FOUND, @config_file)
80
- rescue Errno::ENOTDIR
81
- diagnostics.accept(Issues::CONFIG_FILE_NOT_FOUND, @config_file)
82
- rescue ::SyntaxError => e
83
- diagnostics.accept(Issues::CONFIG_FILE_SYNTAX_ERROR, @config_file, :detail => e.message)
84
- end
85
-
86
- unless diagnostics.errors?
87
- @layering_config = data['layers'] || default_layers
88
- @scheme_extensions = (data['extensions'] && data['extensions']['scheme_handlers'] || default_scheme_extensions)
89
- else
90
- @layering_config = []
91
- @scheme_extensions = {}
92
- end
93
- end
94
-
95
- # The default_xxx methods exists to make it easier to do mocking in tests.
96
-
97
- # @api private
98
- def default_layers
99
- DEFAULT_LAYERS
100
- end
101
-
102
- # @api private
103
- def default_scheme_extensions
104
- DEFAULT_SCHEME_EXTENSIONS
105
- end
106
- end
107
- end
@@ -1,142 +0,0 @@
1
- module Puppet::Pops::Binder::Config
2
- # Validates the consistency of a Binder::BinderConfig
3
- class BinderConfigChecker
4
- # Create an instance with a diagnostic producer that will receive the result during validation
5
- # @param diagnostics [DiagnosticProducer] The producer that will receive the diagnostic
6
- # @api public
7
- #
8
- def initialize(diagnostics)
9
- @diagnostics = diagnostics
10
- t = Puppet::Pops::Types
11
- @type_calculator = t::TypeCalculator.new()
12
- @array_of_string_type = t::TypeFactory.array_of(t::TypeFactory.string())
13
- end
14
-
15
- # Validate the consistency of the given data. Diagnostics will be emitted to the DiagnosticProducer
16
- # that was set when this checker was created
17
- #
18
- # @param data [Object] The data read from the config file
19
- # @param config_file [String] The full path of the file. Used in error messages
20
- # @api public
21
- #
22
- def validate(data, config_file)
23
- @unique_layer_names = Set.new()
24
-
25
- if data.is_a?(Hash)
26
- check_top_level(data, config_file)
27
- else
28
- accept(Issues::CONFIG_IS_NOT_HASH, config_file)
29
- end
30
- end
31
-
32
- private
33
-
34
- def accept(issue, semantic, options = {})
35
- @diagnostics.accept(issue, semantic, options)
36
- end
37
-
38
- def check_top_level(data, config_file)
39
- if layers = (data['layers'] || data[:layers])
40
- check_layers(layers, config_file)
41
- else
42
- accept(Issues::CONFIG_LAYERS_MISSING, config_file)
43
- end
44
-
45
- if version = (data['version'] || data[:version])
46
- accept(Issues::CONFIG_WRONG_VERSION, config_file, {:expected => 1, :actual => version}) unless version == 1
47
- else
48
- accept(Issues::CONFIG_VERSION_MISSING, config_file)
49
- end
50
- if extensions = data['extensions']
51
- check_extensions(extensions, config_file)
52
- end
53
- end
54
-
55
- def check_layers(layers, config_file)
56
- unless layers.is_a?(Array)
57
- accept(Issues::LAYERS_IS_NOT_ARRAY, config_file, :klass => data.class)
58
- else
59
- layers.each {|layer| check_layer(layer, config_file) }
60
- end
61
- end
62
-
63
- def check_layer(layer, config_file)
64
- unless layer.is_a?(Hash)
65
- accept(Issues::LAYER_IS_NOT_HASH, config_file, :klass => layer.class)
66
- return
67
- end
68
- layer.each_pair do |k, v|
69
- case k
70
- when 'name'
71
- unless v.is_a?(String)
72
- accept(Issues::LAYER_NAME_NOT_STRING, config_file, :class_name => v.class.name)
73
- end
74
-
75
- unless @unique_layer_names.add?(v)
76
- accept(Issues::DUPLICATE_LAYER_NAME, config_file, :name => v.to_s )
77
- end
78
-
79
- when 'include'
80
- check_bindings_references('include', v, config_file)
81
-
82
- when 'exclude'
83
- check_bindings_references('exclude', v, config_file)
84
-
85
- when Symbol
86
- accept(Issues::LAYER_ATTRIBUTE_IS_SYMBOL, config_file, :name => k.to_s)
87
-
88
- else
89
- accept(Issues::UNKNOWN_LAYER_ATTRIBUTE, config_file, :name => k.to_s )
90
- end
91
- end
92
- end
93
-
94
- # references to bindings is a single String URI, or an array of String URI
95
- # @param kind [String] 'include' or 'exclude' (used in issue messages)
96
- # @param value [String, Array<String>] one or more String URI binding references
97
- # @param config_file [String] reference to the loaded config file
98
- #
99
- def check_bindings_references(kind, value, config_file)
100
- return check_reference(value, kind, config_file) if value.is_a?(String)
101
- accept(Issues::BINDINGS_REF_NOT_STRING_OR_ARRAY, config_file, :kind => kind ) unless value.is_a?(Array)
102
- value.each {|ref| check_reference(ref, kind, config_file) }
103
- end
104
-
105
- # A reference is a URI in string form having a scheme and a path (at least '/')
106
- #
107
- def check_reference(value, kind, config_file)
108
- begin
109
- uri = URI.parse(value)
110
-
111
- unless uri.scheme
112
- accept(Issues::MISSING_SCHEME, config_file, :uri => uri)
113
- end
114
- unless uri.path
115
- accept(Issues::REF_WITHOUT_PATH, config_file, :uri => uri, :kind => kind)
116
- end
117
-
118
- rescue InvalidURIError => e
119
- accept(Issues::BINDINGS_REF_INVALID_URI, config_file, :msg => e.message)
120
- end
121
- end
122
-
123
- def check_extensions(extensions, config_file)
124
- unless extensions.is_a?(Hash)
125
- accept(Issues::EXTENSIONS_NOT_HASH, config_file, :actual => extensions.class.name)
126
- return
127
- end
128
- # check known extensions
129
- extensions.each_key do |key|
130
- unless ['scheme_handlers'].include? key
131
- accept(Issues::UNKNOWN_EXTENSION, config_file, :extension => key)
132
- end
133
- end
134
-
135
- if binding_schemes = extensions['scheme_handlers']
136
- unless binding_schemes.is_a?(Hash)
137
- accept(Issues::EXTENSION_BINDING_NOT_HASH, config_file, :extension => 'scheme_handlers', :actual => binding_schemes.class.name)
138
- end
139
- end
140
- end
141
- end
142
- end
@@ -1,36 +0,0 @@
1
- module Puppet::Pops
2
- module Binder
3
- module Config
4
- # Generates validation diagnostics
5
- class DiagnosticProducer
6
- def initialize(acceptor)
7
- @acceptor = acceptor
8
- @severity_producer = Validation::SeverityProducer.new
9
- end
10
-
11
- def accept(issue, semantic, arguments={})
12
- arguments[:semantic] ||= semantic
13
- severity = severity_producer.severity(issue)
14
- @acceptor.accept(Validation::Diagnostic.new(severity, issue, nil, nil, arguments))
15
- end
16
-
17
- def errors?()
18
- @acceptor.errors?
19
- end
20
-
21
- def severity_producer
22
- p = @severity_producer
23
- # All are errors, if there is need to mark some as warnings...
24
- # p[Issues::XXX] = :warning
25
-
26
- # ignored because there is a default
27
- p[Issues::CONFIG_LAYERS_MISSING] = :ignore
28
-
29
- # ignored because there is a default
30
- p[Issues::CONFIG_CATEGORIES_MISSING] = :ignore
31
- p
32
- end
33
- end
34
- end
35
- end
36
- end
@@ -1,90 +0,0 @@
1
- module Puppet::Pops::Binder::Config::Issues
2
- # (see Puppet::Pops::Issues#issue)
3
- def self.issue (issue_code, *args, &block)
4
- Puppet::Pops::Issues.issue(issue_code, *args, &block)
5
- end
6
-
7
- CONFIG_FILE_NOT_FOUND = issue :CONFIG_FILE_NOT_FOUND do
8
- "The binder configuration file: #{semantic} can not be found."
9
- end
10
-
11
- CONFIG_FILE_SYNTAX_ERROR = issue :CONFIG_FILE_SYNTAX_ERROR, :detail do
12
- "Syntax error in configuration file: #{detail}"
13
- end
14
-
15
- CONFIG_IS_NOT_HASH = issue :CONFIG_IS_NOT_HASH do
16
- "The configuration file '#{semantic}' has no hash at the top level"
17
- end
18
-
19
- CONFIG_LAYERS_MISSING = issue :CONFIG_LAYERS_MISSING do
20
- "The configuration file '#{semantic}' has no 'layers' entry in the top level hash"
21
- end
22
-
23
- CONFIG_CATEGORIES_MISSING = issue :CONFIG_CATEGORIES_MISSING do
24
- "The configuration file '#{semantic}' has no 'categories' entry in the top level hash"
25
- end
26
-
27
- CONFIG_VERSION_MISSING = issue :CONFIG_VERSION_MISSING do
28
- "The configuration file '#{semantic}' has no 'version' entry in the top level hash"
29
- end
30
-
31
- LAYERS_IS_NOT_ARRAY = issue :LAYERS_IS_NOT_ARRAY, :klass do
32
- "The configuration file '#{semantic}' should contain a 'layers' key with an Array value, got: #{klass.name}"
33
- end
34
-
35
- LAYER_IS_NOT_HASH = issue :LAYER_IS_NOT_HASH, :klass do
36
- "The configuration file '#{semantic}' should contain one hash per layer, got #{klass.name} instead of Hash"
37
- end
38
-
39
- DUPLICATE_LAYER_NAME = issue :DUPLICATE_LAYER_NAME, :name do
40
- "Duplicate layer '#{name}' in configuration file #{semantic}"
41
- end
42
-
43
- UNKNOWN_LAYER_ATTRIBUTE = issue :UNKNOWN_LAYER_ATTRIBUTE, :name do
44
- "Unknown layer attribute '#{name}' in configuration file #{semantic}"
45
- end
46
-
47
- BINDINGS_REF_NOT_STRING_OR_ARRAY = issue :BINDINGS_REF_NOT_STRING_OR_ARRAY, :kind do
48
- "Configuration file #{semantic} has bindings reference in '#{kind}' that is neither a String nor an Array."
49
- end
50
-
51
- MISSING_SCHEME = issue :MISSING_SCHEME, :uri do
52
- "Configuration file #{semantic} contains a bindings reference: '#{uri}' without scheme."
53
- end
54
-
55
- UNKNOWN_REF_SCHEME = issue :UNKNOWN_REF_SCHEME, :uri, :kind do
56
- "Configuration file #{semantic} contains a bindings reference: '#{kind}' => '#{uri}' with unknown scheme"
57
- end
58
-
59
- REF_WITHOUT_PATH = issue :REF_WITHOUT_PATH, :uri, :kind do
60
- "Configuration file #{semantic} contains a bindings reference: '#{kind}' => '#{uri}' without path"
61
- end
62
-
63
- BINDINGS_REF_INVALID_URI = issue :BINDINGS_REF_INVALID_URI, :msg do
64
- "Configuration file #{semantic} contains a bindings reference: '#{kind}' => invalid uri, msg: '#{msg}'"
65
- end
66
-
67
- LAYER_ATTRIBUTE_IS_SYMBOL = issue :LAYER_ATTRIBUTE_IS_SYMBOL, :name do
68
- "Configuration file #{semantic} contains a layer attribute '#{name}' that is a Symbol (should be String)"
69
- end
70
-
71
- LAYER_NAME_NOT_STRING = issue :LAYER_NAME_NOT_STRING, :class_name do
72
- "Configuration file #{semantic} contains a layer name that is not a String, got a: '#{class_name}'"
73
- end
74
-
75
- CONFIG_WRONG_VERSION = issue :CONFIG_WRONG_VERSION, :expected, :actual do
76
- "The configuration file '#{semantic}' has unsupported 'version', expected: #{expected}, but got: #{actual}."
77
- end
78
-
79
- EXTENSIONS_NOT_HASH = issue :EXTENSIONS_NOT_HASH, :actual do
80
- "The configuration file '#{semantic}' contains 'extensions', expected: Hash, but got: #{actual}."
81
- end
82
-
83
- EXTENSION_BINDING_NOT_HASH = issue :EXTENSION_BINDING_NOT_HASH, :extension, :actual do
84
- "The configuration file '#{semantic}' contains '#{extension}', expected: Hash, but got: #{actual}."
85
- end
86
-
87
- UNKNOWN_EXTENSION = issue :UNKNOWN_EXTENSION, :extension do
88
- "The configuration file '#{semantic}' contains the unknown extension: #{extension}."
89
- end
90
- end
@@ -1,771 +0,0 @@
1
- module Puppet::Pops
2
- module Binder
3
- # The injector is the "lookup service" class
4
- #
5
- # Initialization
6
- # --------------
7
- # The injector is initialized with a configured {Binder Binder}. The Binder instance contains a resolved set of
8
- # `key => "binding information"` that is used to setup the injector.
9
- #
10
- # Lookup
11
- # ------
12
- # It is possible to lookup either the value, or a producer of the value. The {#lookup} method looks up a value, and the
13
- # {#lookup_producer} looks up a producer.
14
- # Both of these methods can be called with three different signatures; `lookup(key)`, `lookup(type, name)`, and `lookup(name)`,
15
- # with the corresponding calls to obtain a producer; `lookup_producer(key)`, `lookup_producer(type, name)`, and `lookup_producer(name)`.
16
- #
17
- # It is possible to pass a block to {#lookup} and {#lookup_producer}, the block is passed the result of the lookup
18
- # and the result of the block is returned as the value of the lookup. This is useful in order to provide a default value.
19
- #
20
- # @example Lookup with default value
21
- # injector.lookup('favourite_food') {|x| x.nil? ? 'bacon' : x }
22
- #
23
- # Singleton or Not
24
- # ----------------
25
- # The lookup of a value is always based on the lookup of a producer. For *singleton producers* this means that the value is
26
- # determined by the first value lookup. Subsequent lookups via `lookup` or `lookup_producer` will produce the same instance.
27
- #
28
- # *Non singleton producers* will produce a new instance on each request for a value. For constant value producers this
29
- # means that a new deep-clone is produced for mutable objects (but not for immutable objects as this is not needed).
30
- # Custom producers should have non singleton behavior, or if this is not possible ensure that the produced result is
31
- # immutable. (The behavior if a custom producer hands out a mutable value and this is mutated is undefined).
32
- #
33
- # Custom bound producers capable of producing a series of objects when bound as a singleton means that the producer
34
- # is a singleton, not the value it produces. If such a producer is bound as non singleton, each `lookup` will get a new
35
- # producer (hence, typically, restarting the series). However, the producer returned from `lookup_producer` will not
36
- # recreate the producer on each call to `produce`; i.e. each `lookup_producer` returns a producer capable of returning
37
- # a series of objects.
38
- #
39
- # @see Binder Binder, for details about how to bind keys to producers
40
- # @see BindingsFactory BindingsFactory, for a convenient way to create a Binder and bindings
41
- #
42
- # Assisted Inject
43
- # ---------------
44
- # The injector supports lookup of instances of classes *even if the requested class is not explicitly bound*.
45
- # This is possible for classes that have a zero argument `initialize` method, or that has a class method called
46
- # `inject` that takes two arguments; `injector`, and `scope`.
47
- # This is useful in ruby logic as a class can then use the given injector to inject details.
48
- # An `inject` class method wins over a zero argument `initialize` in all cases.
49
- #
50
- # @example Using assisted inject
51
- # # Class with assisted inject support
52
- # class Duck
53
- # attr_reader :name, :year_of_birth
54
- #
55
- # def self.inject(injector, scope, binding, *args)
56
- # # lookup default name and year of birth, and use defaults if not present
57
- # name = injector.lookup(scope,'default-duck-name') {|x| x ? x : 'Donald Duck' }
58
- # year_of_birth = injector.lookup(scope,'default-duck-year_of_birth') {|x| x ? x : 1934 }
59
- # self.new(name, year_of_birth)
60
- # end
61
- #
62
- # def initialize(name, year_of_birth)
63
- # @name = name
64
- # @year_of_birth = year_of_birth
65
- # end
66
- # end
67
- #
68
- # injector.lookup(scope, Duck)
69
- # # Produces a Duck named 'Donald Duck' or named after the binding 'default-duck-name' (and with similar treatment of
70
- # # year_of_birth).
71
- # @see Producers::AssistedInjectProducer AssistedInjectProducer, for more details on assisted injection
72
- #
73
- # Access to key factory and type calculator
74
- # -----------------------------------------
75
- # It is important to use the same key factory, and type calculator as the binder. It is therefor possible to obtain
76
- # these with the methods {#key_factory}, and {#type_calculator}.
77
- #
78
- # Special support for producers
79
- # -----------------------------
80
- # There is one method specially designed for producers. The {#get_contributions} method returns an array of all contributions
81
- # to a given *contributions key*. This key is obtained from the {#key_factory} for a given multibinding. The returned set of
82
- # contributed bindings is sorted in descending precedence order. Any conflicts, merges, etc. is performed by the multibinding
83
- # producer configured for a multibinding.
84
- #
85
- # @api public
86
- #
87
- class Injector
88
-
89
- Producers = Producers
90
-
91
- def self.create_from_model(layered_bindings_model)
92
- self.new(Binder.new(layered_bindings_model))
93
- end
94
-
95
- def self.create_from_hash(name, key_value_hash)
96
- factory = BindingsFactory
97
- named_bindings = factory.named_bindings(name) { key_value_hash.each {|k,v| bind.name(k).to(v) }}
98
- layered_bindings = factory.layered_bindings(factory.named_layer(name+'-layer',named_bindings.model))
99
- self.new(Binder.new(layered_bindings))
100
- end
101
-
102
- # Creates an injector with a single bindings layer created with the given name, and the bindings
103
- # produced by the given block. The block is evaluated with self bound to a BindingsContainerBuilder.
104
- #
105
- # @example
106
- # Injector.create('mysettings') do
107
- # bind('name').to(42)
108
- # end
109
- #
110
- # @api public
111
- #
112
- def self.create(name, &block)
113
- factory = BindingsFactory
114
- layered_bindings = factory.layered_bindings(factory.named_layer(name+'-layer',factory.named_bindings(name, &block).model))
115
- self.new(Binder.new(layered_bindings))
116
- end
117
-
118
- # Creates an overriding injector with a single bindings layer
119
- # created with the given name, and the bindings produced by the given block.
120
- # The block is evaluated with self bound to a BindingsContainerBuilder.
121
- #
122
- # @example
123
- # an_injector.override('myoverrides') do
124
- # bind('name').to(43)
125
- # end
126
- #
127
- # @api public
128
- #
129
- def override(name, &block)
130
- factory = BindingsFactory
131
- layered_bindings = factory.layered_bindings(factory.named_layer(name+'-layer',factory.named_bindings(name, &block).model))
132
- self.class.new(Binder.new(layered_bindings, @impl.binder))
133
- end
134
-
135
- # Creates an overriding injector with bindings from a bindings model (a LayeredBindings) which
136
- # may consists of multiple layers of bindings.
137
- #
138
- # @api public
139
- #
140
- def override_with_model(layered_bindings)
141
- unless layered_bindings.is_a?(Bindings::LayeredBindings)
142
- raise ArgumentError, "Expected a LayeredBindings model, got '#{bindings_model.class}'"
143
- end
144
- self.class.new(Binder.new(layered_bindings, @impl.binder))
145
- end
146
-
147
- # Creates an overriding injector with a single bindings layer
148
- # created with the given name, and the bindings given in the key_value_hash
149
- # @api public
150
- #
151
- def override_with_hash(name, key_value_hash)
152
- factory = BindingsFactory
153
- named_bindings = factory.named_bindings(name) { key_value_hash.each {|k,v| bind.name(k).to(v) }}
154
- layered_bindings = factory.layered_bindings(factory.named_layer(name+'-layer',named_bindings.model))
155
- self.class.new(Binder.new(layered_bindings, @impl.binder))
156
- end
157
-
158
- # An Injector is initialized with a configured {Binder Binder}.
159
- #
160
- # @param configured_binder [Binder,nil] The configured binder containing effective bindings. A given value
161
- # of nil creates an injector that returns or yields nil on all lookup requests.
162
- # @raise ArgumentError if the given binder is not fully configured
163
- #
164
- # @api public
165
- #
166
- def initialize(configured_binder, parent_injector = nil)
167
- if configured_binder.nil?
168
- @impl = Private::NullInjectorImpl.new()
169
- else
170
- @impl = Private::InjectorImpl.new(configured_binder, parent_injector)
171
- end
172
- end
173
-
174
- # The KeyFactory used to produce keys in this injector.
175
- # The factory is shared with the Binder to ensure consistent translation to keys.
176
- # A compatible type calculator can also be obtained from the key factory.
177
- # @return [KeyFactory] the key factory in use
178
- #
179
- # @api public
180
- #
181
- def key_factory()
182
- @impl.key_factory
183
- end
184
-
185
- # Returns the TypeCalculator in use for keys. The same calculator (as used for keys) should be used if there is a need
186
- # to check type conformance, or infer the type of Ruby objects.
187
- #
188
- # @return [Types::TypeCalculator] the type calculator that is in use for keys
189
- # @api public
190
- #
191
- def type_calculator()
192
- @impl.type_calculator()
193
- end
194
-
195
- # Lookup (a.k.a "inject") of a value given a key.
196
- # The lookup may be called with different parameters. This method is a convenience method that
197
- # dispatches to one of #lookup_key or #lookup_type depending on the arguments. It also provides
198
- # the ability to use an optional block that is called with the looked up value, or scope and value if the
199
- # block takes two parameters. This is useful to provide a default value or other transformations, calculations
200
- # based on the result of the lookup.
201
- #
202
- # @overload lookup(scope, key)
203
- # (see #lookup_key)
204
- # @param scope [Puppet::Parser::Scope] the scope to use for evaluation
205
- # @param key [Object] an opaque object being the full key
206
- #
207
- # @overload lookup(scope, type, name = '')
208
- # (see #lookup_type)
209
- # @param scope [Puppet::Parser::Scope] the scope to use for evaluation
210
- # @param type [Types::PAnyType] the type of what to lookup
211
- # @param name [String] the name to use, defaults to empty string (for unnamed)
212
- #
213
- # @overload lookup(scope, name)
214
- # Lookup of Data type with given name.
215
- # @see #lookup_type
216
- # @param scope [Puppet::Parser::Scope] the scope to use for evaluation
217
- # @param name [String] the Data/name to lookup
218
- #
219
- # @yield [value] passes the looked up value to an optional block and returns what this block returns
220
- # @yield [scope, value] passes scope and value to the block and returns what this block returns
221
- # @yieldparam scope [Puppet::Parser::Scope] the scope given to lookup
222
- # @yieldparam value [Object, nil] the looked up value or nil if nothing was found
223
- #
224
- # @raise [ArgumentError] if the block has an arity that is not 1 or 2
225
- #
226
- # @api public
227
- #
228
- def lookup(scope, *args, &block)
229
- @impl.lookup(scope, *args, &block)
230
- end
231
-
232
- # Looks up a (typesafe) value based on a type/name combination.
233
- # Creates a key for the type/name combination using a KeyFactory. Specialization of the Data type are transformed
234
- # to a Data key, and the result is type checked to conform with the given key.
235
- #
236
- # @param type [Types::PAnyType] the type to lookup as defined by Types::TypeFactory
237
- # @param name [String] the (optional for non `Data` types) name of the entry to lookup.
238
- # The name may be an empty String (the default), but not nil. The name is required for lookup for subtypes of
239
- # `Data`.
240
- # @return [Object, nil] the looked up bound object, or nil if not found (type conformance with given type is guaranteed)
241
- # @raise [ArgumentError] if the produced value does not conform with the given type
242
- #
243
- # @api public
244
- #
245
- def lookup_type(scope, type, name='')
246
- @impl.lookup_type(scope, type, name)
247
- end
248
-
249
- # Looks up the key and returns the entry, or nil if no entry is found.
250
- # Produced type is checked for type conformance with its binding, but not with the lookup key.
251
- # (This since all subtypes of PDataType are looked up using a key based on PDataType).
252
- # Use the Types::TypeCalculator#instance? method to check for conformance of the result
253
- # if this is wanted, or use #lookup_type.
254
- #
255
- # @param key [Object] lookup of key as produced by the key factory
256
- # @return [Object, nil] produced value of type that conforms with bound type (type conformance with key not guaranteed).
257
- # @raise [ArgumentError] if the produced value does not conform with the bound type
258
- #
259
- # @api public
260
- #
261
- def lookup_key(scope, key)
262
- @impl.lookup_key(scope, key)
263
- end
264
-
265
- # Lookup (a.k.a "inject") producer of a value given a key.
266
- # The producer lookup may be called with different parameters. This method is a convenience method that
267
- # dispatches to one of #lookup_producer_key or #lookup_producer_type depending on the arguments. It also provides
268
- # the ability to use an optional block that is called with the looked up producer, or scope and producer if the
269
- # block takes two parameters. This is useful to provide a default value, call a custom producer method,
270
- # or other transformations, calculations based on the result of the lookup.
271
- #
272
- # @overload lookup_producer(scope, key)
273
- # (see #lookup_proudcer_key)
274
- # @param scope [Puppet::Parser::Scope] the scope to use for evaluation
275
- # @param key [Object] an opaque object being the full key
276
- #
277
- # @overload lookup_producer(scope, type, name = '')
278
- # (see #lookup_type)
279
- # @param scope [Puppet::Parser::Scope] the scope to use for evaluation
280
- # @param type [Types::PAnyType], the type of what to lookup
281
- # @param name [String], the name to use, defaults to empty string (for unnamed)
282
- #
283
- # @overload lookup_producer(scope, name)
284
- # Lookup of Data type with given name.
285
- # @see #lookup_type
286
- # @param scope [Puppet::Parser::Scope] the scope to use for evaluation
287
- # @param name [String], the Data/name to lookup
288
- #
289
- # @return [Producers::Producer, Object, nil] a producer, or what the optional block returns
290
- #
291
- # @yield [producer] passes the looked up producer to an optional block and returns what this block returns
292
- # @yield [scope, producer] passes scope and producer to the block and returns what this block returns
293
- # @yieldparam producer [Producers::Producer, nil] the looked up producer or nil if nothing was bound
294
- # @yieldparam scope [Puppet::Parser::Scope] the scope given to lookup
295
- #
296
- # @raise [ArgumentError] if the block has an arity that is not 1 or 2
297
- #
298
- # @api public
299
- #
300
- def lookup_producer(scope, *args, &block)
301
- @impl.lookup_producer(scope, *args, &block)
302
- end
303
-
304
- # Looks up a Producer given an opaque binder key.
305
- # @return [Producers::Producer, nil] the bound producer, or nil if no such producer was found.
306
- #
307
- # @api public
308
- #
309
- def lookup_producer_key(scope, key)
310
- @impl.lookup_producer_key(scope, key)
311
- end
312
-
313
- # Looks up a Producer given a type/name key.
314
- # @note The result is not type checked (it cannot be until the producer has produced an instance).
315
- # @return [Producers::Producer, nil] the bound producer, or nil if no such producer was found
316
- #
317
- # @api public
318
- #
319
- def lookup_producer_type(scope, type, name='')
320
- @impl.lookup_producer_type(scope, type, name)
321
- end
322
-
323
- # Returns the contributions to a multibind given its contribution key (as produced by the KeyFactory).
324
- # This method is typically used by multibind value producers, but may be used for introspection of the injector's state.
325
- #
326
- # @param scope [Puppet::Parser::Scope] the scope to use
327
- # @param contributions_key [Object] Opaque key as produced by KeyFactory as the contributions key for a multibinding
328
- # @return [Array<InjectorEntry>] the contributions sorted in deecending order of precedence
329
- #
330
- # @api public
331
- #
332
- def get_contributions(scope, contributions_key)
333
- @impl.get_contributions(scope, contributions_key)
334
- end
335
-
336
- # Returns an Injector that returns (or yields) nil on all lookups, and produces an empty structure for contributions
337
- # This method is intended for testing purposes.
338
- #
339
- def self.null_injector
340
- self.new(nil)
341
- end
342
-
343
- # The implementation of the Injector is private.
344
- # @see Injector The public API this module implements.
345
- # @api private
346
- #
347
- module Private
348
-
349
- # This is a mocking "Null" implementation of Injector. It never finds anything
350
- # @api private
351
- class NullInjectorImpl
352
- attr_reader :entries
353
- attr_reader :key_factory
354
- attr_reader :type_calculator
355
-
356
- def initialize
357
- @entries = []
358
- @key_factory = KeyFactory.new()
359
- @type_calculator = Types::TypeCalculator.singleton
360
- end
361
-
362
- def lookup(scope, *args, &block)
363
- raise ArgumentError, "lookup should be called with two or three arguments, got: #{args.size()+1}" unless args.size.between?(1,2)
364
- # call block with result if given
365
- if block
366
- case block.arity
367
- when 1
368
- block.call(nil)
369
- when 2
370
- block.call(scope, nil)
371
- else
372
- raise ArgumentError, "The block should have arity 1 or 2"
373
- end
374
- else
375
- val
376
- end
377
- end
378
-
379
- # @api private
380
- def binder
381
- nil
382
- end
383
-
384
- # @api private
385
- def lookup_key(scope, key)
386
- nil
387
- end
388
-
389
- # @api private
390
- def lookup_producer(scope, *args, &block)
391
- lookup(scope, *args, &block)
392
- end
393
-
394
- # @api private
395
- def lookup_producer_key(scope, key)
396
- nil
397
- end
398
-
399
- # @api private
400
- def lookup_producer_type(scope, type, name='')
401
- nil
402
- end
403
-
404
- def get_contributions()
405
- []
406
- end
407
- end
408
-
409
- # @api private
410
- #
411
- class InjectorImpl
412
- # Hash of key => InjectorEntry
413
- # @api private
414
- #
415
- attr_reader :entries
416
-
417
- attr_reader :key_factory
418
-
419
- attr_reader :type_calculator
420
-
421
- attr_reader :binder
422
-
423
- def initialize(configured_binder, parent_injector = nil)
424
- @binder = configured_binder
425
- @parent = parent_injector
426
-
427
- # TODO: Different error message
428
- raise ArgumentError, "Given Binder is not configured" unless configured_binder #&& configured_binder.configured?()
429
- @entries = configured_binder.injector_entries()
430
-
431
- # It is essential that the injector uses the same key factory as the binder since keys must be
432
- # represented the same (but still opaque) way.
433
- #
434
- @key_factory = configured_binder.key_factory()
435
- @type_calculator = Types::TypeCalculator.singleton
436
- @@transform_visitor ||= Visitor.new(nil,"transform", 2, 2)
437
- @recursion_lock = [ ]
438
- end
439
-
440
- # @api private
441
- def lookup(scope, *args, &block)
442
- raise ArgumentError, "lookup should be called with two or three arguments, got: #{args.size()+1}" unless args.size.between?(1,2)
443
-
444
- val = case args[ 0 ]
445
-
446
- when Types::PAnyType
447
- lookup_type(scope, *args)
448
-
449
- when String
450
- raise ArgumentError, "lookup of name should only pass the name" unless args.size == 1
451
- lookup_key(scope, key_factory.data_key(args[ 0 ]))
452
-
453
- else
454
- raise ArgumentError, 'lookup using a key should only pass a single key' unless args.size == 1
455
- lookup_key(scope, args[ 0 ])
456
- end
457
-
458
- # call block with result if given
459
- if block
460
- case block.arity
461
- when 1
462
- block.call(val)
463
- when 2
464
- block.call(scope, val)
465
- else
466
- raise ArgumentError, "The block should have arity 1 or 2"
467
- end
468
- else
469
- val
470
- end
471
- end
472
-
473
- # Produces a key for a type/name combination.
474
- # @api private
475
- def named_key(type, name)
476
- key_factory.named_key(type, name)
477
- end
478
-
479
- # Produces a key for a PDataType/name combination
480
- # @api private
481
- def data_key(name)
482
- key_factory.data_key(name)
483
- end
484
-
485
- # @api private
486
- def lookup_type(scope, type, name='')
487
- val = lookup_key(scope, named_key(type, name))
488
- return nil if val.nil?
489
- unless type_calculator.instance?(type, val)
490
- raise ArgumentError, "Type error: incompatible type, #{type_error_detail(type, val)}"
491
- end
492
- val
493
- end
494
-
495
- # @api private
496
- def type_error_detail(expected, actual)
497
- actual_t = type_calculator.infer(actual)
498
- "expected: #{expected}, got: #{actual_t}"
499
- end
500
-
501
- # @api private
502
- def lookup_key(scope, key)
503
- if @recursion_lock.include?(key)
504
- raise ArgumentError, "Lookup loop detected for key: #{key}"
505
- end
506
- begin
507
- @recursion_lock.push(key)
508
- case entry = get_entry(key)
509
- when NilClass
510
- @parent ? @parent.lookup_key(scope, key) : nil
511
-
512
- when InjectorEntry
513
- val = produce(scope, entry)
514
- return nil if val.nil?
515
- unless type_calculator.instance?(entry.binding.type, val)
516
- raise "Type error: incompatible type returned by producer, #{type_error_detail(entry.binding.type, val)}"
517
- end
518
- val
519
- when Producers::AssistedInjectProducer
520
- entry.produce(scope)
521
- else
522
- # internal, direct entries
523
- entry
524
- end
525
- ensure
526
- @recursion_lock.pop()
527
- end
528
- end
529
-
530
- # Should be used to get entries as it converts missing entries to NotFound entries or AssistedInject entries
531
- #
532
- # @api private
533
- def get_entry(key)
534
- case entry = entries[ key ]
535
- when NilClass
536
- # not found, is this an assisted inject?
537
- if clazz = assistable_injected_class(key)
538
- entry = Producers::AssistedInjectProducer.new(self, clazz)
539
- entries[ key ] = entry
540
- else
541
- entries[ key ] = NotFound.new()
542
- entry = nil
543
- end
544
- when NotFound
545
- entry = nil
546
- end
547
- entry
548
- end
549
-
550
- # Returns contributions to a multibind in precedence order; highest first.
551
- # Returns an Array on the form [ [key, entry], [key, entry]] where the key is intended to be used to lookup the value
552
- # (or a producer) for that entry.
553
- # @api private
554
- def get_contributions(scope, contributions_key)
555
- result = {}
556
- return [] unless contributions = lookup_key(scope, contributions_key)
557
- contributions.each { |k| result[k] = get_entry(k) }
558
- result.sort {|a, b| a[0] <=> b[0] }
559
- end
560
-
561
- # Produces an injectable class given a key, or nil if key does not represent an injectable class
562
- # @api private
563
- #
564
- def assistable_injected_class(key)
565
- kt = key_factory.get_type(key)
566
- return nil unless kt.is_a?(Types::PRuntimeType) && kt.runtime == :ruby && !key_factory.is_named?(key)
567
- type_calculator.injectable_class(kt)
568
- end
569
-
570
- def lookup_producer(scope, *args, &block)
571
- raise ArgumentError, "lookup_producer should be called with two or three arguments, got: #{args.size()+1}" unless args.size <= 2
572
-
573
- p = case args[ 0 ]
574
- when Types::PAnyType
575
- lookup_producer_type(scope, *args)
576
-
577
- when String
578
- raise ArgumentError, "lookup_producer of name should only pass the name" unless args.size == 1
579
- lookup_producer_key(scope, key_factory.data_key(args[ 0 ]))
580
-
581
- else
582
- raise ArgumentError, "lookup_producer using a key should only pass a single key" unless args.size == 1
583
- lookup_producer_key(scope, args[ 0 ])
584
- end
585
-
586
- # call block with result if given
587
- if block
588
- case block.arity
589
- when 1
590
- block.call(p)
591
- when 2
592
- block.call(scope, p)
593
- else
594
- raise ArgumentError, "The block should have arity 1 or 2"
595
- end
596
- else
597
- p
598
- end
599
- end
600
-
601
- # @api private
602
- def lookup_producer_key(scope, key)
603
- if @recursion_lock.include?(key)
604
- raise ArgumentError, "Lookup loop detected for key: #{key}"
605
- end
606
- begin
607
- @recursion_lock.push(key)
608
- producer(scope, get_entry(key), :multiple_use)
609
- ensure
610
- @recursion_lock.pop()
611
- end
612
- end
613
-
614
- # @api private
615
- def lookup_producer_type(scope, type, name='')
616
- lookup_producer_key(scope, named_key(type, name))
617
- end
618
-
619
- # Returns the producer for the entry
620
- # @return [Producers::Producer] the entry's producer.
621
- #
622
- # @api private
623
- #
624
- def producer(scope, entry, use)
625
- return nil unless entry # not found
626
- return entry.producer(scope) if entry.is_a?(Producers::AssistedInjectProducer)
627
- unless entry.cached_producer
628
- entry.cached_producer = transform(entry.binding.producer, scope, entry)
629
- end
630
- unless entry.cached_producer
631
- raise ArgumentError, "Injector entry without a producer #{format_binding(entry.binding)}"
632
- end
633
- entry.cached_producer.producer(scope)
634
- end
635
-
636
- # @api private
637
- def transform(producer_descriptor, scope, entry)
638
- @@transform_visitor.visit_this_2(self, producer_descriptor, scope, entry)
639
- end
640
-
641
- # Returns the produced instance
642
- # @return [Object] the produced instance
643
- # @api private
644
- #
645
- def produce(scope, entry)
646
- return nil unless entry # not found
647
- producer(scope, entry, :single_use).produce(scope)
648
- end
649
-
650
- # @api private
651
- def named_arguments_to_hash(named_args)
652
- nb = named_args.nil? ? [] : named_args
653
- result = {}
654
- nb.each {|arg| result[ :"#{arg.name}" ] = arg.value }
655
- result
656
- end
657
-
658
- # @api private
659
- def merge_producer_options(binding, options)
660
- named_arguments_to_hash(binding.producer_args).merge(options)
661
- end
662
-
663
- # @api private
664
- def format_binding(b)
665
- Binder.format_binding(b)
666
- end
667
-
668
- # Handles a missing producer (which is valid for a Multibinding where one is selected automatically)
669
- # @api private
670
- #
671
- def transform_NilClass(descriptor, scope, entry)
672
- unless entry.binding.is_a?(Bindings::Multibinding)
673
- raise ArgumentError, "Binding without producer detected, #{format_binding(entry.binding)}"
674
- end
675
- case entry.binding.type
676
- when Types::PArrayType
677
- transform(Bindings::ArrayMultibindProducerDescriptor.new(), scope, entry)
678
- when Types::PHashType
679
- transform(Bindings::HashMultibindProducerDescriptor.new(), scope, entry)
680
- else
681
- raise ArgumentError, "Unsupported multibind type, must be an array or hash type, #{format_binding(entry.binding)}"
682
- end
683
- end
684
-
685
- # @api private
686
- def transform_ArrayMultibindProducerDescriptor(descriptor, scope, entry)
687
- make_producer(Producers::ArrayMultibindProducer, descriptor, scope, entry, named_arguments_to_hash(entry.binding.producer_args))
688
- end
689
-
690
- # @api private
691
- def transform_HashMultibindProducerDescriptor(descriptor, scope, entry)
692
- make_producer(Producers::HashMultibindProducer, descriptor, scope, entry, named_arguments_to_hash(entry.binding.producer_args))
693
- end
694
-
695
- # @api private
696
- def transform_ConstantProducerDescriptor(descriptor, scope, entry)
697
- producer_class = singleton?(descriptor) ? Producers::SingletonProducer : Producers::DeepCloningProducer
698
- producer_class.new(self, entry.binding, scope, merge_producer_options(entry.binding, {:value => descriptor.value}))
699
- end
700
-
701
- # @api private
702
- def transform_InstanceProducerDescriptor(descriptor, scope, entry)
703
- make_producer(Producers::InstantiatingProducer, descriptor, scope, entry,
704
- merge_producer_options(entry.binding, {:class_name => descriptor.class_name, :init_args => descriptor.arguments}))
705
- end
706
-
707
- # @api private
708
- def transform_EvaluatingProducerDescriptor(descriptor, scope, entry)
709
- make_producer(Producers::EvaluatingProducer, descriptor, scope, entry,
710
- merge_producer_options(entry.binding, {:expression => descriptor.expression}))
711
- end
712
-
713
- # @api private
714
- def make_producer(clazz, descriptor, scope, entry, options)
715
- singleton_wrapped(descriptor, scope, entry, clazz.new(self, entry.binding, scope, options))
716
- end
717
-
718
- # @api private
719
- def singleton_wrapped(descriptor, scope, entry, producer)
720
- return producer unless singleton?(descriptor)
721
- Producers::SingletonProducer.new(self, entry.binding, scope,
722
- merge_producer_options(entry.binding, {:value => producer.produce(scope)}))
723
- end
724
-
725
- # @api private
726
- def transform_ProducerProducerDescriptor(descriptor, scope, entry)
727
- p = transform(descriptor.producer, scope, entry)
728
- clazz = singleton?(descriptor) ? Producers::SingletonProducerProducer : Producers::ProducerProducer
729
- clazz.new(self, entry.binding, scope, merge_producer_options(entry.binding,
730
- merge_producer_options(entry.binding, { :producer_producer => p })))
731
- end
732
-
733
- # @api private
734
- def transform_LookupProducerDescriptor(descriptor, scope, entry)
735
- make_producer(Producers::LookupProducer, descriptor, scope, entry,
736
- merge_producer_options(entry.binding, {:type => descriptor.type, :name => descriptor.name}))
737
- end
738
-
739
- # @api private
740
- def transform_HashLookupProducerDescriptor(descriptor, scope, entry)
741
- make_producer(Producers::LookupKeyProducer, descriptor, scope, entry,
742
- merge_producer_options(entry.binding, {:type => descriptor.type, :name => descriptor.name, :key => descriptor.key}))
743
- end
744
-
745
- # @api private
746
- def transform_NonCachingProducerDescriptor(descriptor, scope, entry)
747
- # simply delegates to the wrapped producer
748
- transform(descriptor.producer, scope, entry)
749
- end
750
-
751
- # @api private
752
- def transform_FirstFoundProducerDescriptor(descriptor, scope, entry)
753
- make_producer(Producers::FirstFoundProducer, descriptor, scope, entry,
754
- merge_producer_options(entry.binding, {:producers => descriptor.producers.collect {|p| transform(p, scope, entry) }}))
755
- end
756
-
757
- # @api private
758
- def singleton?(descriptor)
759
- ! descriptor.eContainer().is_a?(Bindings::NonCachingProducerDescriptor)
760
- end
761
-
762
- # Special marker class used in entries
763
- # @api private
764
- class NotFound
765
- end
766
- end
767
- end
768
- end
769
- end
770
- end
771
-