puppet 4.10.0 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1031) hide show
  1. data/CONTRIBUTING.md +17 -0
  2. data/Gemfile +6 -10
  3. data/MAINTAINERS +0 -5
  4. data/Rakefile +2 -1
  5. data/conf/auth.conf +21 -0
  6. data/conf/fileserver.conf +7 -12
  7. data/conf/hiera.yaml +11 -0
  8. data/ext/debian/puppet-common.install +0 -1
  9. data/ext/debian/puppet-common.manpages +0 -2
  10. data/ext/hiera/hiera.yaml +15 -0
  11. data/ext/logcheck/puppet +1 -1
  12. data/ext/project_data.yaml +3 -6
  13. data/ext/puppet-test +0 -24
  14. data/ext/rack/config.ru +2 -2
  15. data/ext/redhat/puppet.spec.erb +0 -3
  16. data/ext/windows/service/daemon.rb +8 -14
  17. data/install.rb +1 -1
  18. data/lib/hiera/puppet_function.rb +1 -1
  19. data/lib/puppet/agent/disabler.rb +3 -3
  20. data/lib/puppet/agent/locker.rb +3 -3
  21. data/lib/puppet/agent.rb +27 -16
  22. data/lib/puppet/application/agent.rb +16 -9
  23. data/lib/puppet/application/apply.rb +19 -17
  24. data/lib/puppet/application/cert.rb +2 -2
  25. data/lib/puppet/application/describe.rb +2 -2
  26. data/lib/puppet/application/device.rb +71 -46
  27. data/lib/puppet/application/doc.rb +9 -9
  28. data/lib/puppet/application/face_base.rb +8 -13
  29. data/lib/puppet/application/filebucket.rb +8 -8
  30. data/lib/puppet/application/lookup.rb +101 -88
  31. data/lib/puppet/application/master.rb +15 -23
  32. data/lib/puppet/application/resource.rb +20 -17
  33. data/lib/puppet/application.rb +11 -11
  34. data/lib/puppet/configurer/downloader.rb +2 -2
  35. data/lib/puppet/configurer/fact_handler.rb +13 -4
  36. data/lib/puppet/configurer.rb +29 -28
  37. data/lib/puppet/context/trusted_information.rb +1 -1
  38. data/lib/puppet/context.rb +5 -5
  39. data/lib/puppet/defaults.rb +58 -104
  40. data/lib/puppet/error.rb +1 -1
  41. data/lib/puppet/etc.rb +75 -39
  42. data/lib/puppet/external/pson/common.rb +4 -0
  43. data/lib/puppet/face/ca.rb +50 -43
  44. data/lib/puppet/face/catalog/select.rb +4 -4
  45. data/lib/puppet/face/catalog.rb +2 -2
  46. data/lib/puppet/face/certificate.rb +21 -21
  47. data/lib/puppet/face/certificate_request.rb +1 -1
  48. data/lib/puppet/face/certificate_revocation_list.rb +1 -1
  49. data/lib/puppet/face/config.rb +10 -10
  50. data/lib/puppet/face/epp.rb +38 -38
  51. data/lib/puppet/face/facts.rb +5 -5
  52. data/lib/puppet/face/generate.rb +8 -8
  53. data/lib/puppet/face/help.rb +8 -8
  54. data/lib/puppet/face/key.rb +3 -3
  55. data/lib/puppet/face/man.rb +7 -7
  56. data/lib/puppet/face/module/build.rb +7 -7
  57. data/lib/puppet/face/module/changes.rb +6 -6
  58. data/lib/puppet/face/module/generate.rb +24 -24
  59. data/lib/puppet/face/module/install.rb +13 -9
  60. data/lib/puppet/face/module/list.rb +16 -12
  61. data/lib/puppet/face/module/search.rb +4 -4
  62. data/lib/puppet/face/module/uninstall.rb +13 -10
  63. data/lib/puppet/face/module/upgrade.rb +11 -7
  64. data/lib/puppet/face/module.rb +3 -3
  65. data/lib/puppet/face/node/clean.rb +8 -8
  66. data/lib/puppet/face/node.rb +6 -6
  67. data/lib/puppet/face/parser.rb +17 -17
  68. data/lib/puppet/face/plugin.rb +7 -7
  69. data/lib/puppet/face/report.rb +10 -10
  70. data/lib/puppet/face/resource.rb +13 -13
  71. data/lib/puppet/face/status.rb +5 -5
  72. data/lib/puppet/feature/base.rb +4 -3
  73. data/lib/puppet/feature/eventlog.rb +1 -1
  74. data/lib/puppet/file_bucket/dipper.rb +9 -9
  75. data/lib/puppet/file_bucket/file.rb +4 -17
  76. data/lib/puppet/file_serving/base.rb +3 -3
  77. data/lib/puppet/file_serving/configuration/parser.rb +12 -12
  78. data/lib/puppet/file_serving/configuration.rb +3 -3
  79. data/lib/puppet/file_serving/content.rb +1 -1
  80. data/lib/puppet/file_serving/fileset.rb +7 -5
  81. data/lib/puppet/file_serving/http_metadata.rb +1 -1
  82. data/lib/puppet/file_serving/metadata.rb +9 -9
  83. data/lib/puppet/file_serving/mount/file.rb +6 -6
  84. data/lib/puppet/file_serving/mount/modules.rb +1 -1
  85. data/lib/puppet/file_serving/mount.rb +1 -1
  86. data/lib/puppet/file_serving/terminus_selector.rb +1 -1
  87. data/lib/puppet/file_system/file_impl.rb +2 -2
  88. data/lib/puppet/file_system/memory_impl.rb +1 -1
  89. data/lib/puppet/file_system/path_pattern.rb +6 -6
  90. data/lib/puppet/file_system/uniquefile.rb +2 -2
  91. data/lib/puppet/file_system/windows.rb +3 -3
  92. data/lib/puppet/forge/cache.rb +1 -0
  93. data/lib/puppet/forge/errors.rb +12 -12
  94. data/lib/puppet/forge/repository.rb +2 -1
  95. data/lib/puppet/forge.rb +10 -8
  96. data/lib/puppet/functions/annotate.rb +108 -0
  97. data/lib/puppet/functions/binary_file.rb +1 -1
  98. data/lib/puppet/functions/call.rb +42 -0
  99. data/lib/puppet/functions/defined.rb +4 -4
  100. data/lib/puppet/functions/dig.rb +1 -1
  101. data/lib/puppet/functions/eyaml_lookup_key.rb +16 -12
  102. data/lib/puppet/functions/hiera.rb +9 -2
  103. data/lib/puppet/functions/hiera_array.rb +9 -2
  104. data/lib/puppet/functions/hiera_hash.rb +10 -2
  105. data/lib/puppet/functions/hiera_include.rb +18 -4
  106. data/lib/puppet/functions/hocon_data.rb +8 -2
  107. data/lib/puppet/functions/json_data.rb +5 -1
  108. data/lib/puppet/functions/match.rb +2 -2
  109. data/lib/puppet/functions/reduce.rb +14 -2
  110. data/lib/puppet/functions/require.rb +1 -1
  111. data/lib/puppet/functions/slice.rb +3 -3
  112. data/lib/puppet/functions/strftime.rb +10 -2
  113. data/lib/puppet/functions/unique.rb +132 -0
  114. data/lib/puppet/functions/yaml_data.rb +4 -0
  115. data/lib/puppet/functions.rb +17 -45
  116. data/lib/puppet/generate/models/type/type.rb +6 -5
  117. data/lib/puppet/generate/templates/type/pcore.erb +1 -1
  118. data/lib/puppet/generate/type.rb +12 -12
  119. data/lib/puppet/graph/relationship_graph.rb +4 -1
  120. data/lib/puppet/graph/simple_graph.rb +45 -66
  121. data/lib/puppet/indirector/catalog/compiler.rb +61 -44
  122. data/lib/puppet/indirector/catalog/json.rb +18 -0
  123. data/lib/puppet/indirector/certificate/disabled_ca.rb +1 -1
  124. data/lib/puppet/indirector/certificate_request/ca.rb +3 -3
  125. data/lib/puppet/indirector/certificate_request/disabled_ca.rb +1 -1
  126. data/lib/puppet/indirector/certificate_revocation_list/disabled_ca.rb +1 -1
  127. data/lib/puppet/indirector/certificate_status/file.rb +6 -6
  128. data/lib/puppet/indirector/exec.rb +2 -2
  129. data/lib/puppet/indirector/face.rb +18 -18
  130. data/lib/puppet/indirector/file_bucket_file/file.rb +9 -8
  131. data/lib/puppet/indirector/file_metadata/http.rb +1 -1
  132. data/lib/puppet/indirector/file_server.rb +10 -2
  133. data/lib/puppet/indirector/hiera.rb +5 -3
  134. data/lib/puppet/indirector/indirection.rb +13 -15
  135. data/lib/puppet/indirector/json.rb +11 -12
  136. data/lib/puppet/indirector/key/disabled_ca.rb +1 -1
  137. data/lib/puppet/indirector/key/file.rb +2 -2
  138. data/lib/puppet/indirector/ldap.rb +6 -5
  139. data/lib/puppet/indirector/memory.rb +1 -1
  140. data/lib/puppet/indirector/msgpack.rb +8 -7
  141. data/lib/puppet/indirector/node/exec.rb +8 -6
  142. data/lib/puppet/indirector/node/ldap.rb +9 -7
  143. data/lib/puppet/indirector/node/plain.rb +2 -1
  144. data/lib/puppet/indirector/node/write_only_yaml.rb +6 -1
  145. data/lib/puppet/indirector/node/yaml.rb +0 -9
  146. data/lib/puppet/indirector/report/processor.rb +2 -2
  147. data/lib/puppet/indirector/report/rest.rb +13 -0
  148. data/lib/puppet/indirector/request.rb +9 -16
  149. data/lib/puppet/indirector/resource/ral.rb +1 -1
  150. data/lib/puppet/indirector/resource/validator.rb +1 -1
  151. data/lib/puppet/indirector/rest.rb +28 -10
  152. data/lib/puppet/indirector/ssl_file.rb +9 -9
  153. data/lib/puppet/indirector/terminus.rb +3 -3
  154. data/lib/puppet/indirector/yaml.rb +5 -5
  155. data/lib/puppet/indirector.rb +2 -2
  156. data/lib/puppet/info_service/class_information_service.rb +4 -5
  157. data/lib/puppet/interface/face_collection.rb +6 -1
  158. data/lib/puppet/interface.rb +2 -6
  159. data/lib/puppet/module.rb +12 -7
  160. data/lib/puppet/module_tool/applications/application.rb +8 -9
  161. data/lib/puppet/module_tool/applications/builder.rb +5 -6
  162. data/lib/puppet/module_tool/applications/checksummer.rb +2 -2
  163. data/lib/puppet/module_tool/applications/installer.rb +11 -10
  164. data/lib/puppet/module_tool/applications/searcher.rb +1 -1
  165. data/lib/puppet/module_tool/applications/uninstaller.rb +2 -1
  166. data/lib/puppet/module_tool/applications/unpacker.rb +3 -3
  167. data/lib/puppet/module_tool/applications/upgrader.rb +10 -9
  168. data/lib/puppet/module_tool/contents_description.rb +1 -1
  169. data/lib/puppet/module_tool/dependency.rb +0 -1
  170. data/lib/puppet/module_tool/errors/installer.rb +22 -22
  171. data/lib/puppet/module_tool/errors/shared.rb +44 -42
  172. data/lib/puppet/module_tool/errors/uninstaller.rb +13 -9
  173. data/lib/puppet/module_tool/errors/upgrader.rb +11 -11
  174. data/lib/puppet/module_tool/install_directory.rb +1 -1
  175. data/lib/puppet/module_tool/installed_modules.rb +3 -3
  176. data/lib/puppet/module_tool/local_tarball.rb +4 -4
  177. data/lib/puppet/module_tool/metadata.rb +16 -13
  178. data/lib/puppet/module_tool/shared_behaviors.rb +6 -6
  179. data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +1 -1
  180. data/lib/puppet/module_tool/skeleton/templates/generator/README.md.erb +10 -4
  181. data/lib/puppet/module_tool/skeleton/templates/generator/Rakefile +2 -2
  182. data/lib/puppet/module_tool/skeleton/templates/generator/examples/init.pp.erb +1 -1
  183. data/lib/puppet/module_tool/tar.rb +5 -4
  184. data/lib/puppet/module_tool.rb +7 -3
  185. data/lib/puppet/network/auth_config_parser.rb +12 -11
  186. data/lib/puppet/network/authconfig.rb +2 -2
  187. data/lib/puppet/network/authstore.rb +2 -2
  188. data/lib/puppet/network/format.rb +7 -7
  189. data/lib/puppet/network/format_handler.rb +12 -9
  190. data/lib/puppet/network/format_support.rb +11 -5
  191. data/lib/puppet/network/formats.rb +38 -27
  192. data/lib/puppet/network/http/api/indirected_routes.rb +72 -33
  193. data/lib/puppet/network/http/api/master/v3/environment.rb +33 -14
  194. data/lib/puppet/network/http/compression.rb +10 -7
  195. data/lib/puppet/network/http/connection.rb +19 -15
  196. data/lib/puppet/network/http/error.rb +14 -10
  197. data/lib/puppet/network/http/handler.rb +8 -4
  198. data/lib/puppet/network/http/issues.rb +1 -0
  199. data/lib/puppet/network/http/pool.rb +1 -1
  200. data/lib/puppet/network/http/rack/rest.rb +3 -2
  201. data/lib/puppet/network/http/rack.rb +2 -2
  202. data/lib/puppet/network/http/request.rb +34 -20
  203. data/lib/puppet/network/http/response.rb +13 -1
  204. data/lib/puppet/network/http/webrick/rest.rb +2 -2
  205. data/lib/puppet/network/http/webrick.rb +5 -5
  206. data/lib/puppet/network/rights.rb +6 -6
  207. data/lib/puppet/network/server.rb +2 -2
  208. data/lib/puppet/node/environment.rb +21 -4
  209. data/lib/puppet/node/facts.rb +0 -5
  210. data/lib/puppet/node.rb +25 -13
  211. data/lib/puppet/parameter/package_options.rb +1 -1
  212. data/lib/puppet/parameter/path.rb +3 -3
  213. data/lib/puppet/parameter/value_collection.rb +4 -4
  214. data/lib/puppet/parameter.rb +3 -28
  215. data/lib/puppet/parser/ast/node.rb +1 -1
  216. data/lib/puppet/parser/ast/pops_bridge.rb +3 -3
  217. data/lib/puppet/parser/ast/resource.rb +1 -1
  218. data/lib/puppet/parser/ast/resource_instance.rb +1 -1
  219. data/lib/puppet/parser/ast/resourceparam.rb +1 -1
  220. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +2 -2
  221. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +6 -9
  222. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +1 -1
  223. data/lib/puppet/parser/compiler.rb +44 -113
  224. data/lib/puppet/parser/e4_parser_adapter.rb +1 -2
  225. data/lib/puppet/parser/environment_compiler.rb +13 -15
  226. data/lib/puppet/parser/functions/contain.rb +1 -1
  227. data/lib/puppet/parser/functions/create_resources.rb +11 -3
  228. data/lib/puppet/parser/functions/file.rb +1 -1
  229. data/lib/puppet/parser/functions/generate.rb +5 -4
  230. data/lib/puppet/parser/functions/hiera_include.rb +1 -1
  231. data/lib/puppet/parser/functions/include.rb +2 -1
  232. data/lib/puppet/parser/functions/inline_template.rb +1 -1
  233. data/lib/puppet/parser/functions/new.rb +14 -1
  234. data/lib/puppet/parser/functions/require.rb +1 -1
  235. data/lib/puppet/parser/functions.rb +6 -6
  236. data/lib/puppet/parser/parser_factory.rb +0 -30
  237. data/lib/puppet/parser/relationship.rb +49 -20
  238. data/lib/puppet/parser/resource/param.rb +0 -3
  239. data/lib/puppet/parser/resource.rb +31 -30
  240. data/lib/puppet/parser/scope.rb +124 -170
  241. data/lib/puppet/parser/templatewrapper.rb +2 -2
  242. data/lib/puppet/parser/type_loader.rb +1 -1
  243. data/lib/puppet/plugins/configuration.rb +15 -67
  244. data/lib/puppet/plugins/syntax_checkers.rb +6 -11
  245. data/lib/puppet/pops/adaptable.rb +8 -3
  246. data/lib/puppet/pops/adapters.rb +33 -87
  247. data/lib/puppet/pops/evaluator/access_operator.rb +10 -39
  248. data/lib/puppet/pops/evaluator/collector_transformer.rb +9 -14
  249. data/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +2 -2
  250. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +3 -3
  251. data/lib/puppet/pops/evaluator/compare_operator.rb +7 -7
  252. data/lib/puppet/pops/evaluator/epp_evaluator.rb +1 -1
  253. data/lib/puppet/pops/evaluator/evaluator_impl.rb +45 -37
  254. data/lib/puppet/pops/evaluator/external_syntax_support.rb +2 -9
  255. data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +0 -2
  256. data/lib/puppet/pops/evaluator/puppet_proc.rb +1 -1
  257. data/lib/puppet/pops/evaluator/relationship_operator.rb +26 -9
  258. data/lib/puppet/pops/evaluator/runtime3_converter.rb +17 -1
  259. data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +0 -2
  260. data/lib/puppet/pops/evaluator/runtime3_support.rb +44 -30
  261. data/lib/puppet/pops/functions/dispatch.rb +1 -6
  262. data/lib/puppet/pops/issues.rb +189 -161
  263. data/lib/puppet/pops/loader/base_loader.rb +2 -2
  264. data/lib/puppet/pops/loader/gem_support.rb +2 -2
  265. data/lib/puppet/pops/loader/loader.rb +4 -0
  266. data/lib/puppet/pops/loader/module_loaders.rb +59 -10
  267. data/lib/puppet/pops/loader/predefined_loader.rb +1 -6
  268. data/lib/puppet/pops/loader/puppet_function_instantiator.rb +8 -8
  269. data/lib/puppet/pops/loader/puppet_resource_type_impl_instantiator.rb +9 -10
  270. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +3 -3
  271. data/lib/puppet/pops/loader/static_loader.rb +32 -63
  272. data/lib/puppet/pops/loader/type_definition_instantiator.rb +8 -8
  273. data/lib/puppet/pops/loader/typed_name.rb +6 -0
  274. data/lib/puppet/pops/loaders.rb +22 -20
  275. data/lib/puppet/pops/lookup/context.rb +1 -1
  276. data/lib/puppet/pops/lookup/data_provider.rb +3 -18
  277. data/lib/puppet/pops/lookup/environment_data_provider.rb +1 -1
  278. data/lib/puppet/pops/lookup/global_data_provider.rb +7 -10
  279. data/lib/puppet/pops/lookup/hiera_config.rb +13 -34
  280. data/lib/puppet/pops/lookup/interpolation.rb +9 -8
  281. data/lib/puppet/pops/lookup/invocation.rb +13 -3
  282. data/lib/puppet/pops/lookup/lookup_adapter.rb +30 -69
  283. data/lib/puppet/pops/lookup/lookup_key.rb +2 -2
  284. data/lib/puppet/pops/lookup/module_data_provider.rb +11 -3
  285. data/lib/puppet/pops/lookup/sub_lookup.rb +12 -10
  286. data/lib/puppet/pops/lookup.rb +7 -5
  287. data/lib/puppet/pops/merge_strategy.rb +16 -1
  288. data/lib/puppet/pops/model/ast.pp +692 -0
  289. data/lib/puppet/pops/model/ast.rb +4833 -0
  290. data/lib/puppet/pops/model/ast_transformer.rb +9 -10
  291. data/lib/puppet/pops/model/factory.rb +454 -527
  292. data/lib/puppet/pops/model/model_label_provider.rb +3 -2
  293. data/lib/puppet/pops/model/model_tree_dumper.rb +8 -7
  294. data/lib/puppet/pops/parser/egrammar.ra +66 -60
  295. data/lib/puppet/pops/parser/eparser.rb +1483 -1578
  296. data/lib/puppet/pops/parser/evaluating_parser.rb +5 -5
  297. data/lib/puppet/pops/parser/interpolation_support.rb +4 -4
  298. data/lib/puppet/pops/parser/lexer2.rb +27 -36
  299. data/lib/puppet/pops/parser/locator.rb +39 -16
  300. data/lib/puppet/pops/parser/parser_support.rb +25 -29
  301. data/lib/puppet/pops/pcore.rb +28 -21
  302. data/lib/puppet/pops/resource/param.rb +1 -1
  303. data/lib/puppet/pops/resource/resource_type_impl.rb +3 -3
  304. data/lib/puppet/pops/semantic_error.rb +12 -0
  305. data/lib/puppet/pops/serialization/abstract_writer.rb +9 -1
  306. data/lib/puppet/pops/serialization/deserializer.rb +8 -5
  307. data/lib/puppet/pops/serialization/from_data_converter.rb +181 -0
  308. data/lib/puppet/pops/serialization/json.rb +4 -4
  309. data/lib/puppet/pops/serialization/json_path.rb +126 -0
  310. data/lib/puppet/pops/serialization/object.rb +6 -6
  311. data/lib/puppet/pops/serialization/serializer.rb +32 -11
  312. data/lib/puppet/pops/serialization/to_data_converter.rb +292 -0
  313. data/lib/puppet/pops/serialization.rb +25 -1
  314. data/lib/puppet/pops/time/timespan.rb +11 -11
  315. data/lib/puppet/pops/time/timestamp.rb +8 -8
  316. data/lib/puppet/pops/types/annotatable.rb +7 -7
  317. data/lib/puppet/pops/types/annotation.rb +71 -0
  318. data/lib/puppet/pops/types/class_loader.rb +4 -6
  319. data/lib/puppet/pops/types/enumeration.rb +2 -2
  320. data/lib/puppet/pops/types/iterable.rb +2 -2
  321. data/lib/puppet/pops/types/p_binary_type.rb +7 -1
  322. data/lib/puppet/pops/types/p_meta_type.rb +16 -12
  323. data/lib/puppet/pops/types/p_object_type.rb +135 -96
  324. data/lib/puppet/pops/types/p_runtime_type.rb +1 -1
  325. data/lib/puppet/pops/types/p_sem_ver_range_type.rb +6 -2
  326. data/lib/puppet/pops/types/p_timespan_type.rb +55 -4
  327. data/lib/puppet/pops/types/p_type_set_type.rb +44 -36
  328. data/lib/puppet/pops/types/puppet_object.rb +13 -3
  329. data/lib/puppet/pops/types/ruby_generator.rb +291 -127
  330. data/lib/puppet/pops/types/ruby_method.rb +31 -0
  331. data/lib/puppet/pops/types/string_converter.rb +125 -59
  332. data/lib/puppet/pops/types/type_calculator.rb +55 -93
  333. data/lib/puppet/pops/types/type_factory.rb +34 -6
  334. data/lib/puppet/pops/types/type_formatter.rb +63 -15
  335. data/lib/puppet/pops/types/type_mismatch_describer.rb +8 -7
  336. data/lib/puppet/pops/types/type_parser.rb +28 -13
  337. data/lib/puppet/pops/types/type_set_reference.rb +7 -7
  338. data/lib/puppet/pops/types/types.rb +186 -186
  339. data/lib/puppet/pops/utils.rb +0 -24
  340. data/lib/puppet/pops/validation/checker4_0.rb +89 -75
  341. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -1
  342. data/lib/puppet/pops/validation.rb +3 -9
  343. data/lib/puppet/pops/visitor.rb +21 -0
  344. data/lib/puppet/pops.rb +7 -37
  345. data/lib/puppet/property/ensure.rb +3 -3
  346. data/lib/puppet/property/list.rb +1 -10
  347. data/lib/puppet/property.rb +17 -14
  348. data/lib/puppet/provider/aixobject.rb +7 -7
  349. data/lib/puppet/provider/augeas/augeas.rb +37 -37
  350. data/lib/puppet/provider/command.rb +1 -1
  351. data/lib/puppet/provider/cron/crontab.rb +2 -2
  352. data/lib/puppet/provider/exec/posix.rb +4 -4
  353. data/lib/puppet/provider/exec/windows.rb +3 -3
  354. data/lib/puppet/provider/exec.rb +4 -4
  355. data/lib/puppet/provider/file/posix.rb +5 -5
  356. data/lib/puppet/provider/file/windows.rb +4 -4
  357. data/lib/puppet/provider/group/aix.rb +2 -2
  358. data/lib/puppet/provider/group/groupadd.rb +2 -2
  359. data/lib/puppet/provider/group/pw.rb +1 -1
  360. data/lib/puppet/provider/host/parsed.rb +1 -1
  361. data/lib/puppet/provider/macauthorization/macauthorization.rb +9 -9
  362. data/lib/puppet/provider/maillist/mailman.rb +2 -2
  363. data/lib/puppet/provider/mcx/mcxcontent.rb +3 -3
  364. data/lib/puppet/provider/mount/parsed.rb +10 -8
  365. data/lib/puppet/provider/mount.rb +2 -1
  366. data/lib/puppet/provider/naginator.rb +1 -1
  367. data/lib/puppet/provider/nameservice/directoryservice.rb +11 -11
  368. data/lib/puppet/provider/nameservice.rb +18 -10
  369. data/lib/puppet/provider/network_device.rb +2 -1
  370. data/lib/puppet/provider/package/aix.rb +5 -5
  371. data/lib/puppet/provider/package/appdmg.rb +2 -2
  372. data/lib/puppet/provider/package/apple.rb +1 -1
  373. data/lib/puppet/provider/package/apt.rb +4 -4
  374. data/lib/puppet/provider/package/aptitude.rb +1 -1
  375. data/lib/puppet/provider/package/aptrpm.rb +2 -2
  376. data/lib/puppet/provider/package/blastwave.rb +4 -4
  377. data/lib/puppet/provider/package/dpkg.rb +3 -3
  378. data/lib/puppet/provider/package/fink.rb +3 -3
  379. data/lib/puppet/provider/package/freebsd.rb +1 -1
  380. data/lib/puppet/provider/package/gem.rb +6 -6
  381. data/lib/puppet/provider/package/hpux.rb +1 -1
  382. data/lib/puppet/provider/package/nim.rb +15 -12
  383. data/lib/puppet/provider/package/openbsd.rb +4 -4
  384. data/lib/puppet/provider/package/opkg.rb +1 -1
  385. data/lib/puppet/provider/package/pacman.rb +9 -9
  386. data/lib/puppet/provider/package/pkg.rb +9 -9
  387. data/lib/puppet/provider/package/pkgdmg.rb +4 -4
  388. data/lib/puppet/provider/package/pkgin.rb +3 -3
  389. data/lib/puppet/provider/package/pkgng.rb +1 -1
  390. data/lib/puppet/provider/package/pkgutil.rb +6 -6
  391. data/lib/puppet/provider/package/portage.rb +167 -59
  392. data/lib/puppet/provider/package/ports.rb +3 -3
  393. data/lib/puppet/provider/package/portupgrade.rb +4 -4
  394. data/lib/puppet/provider/package/rpm.rb +7 -4
  395. data/lib/puppet/provider/package/rug.rb +1 -1
  396. data/lib/puppet/provider/package/sun.rb +3 -2
  397. data/lib/puppet/provider/package/up2date.rb +1 -1
  398. data/lib/puppet/provider/package/urpmi.rb +1 -1
  399. data/lib/puppet/provider/package/windows/package.rb +3 -3
  400. data/lib/puppet/provider/package/windows.rb +4 -4
  401. data/lib/puppet/provider/package/yum.rb +13 -13
  402. data/lib/puppet/provider/package/zypper.rb +1 -1
  403. data/lib/puppet/provider/parsedfile.rb +1 -1
  404. data/lib/puppet/provider/service/upstart.rb +0 -2
  405. data/lib/puppet/provider/user/aix.rb +1 -1
  406. data/lib/puppet/provider/user/ldap.rb +1 -1
  407. data/lib/puppet/provider/user/useradd.rb +1 -1
  408. data/lib/puppet/provider/yumrepo/inifile.rb +3 -3
  409. data/lib/puppet/provider.rb +2 -0
  410. data/lib/puppet/reference/configuration.rb +1 -1
  411. data/lib/puppet/reference/indirection.rb +1 -1
  412. data/lib/puppet/reference/metaparameter.rb +1 -1
  413. data/lib/puppet/reference/providers.rb +6 -6
  414. data/lib/puppet/reference/type.rb +2 -2
  415. data/lib/puppet/relationship.rb +7 -9
  416. data/lib/puppet/reports/http.rb +6 -2
  417. data/lib/puppet/resource/capability_finder.rb +2 -2
  418. data/lib/puppet/resource/catalog.rb +26 -41
  419. data/lib/puppet/resource/status.rb +13 -24
  420. data/lib/puppet/resource/type.rb +13 -61
  421. data/lib/puppet/resource/type_collection.rb +30 -23
  422. data/lib/puppet/resource.rb +85 -108
  423. data/lib/puppet/settings/array_setting.rb +1 -1
  424. data/lib/puppet/settings/autosign_setting.rb +1 -1
  425. data/lib/puppet/settings/boolean_setting.rb +1 -1
  426. data/lib/puppet/settings/config_file.rb +2 -2
  427. data/lib/puppet/settings/duration_setting.rb +1 -1
  428. data/lib/puppet/settings/enum_setting.rb +1 -1
  429. data/lib/puppet/settings/environment_conf.rb +2 -2
  430. data/lib/puppet/settings/file_setting.rb +2 -2
  431. data/lib/puppet/settings/priority_setting.rb +1 -1
  432. data/lib/puppet/settings/server_list_setting.rb +1 -1
  433. data/lib/puppet/settings/symbolic_enum_setting.rb +1 -1
  434. data/lib/puppet/settings/terminus_setting.rb +1 -1
  435. data/lib/puppet/settings/ttl_setting.rb +2 -2
  436. data/lib/puppet/settings.rb +1 -1
  437. data/lib/puppet/ssl/base.rb +2 -2
  438. data/lib/puppet/ssl/certificate_authority/interface.rb +13 -13
  439. data/lib/puppet/ssl/certificate_authority.rb +21 -21
  440. data/lib/puppet/ssl/certificate_factory.rb +2 -2
  441. data/lib/puppet/ssl/certificate_request.rb +14 -14
  442. data/lib/puppet/ssl/certificate_request_attributes.rb +3 -3
  443. data/lib/puppet/ssl/certificate_revocation_list.rb +3 -3
  444. data/lib/puppet/ssl/host.rb +29 -29
  445. data/lib/puppet/ssl/inventory.rb +1 -1
  446. data/lib/puppet/ssl/key.rb +1 -1
  447. data/lib/puppet/ssl/oids.rb +5 -5
  448. data/lib/puppet/ssl/validator/default_validator.rb +3 -4
  449. data/lib/puppet/syntax_checkers/base64.rb +7 -7
  450. data/lib/puppet/syntax_checkers/json.rb +5 -5
  451. data/lib/puppet/test/test_helper.rb +0 -4
  452. data/lib/puppet/transaction/additional_resource_generator.rb +4 -3
  453. data/lib/puppet/transaction/event.rb +19 -8
  454. data/lib/puppet/transaction/event_manager.rb +6 -6
  455. data/lib/puppet/transaction/persistence.rb +6 -6
  456. data/lib/puppet/transaction/report.rb +35 -41
  457. data/lib/puppet/transaction/resource_harness.rb +14 -12
  458. data/lib/puppet/transaction.rb +38 -20
  459. data/lib/puppet/type/augeas.rb +2 -2
  460. data/lib/puppet/type/cron.rb +14 -31
  461. data/lib/puppet/type/exec.rb +48 -42
  462. data/lib/puppet/type/file/content.rb +1 -1
  463. data/lib/puppet/type/file/group.rb +3 -3
  464. data/lib/puppet/type/file/mode.rb +10 -6
  465. data/lib/puppet/type/file/owner.rb +3 -3
  466. data/lib/puppet/type/file/selcontext.rb +18 -1
  467. data/lib/puppet/type/file/source.rb +14 -4
  468. data/lib/puppet/type/file.rb +21 -22
  469. data/lib/puppet/type/filebucket.rb +3 -8
  470. data/lib/puppet/type/group.rb +2 -2
  471. data/lib/puppet/type/host.rb +6 -6
  472. data/lib/puppet/type/interface.rb +1 -1
  473. data/lib/puppet/type/k5login.rb +1 -1
  474. data/lib/puppet/type/macauthorization.rb +1 -1
  475. data/lib/puppet/type/mailalias.rb +2 -18
  476. data/lib/puppet/type/maillist.rb +1 -1
  477. data/lib/puppet/type/mount.rb +8 -8
  478. data/lib/puppet/type/notify.rb +2 -0
  479. data/lib/puppet/type/package.rb +5 -5
  480. data/lib/puppet/type/resources.rb +6 -6
  481. data/lib/puppet/type/schedule.rb +9 -9
  482. data/lib/puppet/type/scheduled_task.rb +4 -4
  483. data/lib/puppet/type/service.rb +1 -1
  484. data/lib/puppet/type/ssh_authorized_key.rb +3 -19
  485. data/lib/puppet/type/sshkey.rb +4 -4
  486. data/lib/puppet/type/tidy.rb +15 -11
  487. data/lib/puppet/type/user.rb +29 -27
  488. data/lib/puppet/type/yumrepo.rb +8 -8
  489. data/lib/puppet/type/zone.rb +7 -7
  490. data/lib/puppet/type/zpool.rb +3 -3
  491. data/lib/puppet/type.rb +0 -6
  492. data/lib/puppet/util/at_fork/noop.rb +18 -0
  493. data/lib/puppet/util/at_fork/solaris.rb +158 -0
  494. data/lib/puppet/util/at_fork.rb +35 -0
  495. data/lib/puppet/util/autoload.rb +2 -2
  496. data/lib/puppet/util/backups.rb +6 -6
  497. data/lib/puppet/util/character_encoding.rb +77 -74
  498. data/lib/puppet/util/classgen.rb +4 -4
  499. data/lib/puppet/util/command_line/puppet_option_parser.rb +3 -3
  500. data/lib/puppet/util/command_line/trollop.rb +31 -31
  501. data/lib/puppet/util/command_line.rb +4 -4
  502. data/lib/puppet/util/diff.rb +1 -1
  503. data/lib/puppet/util/errors.rb +4 -4
  504. data/lib/puppet/util/execution.rb +8 -8
  505. data/lib/puppet/util/feature.rb +5 -5
  506. data/lib/puppet/util/fileparsing.rb +8 -8
  507. data/lib/puppet/util/filetype.rb +15 -15
  508. data/lib/puppet/util/http_proxy.rb +1 -1
  509. data/lib/puppet/util/inifile.rb +4 -4
  510. data/lib/puppet/util/instance_loader.rb +1 -1
  511. data/lib/puppet/util/json_lockfile.rb +4 -4
  512. data/lib/puppet/util/ldap/connection.rb +2 -2
  513. data/lib/puppet/util/ldap/manager.rb +2 -2
  514. data/lib/puppet/util/limits.rb +1 -1
  515. data/lib/puppet/util/log/destinations.rb +10 -16
  516. data/lib/puppet/util/log.rb +23 -16
  517. data/lib/puppet/util/logging.rb +11 -8
  518. data/lib/puppet/util/metric.rb +9 -6
  519. data/lib/puppet/util/monkey_patches.rb +30 -67
  520. data/lib/puppet/util/network_device/cisco/device.rb +7 -7
  521. data/lib/puppet/util/network_device/cisco/interface.rb +1 -1
  522. data/lib/puppet/util/network_device/config.rb +6 -6
  523. data/lib/puppet/util/network_device/transport/ssh.rb +6 -6
  524. data/lib/puppet/util/network_device.rb +1 -1
  525. data/lib/puppet/util/plist.rb +4 -2
  526. data/lib/puppet/util/posix.rb +5 -5
  527. data/lib/puppet/util/profiler/wall_clock.rb +1 -1
  528. data/lib/puppet/util/provider_features.rb +1 -1
  529. data/lib/puppet/util/psych_support.rb +3 -11
  530. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +1 -1
  531. data/lib/puppet/util/rdoc.rb +4 -4
  532. data/lib/puppet/util/reference.rb +5 -5
  533. data/lib/puppet/util/resource_template.rb +1 -1
  534. data/lib/puppet/util/retry_action.rb +2 -2
  535. data/lib/puppet/util/selinux.rb +54 -12
  536. data/lib/puppet/util/splayer.rb +1 -1
  537. data/lib/puppet/util/storage.rb +5 -5
  538. data/lib/puppet/util/suidmanager.rb +4 -4
  539. data/lib/puppet/util/symbolic_file_mode.rb +9 -9
  540. data/lib/puppet/util/tag_set.rb +1 -4
  541. data/lib/puppet/util/tagging.rb +2 -2
  542. data/lib/puppet/util/windows/adsi.rb +14 -14
  543. data/lib/puppet/util/windows/api_types.rb +5 -2
  544. data/lib/puppet/util/windows/com.rb +4 -4
  545. data/lib/puppet/util/windows/error.rb +2 -2
  546. data/lib/puppet/util/windows/eventlog.rb +192 -0
  547. data/lib/puppet/util/windows/file.rb +4 -4
  548. data/lib/puppet/util/windows/principal.rb +6 -5
  549. data/lib/puppet/util/windows/process.rb +5 -5
  550. data/lib/puppet/util/windows/registry.rb +11 -11
  551. data/lib/puppet/util/windows/root_certs.rb +1 -1
  552. data/lib/puppet/util/windows/security.rb +14 -14
  553. data/lib/puppet/util/windows/sid.rb +6 -6
  554. data/lib/puppet/util/windows/taskscheduler.rb +62 -62
  555. data/lib/puppet/util/windows/user.rb +6 -6
  556. data/lib/puppet/util/windows.rb +2 -0
  557. data/lib/puppet/util.rb +138 -14
  558. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/gem_version.rb +1 -1
  559. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/version.rb +122 -114
  560. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/version_range.rb +678 -342
  561. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet.rb +2 -10
  562. data/lib/puppet/version.rb +1 -1
  563. data/lib/puppet.rb +47 -33
  564. data/locales/config.yaml +1 -1
  565. data/locales/puppet.pot +7931 -29
  566. data/man/man5/puppet.conf.5 +0 -22
  567. data/spec/fixtures/unit/data_providers/environments/production/modules/abc/metadata.json +9 -0
  568. data/spec/fixtures/unit/data_providers/environments/production/modules/xyz/metadata.json +9 -0
  569. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/abc/metadata.json +9 -0
  570. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/bad_data/metadata.json +9 -0
  571. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/bca/metadata.json +9 -0
  572. data/spec/integration/application/apply_spec.rb +29 -22
  573. data/spec/integration/configurer_spec.rb +1 -1
  574. data/spec/integration/defaults_spec.rb +2 -2
  575. data/spec/integration/faces/documentation_spec.rb +2 -2
  576. data/spec/integration/indirector/file_content/file_server_spec.rb +1 -0
  577. data/spec/integration/indirector/file_metadata/file_server_spec.rb +1 -0
  578. data/spec/integration/parser/catalog_spec.rb +1 -1
  579. data/spec/integration/parser/class_spec.rb +6 -6
  580. data/spec/integration/parser/compiler_spec.rb +184 -142
  581. data/spec/integration/parser/dynamic_scoping_spec.rb +0 -1
  582. data/spec/integration/parser/pcore_resource_spec.rb +15 -0
  583. data/spec/integration/parser/scope_spec.rb +53 -4
  584. data/spec/integration/resource/catalog_spec.rb +0 -4
  585. data/spec/integration/resource/type_collection_spec.rb +6 -0
  586. data/spec/integration/transaction/report_spec.rb +2 -2
  587. data/spec/integration/transaction_spec.rb +2 -2
  588. data/spec/integration/type/file_spec.rb +29 -0
  589. data/spec/integration/type/package_spec.rb +7 -1
  590. data/spec/lib/matchers/json.rb +3 -3
  591. data/spec/lib/puppet/face/1.0.0/huzzah.rb +1 -1
  592. data/spec/lib/puppet/face/basetest.rb +1 -1
  593. data/spec/lib/puppet/face/huzzah.rb +1 -1
  594. data/spec/lib/puppet/face/version_matching.rb +1 -1
  595. data/spec/lib/puppet/indirector_testing.rb +4 -0
  596. data/spec/lib/puppet_spec/character_encoding.rb +12 -0
  597. data/spec/lib/puppet_spec/compiler.rb +8 -1
  598. data/spec/lib/puppet_spec/modules.rb +2 -2
  599. data/spec/lib/puppet_spec/network.rb +10 -6
  600. data/spec/shared_contexts/types_setup.rb +52 -15
  601. data/spec/shared_examples/rhel_package_provider.rb +10 -11
  602. data/spec/spec_helper.rb +0 -11
  603. data/spec/unit/agent_spec.rb +12 -1
  604. data/spec/unit/application/agent_spec.rb +7 -0
  605. data/spec/unit/application/apply_spec.rb +28 -13
  606. data/spec/unit/application/describe_spec.rb +19 -0
  607. data/spec/unit/application/device_spec.rb +41 -2
  608. data/spec/unit/application/face_base_spec.rb +6 -6
  609. data/spec/unit/application/master_spec.rb +22 -6
  610. data/spec/unit/application/resource_spec.rb +39 -1
  611. data/spec/unit/application_spec.rb +0 -6
  612. data/spec/unit/capability_spec.rb +2 -6
  613. data/spec/unit/configurer/fact_handler_spec.rb +76 -20
  614. data/spec/unit/configurer/plugin_handler_spec.rb +13 -19
  615. data/spec/unit/configurer_spec.rb +36 -19
  616. data/spec/unit/defaults_spec.rb +0 -30
  617. data/spec/unit/etc_spec.rb +361 -153
  618. data/spec/unit/face/module/list_spec.rb +60 -0
  619. data/spec/unit/file_bucket/file_spec.rb +3 -3
  620. data/spec/unit/file_serving/http_metadata_spec.rb +1 -1
  621. data/spec/unit/file_serving/metadata_spec.rb +35 -9
  622. data/spec/unit/forge/forge_spec.rb +112 -0
  623. data/spec/unit/forge/repository_spec.rb +4 -4
  624. data/spec/unit/functions/annotate_spec.rb +175 -0
  625. data/spec/unit/functions/break_spec.rb +29 -1
  626. data/spec/unit/functions/call_spec.rb +77 -0
  627. data/spec/unit/functions/contain_spec.rb +1 -1
  628. data/spec/unit/functions/lookup_fixture_spec.rb +1 -6
  629. data/spec/unit/functions/lookup_spec.rb +208 -3
  630. data/spec/unit/functions/new_spec.rb +1 -1
  631. data/spec/unit/functions/unique_spec.rb +111 -0
  632. data/spec/unit/functions4_spec.rb +2 -43
  633. data/spec/unit/graph/simple_graph_spec.rb +58 -55
  634. data/spec/unit/indirector/catalog/compiler_spec.rb +213 -153
  635. data/spec/unit/indirector/catalog/json_spec.rb +50 -1
  636. data/spec/unit/indirector/facts/facter_spec.rb +1 -2
  637. data/spec/unit/indirector/file_bucket_file/file_spec.rb +1 -1
  638. data/spec/unit/indirector/file_server_spec.rb +17 -2
  639. data/spec/unit/indirector/indirection_spec.rb +1 -36
  640. data/spec/unit/indirector/json_spec.rb +27 -6
  641. data/spec/unit/indirector/node/exec_spec.rb +12 -12
  642. data/spec/unit/indirector/node/ldap_spec.rb +29 -8
  643. data/spec/unit/indirector/node/plain_spec.rb +16 -6
  644. data/spec/unit/indirector/node/write_only_yaml_spec.rb +12 -0
  645. data/spec/unit/indirector/report/processor_spec.rb +2 -2
  646. data/spec/unit/indirector/report/rest_spec.rb +29 -3
  647. data/spec/unit/indirector/request_spec.rb +15 -4
  648. data/spec/unit/indirector/rest_spec.rb +57 -15
  649. data/spec/unit/interface/face_collection_spec.rb +7 -7
  650. data/spec/unit/module_spec.rb +10 -2
  651. data/spec/unit/module_tool/applications/installer_spec.rb +0 -1
  652. data/spec/unit/module_tool/applications/upgrader_spec.rb +0 -1
  653. data/spec/unit/module_tool/tar_spec.rb +16 -10
  654. data/spec/unit/network/format_handler_spec.rb +11 -11
  655. data/spec/unit/network/format_spec.rb +9 -0
  656. data/spec/unit/network/formats_spec.rb +322 -138
  657. data/spec/unit/network/http/api/indirected_routes_spec.rb +65 -55
  658. data/spec/unit/network/http/api/master/v3/environment_spec.rb +128 -2
  659. data/spec/unit/network/http/api/master/v3_spec.rb +1 -1
  660. data/spec/unit/network/http/api_spec.rb +1 -1
  661. data/spec/unit/network/http/compression_spec.rb +105 -88
  662. data/spec/unit/network/http/error_spec.rb +1 -2
  663. data/spec/unit/network/http/handler_spec.rb +8 -12
  664. data/spec/unit/network/http/rack/rest_spec.rb +3 -3
  665. data/spec/unit/network/http/request_spec.rb +110 -0
  666. data/spec/unit/network/http/response_spec.rb +108 -0
  667. data/spec/unit/node/facts_spec.rb +13 -13
  668. data/spec/unit/node_spec.rb +33 -10
  669. data/spec/unit/parameter_spec.rb +73 -5
  670. data/spec/unit/parser/compiler_spec.rb +1 -1
  671. data/spec/unit/parser/environment_compiler_spec.rb +0 -2
  672. data/spec/unit/parser/functions/create_resources_spec.rb +47 -6
  673. data/spec/unit/parser/resource_spec.rb +86 -24
  674. data/spec/unit/parser/scope_spec.rb +10 -79
  675. data/spec/unit/pops/benchmark_spec.rb +8 -26
  676. data/spec/unit/pops/containment_spec.rb +0 -26
  677. data/spec/unit/pops/evaluator/access_ops_spec.rb +103 -103
  678. data/spec/unit/pops/evaluator/arithmetic_ops_spec.rb +59 -6
  679. data/spec/unit/pops/evaluator/basic_expressions_spec.rb +5 -5
  680. data/spec/unit/pops/evaluator/comparison_ops_spec.rb +26 -26
  681. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +59 -7
  682. data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +7 -7
  683. data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +36 -1
  684. data/spec/unit/pops/evaluator/string_interpolation_spec.rb +10 -10
  685. data/spec/unit/pops/evaluator/variables_spec.rb +1 -1
  686. data/spec/unit/pops/factory_rspec_helper.rb +0 -4
  687. data/spec/unit/pops/factory_spec.rb +83 -83
  688. data/spec/unit/pops/loaders/loaders_spec.rb +209 -79
  689. data/spec/unit/pops/loaders/static_loader_spec.rb +2 -6
  690. data/spec/unit/pops/lookup/interpolation_spec.rb +50 -10
  691. data/spec/unit/pops/lookup/lookup_spec.rb +32 -0
  692. data/spec/unit/pops/model/model_spec.rb +10 -10
  693. data/spec/unit/pops/parser/epp_parser_spec.rb +1 -1
  694. data/spec/unit/pops/parser/lexer2_spec.rb +32 -29
  695. data/spec/unit/pops/parser/{source_pos_adapter_spec.rb → locator_spec.rb} +9 -11
  696. data/spec/unit/pops/parser/parse_application_spec.rb +0 -3
  697. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +4 -4
  698. data/spec/unit/pops/parser/parse_capabilities_spec.rb +0 -3
  699. data/spec/unit/pops/parser/parse_containers_spec.rb +17 -19
  700. data/spec/unit/pops/parser/parse_site_spec.rb +0 -3
  701. data/spec/unit/pops/parser/parser_spec.rb +8 -10
  702. data/spec/unit/pops/resource/resource_type_impl_spec.rb +1 -3
  703. data/spec/unit/pops/serialization/serialization_spec.rb +117 -5
  704. data/spec/unit/pops/serialization/to_from_hr_spec.rb +494 -0
  705. data/spec/unit/pops/time/timestamp_spec.rb +13 -0
  706. data/spec/unit/pops/types/iterable_spec.rb +1 -1
  707. data/spec/unit/pops/types/p_object_type_spec.rb +100 -14
  708. data/spec/unit/pops/types/p_sem_ver_type_spec.rb +12 -17
  709. data/spec/unit/pops/types/p_timestamp_type_spec.rb +8 -8
  710. data/spec/unit/pops/types/p_type_set_type_spec.rb +4 -12
  711. data/spec/unit/pops/types/ruby_generator_spec.rb +57 -20
  712. data/spec/unit/pops/types/string_converter_spec.rb +119 -16
  713. data/spec/unit/pops/types/type_acceptor_spec.rb +2 -2
  714. data/spec/unit/pops/types/type_calculator_spec.rb +211 -87
  715. data/spec/unit/pops/types/type_factory_spec.rb +9 -9
  716. data/spec/unit/pops/types/type_formatter_spec.rb +32 -19
  717. data/spec/unit/pops/types/type_parser_spec.rb +6 -6
  718. data/spec/unit/pops/types/types_spec.rb +53 -2
  719. data/spec/unit/pops/validator/validator_spec.rb +53 -61
  720. data/spec/unit/pops/visitor_spec.rb +1 -1
  721. data/spec/unit/property/list_spec.rb +2 -2
  722. data/spec/unit/provider/augeas/augeas_spec.rb +1 -1
  723. data/spec/unit/provider/nameservice/directoryservice_spec.rb +2 -0
  724. data/spec/unit/provider/nameservice_spec.rb +113 -3
  725. data/spec/unit/provider/package/portage_spec.rb +103 -17
  726. data/spec/unit/provider/package/rpm_spec.rb +14 -1
  727. data/spec/unit/provider/user/directoryservice_spec.rb +7 -7
  728. data/spec/unit/provider/user/useradd_spec.rb +13 -0
  729. data/spec/unit/puppet_spec.rb +2 -3
  730. data/spec/unit/relationship_spec.rb +15 -36
  731. data/spec/unit/reports/http_spec.rb +11 -8
  732. data/spec/unit/resource/catalog_spec.rb +81 -53
  733. data/spec/unit/resource/status_spec.rb +114 -103
  734. data/spec/unit/resource/type_collection_spec.rb +5 -5
  735. data/spec/unit/resource/type_spec.rb +4 -71
  736. data/spec/unit/resource_spec.rb +30 -34
  737. data/spec/unit/settings_spec.rb +4 -2
  738. data/spec/unit/ssl/host_spec.rb +34 -34
  739. data/spec/unit/status_spec.rb +7 -7
  740. data/spec/unit/transaction/event_spec.rb +18 -15
  741. data/spec/unit/transaction/report_spec.rb +100 -62
  742. data/spec/unit/transaction/resource_harness_spec.rb +3 -3
  743. data/spec/unit/transaction_spec.rb +53 -8
  744. data/spec/unit/type/file/group_spec.rb +2 -2
  745. data/spec/unit/type/file/mode_spec.rb +9 -9
  746. data/spec/unit/type/file/owner_spec.rb +2 -2
  747. data/spec/unit/type/file/selinux_spec.rb +2 -0
  748. data/spec/unit/type/file/source_spec.rb +13 -0
  749. data/spec/unit/type/file_spec.rb +46 -0
  750. data/spec/unit/type/ssh_authorized_key_spec.rb +2 -2
  751. data/spec/unit/type/user_spec.rb +2 -4
  752. data/spec/unit/util/at_fork_spec.rb +150 -0
  753. data/spec/unit/util/character_encoding_spec.rb +193 -52
  754. data/spec/unit/util/execution_spec.rb +31 -2
  755. data/spec/unit/util/log/destinations_spec.rb +5 -6
  756. data/spec/unit/util/log_spec.rb +62 -17
  757. data/spec/unit/util/metric_spec.rb +9 -2
  758. data/spec/unit/util/monkey_patches_spec.rb +6 -188
  759. data/spec/unit/util/run_mode_spec.rb +17 -10
  760. data/spec/unit/util/tag_set_spec.rb +2 -2
  761. data/spec/unit/util/tagging_spec.rb +55 -0
  762. data/spec/unit/util/windows/eventlog_spec.rb +123 -0
  763. data/spec/unit/util_spec.rb +237 -2
  764. data/tasks/benchmark.rake +3 -3
  765. data/tasks/cfpropertylist.rake +1 -1
  766. data/tasks/generate_ast_model.rake +78 -0
  767. metadata +3386 -3635
  768. checksums.yaml +0 -7
  769. data/bin/extlookup2hiera +0 -56
  770. data/ext/emacs/puppet-mode-init.el +0 -6
  771. data/ext/emacs/puppet-mode.el +0 -433
  772. data/ext/vim/README +0 -3
  773. data/ext/vim/ftdetect/puppet.vim +0 -2
  774. data/ext/vim/ftplugin/puppet.vim +0 -94
  775. data/ext/vim/indent/puppet.vim +0 -76
  776. data/ext/vim/syntax/puppet.vim +0 -115
  777. data/lib/puppet/application/file.rb +0 -4
  778. data/lib/puppet/application/inspect.rb +0 -182
  779. data/lib/puppet/application/resource_type.rb +0 -7
  780. data/lib/puppet/data_providers/data_adapter.rb +0 -37
  781. data/lib/puppet/data_providers/data_function_support.rb +0 -32
  782. data/lib/puppet/data_providers/function_env_data_provider.rb +0 -26
  783. data/lib/puppet/data_providers/function_module_data_provider.rb +0 -24
  784. data/lib/puppet/data_providers/hiera_config.rb +0 -151
  785. data/lib/puppet/data_providers/hiera_env_data_provider.rb +0 -25
  786. data/lib/puppet/data_providers/hiera_interpolate.rb +0 -21
  787. data/lib/puppet/data_providers/hiera_module_data_provider.rb +0 -30
  788. data/lib/puppet/data_providers/hiera_support.rb +0 -42
  789. data/lib/puppet/data_providers/json_data_provider_factory.rb +0 -38
  790. data/lib/puppet/data_providers/yaml_data_provider_factory.rb +0 -40
  791. data/lib/puppet/data_providers.rb +0 -34
  792. data/lib/puppet/face/file/download.rb +0 -56
  793. data/lib/puppet/face/file/store.rb +0 -21
  794. data/lib/puppet/face/file.rb +0 -50
  795. data/lib/puppet/face/resource_type.rb +0 -84
  796. data/lib/puppet/feature/cfacter.rb +0 -15
  797. data/lib/puppet/feature/external_facts.rb +0 -5
  798. data/lib/puppet/indirector/catalog/static_compiler.rb +0 -232
  799. data/lib/puppet/indirector/resource_type/parser.rb +0 -108
  800. data/lib/puppet/indirector/resource_type/rest.rb +0 -7
  801. data/lib/puppet/indirector/resource_type.rb +0 -5
  802. data/lib/puppet/parser/yaml_trimmer.rb +0 -7
  803. data/lib/puppet/plugins/binding_schemes.rb +0 -140
  804. data/lib/puppet/plugins/data_providers/data_provider.rb +0 -406
  805. data/lib/puppet/plugins/data_providers/registry.rb +0 -51
  806. data/lib/puppet/plugins/data_providers.rb +0 -45
  807. data/lib/puppet/pops/binder/binder.rb +0 -398
  808. data/lib/puppet/pops/binder/binder_issues.rb +0 -124
  809. data/lib/puppet/pops/binder/bindings_checker.rb +0 -201
  810. data/lib/puppet/pops/binder/bindings_composer.rb +0 -181
  811. data/lib/puppet/pops/binder/bindings_factory.rb +0 -813
  812. data/lib/puppet/pops/binder/bindings_label_provider.rb +0 -45
  813. data/lib/puppet/pops/binder/bindings_loader.rb +0 -87
  814. data/lib/puppet/pops/binder/bindings_model.rb +0 -70
  815. data/lib/puppet/pops/binder/bindings_model_dumper.rb +0 -215
  816. data/lib/puppet/pops/binder/bindings_model_meta.rb +0 -215
  817. data/lib/puppet/pops/binder/bindings_validator_factory.rb +0 -28
  818. data/lib/puppet/pops/binder/config/binder_config.rb +0 -107
  819. data/lib/puppet/pops/binder/config/binder_config_checker.rb +0 -142
  820. data/lib/puppet/pops/binder/config/diagnostic_producer.rb +0 -36
  821. data/lib/puppet/pops/binder/config/issues.rb +0 -90
  822. data/lib/puppet/pops/binder/injector.rb +0 -771
  823. data/lib/puppet/pops/binder/injector_entry.rb +0 -57
  824. data/lib/puppet/pops/binder/key_factory.rb +0 -65
  825. data/lib/puppet/pops/binder/producers.rb +0 -831
  826. data/lib/puppet/pops/binder/scheme_handler/confdir_scheme.rb +0 -34
  827. data/lib/puppet/pops/binder/scheme_handler/module_scheme.rb +0 -143
  828. data/lib/puppet/pops/binder/scheme_handler/symbolic_scheme.rb +0 -53
  829. data/lib/puppet/pops/binder/system_bindings.rb +0 -60
  830. data/lib/puppet/pops/containment.rb +0 -104
  831. data/lib/puppet/pops/model/model.rb +0 -131
  832. data/lib/puppet/pops/model/model_meta.rb +0 -629
  833. data/lib/puppet/pops/serialization/rgen.rb +0 -152
  834. data/lib/puppet/vendor/load_rgen.rb +0 -2
  835. data/lib/puppet/vendor/rgen/CHANGELOG +0 -197
  836. data/lib/puppet/vendor/rgen/MIT-LICENSE +0 -20
  837. data/lib/puppet/vendor/rgen/PUPPET_README.md +0 -6
  838. data/lib/puppet/vendor/rgen/README.rdoc +0 -78
  839. data/lib/puppet/vendor/rgen/Rakefile +0 -41
  840. data/lib/puppet/vendor/rgen/TODO +0 -41
  841. data/lib/puppet/vendor/rgen/anounce.txt +0 -61
  842. data/lib/puppet/vendor/rgen/design_rationale.txt +0 -71
  843. data/lib/puppet/vendor/rgen/lib/ea_support/ea_support.rb +0 -54
  844. data/lib/puppet/vendor/rgen/lib/ea_support/id_store.rb +0 -32
  845. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel.rb +0 -562
  846. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel_ext.rb +0 -45
  847. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel_generator.rb +0 -43
  848. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_to_uml13.rb +0 -103
  849. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_to_uml13_ea.rb +0 -89
  850. data/lib/puppet/vendor/rgen/lib/metamodels/uml13_metamodel.rb +0 -559
  851. data/lib/puppet/vendor/rgen/lib/metamodels/uml13_metamodel_ext.rb +0 -26
  852. data/lib/puppet/vendor/rgen/lib/mmgen/metamodel_generator.rb +0 -20
  853. data/lib/puppet/vendor/rgen/lib/mmgen/mm_ext/ecore_mmgen_ext.rb +0 -91
  854. data/lib/puppet/vendor/rgen/lib/mmgen/mmgen.rb +0 -28
  855. data/lib/puppet/vendor/rgen/lib/mmgen/templates/annotations.tpl +0 -37
  856. data/lib/puppet/vendor/rgen/lib/mmgen/templates/metamodel_generator.tpl +0 -172
  857. data/lib/puppet/vendor/rgen/lib/rgen/array_extensions.rb +0 -45
  858. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore.rb +0 -218
  859. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_builder_methods.rb +0 -81
  860. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_ext.rb +0 -69
  861. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_interface.rb +0 -47
  862. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_to_ruby.rb +0 -167
  863. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ruby_to_ecore.rb +0 -91
  864. data/lib/puppet/vendor/rgen/lib/rgen/environment.rb +0 -129
  865. data/lib/puppet/vendor/rgen/lib/rgen/fragment/dump_file_cache.rb +0 -63
  866. data/lib/puppet/vendor/rgen/lib/rgen/fragment/fragmented_model.rb +0 -140
  867. data/lib/puppet/vendor/rgen/lib/rgen/fragment/model_fragment.rb +0 -289
  868. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/abstract_instantiator.rb +0 -66
  869. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/abstract_xml_instantiator.rb +0 -66
  870. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/default_xml_instantiator.rb +0 -117
  871. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/ecore_xml_instantiator.rb +0 -169
  872. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_instantiator.rb +0 -126
  873. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_parser.rb +0 -331
  874. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_parser.y +0 -94
  875. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/nodebased_xml_instantiator.rb +0 -137
  876. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/qualified_name_resolver.rb +0 -97
  877. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/reference_resolver.rb +0 -128
  878. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/resolution_helper.rb +0 -47
  879. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/xmi11_instantiator.rb +0 -168
  880. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/builder_extensions.rb +0 -556
  881. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/builder_runtime.rb +0 -174
  882. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/constant_order_helper.rb +0 -89
  883. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/data_types.rb +0 -77
  884. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/intermediate/annotation.rb +0 -30
  885. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/intermediate/feature.rb +0 -168
  886. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/mm_multiple.rb +0 -23
  887. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/module_extension.rb +0 -42
  888. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder.rb +0 -224
  889. data/lib/puppet/vendor/rgen/lib/rgen/model_builder/builder_context.rb +0 -334
  890. data/lib/puppet/vendor/rgen/lib/rgen/model_builder/model_serializer.rb +0 -225
  891. data/lib/puppet/vendor/rgen/lib/rgen/model_builder/reference_resolver.rb +0 -156
  892. data/lib/puppet/vendor/rgen/lib/rgen/model_builder.rb +0 -32
  893. data/lib/puppet/vendor/rgen/lib/rgen/serializer/json_serializer.rb +0 -121
  894. data/lib/puppet/vendor/rgen/lib/rgen/serializer/opposite_reference_filter.rb +0 -18
  895. data/lib/puppet/vendor/rgen/lib/rgen/serializer/qualified_name_provider.rb +0 -47
  896. data/lib/puppet/vendor/rgen/lib/rgen/serializer/xmi11_serializer.rb +0 -116
  897. data/lib/puppet/vendor/rgen/lib/rgen/serializer/xmi20_serializer.rb +0 -71
  898. data/lib/puppet/vendor/rgen/lib/rgen/serializer/xml_serializer.rb +0 -98
  899. data/lib/puppet/vendor/rgen/lib/rgen/template_language/directory_template_container.rb +0 -83
  900. data/lib/puppet/vendor/rgen/lib/rgen/template_language/output_handler.rb +0 -87
  901. data/lib/puppet/vendor/rgen/lib/rgen/template_language/template_container.rb +0 -234
  902. data/lib/puppet/vendor/rgen/lib/rgen/template_language/template_helper.rb +0 -26
  903. data/lib/puppet/vendor/rgen/lib/rgen/template_language.rb +0 -297
  904. data/lib/puppet/vendor/rgen/lib/rgen/transformer.rb +0 -475
  905. data/lib/puppet/vendor/rgen/lib/rgen/util/auto_class_creator.rb +0 -61
  906. data/lib/puppet/vendor/rgen/lib/rgen/util/cached_glob.rb +0 -67
  907. data/lib/puppet/vendor/rgen/lib/rgen/util/file_cache_map.rb +0 -124
  908. data/lib/puppet/vendor/rgen/lib/rgen/util/file_change_detector.rb +0 -84
  909. data/lib/puppet/vendor/rgen/lib/rgen/util/method_delegation.rb +0 -114
  910. data/lib/puppet/vendor/rgen/lib/rgen/util/model_comparator.rb +0 -68
  911. data/lib/puppet/vendor/rgen/lib/rgen/util/model_comparator_base.rb +0 -142
  912. data/lib/puppet/vendor/rgen/lib/rgen/util/model_dumper.rb +0 -29
  913. data/lib/puppet/vendor/rgen/lib/rgen/util/name_helper.rb +0 -42
  914. data/lib/puppet/vendor/rgen/lib/rgen/util/pattern_matcher.rb +0 -329
  915. data/lib/puppet/vendor/rgen/lib/transformers/ecore_to_uml13.rb +0 -79
  916. data/lib/puppet/vendor/rgen/lib/transformers/uml13_to_ecore.rb +0 -127
  917. data/lib/puppet/vendor/rgen/test/array_extensions_test.rb +0 -64
  918. data/lib/puppet/vendor/rgen/test/ea_instantiator_test.rb +0 -35
  919. data/lib/puppet/vendor/rgen/test/ea_serializer_test.rb +0 -23
  920. data/lib/puppet/vendor/rgen/test/ecore_self_test.rb +0 -54
  921. data/lib/puppet/vendor/rgen/test/environment_test.rb +0 -90
  922. data/lib/puppet/vendor/rgen/test/json_test.rb +0 -171
  923. data/lib/puppet/vendor/rgen/test/metamodel_builder_test.rb +0 -1482
  924. data/lib/puppet/vendor/rgen/test/metamodel_from_ecore_test.rb +0 -57
  925. data/lib/puppet/vendor/rgen/test/metamodel_order_test.rb +0 -131
  926. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/TestModel.rb +0 -70
  927. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/houseMetamodel.ecore +0 -42
  928. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/houseMetamodel_from_ecore.rb +0 -44
  929. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/using_builtin_types.ecore +0 -9
  930. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test.rb +0 -98
  931. data/lib/puppet/vendor/rgen/test/method_delegation_test.rb +0 -178
  932. data/lib/puppet/vendor/rgen/test/model_builder/builder_context_test.rb +0 -59
  933. data/lib/puppet/vendor/rgen/test/model_builder/builder_test.rb +0 -242
  934. data/lib/puppet/vendor/rgen/test/model_builder/ecore_original.rb +0 -163
  935. data/lib/puppet/vendor/rgen/test/model_builder/ecore_original_regenerated.rb +0 -163
  936. data/lib/puppet/vendor/rgen/test/model_builder/reference_resolver_test.rb +0 -156
  937. data/lib/puppet/vendor/rgen/test/model_builder/serializer_test.rb +0 -94
  938. data/lib/puppet/vendor/rgen/test/model_builder/statemachine_metamodel.rb +0 -42
  939. data/lib/puppet/vendor/rgen/test/model_builder/test_model/statemachine1.rb +0 -23
  940. data/lib/puppet/vendor/rgen/test/model_builder_test.rb +0 -6
  941. data/lib/puppet/vendor/rgen/test/model_fragment_test.rb +0 -30
  942. data/lib/puppet/vendor/rgen/test/output_handler_test.rb +0 -58
  943. data/lib/puppet/vendor/rgen/test/qualified_name_provider_test.rb +0 -48
  944. data/lib/puppet/vendor/rgen/test/qualified_name_resolver_test.rb +0 -102
  945. data/lib/puppet/vendor/rgen/test/reference_resolver_test.rb +0 -117
  946. data/lib/puppet/vendor/rgen/test/rgen_test.rb +0 -26
  947. data/lib/puppet/vendor/rgen/test/template_language_test/expected_result1.txt +0 -29
  948. data/lib/puppet/vendor/rgen/test/template_language_test/expected_result2.txt +0 -9
  949. data/lib/puppet/vendor/rgen/test/template_language_test/expected_result3.txt +0 -4
  950. data/lib/puppet/vendor/rgen/test/template_language_test/indentStringTestDefaultIndent.out +0 -1
  951. data/lib/puppet/vendor/rgen/test/template_language_test/indentStringTestTabIndent.out +0 -1
  952. data/lib/puppet/vendor/rgen/test/template_language_test/templates/callback_indent_test/a.tpl +0 -12
  953. data/lib/puppet/vendor/rgen/test/template_language_test/templates/callback_indent_test/b.tpl +0 -5
  954. data/lib/puppet/vendor/rgen/test/template_language_test/templates/code/array.tpl +0 -11
  955. data/lib/puppet/vendor/rgen/test/template_language_test/templates/content/author.tpl +0 -7
  956. data/lib/puppet/vendor/rgen/test/template_language_test/templates/content/chapter.tpl +0 -5
  957. data/lib/puppet/vendor/rgen/test/template_language_test/templates/define_local_test/local.tpl +0 -8
  958. data/lib/puppet/vendor/rgen/test/template_language_test/templates/define_local_test/test.tpl +0 -8
  959. data/lib/puppet/vendor/rgen/test/template_language_test/templates/evaluate_test/test.tpl +0 -7
  960. data/lib/puppet/vendor/rgen/test/template_language_test/templates/indent_string_test.tpl +0 -12
  961. data/lib/puppet/vendor/rgen/test/template_language_test/templates/index/c/cmod.tpl +0 -1
  962. data/lib/puppet/vendor/rgen/test/template_language_test/templates/index/chapter.tpl +0 -3
  963. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_backslash_r_test.tpl +0 -5
  964. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/no_indent.tpl +0 -3
  965. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/sub1/no_indent.tpl +0 -3
  966. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test.tpl +0 -24
  967. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test2.tpl +0 -13
  968. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test3.tpl +0 -10
  969. data/lib/puppet/vendor/rgen/test/template_language_test/templates/null_context_test.tpl +0 -17
  970. data/lib/puppet/vendor/rgen/test/template_language_test/templates/root.tpl +0 -31
  971. data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/sub1/sub1.tpl +0 -3
  972. data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/sub1.tpl +0 -9
  973. data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/test.tpl +0 -4
  974. data/lib/puppet/vendor/rgen/test/template_language_test/testout.txt +0 -29
  975. data/lib/puppet/vendor/rgen/test/template_language_test.rb +0 -163
  976. data/lib/puppet/vendor/rgen/test/testmodel/class_model_checker.rb +0 -119
  977. data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel.eap +0 -0
  978. data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel.xml +0 -1029
  979. data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel_partial.xml +0 -317
  980. data/lib/puppet/vendor/rgen/test/testmodel/ecore_model_checker.rb +0 -101
  981. data/lib/puppet/vendor/rgen/test/testmodel/manual_testmodel.xml +0 -22
  982. data/lib/puppet/vendor/rgen/test/testmodel/object_model_checker.rb +0 -67
  983. data/lib/puppet/vendor/rgen/test/transformer_test.rb +0 -254
  984. data/lib/puppet/vendor/rgen/test/util/file_cache_map_test.rb +0 -99
  985. data/lib/puppet/vendor/rgen/test/util/pattern_matcher_test.rb +0 -97
  986. data/lib/puppet/vendor/rgen/test/util_test.rb +0 -5
  987. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_ecore_model_checker.rb +0 -94
  988. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_ecore_instantiator.rb +0 -53
  989. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_metamodel.rb +0 -49
  990. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_to_ecore.rb +0 -75
  991. data/lib/puppet/vendor/rgen/test/xml_instantiator_test.rb +0 -160
  992. data/lib/puppet/vendor/rgen_patch.rb +0 -132
  993. data/lib/semver.rb +0 -146
  994. data/man/man8/extlookup2hiera.8 +0 -10
  995. data/man/man8/puppet-file.8 +0 -189
  996. data/man/man8/puppet-resource_type.8 +0 -188
  997. data/spec/fixtures/unit/data_providers/environments/production/modules/abc/lib/puppet/bindings/abc/default.rb +0 -9
  998. data/spec/fixtures/unit/data_providers/environments/production/modules/xyz/lib/puppet/bindings/xyz/default.rb +0 -9
  999. data/spec/fixtures/unit/data_providers/environments/sample/environment.conf +0 -2
  1000. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/hiera.yaml +0 -5
  1001. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/lib/puppet/bindings/backend/default.rb +0 -9
  1002. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/lib/puppet_x/backend/special_data_provider_factory.rb +0 -23
  1003. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/manifests/init.pp +0 -5
  1004. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/metadata.json +0 -9
  1005. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet/bindings/dataprovider/default.rb +0 -54
  1006. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_env_data.rb +0 -33
  1007. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_module_data.rb +0 -33
  1008. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/manifests/init.pp +0 -5
  1009. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/abc/lib/puppet/bindings/abc/default.rb +0 -9
  1010. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/bad_data/lib/puppet/bindings/bad_data/default.rb +0 -9
  1011. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/bca/lib/puppet/bindings/bca/default.rb +0 -9
  1012. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/metawcp/lib/puppet/bindings/metawcp/default.rb +0 -10
  1013. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/metawcp/lib/puppet_x/thallgren/sample_module_data.rb +0 -23
  1014. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/metawcp/manifests/init.pp +0 -3
  1015. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/metawcp/metadata.json +0 -9
  1016. data/spec/unit/application/inspect_spec.rb +0 -305
  1017. data/spec/unit/data_providers/custom_data_provider_spec.rb +0 -50
  1018. data/spec/unit/face/file_spec.rb +0 -14
  1019. data/spec/unit/indirector/catalog/static_compiler_spec.rb +0 -255
  1020. data/spec/unit/indirector/resource_type/parser_spec.rb +0 -259
  1021. data/spec/unit/indirector/resource_type/rest_spec.rb +0 -14
  1022. data/spec/unit/pops/binder/binder_spec.rb +0 -43
  1023. data/spec/unit/pops/binder/bindings_checker_spec.rb +0 -155
  1024. data/spec/unit/pops/binder/bindings_composer_spec.rb +0 -64
  1025. data/spec/unit/pops/binder/bindings_validator_factory_spec.rb +0 -18
  1026. data/spec/unit/pops/binder/config/binder_config_spec.rb +0 -42
  1027. data/spec/unit/pops/binder/injector_spec.rb +0 -768
  1028. data/spec/unit/pops/parser/rgen_sanitycheck_spec.rb +0 -23
  1029. data/spec/unit/pops/serialization/rgen_spec.rb +0 -88
  1030. data/spec/unit/semver_spec.rb +0 -546
  1031. /data/lib/puppet/vendor/semantic_puppet/{lib/semantic_puppet/locales → locales}/config.yaml +0 -0
@@ -1,422 +1,758 @@
1
1
  require 'semantic_puppet'
2
2
 
3
3
  module SemanticPuppet
4
- class VersionRange < Range
5
- class << self
6
- # Parses a version range string into a comparable {VersionRange} instance.
7
- #
8
- # Currently parsed version range string may take any of the following:
9
- # forms:
10
- #
11
- # * Regular Semantic Version strings
12
- # * ex. `"1.0.0"`, `"1.2.3-pre"`
13
- # * Partial Semantic Version strings
14
- # * ex. `"1.0.x"`, `"1"`, `"2.X"`
15
- # * Inequalities
16
- # * ex. `"> 1.0.0"`, `"<3.2.0"`, `">=4.0.0"`
17
- # * Approximate Versions
18
- # * ex. `"~1.0.0"`, `"~ 3.2.0"`, `"~4.0.0"`
19
- # * Inclusive Ranges
20
- # * ex. `"1.0.0 - 1.3.9"`
21
- # * Range Intersections
22
- # * ex. `">1.0.0 <=2.3.0"`
23
- #
24
- # @param range_str [String] the version range string to parse
25
- # @return [VersionRange] a new {VersionRange} instance
26
- def parse(range_str)
27
- partial = '\d+(?:[.]\d+)?(?:[.][x]|[.]\d+(?:[-][0-9a-z.-]*)?)?'
28
- exact = '\d+[.]\d+[.]\d+(?:[-][0-9a-z.-]*)?'
29
-
30
- range = range_str.gsub(/([(><=~])[ ]+/, '\1')
31
- range = range.gsub(/ - /, '#').strip
32
-
33
- return case range
34
- when /\A(#{partial})\Z/i
35
- parse_loose_version_expression($1)
36
- when /\A([><][=]?)(#{exact})\Z/i
37
- parse_inequality_expression($1, $2)
38
- when /\A~(#{partial})\Z/i
39
- parse_reasonably_close_expression($1)
40
- when /\A(#{exact})#(#{exact})\Z/i
41
- parse_inclusive_range_expression($1, $2)
42
- when /[ ]+/
43
- parse_intersection_expression(range)
4
+ # A Semantic Version Range.
5
+ #
6
+ # @see https://github.com/npm/node-semver for full specification
7
+ # @api public
8
+ class VersionRange
9
+ UPPER_X = 'X'.freeze
10
+ LOWER_X = 'x'.freeze
11
+ STAR = '*'.freeze
12
+
13
+ NR = '0|[1-9][0-9]*'.freeze
14
+ XR = '(x|X|\*|' + NR + ')'.freeze
15
+ XR_NC = '(?:x|X|\*|' + NR + ')'.freeze
16
+
17
+ PART = '(?:[0-9A-Za-z-]+)'.freeze
18
+ PARTS = PART + '(?:\.' + PART + ')*'.freeze
19
+ QUALIFIER = '(?:-(' + PARTS + '))?(?:\+(' + PARTS + '))?'.freeze
20
+ QUALIFIER_NC = '(?:-' + PARTS + ')?(?:\+' + PARTS + ')?'.freeze
21
+
22
+ PARTIAL = XR_NC + '(?:\.' + XR_NC + '(?:\.' + XR_NC + QUALIFIER_NC + ')?)?'.freeze
23
+
24
+ # The ~> isn't in the spec but allowed
25
+ SIMPLE = '([<>=~^]|<=|>=|~>|~=)?(' + PARTIAL + ')'.freeze
26
+ SIMPLE_EXPR = /\A#{SIMPLE}\z/.freeze
27
+
28
+ SIMPLE_WITH_EXTRA_WS = '([<>=~^]|<=|>=)?\s+(' + PARTIAL + ')'.freeze
29
+ SIMPLE_WITH_EXTRA_WS_EXPR = /\A#{SIMPLE_WITH_EXTRA_WS}\z/.freeze
30
+
31
+ HYPHEN = '(' + PARTIAL + ')\s+-\s+(' + PARTIAL + ')'.freeze
32
+ HYPHEN_EXPR = /\A#{HYPHEN}\z/.freeze
33
+
34
+ PARTIAL_EXPR = /\A#{XR}(?:\.#{XR}(?:\.#{XR}#{QUALIFIER})?)?\z/.freeze
35
+
36
+ LOGICAL_OR = /\s*\|\|\s*/.freeze
37
+ RANGE_SPLIT = /\s+/.freeze
38
+
39
+ # Parses a version range string into a comparable {VersionRange} instance.
40
+ #
41
+ # Currently parsed version range string may take any of the following:
42
+ # forms:
43
+ #
44
+ # * Regular Semantic Version strings
45
+ # * ex. `"1.0.0"`, `"1.2.3-pre"`
46
+ # * Partial Semantic Version strings
47
+ # * ex. `"1.0.x"`, `"1"`, `"2.X"`, `"3.*"`,
48
+ # * Inequalities
49
+ # * ex. `"> 1.0.0"`, `"<3.2.0"`, `">=4.0.0"`
50
+ # * Approximate Caret Versions
51
+ # * ex. `"^1"`, `"^3.2"`, `"^4.1.0"`
52
+ # * Approximate Tilde Versions
53
+ # * ex. `"~1.0.0"`, `"~ 3.2.0"`, `"~4.0.0"`
54
+ # * Inclusive Ranges
55
+ # * ex. `"1.0.0 - 1.3.9"`
56
+ # * Range Intersections
57
+ # * ex. `">1.0.0 <=2.3.0"`
58
+ # * Combined ranges
59
+ # * ex, `">=1.0.0 <2.3.0 || >=2.5.0 <3.0.0"`
60
+ #
61
+ # @param range_string [String] the version range string to parse
62
+ # @param strict_semver [Boolean] `false` if pre-releases should be included even when not explicitly appointed
63
+ # @return [VersionRange] a new {VersionRange} instance
64
+ # @api public
65
+ def self.parse(range_string, strict_semver = true)
66
+ # Remove extra whitespace after operators. Such whitespace should not cause a split
67
+ range_set = range_string.gsub(/([><=~^])(?:\s+|\s*v)/, '\1')
68
+ ranges = range_set.split(LOGICAL_OR)
69
+ return ALL_RANGE if ranges.empty?
70
+
71
+ new(ranges.map do |range|
72
+ if range =~ HYPHEN_EXPR
73
+ MinMaxRange.create(GtEqRange.new(parse_version($1)), LtEqRange.new(parse_version($2)))
44
74
  else
45
- raise ArgumentError
75
+ # Split on whitespace
76
+ simples = range.split(RANGE_SPLIT).map do |simple|
77
+ match_data = SIMPLE_EXPR.match(simple)
78
+ raise ArgumentError, _("Unparsable version range: \"%{range}\"") % { range: range_string } unless match_data
79
+ operand = match_data[2]
80
+
81
+ # Case based on operator
82
+ case match_data[1]
83
+ when '~', '~>', '~='
84
+ parse_tilde(operand)
85
+ when '^'
86
+ parse_caret(operand)
87
+ when '>'
88
+ parse_gt_version(operand)
89
+ when '>='
90
+ GtEqRange.new(parse_version(operand))
91
+ when '<'
92
+ LtRange.new(parse_version(operand))
93
+ when '<='
94
+ parse_lteq_version(operand)
95
+ when '='
96
+ parse_xrange(operand)
97
+ else
98
+ parse_xrange(operand)
99
+ end
100
+ end
101
+ simples.size == 1 ? simples[0] : MinMaxRange.create(*simples)
46
102
  end
103
+ end.uniq, range_string, strict_semver).freeze
104
+ end
47
105
 
48
- rescue ArgumentError
49
- raise ArgumentError, _("Unparsable version range: %{range}") % {range: range_str.inspect}
50
- end
106
+ def self.parse_partial(expr)
107
+ match_data = PARTIAL_EXPR.match(expr)
108
+ raise ArgumentError, _("Unparsable version range: \"%{expr}\"") % { expr: expr } unless match_data
109
+ match_data
110
+ end
111
+ private_class_method :parse_partial
51
112
 
52
- private
113
+ def self.parse_caret(expr)
114
+ match_data = parse_partial(expr)
115
+ major = digit(match_data[1])
116
+ major == 0 ? allow_patch_updates(major, match_data) : allow_minor_updates(major, match_data)
117
+ end
118
+ private_class_method :parse_caret
53
119
 
54
- # Creates a new {VersionRange} from a range intersection expression.
55
- #
56
- # @param expr [String] a range intersection expression
57
- # @return [VersionRange] a version range representing `expr`
58
- def parse_intersection_expression(expr)
59
- expr.split(/[ ]+/).map { |x| parse(x) }.inject { |a,b| a & b }
60
- end
120
+ def self.parse_tilde(expr)
121
+ match_data = parse_partial(expr)
122
+ allow_patch_updates(digit(match_data[1]), match_data)
123
+ end
124
+ private_class_method :parse_tilde
61
125
 
62
- # Creates a new {VersionRange} from a "loose" description of a Semantic
63
- # Version number.
64
- #
65
- # @see .process_loose_expr
66
- #
67
- # @param expr [String] a "loose" version expression
68
- # @return [VersionRange] a version range representing `expr`
69
- def parse_loose_version_expression(expr)
70
- start, finish = process_loose_expr(expr)
126
+ def self.parse_xrange(expr)
127
+ match_data = parse_partial(expr)
128
+ allow_patch_updates(digit(match_data[1]), match_data, false)
129
+ end
130
+ private_class_method :parse_xrange
71
131
 
72
- if start.stable?
73
- start = start.send(:first_prerelease)
74
- end
132
+ def self.allow_patch_updates(major, match_data, tilde_or_caret = true)
133
+ return AllRange::SINGLETON unless major
75
134
 
76
- if finish.stable?
77
- exclude = true
78
- finish = finish.send(:first_prerelease)
79
- end
135
+ minor = digit(match_data[2])
136
+ return MinMaxRange.new(GtEqRange.new(Version.new(major, 0, 0)), LtRange.new(Version.new(major + 1, 0, 0))) unless minor
80
137
 
81
- self.new(start, finish, exclude)
82
- end
138
+ patch = digit(match_data[3])
139
+ return MinMaxRange.new(GtEqRange.new(Version.new(major, minor, 0)), LtRange.new(Version.new(major, minor + 1, 0))) unless patch
83
140
 
84
- # Creates an open-ended version range from an inequality expression.
85
- #
86
- # @overload parse_inequality_expression('<', expr)
87
- # {include:.parse_lt_expression}
88
- #
89
- # @overload parse_inequality_expression('<=', expr)
90
- # {include:.parse_lte_expression}
91
- #
92
- # @overload parse_inequality_expression('>', expr)
93
- # {include:.parse_gt_expression}
94
- #
95
- # @overload parse_inequality_expression('>=', expr)
96
- # {include:.parse_gte_expression}
97
- #
98
- # @param comp ['<', '<=', '>', '>='] an inequality operator
99
- # @param expr [String] a "loose" version expression
100
- # @return [VersionRange] a range covering all versions in the inequality
101
- def parse_inequality_expression(comp, expr)
102
- case comp
103
- when '>'
104
- parse_gt_expression(expr)
105
- when '>='
106
- parse_gte_expression(expr)
107
- when '<'
108
- parse_lt_expression(expr)
109
- when '<='
110
- parse_lte_expression(expr)
141
+ version = Version.new(major, minor, patch, Version.parse_prerelease(match_data[4]), Version.parse_build(match_data[5]))
142
+ return EqRange.new(version) unless tilde_or_caret
143
+
144
+ MinMaxRange.new(GtEqRange.new(version), LtRange.new(Version.new(major, minor + 1, 0)))
145
+ end
146
+ private_class_method :allow_patch_updates
147
+
148
+ def self.allow_minor_updates(major, match_data)
149
+ return AllRange.SINGLETON unless major
150
+ minor = digit(match_data[2])
151
+ if minor
152
+ patch = digit(match_data[3])
153
+ if patch.nil?
154
+ MinMaxRange.new(GtEqRange.new(Version.new(major, minor, 0)), LtRange.new(Version.new(major + 1, 0, 0)))
155
+ else
156
+ if match_data[4].nil?
157
+ MinMaxRange.new(GtEqRange.new(Version.new(major, minor, patch)), LtRange.new(Version.new(major + 1, 0, 0)))
158
+ else
159
+ MinMaxRange.new(
160
+ GtEqRange.new(
161
+ Version.new(major, minor, patch, Version.parse_prerelease(match_data[4]), Version.parse_build(match_data[5]))),
162
+ LtRange.new(Version.new(major + 1, 0, 0)))
163
+ end
111
164
  end
165
+ else
166
+ MinMaxRange.new(GtEqRange.new(Version.new(major, 0, 0)), LtRange.new(Version.new(major + 1, 0, 0)))
112
167
  end
168
+ end
169
+ private_class_method :allow_minor_updates
113
170
 
114
- # Returns a range covering all versions greater than the given `expr`.
115
- #
116
- # @param expr [String] the version to be greater than
117
- # @return [VersionRange] a range covering all versions greater than the
118
- # given `expr`
119
- def parse_gt_expression(expr)
120
- if expr =~ /^[^+]*-/
121
- start = Version.parse("#{expr}.0")
171
+ def self.digit(str)
172
+ (str.nil? || UPPER_X == str || LOWER_X == str || STAR == str) ? nil : str.to_i
173
+ end
174
+ private_class_method :digit
175
+
176
+ def self.parse_version(expr)
177
+ match_data = parse_partial(expr)
178
+ major = digit(match_data[1]) || 0
179
+ minor = digit(match_data[2]) || 0
180
+ patch = digit(match_data[3]) || 0
181
+ Version.new(major, minor, patch, Version.parse_prerelease(match_data[4]), Version.parse_build(match_data[5]))
182
+ end
183
+ private_class_method :parse_version
184
+
185
+ def self.parse_gt_version(expr)
186
+ match_data = parse_partial(expr)
187
+ major = digit(match_data[1])
188
+ return LtRange::MATCH_NOTHING unless major
189
+ minor = digit(match_data[2])
190
+ return GtEqRange.new(Version.new(major + 1, 0, 0)) unless minor
191
+ patch = digit(match_data[3])
192
+ return GtEqRange.new(Version.new(major, minor + 1, 0)) unless patch
193
+ return GtRange.new(Version.new(major, minor, patch, Version.parse_prerelease(match_data[4]), Version.parse_build(match_data[5])))
194
+ end
195
+ private_class_method :parse_gt_version
196
+
197
+ def self.parse_lteq_version(expr)
198
+ match_data = parse_partial(expr)
199
+ major = digit(match_data[1])
200
+ return AllRange.SINGLETON unless major
201
+ minor = digit(match_data[2])
202
+ return LtRange.new(Version.new(major + 1, 0, 0)) unless minor
203
+ patch = digit(match_data[3])
204
+ return LtRange.new(Version.new(major, minor + 1, 0)) unless patch
205
+ return LtEqRange.new(Version.new(major, minor, patch, Version.parse_prerelease(match_data[4]), Version.parse_build(match_data[5])))
206
+ end
207
+ private_class_method :parse_lteq_version
208
+
209
+ # Provides read access to the ranges. For internal use only
210
+ # @api private
211
+ attr_reader :ranges
212
+
213
+ # Creates a new version range
214
+ # @overload initialize(from, to, exclude_end = false)
215
+ # Creates a new instance using ruby `Range` semantics
216
+ # @param begin [String,Version] the version denoting the start of the range (always inclusive)
217
+ # @param end [String,Version] the version denoting the end of the range
218
+ # @param exclude_end [Boolean] `true` if the `end` version should be excluded from the range
219
+ # @overload initialize(ranges, string)
220
+ # Creates a new instance based on parsed content. For internal use only
221
+ # @param ranges [Array<AbstractRange>] the ranges to include in this range
222
+ # @param string [String] the original string representation that was parsed to produce the ranges
223
+ # @param strict_semver [Boolean] `false` if pre-releases should be included even when not explicitly appointed
224
+ #
225
+ # @api private
226
+ def initialize(ranges, string, exclude_end = nil)
227
+ if ranges.is_a?(Array)
228
+ @strict_semver = exclude_end.nil? ? true : exclude_end
229
+ else
230
+ lb = GtEqRange.new(ranges)
231
+ if exclude_end
232
+ ub = LtRange.new(string)
233
+ string = ">=#{string} <#{ranges}"
122
234
  else
123
- start = process_loose_expr(expr).last.send(:first_prerelease)
235
+ ub = LtEqRange.new(string)
236
+ string = "#{string} - #{ranges}"
124
237
  end
238
+ ranges = [MinMaxRange.create(lb, ub)]
239
+ @strict_semver = true
240
+ end
241
+ ranges.compact!
242
+
243
+ merge_happened = true
244
+ while ranges.size > 1 && merge_happened
245
+ # merge ranges if possible
246
+ merge_happened = false
247
+ result = []
248
+ until ranges.empty?
249
+ unmerged = []
250
+ x = ranges.pop
251
+ result << ranges.reduce(x) do |memo, y|
252
+ merged = memo.merge(y)
253
+ if merged.nil?
254
+ unmerged << y
255
+ else
256
+ merge_happened = true
257
+ memo = merged
258
+ end
259
+ memo
260
+ end
261
+ ranges = unmerged
262
+ end
263
+ ranges = result.reverse!
264
+ end
265
+
266
+ ranges = [LtRange::MATCH_NOTHING] if ranges.empty?
267
+ @ranges = ranges
268
+ @string = string.nil? ? ranges.join(' || ') : string
269
+ end
270
+
271
+ def eql?(range)
272
+ range.is_a?(VersionRange) && @ranges.eql?(range.ranges)
273
+ end
274
+ alias == eql?
275
+
276
+ def hash
277
+ @ranges.hash
278
+ end
125
279
 
126
- self.new(start, SemanticPuppet::Version::MAX)
280
+ # Returns the version that denotes the beginning of this range.
281
+ #
282
+ # Since this really is an OR between disparate ranges, it may have multiple beginnings. This method
283
+ # returns `nil` if that is the case.
284
+ #
285
+ # @return [Version] the beginning of the range, or `nil` if there are multiple beginnings
286
+ # @api public
287
+ def begin
288
+ @ranges.size == 1 ? @ranges[0].begin : nil
289
+ end
290
+
291
+ # Returns the version that denotes the end of this range.
292
+ #
293
+ # Since this really is an OR between disparate ranges, it may have multiple ends. This method
294
+ # returns `nil` if that is the case.
295
+ #
296
+ # @return [Version] the end of the range, or `nil` if there are multiple ends
297
+ # @api public
298
+ def end
299
+ @ranges.size == 1 ? @ranges[0].end : nil
300
+ end
301
+
302
+ # Returns `true` if the beginning is excluded from the range.
303
+ #
304
+ # Since this really is an OR between disparate ranges, it may have multiple beginnings. This method
305
+ # returns `nil` if that is the case.
306
+ #
307
+ # @return [Boolean] `true` if the beginning is excluded from the range, `false` if included, or `nil` if there are multiple beginnings
308
+ # @api public
309
+ def exclude_begin?
310
+ @ranges.size == 1 ? @ranges[0].exclude_begin? : nil
311
+ end
312
+
313
+ # Returns `true` if the end is excluded from the range.
314
+ #
315
+ # Since this really is an OR between disparate ranges, it may have multiple ends. This method
316
+ # returns `nil` if that is the case.
317
+ #
318
+ # @return [Boolean] `true` if the end is excluded from the range, `false` if not, or `nil` if there are multiple ends
319
+ # @api public
320
+ def exclude_end?
321
+ @ranges.size == 1 ? @ranges[0].exclude_end? : nil
322
+ end
323
+
324
+ # @return [Boolean] `true` if the given version is included in the range
325
+ # @api public
326
+ def include?(version)
327
+ if @strict_semver
328
+ @ranges.any? { |range| range.include?(version) && (version.stable? || range.test_prerelease?(version)) }
329
+ else
330
+ @ranges.any? { |range| range.include?(version) || !version.stable? && range.stable? && range.include?(version.to_stable) }
127
331
  end
332
+ end
333
+ alias member? include?
334
+ alias cover? include?
335
+ alias === include?
128
336
 
129
- # Returns a range covering all versions greater than or equal to the given
130
- # `expr`.
131
- #
132
- # @param expr [String] the version to be greater than or equal to
133
- # @return [VersionRange] a range covering all versions greater than or
134
- # equal to the given `expr`
135
- def parse_gte_expression(expr)
136
- if expr =~ /^[^+]*-/
137
- start = Version.parse(expr)
138
- else
139
- start = process_loose_expr(expr).first.send(:first_prerelease)
140
- end
337
+ # Computes the intersection of a pair of ranges. If the ranges have no
338
+ # useful intersection, an empty range is returned.
339
+ #
340
+ # @param other [VersionRange] the range to intersect with
341
+ # @return [VersionRange] the common subset
342
+ # @api public
343
+ def intersection(other)
344
+ raise ArgumentError, _("value must be a %{type}") % { :type => self.class.name } unless other.is_a?(VersionRange)
345
+ result = @ranges.map { |range| other.ranges.map { |o_range| range.intersection(o_range) } }.flatten
346
+ result.compact!
347
+ result.uniq!
348
+ result.empty? ? EMPTY_RANGE : VersionRange.new(result, nil)
349
+ end
350
+ alias :& :intersection
351
+
352
+ # Returns a string representation of this range. This will be the string that was used
353
+ # when the range was parsed.
354
+ #
355
+ # @return [String] a range expression representing this VersionRange
356
+ # @api public
357
+ def to_s
358
+ @string
359
+ end
360
+
361
+ # Returns a canonical string representation of this range, assembled from the internal
362
+ # matchers.
363
+ #
364
+ # @return [String] a range expression representing this VersionRange
365
+ # @api public
366
+ def inspect
367
+ @ranges.join(' || ')
368
+ end
141
369
 
142
- self.new(start, SemanticPuppet::Version::MAX)
370
+ # @api private
371
+ class AbstractRange
372
+ def include?(_)
373
+ true
143
374
  end
144
375
 
145
- # Returns a range covering all versions less than the given `expr`.
146
- #
147
- # @param expr [String] the version to be less than
148
- # @return [VersionRange] a range covering all versions less than the
149
- # given `expr`
150
- def parse_lt_expression(expr)
151
- if expr =~ /^[^+]*-/
152
- finish = Version.parse(expr)
153
- else
154
- finish = process_loose_expr(expr).first.send(:first_prerelease)
155
- end
376
+ def begin
377
+ Version::MIN
378
+ end
156
379
 
157
- self.new(SemanticPuppet::Version::MIN, finish, true)
380
+ def end
381
+ Version::MAX
158
382
  end
159
383
 
160
- # Returns a range covering all versions less than or equal to the given
161
- # `expr`.
162
- #
163
- # @param expr [String] the version to be less than or equal to
164
- # @return [VersionRange] a range covering all versions less than or equal
165
- # to the given `expr`
166
- def parse_lte_expression(expr)
167
- if expr =~ /^[^+]*-/
168
- finish = Version.parse(expr)
169
- self.new(SemanticPuppet::Version::MIN, finish)
170
- else
171
- finish = process_loose_expr(expr).last.send(:first_prerelease)
172
- self.new(SemanticPuppet::Version::MIN, finish, true)
173
- end
384
+ def exclude_begin?
385
+ false
174
386
  end
175
387
 
176
- # The "reasonably close" expression is used to designate ranges that have
177
- # a reasonable proximity to the given "loose" version number. These take
178
- # the form:
179
- #
180
- # ~[Version]
181
- #
182
- # The general semantics of these expressions are that the given version
183
- # forms a lower bound for the range, and the upper bound is either the
184
- # next version number increment (at whatever precision the expression
185
- # provides) or the next stable version (in the case of a prerelease
186
- # version).
187
- #
188
- # @example "Reasonably close" major version
189
- # "~1" # => (>=1.0.0 <2.0.0)
190
- # @example "Reasonably close" minor version
191
- # "~1.2" # => (>=1.2.0 <1.3.0)
192
- # @example "Reasonably close" patch version
193
- # "~1.2.3" # => (>=1.2.3 <1.3.0)
194
- # @example "Reasonably close" prerelease version
195
- # "~1.2.3-alpha" # => (>=1.2.3-alpha <1.2.4)
196
- #
197
- # @param expr [String] a "loose" expression to build the range around
198
- # @return [VersionRange] a "reasonably close" version range
199
- def parse_reasonably_close_expression(expr)
200
- parsed, succ = process_loose_expr(expr)
388
+ def exclude_end?
389
+ false
390
+ end
201
391
 
202
- if parsed.stable?
203
- parsed = parsed.send(:first_prerelease)
392
+ def eql?(other)
393
+ other.class.eql?(self.class)
394
+ end
204
395
 
205
- # Handle the special case of "~1.2.3" expressions.
206
- succ = succ.next(:minor) if ((parsed.major == succ.major) && (parsed.minor == succ.minor))
396
+ def ==(other)
397
+ eql?(other)
398
+ end
207
399
 
208
- succ = succ.send(:first_prerelease)
209
- self.new(parsed, succ, true)
210
- else
211
- self.new(parsed, succ.next(:patch).send(:first_prerelease), true)
212
- end
400
+ def lower_bound?
401
+ false
402
+ end
403
+
404
+ def upper_bound?
405
+ false
213
406
  end
214
407
 
215
- # An "inclusive range" expression takes two version numbers (or partial
216
- # version numbers) and creates a range that covers all versions between
217
- # them. These take the form:
408
+ # Merge two ranges so that the result matches the intersection of all matching versions.
218
409
  #
219
- # [Version] - [Version]
410
+ # @param range [AbastractRange] the range to intersect with
411
+ # @return [AbastractRange,nil] the intersection between the ranges
220
412
  #
221
- # @param start [String] a "loose" expresssion for the start of the range
222
- # @param finish [String] a "loose" expression for the end of the range
223
- # @return [VersionRange] a {VersionRange} covering `start` to `finish`
224
- def parse_inclusive_range_expression(start, finish)
225
- start, _ = process_loose_expr(start)
226
- _, finish = process_loose_expr(finish)
227
-
228
- start = start.send(:first_prerelease) if start.stable?
229
- if finish.stable?
230
- exclude = true
231
- finish = finish.send(:first_prerelease)
413
+ # @api private
414
+ def intersection(range)
415
+ cmp = self.begin <=> range.end
416
+ if cmp > 0
417
+ nil
418
+ elsif cmp == 0
419
+ exclude_begin? || range.exclude_end? ? nil : EqRange.new(self.begin)
420
+ else
421
+ cmp = range.begin <=> self.end
422
+ if cmp > 0
423
+ nil
424
+ elsif cmp == 0
425
+ range.exclude_begin? || exclude_end? ? nil : EqRange.new(range.begin)
426
+ else
427
+ cmp = self.begin <=> range.begin
428
+ min = if cmp < 0
429
+ range
430
+ elsif cmp > 0
431
+ self
432
+ else
433
+ self.exclude_begin? ? self : range
434
+ end
435
+
436
+ cmp = self.end <=> range.end
437
+ max = if cmp > 0
438
+ range
439
+ elsif cmp < 0
440
+ self
441
+ else
442
+ self.exclude_end? ? self : range
443
+ end
444
+
445
+ if !max.upper_bound?
446
+ min
447
+ elsif !min.lower_bound?
448
+ max
449
+ else
450
+ MinMaxRange.new(min, max)
451
+ end
452
+ end
232
453
  end
233
-
234
- self.new(start, finish, exclude)
235
454
  end
236
455
 
237
- # A "loose expression" is one that takes the form of all or part of a
238
- # valid Semantic Version number. Particularly:
239
- #
240
- # * [Major].[Minor].[Patch]-[Prerelease]
241
- # * [Major].[Minor].[Patch]
242
- # * [Major].[Minor]
243
- # * [Major]
456
+ # Merge two ranges so that the result matches the sum of all matching versions. A merge
457
+ # is only possible when the ranges are either adjacent or have an overlap.
244
458
  #
245
- # Various placeholders are also permitted in "loose expressions"
246
- # (typically an 'x' or an asterisk).
459
+ # @param other [AbastractRange] the range to merge with
460
+ # @return [AbastractRange,nil] the result of the merge
247
461
  #
248
- # This method parses these expressions into a minimal and maximal version
249
- # number pair.
250
- #
251
- # @todo Stabilize whether the second value is inclusive or exclusive
252
- #
253
- # @param expr [String] a string containing a "loose" version expression
254
- # @return [(VersionNumber, VersionNumber)] a minimal and maximal
255
- # version pair for the given expression
256
- def process_loose_expr(expr)
257
- case expr
258
- when /^(\d+)(?:[.][xX*])?$/
259
- expr = "#{$1}.0.0"
260
- arity = :major
261
- when /^(\d+[.]\d+)(?:[.][xX*])?$/
262
- expr = "#{$1}.0"
263
- arity = :minor
264
- when /^\d+[.]\d+[.]\d+$/
265
- arity = :patch
462
+ # @api private
463
+ def merge(other)
464
+ if include?(other.begin) || other.include?(self.begin)
465
+ cmp = self.begin <=> other.begin
466
+ if cmp < 0
467
+ min = self.begin
468
+ excl_begin = exclude_begin?
469
+ elsif cmp > 0
470
+ min = other.begin
471
+ excl_begin = other.exclude_begin?
472
+ else
473
+ min = self.begin
474
+ excl_begin = exclude_begin? && other.exclude_begin?
475
+ end
476
+
477
+ cmp = self.end <=> other.end
478
+ if cmp > 0
479
+ max = self.end
480
+ excl_end = self.exclude_end?
481
+ elsif cmp < 0
482
+ max = other.end
483
+ excl_end = other.exclude_end?
484
+ else
485
+ max = self.end
486
+ excl_end = exclude_end && other.exclude_end?
487
+ end
488
+
489
+ MinMaxRange.create(excl_begin ? GtRange.new(min) : GtEqRange.new(min), excl_end ? LtRange.new(max) : LtEqRange.new(max))
490
+ elsif exclude_end? && !other.exclude_begin? && self.end == other.begin
491
+ # Adjacent, self before other
492
+ from_to(self, other)
493
+ elsif other.exclude_end? && !exclude_begin? && other.end == self.begin
494
+ # Adjacent, other before self
495
+ from_to(other, self)
496
+ elsif !exclude_end? && !other.exclude_begin? && self.end.next(:patch) == other.begin
497
+ # Adjacent, self before other
498
+ from_to(self, other)
499
+ elsif !other.exclude_end? && !exclude_begin? && other.end.next(:patch) == self.begin
500
+ # Adjacent, other before self
501
+ from_to(other, self)
502
+ else
503
+ # No overlap
504
+ nil
266
505
  end
506
+ end
267
507
 
268
- version = next_version = Version.parse(expr)
508
+ # Checks if this matcher accepts a prerelease with the same major, minor, patch triple as the given version. Only matchers
509
+ # where this has been explicitly stated will respond `true` to this method
510
+ #
511
+ # @return [Boolean] `true` if this matcher accepts a prerelase with the tuple from the given version
512
+ def test_prerelease?(_)
513
+ false
514
+ end
269
515
 
270
- if arity
271
- next_version = version.next(arity)
272
- end
516
+ def stable?
517
+ false
518
+ end
519
+
520
+ private
273
521
 
274
- [ version, next_version ]
522
+ def from_to(a, b)
523
+ MinMaxRange.create(a.exclude_begin? ? GtRange.new(a.begin) : GtEqRange.new(a.begin), b.exclude_end? ? LtRange.new(b.end) : LtEqRange.new(b.end))
275
524
  end
276
525
  end
277
526
 
278
- # Computes the intersection of a pair of ranges. If the ranges have no
279
- # useful intersection, an empty range is returned.
280
- #
281
- # @param other [VersionRange] the range to intersect with
282
- # @return [VersionRange] the common subset
283
- def intersection(other)
284
- raise NOT_A_VERSION_RANGE unless other.kind_of?(VersionRange)
527
+ # @api private
528
+ class AllRange < AbstractRange
529
+ SINGLETON = AllRange.new
285
530
 
286
- if self.begin < other.begin
287
- return other.intersection(self)
531
+ def intersection(range)
532
+ range
288
533
  end
289
534
 
290
- unless include?(other.begin) || other.include?(self.begin)
291
- return EMPTY_RANGE
535
+ def merge(range)
536
+ self
292
537
  end
293
538
 
294
- endpoint = ends_before?(other) ? self : other
295
- VersionRange.new(self.begin, endpoint.end, endpoint.exclude_end?)
296
- end
297
- alias :& :intersection
539
+ def test_prerelease?(_)
540
+ true
541
+ end
298
542
 
299
- # Returns a string representation of this range, prefering simple common
300
- # expressions for comprehension.
301
- #
302
- # @return [String] a range expression representing this VersionRange
303
- def to_s
304
- start, finish = self.begin, self.end
305
- inclusive = exclude_end? ? '' : '='
306
-
307
- case
308
- when EMPTY_RANGE == self
309
- "<0.0.0"
310
- when exact_version?, patch_version?
311
- "#{ start }"
312
- when minor_version?
313
- "#{ start }".sub(/.0$/, '.x')
314
- when major_version?
315
- "#{ start }".sub(/.0.0$/, '.x')
316
- when open_end? && start.to_s =~ /-.*[.]0$/
317
- ">#{ start }".sub(/.0$/, '')
318
- when open_end?
319
- ">=#{ start }"
320
- when open_begin?
321
- "<#{ inclusive }#{ finish }"
322
- else
323
- ">=#{ start } <#{ inclusive }#{ finish }"
543
+ def stable?
544
+ true
545
+ end
546
+
547
+ def to_s
548
+ '*'
324
549
  end
325
550
  end
326
- alias :inspect :to_s
327
551
 
328
- private
552
+ # @api private
553
+ class MinMaxRange < AbstractRange
554
+ attr_reader :min, :max
329
555
 
330
- # Determines whether this {VersionRange} has an earlier endpoint than the
331
- # give `other` range.
332
- #
333
- # @param other [VersionRange] the range to compare against
334
- # @return [Boolean] true if the endpoint for this range is less than or
335
- # equal to the endpoint of the `other` range.
336
- def ends_before?(other)
337
- self.end < other.end || (self.end == other.end && self.exclude_end?)
338
- end
556
+ def self.create(*ranges)
557
+ ranges.reduce { |memo, range| memo.intersection(range) }
558
+ end
339
559
 
340
- # Describes whether this range has an upper limit.
341
- # @return [Boolean] true if this range has no upper limit
342
- def open_end?
343
- self.end == SemanticPuppet::Version::MAX
344
- end
560
+ def initialize(min, max)
561
+ @min = min.is_a?(MinMaxRange) ? min.min : min
562
+ @max = max.is_a?(MinMaxRange) ? max.max : max
563
+ end
345
564
 
346
- # Describes whether this range has a lower limit.
347
- # @return [Boolean] true if this range has no lower limit
348
- def open_begin?
349
- self.begin == SemanticPuppet::Version::MIN
350
- end
565
+ def begin
566
+ @min.begin
567
+ end
351
568
 
352
- # Describes whether this range follows the patterns for matching all
353
- # releases with the same exact version.
354
- # @return [Boolean] true if this range matches only a single exact version
355
- def exact_version?
356
- self.begin == self.end
357
- end
569
+ def end
570
+ @max.end
571
+ end
572
+
573
+ def exclude_begin?
574
+ @min.exclude_begin?
575
+ end
576
+
577
+ def exclude_end?
578
+ @max.exclude_end?
579
+ end
580
+
581
+ def eql?(other)
582
+ super && @min.eql?(other.min) && @max.eql?(other.max)
583
+ end
584
+
585
+ def hash
586
+ @min.hash ^ @max.hash
587
+ end
588
+
589
+ def include?(version)
590
+ @min.include?(version) && @max.include?(version)
591
+ end
592
+
593
+ def lower_bound?
594
+ @min.lower_bound?
595
+ end
596
+
597
+ def upper_bound?
598
+ @max.upper_bound?
599
+ end
600
+
601
+ def test_prerelease?(version)
602
+ @min.test_prerelease?(version) || @max.test_prerelease?(version)
603
+ end
604
+
605
+ def stable?
606
+ @min.stable? && @max.stable?
607
+ end
358
608
 
359
- # Describes whether this range follows the patterns for matching all
360
- # releases with the same major version.
361
- # @return [Boolean] true if this range matches only a single major version
362
- def major_version?
363
- start, finish = self.begin, self.end
364
-
365
- exclude_end? &&
366
- start.major.next == finish.major &&
367
- same_minor? && start.minor == 0 &&
368
- same_patch? && start.patch == 0 &&
369
- [start.prerelease, finish.prerelease] == ['', '']
609
+ def to_s
610
+ "#{@min} #{@max}"
611
+ end
612
+ alias inspect to_s
370
613
  end
371
614
 
372
- # Describes whether this range follows the patterns for matching all
373
- # releases with the same minor version.
374
- # @return [Boolean] true if this range matches only a single minor version
375
- def minor_version?
376
- start, finish = self.begin, self.end
377
-
378
- exclude_end? &&
379
- same_major? &&
380
- start.minor.next == finish.minor &&
381
- same_patch? && start.patch == 0 &&
382
- [start.prerelease, finish.prerelease] == ['', '']
615
+ # @api private
616
+ class ComparatorRange < AbstractRange
617
+ attr_reader :version
618
+
619
+ def initialize(version)
620
+ @version = version
621
+ end
622
+
623
+ def eql?(other)
624
+ super && @version.eql?(other.version)
625
+ end
626
+
627
+ def hash
628
+ @class.hash ^ @version.hash
629
+ end
630
+
631
+ # Checks if this matcher accepts a prerelease with the same major, minor, patch triple as the given version
632
+ def test_prerelease?(version)
633
+ !@version.stable? && @version.major == version.major && @version.minor == version.minor && @version.patch == version.patch
634
+ end
635
+
636
+ def stable?
637
+ @version.stable?
638
+ end
383
639
  end
384
640
 
385
- # Describes whether this range follows the patterns for matching all
386
- # releases with the same patch version.
387
- # @return [Boolean] true if this range matches only a single patch version
388
- def patch_version?
389
- start, finish = self.begin, self.end
390
-
391
- exclude_end? &&
392
- same_major? &&
393
- same_minor? &&
394
- start.patch.next == finish.patch &&
395
- [start.prerelease, finish.prerelease] == ['', '']
641
+ # @api private
642
+ class GtRange < ComparatorRange
643
+ def include?(version)
644
+ version > @version
645
+ end
646
+
647
+ def exclude_begin?
648
+ true
649
+ end
650
+
651
+ def begin
652
+ @version
653
+ end
654
+
655
+ def lower_bound?
656
+ true
657
+ end
658
+
659
+ def to_s
660
+ ">#{@version}"
661
+ end
396
662
  end
397
663
 
398
- # @return [Boolean] true if `begin` and `end` share the same major verion
399
- def same_major?
400
- self.begin.major == self.end.major
664
+ # @api private
665
+ class GtEqRange < ComparatorRange
666
+ def include?(version)
667
+ version >= @version
668
+ end
669
+
670
+ def begin
671
+ @version
672
+ end
673
+
674
+ def lower_bound?
675
+ @version != Version::MIN
676
+ end
677
+
678
+ def to_s
679
+ ">=#{@version}"
680
+ end
401
681
  end
402
682
 
403
- # @return [Boolean] true if `begin` and `end` share the same minor verion
404
- def same_minor?
405
- self.begin.minor == self.end.minor
683
+ # @api private
684
+ class LtRange < ComparatorRange
685
+ MATCH_NOTHING = LtRange.new(Version::MIN)
686
+
687
+ def include?(version)
688
+ version < @version
689
+ end
690
+
691
+ def exclude_end?
692
+ true
693
+ end
694
+
695
+ def end
696
+ @version
697
+ end
698
+
699
+ def upper_bound?
700
+ true
701
+ end
702
+
703
+ def to_s
704
+ self.equal?(MATCH_NOTHING) ? '<0.0.0' : "<#{@version}"
705
+ end
406
706
  end
407
707
 
408
- # @return [Boolean] true if `begin` and `end` share the same patch verion
409
- def same_patch?
410
- self.begin.patch == self.end.patch
708
+ # @api private
709
+ class LtEqRange < ComparatorRange
710
+ def include?(version)
711
+ version <= @version
712
+ end
713
+
714
+ def end
715
+ @version
716
+ end
717
+
718
+ def upper_bound?
719
+ @version != Version::MAX
720
+ end
721
+
722
+ def to_s
723
+ "<=#{@version}"
724
+ end
411
725
  end
412
726
 
413
- undef :to_a
727
+ # @api private
728
+ class EqRange < ComparatorRange
729
+ def include?(version)
730
+ version == @version
731
+ end
414
732
 
415
- NOT_A_VERSION_RANGE = ArgumentError.new("value must be a #{VersionRange}")
733
+ def begin
734
+ @version
735
+ end
736
+
737
+ def lower_bound?
738
+ @version != Version::MIN
739
+ end
416
740
 
417
- public
741
+ def upper_bound?
742
+ @version != Version::MAX
743
+ end
744
+
745
+ def end
746
+ @version
747
+ end
748
+
749
+ def to_s
750
+ @version.to_s
751
+ end
752
+ end
418
753
 
419
754
  # A range that matches no versions
420
- EMPTY_RANGE = VersionRange.parse('< 0.0.0').freeze
755
+ EMPTY_RANGE = VersionRange.new([], nil).freeze
756
+ ALL_RANGE = VersionRange.new([AllRange::SINGLETON], '*')
421
757
  end
422
758
  end