puppet 4.8.2 → 4.9.0

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

Potentially problematic release.


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

Files changed (348) hide show
  1. checksums.yaml +15 -0
  2. data/CONTRIBUTING.md +25 -1
  3. data/Gemfile +6 -0
  4. data/Rakefile +1 -0
  5. data/ext/project_data.yaml +5 -1
  6. data/ext/windows/service/daemon.rb +2 -1
  7. data/install.rb +43 -6
  8. data/lib/hiera/puppet_function.rb +15 -17
  9. data/lib/hiera/scope.rb +12 -14
  10. data/lib/puppet.rb +52 -0
  11. data/lib/puppet/application/face_base.rb +4 -0
  12. data/lib/puppet/application/lookup.rb +4 -2
  13. data/lib/puppet/application/resource.rb +1 -1
  14. data/lib/puppet/data_providers.rb +6 -3
  15. data/lib/puppet/data_providers/data_adapter.rb +6 -0
  16. data/lib/puppet/data_providers/data_function_support.rb +7 -0
  17. data/lib/puppet/data_providers/function_env_data_provider.rb +7 -0
  18. data/lib/puppet/data_providers/function_module_data_provider.rb +6 -0
  19. data/lib/puppet/data_providers/hiera_config.rb +31 -10
  20. data/lib/puppet/data_providers/hiera_env_data_provider.rb +6 -0
  21. data/lib/puppet/data_providers/hiera_interpolate.rb +2 -1
  22. data/lib/puppet/data_providers/hiera_module_data_provider.rb +6 -0
  23. data/lib/puppet/data_providers/hiera_support.rb +6 -0
  24. data/lib/puppet/data_providers/json_data_provider_factory.rb +12 -0
  25. data/lib/puppet/data_providers/yaml_data_provider_factory.rb +12 -0
  26. data/lib/puppet/defaults.rb +25 -4
  27. data/lib/puppet/face/ca.rb +2 -0
  28. data/lib/puppet/face/certificate_request.rb +2 -0
  29. data/lib/puppet/face/certificate_revocation_list.rb +2 -0
  30. data/lib/puppet/face/file.rb +3 -0
  31. data/lib/puppet/face/help.rb +19 -17
  32. data/lib/puppet/face/help/face.erb +3 -0
  33. data/lib/puppet/face/key.rb +1 -0
  34. data/lib/puppet/face/man.rb +4 -2
  35. data/lib/puppet/face/module/generate.rb +1 -1
  36. data/lib/puppet/face/status.rb +2 -0
  37. data/lib/puppet/feature/base.rb +9 -2
  38. data/lib/puppet/feature/hocon.rb +3 -0
  39. data/lib/puppet/file_system.rb +15 -3
  40. data/lib/puppet/file_system/windows.rb +8 -0
  41. data/lib/puppet/forge.rb +6 -6
  42. data/lib/puppet/forge/repository.rb +1 -2
  43. data/lib/puppet/functions/binary_file.rb +4 -10
  44. data/lib/puppet/functions/hiera_array.rb +1 -1
  45. data/lib/puppet/functions/hiera_include.rb +1 -1
  46. data/lib/puppet/functions/hocon_data.rb +24 -0
  47. data/lib/puppet/functions/json_data.rb +18 -0
  48. data/lib/puppet/functions/yaml_data.rb +21 -0
  49. data/lib/puppet/generate/type.rb +1 -1
  50. data/lib/puppet/graph/simple_graph.rb +4 -2
  51. data/lib/puppet/indirector/file_bucket_file/file.rb +10 -2
  52. data/lib/puppet/indirector/request.rb +5 -1
  53. data/lib/puppet/interface.rb +14 -2
  54. data/lib/puppet/interface/face_collection.rb +1 -1
  55. data/lib/puppet/module.rb +14 -2
  56. data/lib/puppet/module_tool.rb +4 -4
  57. data/lib/puppet/module_tool/applications/builder.rb +3 -2
  58. data/lib/puppet/module_tool/applications/installer.rb +14 -14
  59. data/lib/puppet/module_tool/applications/upgrader.rb +13 -13
  60. data/lib/puppet/module_tool/installed_modules.rb +7 -7
  61. data/lib/puppet/module_tool/local_tarball.rb +3 -3
  62. data/lib/puppet/module_tool/metadata.rb +1 -1
  63. data/lib/puppet/network/http/connection.rb +2 -0
  64. data/lib/puppet/network/http/webrick.rb +2 -1
  65. data/lib/puppet/parser/functions/hiera.rb +14 -0
  66. data/lib/puppet/parser/functions/hiera_array.rb +14 -0
  67. data/lib/puppet/parser/functions/hiera_hash.rb +14 -0
  68. data/lib/puppet/parser/functions/hiera_include.rb +14 -0
  69. data/lib/puppet/parser/scope.rb +14 -20
  70. data/lib/puppet/plugins/data_providers.rb +2 -0
  71. data/lib/puppet/plugins/data_providers/data_provider.rb +108 -17
  72. data/lib/puppet/plugins/data_providers/registry.rb +2 -36
  73. data/lib/puppet/pops.rb +6 -9
  74. data/lib/puppet/pops/adaptable.rb +0 -3
  75. data/lib/puppet/pops/binder/producers.rb +3 -3
  76. data/lib/puppet/pops/evaluator/access_operator.rb +4 -4
  77. data/lib/puppet/pops/evaluator/closure.rb +1 -1
  78. data/lib/puppet/pops/evaluator/compare_operator.rb +4 -4
  79. data/lib/puppet/pops/evaluator/evaluator_impl.rb +1 -1
  80. data/lib/puppet/pops/issues.rb +4 -0
  81. data/lib/puppet/pops/label_provider.rb +14 -0
  82. data/lib/puppet/pops/loader/loader_paths.rb +3 -1
  83. data/lib/puppet/pops/loader/module_loaders.rb +21 -7
  84. data/lib/puppet/pops/loader/typed_name.rb +0 -2
  85. data/lib/puppet/pops/loaders.rb +31 -12
  86. data/lib/puppet/pops/lookup.rb +4 -3
  87. data/lib/puppet/pops/lookup/configured_data_provider.rb +87 -0
  88. data/lib/puppet/pops/lookup/context.rb +121 -71
  89. data/lib/puppet/pops/lookup/data_adapter.rb +27 -0
  90. data/lib/puppet/pops/lookup/data_dig_function_provider.rb +55 -0
  91. data/lib/puppet/pops/lookup/data_hash_function_provider.rb +111 -0
  92. data/lib/puppet/pops/lookup/data_provider.rb +102 -0
  93. data/lib/puppet/pops/lookup/environment_data_provider.rb +27 -0
  94. data/lib/puppet/pops/lookup/explainer.rb +122 -82
  95. data/lib/puppet/pops/lookup/function_provider.rb +82 -0
  96. data/lib/puppet/pops/lookup/global_data_provider.rb +49 -0
  97. data/lib/puppet/pops/lookup/hiera_config.rb +601 -0
  98. data/lib/puppet/pops/lookup/interpolation.rb +56 -35
  99. data/lib/puppet/pops/lookup/invocation.rb +179 -101
  100. data/lib/puppet/pops/lookup/location_resolver.rb +72 -0
  101. data/lib/puppet/pops/lookup/lookup_adapter.rb +451 -0
  102. data/lib/puppet/pops/lookup/lookup_key.rb +99 -0
  103. data/lib/puppet/pops/lookup/lookup_key_function_provider.rb +119 -0
  104. data/lib/puppet/pops/lookup/module_data_provider.rb +58 -0
  105. data/lib/puppet/pops/lookup/sub_lookup.rb +8 -4
  106. data/lib/puppet/pops/merge_strategy.rb +120 -39
  107. data/lib/puppet/pops/parser/egrammar.ra +2 -0
  108. data/lib/puppet/pops/parser/eparser.rb +816 -808
  109. data/lib/puppet/pops/parser/locator.rb +3 -3
  110. data/lib/puppet/pops/parser/slurp_support.rb +4 -3
  111. data/lib/puppet/pops/pcore.rb +21 -12
  112. data/lib/puppet/pops/serialization/abstract_reader.rb +17 -7
  113. data/lib/puppet/pops/serialization/abstract_writer.rb +27 -12
  114. data/lib/puppet/pops/serialization/deserializer.rb +17 -4
  115. data/lib/puppet/pops/serialization/extension.rb +37 -8
  116. data/lib/puppet/pops/serialization/object.rb +14 -6
  117. data/lib/puppet/pops/serialization/rgen.rb +2 -1
  118. data/lib/puppet/pops/serialization/serializer.rb +30 -7
  119. data/lib/puppet/pops/types/implementation_registry.rb +1 -1
  120. data/lib/puppet/pops/types/p_object_type.rb +55 -12
  121. data/lib/puppet/pops/types/p_sem_ver_range_type.rb +27 -27
  122. data/lib/puppet/pops/types/p_sem_ver_type.rb +12 -12
  123. data/lib/puppet/pops/types/p_timespan_type.rb +6 -6
  124. data/lib/puppet/pops/types/p_timestamp_type.rb +2 -2
  125. data/lib/puppet/pops/types/p_type_set_type.rb +7 -16
  126. data/lib/puppet/pops/types/recursion_guard.rb +64 -20
  127. data/lib/puppet/pops/types/ruby_generator.rb +10 -0
  128. data/lib/puppet/pops/types/type_calculator.rb +23 -13
  129. data/lib/puppet/pops/types/type_factory.rb +20 -9
  130. data/lib/puppet/pops/types/type_formatter.rb +37 -17
  131. data/lib/puppet/pops/types/type_mismatch_describer.rb +7 -6
  132. data/lib/puppet/pops/types/type_parser.rb +6 -0
  133. data/lib/puppet/pops/types/types.rb +225 -132
  134. data/lib/puppet/pops/validation.rb +1 -1
  135. data/lib/puppet/pops/validation/checker4_0.rb +12 -2
  136. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
  137. data/lib/puppet/pops/visitor.rb +4 -3
  138. data/lib/puppet/provider/mcx/mcxcontent.rb +2 -1
  139. data/lib/puppet/provider/nameservice.rb +15 -0
  140. data/lib/puppet/provider/package/appdmg.rb +1 -1
  141. data/lib/puppet/provider/package/dnf.rb +1 -1
  142. data/lib/puppet/provider/package/pkg.rb +1 -1
  143. data/lib/puppet/provider/package/pkgdmg.rb +1 -1
  144. data/lib/puppet/provider/package/pkgng.rb +1 -1
  145. data/lib/puppet/provider/package/rpm.rb +2 -2
  146. data/lib/puppet/provider/service/smf.rb +3 -3
  147. data/lib/puppet/provider/service/systemd.rb +5 -1
  148. data/lib/puppet/provider/user/directoryservice.rb +1 -0
  149. data/lib/puppet/provider/user/user_role_add.rb +15 -0
  150. data/lib/puppet/provider/yumrepo/inifile.rb +2 -2
  151. data/lib/puppet/provider/zone/solaris.rb +4 -1
  152. data/lib/puppet/reference/indirection.rb +1 -1
  153. data/lib/puppet/resource.rb +2 -3
  154. data/lib/puppet/resource/catalog.rb +12 -4
  155. data/lib/puppet/resource/type.rb +3 -3
  156. data/lib/puppet/settings.rb +1 -1
  157. data/lib/puppet/settings/config_file.rb +2 -1
  158. data/lib/puppet/settings/directory_setting.rb +6 -0
  159. data/lib/puppet/settings/environment_conf.rb +6 -2
  160. data/lib/puppet/settings/file_or_directory_setting.rb +6 -0
  161. data/lib/puppet/settings/file_setting.rb +10 -0
  162. data/lib/puppet/ssl/certificate_authority.rb +13 -2
  163. data/lib/puppet/ssl/host.rb +23 -1
  164. data/lib/puppet/transaction/additional_resource_generator.rb +7 -0
  165. data/lib/puppet/type/user.rb +16 -3
  166. data/lib/puppet/util.rb +1 -0
  167. data/lib/puppet/util/execution.rb +3 -3
  168. data/lib/puppet/util/filetype.rb +11 -5
  169. data/lib/puppet/util/logging.rb +2 -1
  170. data/lib/puppet/util/network_device/config.rb +1 -1
  171. data/lib/puppet/util/plist.rb +6 -0
  172. data/lib/puppet/util/profiler/aggregate.rb +1 -1
  173. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +2 -2
  174. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +2 -1
  175. data/lib/puppet/util/windows/adsi.rb +15 -12
  176. data/lib/puppet/vendor/load_semantic_puppet.rb +1 -0
  177. data/lib/puppet/vendor/pathspec/lib/pathspec.rb +2 -1
  178. data/lib/puppet/vendor/require_vendored.rb +0 -1
  179. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet.rb +17 -0
  180. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency.rb +7 -7
  181. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/graph.rb +2 -2
  182. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/graph_node.rb +2 -2
  183. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/module_release.rb +58 -0
  184. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/source.rb +2 -2
  185. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/unsatisfiable_graph.rb +2 -2
  186. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/gem_version.rb +3 -0
  187. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/locales/config.yaml +21 -0
  188. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/version.rb +48 -21
  189. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/version_range.rb +15 -17
  190. data/lib/puppet/version.rb +1 -1
  191. data/lib/semver.rb +19 -12
  192. data/locales/config.yaml +29 -0
  193. data/locales/puppet.pot +79 -0
  194. data/man/man5/puppet.conf.5 +1 -1
  195. data/spec/fixtures/unit/application/environments/puppet_func_provider/functions/{data.pp → environment/data.pp} +0 -0
  196. data/spec/fixtures/unit/data_providers/environments/hiera_misc/data/common.yaml +2 -0
  197. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/data/common.yaml +1 -1
  198. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/hiera.yaml +5 -0
  199. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/lib/puppet/bindings/backend/default.rb +9 -0
  200. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/lib/puppet_x/backend/special_data_provider_factory.rb +23 -0
  201. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/manifests/init.pp +5 -0
  202. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/metadata.json +9 -0
  203. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_env_data.rb +1 -0
  204. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/manifests/init.pp +1 -1
  205. data/spec/fixtures/unit/functions/lookup/data/common.yaml +19 -0
  206. data/spec/fixtures/unit/functions/lookup_fixture/data/common.yaml +19 -0
  207. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/environment.conf +0 -0
  208. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/lib/puppet/functions/environment/data.rb +0 -0
  209. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/lib/puppet/bindings/abc/default.rb +0 -0
  210. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/lib/puppet/functions/abc/data.rb +0 -0
  211. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/manifests/init.pp +0 -0
  212. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/lib/puppet/bindings/bad_data/default.rb +0 -0
  213. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +0 -0
  214. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/manifests/init.pp +0 -0
  215. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/lib/puppet/bindings/bca/default.rb +0 -0
  216. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/lib/puppet/functions/bca/data.rb +0 -0
  217. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/manifests/init.pp +0 -0
  218. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/data/empty.json +0 -0
  219. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/hiera.yaml +0 -0
  220. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/manifests/init.pp +0 -0
  221. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/metadata.json +0 -0
  222. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/data/empty_key.json +0 -0
  223. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/hiera.yaml +0 -0
  224. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/manifests/init.pp +0 -0
  225. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/metadata.json +0 -0
  226. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/data/empty_key.yaml +0 -0
  227. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/hiera.yaml +0 -0
  228. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/manifests/init.pp +0 -0
  229. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/metadata.json +0 -0
  230. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/data/empty.yaml +0 -0
  231. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/hiera.yaml +0 -0
  232. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/manifests/init.pp +0 -0
  233. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/metadata.json +0 -0
  234. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/data/first.json +0 -0
  235. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/hiera.yaml +0 -0
  236. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/manifests/init.pp +0 -0
  237. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/metadata.json +0 -0
  238. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/meta/lib/puppet/functions/meta/data.rb +0 -0
  239. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/meta/manifests/init.pp +0 -0
  240. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/meta/metadata.json +0 -0
  241. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/lib/puppet/bindings/metawcp/default.rb +0 -0
  242. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/lib/puppet_x/thallgren/sample_module_data.rb +0 -0
  243. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/manifests/init.pp +0 -0
  244. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/metadata.json +0 -0
  245. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/no_provider/manifests/init.pp +0 -0
  246. data/spec/integration/application/apply_spec.rb +88 -2
  247. data/spec/integration/application/lookup_spec.rb +155 -0
  248. data/spec/integration/data_binding_spec.rb +5 -5
  249. data/spec/integration/defaults_spec.rb +13 -0
  250. data/spec/integration/environments/default_manifest_spec.rb +16 -16
  251. data/spec/integration/environments/setting_hooks_spec.rb +1 -1
  252. data/spec/integration/test/test_helper_spec.rb +6 -2
  253. data/spec/integration/transaction_spec.rb +74 -0
  254. data/spec/integration/util/execution_spec.rb +8 -0
  255. data/spec/lib/puppet_spec/module_tool/shared_functions.rb +2 -2
  256. data/spec/lib/puppet_spec/module_tool/stub_source.rb +1 -1
  257. data/spec/lib/puppet_spec/unindent.rb +2 -2
  258. data/spec/unit/application/face_base_spec.rb +16 -0
  259. data/spec/unit/application/lookup_spec.rb +262 -227
  260. data/spec/unit/data_providers/{sample_data_provider_spec.rb → custom_data_provider_spec.rb} +14 -16
  261. data/spec/unit/data_providers/function_data_provider_spec.rb +2 -2
  262. data/spec/unit/data_providers/hiera_data_provider_spec.rb +60 -97
  263. data/spec/unit/defaults_spec.rb +1 -1
  264. data/spec/unit/face/ca_spec.rb +10 -0
  265. data/spec/unit/face/certificate_request_spec.rb +10 -0
  266. data/spec/unit/face/certificate_revocation_list_spec.rb +10 -0
  267. data/spec/unit/face/file_spec.rb +4 -0
  268. data/spec/unit/face/help_spec.rb +17 -0
  269. data/spec/unit/face/key_spec.rb +10 -0
  270. data/spec/unit/face/status_spec.rb +10 -0
  271. data/spec/unit/file_system_spec.rb +143 -6
  272. data/spec/unit/functions/binary_file_spec.rb +1 -1
  273. data/spec/unit/functions/hiera_spec.rb +257 -47
  274. data/spec/unit/functions/lookup_fixture_spec.rb +693 -0
  275. data/spec/unit/functions/lookup_spec.rb +1319 -608
  276. data/spec/unit/functions/new_spec.rb +3 -3
  277. data/spec/unit/graph/rb_tree_map_spec.rb +1 -1
  278. data/spec/unit/graph/simple_graph_spec.rb +1 -1
  279. data/spec/unit/hiera/scope_spec.rb +4 -4
  280. data/spec/unit/indirector/request_spec.rb +9 -0
  281. data/spec/unit/interface_spec.rb +27 -0
  282. data/spec/unit/man_spec.rb +1 -1
  283. data/spec/unit/module_spec.rb +1 -1
  284. data/spec/unit/module_tool/applications/builder_spec.rb +16 -1
  285. data/spec/unit/module_tool/applications/installer_spec.rb +1 -1
  286. data/spec/unit/module_tool/applications/upgrader_spec.rb +1 -1
  287. data/spec/unit/module_tool/installed_modules_spec.rb +6 -6
  288. data/spec/unit/module_tool_spec.rb +3 -3
  289. data/spec/unit/network/http/connection_spec.rb +10 -0
  290. data/spec/unit/network/http/webrick_spec.rb +1 -1
  291. data/spec/unit/pops/evaluator/access_ops_spec.rb +2 -2
  292. data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +9 -9
  293. data/spec/unit/pops/loaders/environment_loader_spec.rb +172 -0
  294. data/spec/unit/pops/lookup/context_spec.rb +45 -16
  295. data/spec/unit/pops/lookup/interpolation_spec.rb +28 -20
  296. data/spec/unit/pops/lookup/lookup_spec.rb +197 -0
  297. data/spec/unit/pops/merge_strategy_spec.rb +18 -0
  298. data/spec/unit/pops/parser/lexer2_spec.rb +16 -1
  299. data/spec/unit/pops/parser/parse_site_spec.rb +4 -0
  300. data/spec/unit/pops/serialization/packer_spec.rb +4 -23
  301. data/spec/unit/pops/serialization/serialization_spec.rb +32 -8
  302. data/spec/unit/pops/types/p_object_type_spec.rb +68 -3
  303. data/spec/unit/pops/types/p_sem_ver_type_spec.rb +4 -4
  304. data/spec/unit/pops/types/p_type_set_type_spec.rb +31 -2
  305. data/spec/unit/pops/types/type_acceptor_spec.rb +18 -17
  306. data/spec/unit/pops/types/type_calculator_spec.rb +39 -40
  307. data/spec/unit/pops/types/type_factory_spec.rb +3 -3
  308. data/spec/unit/pops/types/type_formatter_spec.rb +7 -3
  309. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +13 -2
  310. data/spec/unit/pops/types/types_spec.rb +25 -2
  311. data/spec/unit/pops/validator/validator_spec.rb +60 -4
  312. data/spec/unit/provider/nameservice_spec.rb +42 -0
  313. data/spec/unit/provider/package/aptrpm_spec.rb +1 -1
  314. data/spec/unit/provider/package/pkg_spec.rb +22 -0
  315. data/spec/unit/provider/package/pkgng_spec.rb +12 -0
  316. data/spec/unit/provider/package/rpm_spec.rb +8 -8
  317. data/spec/unit/provider/service/smf_spec.rb +13 -11
  318. data/spec/unit/provider/service/systemd_spec.rb +8 -1
  319. data/spec/unit/provider/user/useradd_spec.rb +1 -0
  320. data/spec/unit/puppet_spec.rb +14 -0
  321. data/spec/unit/resource/catalog_spec.rb +15 -9
  322. data/spec/unit/resource_spec.rb +20 -17
  323. data/spec/unit/semver_spec.rb +14 -0
  324. data/spec/unit/ssl/certificate_authority_spec.rb +12 -1
  325. data/spec/unit/transaction/additional_resource_generator_spec.rb +11 -0
  326. data/spec/unit/type/user_spec.rb +32 -6
  327. data/spec/unit/util/filetype_spec.rb +3 -3
  328. data/spec/unit/util/yaml_spec.rb +1 -1
  329. data/spec/unit/util_spec.rb +10 -2
  330. data/tasks/i18n.rake +20 -0
  331. metadata +2661 -2593
  332. data/lib/puppet/data_providers/lookup_adapter.rb +0 -254
  333. data/lib/puppet/vendor/load_semantic.rb +0 -1
  334. data/lib/puppet/vendor/semantic/Gemfile +0 -20
  335. data/lib/puppet/vendor/semantic/PUPPET_README.md +0 -6
  336. data/lib/puppet/vendor/semantic/Rakefile +0 -69
  337. data/lib/puppet/vendor/semantic/lib/semantic.rb +0 -7
  338. data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +0 -60
  339. data/lib/puppet/vendor/semantic/spec/spec_helper.rb +0 -24
  340. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/graph_node_spec.rb +0 -141
  341. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/graph_spec.rb +0 -162
  342. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/module_release_spec.rb +0 -143
  343. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/source_spec.rb +0 -5
  344. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/unsatisfiable_graph_spec.rb +0 -44
  345. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency_spec.rb +0 -383
  346. data/lib/puppet/vendor/semantic/spec/unit/semantic/version_range_spec.rb +0 -307
  347. data/lib/puppet/vendor/semantic/spec/unit/semantic/version_spec.rb +0 -608
  348. data/spec/fixtures/unit/data_providers/environments/sample/manifests/site.pp +0 -6
@@ -1,608 +0,0 @@
1
- require 'spec_helper'
2
- require 'semantic/version'
3
-
4
- describe Semantic::Version do
5
-
6
- def subject(str)
7
- Semantic::Version.parse(str)
8
- end
9
-
10
- describe '.parse' do
11
-
12
- context 'Spec v2.0.0' do
13
- context 'Section 2' do
14
- # A normal version number MUST take the form X.Y.Z where X, Y, and Z are
15
- # non-negative integers, and MUST NOT contain leading zeroes. X is the
16
- # major version, Y is the minor version, and Z is the patch version.
17
- # Each element MUST increase numerically.
18
- # For instance: 1.9.0 -> 1.10.0 -> 1.11.0.
19
-
20
- let(:must_begin_with_digits) do
21
- 'Version numbers MUST begin with three dot-separated numbers'
22
- end
23
-
24
- let(:no_leading_zeroes) do
25
- 'Version numbers MUST NOT contain leading zeroes'
26
- end
27
-
28
- it 'rejects versions that contain too few parts' do
29
- expect { subject('1.2') }.to raise_error(must_begin_with_digits)
30
- end
31
-
32
- it 'rejects versions that contain too many parts' do
33
- expect { subject('1.2.3.4') }.to raise_error(must_begin_with_digits)
34
- end
35
-
36
- it 'rejects versions that contain non-integers' do
37
- expect { subject('x.2.3') }.to raise_error(must_begin_with_digits)
38
- expect { subject('1.y.3') }.to raise_error(must_begin_with_digits)
39
- expect { subject('1.2.z') }.to raise_error(must_begin_with_digits)
40
- end
41
-
42
- it 'rejects versions that contain negative integers' do
43
- expect { subject('-1.2.3') }.to raise_error(must_begin_with_digits)
44
- expect { subject('1.-2.3') }.to raise_error(must_begin_with_digits)
45
- expect { subject('1.2.-3') }.to raise_error(must_begin_with_digits)
46
- end
47
-
48
- it 'rejects version numbers containing leading zeroes' do
49
- expect { subject('01.2.3') }.to raise_error(no_leading_zeroes)
50
- expect { subject('1.02.3') }.to raise_error(no_leading_zeroes)
51
- expect { subject('1.2.03') }.to raise_error(no_leading_zeroes)
52
- end
53
-
54
- it 'permits zeroes in version number parts' do
55
- expect { subject('0.2.3') }.to_not raise_error
56
- expect { subject('1.0.3') }.to_not raise_error
57
- expect { subject('1.2.0') }.to_not raise_error
58
- end
59
-
60
- context 'examples' do
61
- example '1.9.0' do
62
- version = subject('1.9.0')
63
- expect(version.major).to eql 1
64
- expect(version.minor).to eql 9
65
- expect(version.patch).to eql 0
66
- end
67
-
68
- example '1.10.0' do
69
- version = subject('1.10.0')
70
- expect(version.major).to eql 1
71
- expect(version.minor).to eql 10
72
- expect(version.patch).to eql 0
73
- end
74
-
75
- example '1.11.0' do
76
- version = subject('1.11.0')
77
- expect(version.major).to eql 1
78
- expect(version.minor).to eql 11
79
- expect(version.patch).to eql 0
80
- end
81
- end
82
- end
83
-
84
- context 'Section 9' do
85
- # A pre-release version MAY be denoted by appending a hyphen and a
86
- # series of dot separated identifiers immediately following the patch
87
- # version. Identifiers MUST comprise only ASCII alphanumerics and
88
- # hyphen [0-9A-Za-z-]. Identifiers MUST NOT be empty. Numeric
89
- # identifiers MUST NOT include leading zeroes. Pre-release versions
90
- # have a lower precedence than the associated normal version. A
91
- # pre-release version indicates that the version is unstable and
92
- # might not satisfy the intended compatibility requirements as denoted
93
- # by its associated normal version.
94
- # Examples: 1.0.0-alpha, 1.0.0-alpha.1, 1.0.0-0.3.7, 1.0.0-x.7.z.92.
95
-
96
- let(:restricted_charset) do
97
- 'Prerelease identifiers MUST use only ASCII alphanumerics and hyphens'
98
- end
99
-
100
- let(:must_not_be_empty) do
101
- 'Prerelease identifiers MUST NOT be empty'
102
- end
103
-
104
- let(:no_leading_zeroes) do
105
- 'Prerelease identifiers MUST NOT contain leading zeroes'
106
- end
107
-
108
- it 'rejects prerelease identifiers with non-alphanumerics' do
109
- expect { subject('1.2.3-$100') }.to raise_error(restricted_charset)
110
- expect { subject('1.2.3-rc.1@me') }.to raise_error(restricted_charset)
111
- end
112
-
113
- it 'rejects empty prerelease versions' do
114
- expect { subject('1.2.3-') }.to raise_error(must_not_be_empty)
115
- end
116
-
117
- it 'rejects empty prerelease version identifiers' do
118
- expect { subject('1.2.3-.rc1') }.to raise_error(must_not_be_empty)
119
- expect { subject('1.2.3-rc1.') }.to raise_error(must_not_be_empty)
120
- expect { subject('1.2.3-rc..1') }.to raise_error(must_not_be_empty)
121
- end
122
-
123
- it 'rejects numeric prerelease identifiers with leading zeroes' do
124
- expect { subject('1.2.3-01') }.to raise_error(no_leading_zeroes)
125
- expect { subject('1.2.3-rc.01') }.to raise_error(no_leading_zeroes)
126
- end
127
-
128
- it 'permits numeric prerelease identifiers of zero' do
129
- expect { subject('1.2.3-0') }.to_not raise_error
130
- expect { subject('1.2.3-rc.0') }.to_not raise_error
131
- end
132
-
133
- it 'permits non-numeric prerelease identifiers with leading zeroes' do
134
- expect { subject('1.2.3-0xDEADBEEF') }.to_not raise_error
135
- expect { subject('1.2.3-rc.0x10c') }.to_not raise_error
136
- end
137
-
138
- context 'examples' do
139
- example '1.0.0-alpha' do
140
- version = subject('1.0.0-alpha')
141
- expect(version.major).to eql 1
142
- expect(version.minor).to eql 0
143
- expect(version.patch).to eql 0
144
- expect(version.prerelease).to eql 'alpha'
145
- end
146
-
147
- example '1.0.0-alpha.1' do
148
- version = subject('1.0.0-alpha.1')
149
- expect(version.major).to eql 1
150
- expect(version.minor).to eql 0
151
- expect(version.patch).to eql 0
152
- expect(version.prerelease).to eql 'alpha.1'
153
- end
154
-
155
- example '1.0.0-0.3.7' do
156
- version = subject('1.0.0-0.3.7')
157
- expect(version.major).to eql 1
158
- expect(version.minor).to eql 0
159
- expect(version.patch).to eql 0
160
- expect(version.prerelease).to eql '0.3.7'
161
- end
162
-
163
- example '1.0.0-x.7.z.92' do
164
- version = subject('1.0.0-x.7.z.92')
165
- expect(version.major).to eql 1
166
- expect(version.minor).to eql 0
167
- expect(version.patch).to eql 0
168
- expect(version.prerelease).to eql 'x.7.z.92'
169
- end
170
- end
171
- end
172
-
173
- context 'Section 10' do
174
- # Build metadata MAY be denoted by appending a plus sign and a series
175
- # of dot separated identifiers immediately following the patch or
176
- # pre-release version. Identifiers MUST comprise only ASCII
177
- # alphanumerics and hyphen [0-9A-Za-z-]. Identifiers MUST NOT be empty.
178
- # Build metadata SHOULD be ignored when determining version precedence.
179
- # Thus two versions that differ only in the build metadata, have the
180
- # same precedence.
181
- # Examples: 1.0.0-alpha+001, 1.0.0+20130313144700,
182
- # 1.0.0-beta+exp.sha.5114f85.
183
-
184
-
185
- let(:restricted_charset) do
186
- 'Build identifiers MUST use only ASCII alphanumerics and hyphens'
187
- end
188
-
189
- let(:must_not_be_empty) do
190
- 'Build identifiers MUST NOT be empty'
191
- end
192
-
193
- it 'rejects build identifiers with non-alphanumerics' do
194
- expect { subject('1.2.3+$100') }.to raise_error(restricted_charset)
195
- expect { subject('1.2.3+rc.1@me') }.to raise_error(restricted_charset)
196
- end
197
-
198
- it 'rejects empty build metadata' do
199
- expect { subject('1.2.3+') }.to raise_error(must_not_be_empty)
200
- end
201
-
202
- it 'rejects empty build identifiers' do
203
- expect { subject('1.2.3+.rc1') }.to raise_error(must_not_be_empty)
204
- expect { subject('1.2.3+rc1.') }.to raise_error(must_not_be_empty)
205
- expect { subject('1.2.3+rc..1') }.to raise_error(must_not_be_empty)
206
- end
207
-
208
- it 'permits numeric build identifiers with leading zeroes' do
209
- expect { subject('1.2.3+01') }.to_not raise_error
210
- expect { subject('1.2.3+rc.01') }.to_not raise_error
211
- end
212
-
213
- it 'permits numeric build identifiers of zero' do
214
- expect { subject('1.2.3+0') }.to_not raise_error
215
- expect { subject('1.2.3+rc.0') }.to_not raise_error
216
- end
217
-
218
- it 'permits non-numeric build identifiers with leading zeroes' do
219
- expect { subject('1.2.3+0xDEADBEEF') }.to_not raise_error
220
- expect { subject('1.2.3+rc.0x10c') }.to_not raise_error
221
- end
222
-
223
- context 'examples' do
224
- example '1.0.0-alpha+001' do
225
- version = subject('1.0.0-alpha+001')
226
- expect(version.major).to eql 1
227
- expect(version.minor).to eql 0
228
- expect(version.patch).to eql 0
229
- expect(version.prerelease).to eql 'alpha'
230
- expect(version.build).to eql '001'
231
- end
232
-
233
- example '1.0.0+20130313144700' do
234
- version = subject('1.0.0+20130313144700')
235
- expect(version.major).to eql 1
236
- expect(version.minor).to eql 0
237
- expect(version.patch).to eql 0
238
- expect(version.prerelease).to eql nil
239
- expect(version.build).to eql '20130313144700'
240
- end
241
-
242
- example '1.0.0-beta+exp.sha.5114f85' do
243
- version = subject('1.0.0-beta+exp.sha.5114f85')
244
- expect(version.major).to eql 1
245
- expect(version.minor).to eql 0
246
- expect(version.patch).to eql 0
247
- expect(version.prerelease).to eql 'beta'
248
- expect(version.build).to eql 'exp.sha.5114f85'
249
- end
250
- end
251
- end
252
- end
253
-
254
- context 'Spec v1.0.0' do
255
- context 'Section 2' do
256
- # A normal version number MUST take the form X.Y.Z where X, Y, and Z
257
- # are integers. X is the major version, Y is the minor version, and Z
258
- # is the patch version. Each element MUST increase numerically by
259
- # increments of one.
260
- # For instance: 1.9.0 -> 1.10.0 -> 1.11.0
261
-
262
- let(:must_begin_with_digits) do
263
- 'Version numbers MUST begin with three dot-separated numbers'
264
- end
265
-
266
- let(:no_leading_zeroes) do
267
- 'Version numbers MUST NOT contain leading zeroes'
268
- end
269
-
270
- it 'rejects versions that contain too few parts' do
271
- expect { subject('1.2') }.to raise_error(must_begin_with_digits)
272
- end
273
-
274
- it 'rejects versions that contain too many parts' do
275
- expect { subject('1.2.3.4') }.to raise_error(must_begin_with_digits)
276
- end
277
-
278
- it 'rejects versions that contain non-integers' do
279
- expect { subject('x.2.3') }.to raise_error(must_begin_with_digits)
280
- expect { subject('1.y.3') }.to raise_error(must_begin_with_digits)
281
- expect { subject('1.2.z') }.to raise_error(must_begin_with_digits)
282
- end
283
-
284
- it 'permits zeroes in version number parts' do
285
- expect { subject('0.2.3') }.to_not raise_error
286
- expect { subject('1.0.3') }.to_not raise_error
287
- expect { subject('1.2.0') }.to_not raise_error
288
- end
289
-
290
- context 'examples' do
291
- example '1.9.0' do
292
- version = subject('1.9.0')
293
- expect(version.major).to eql 1
294
- expect(version.minor).to eql 9
295
- expect(version.patch).to eql 0
296
- end
297
-
298
- example '1.10.0' do
299
- version = subject('1.10.0')
300
- expect(version.major).to eql 1
301
- expect(version.minor).to eql 10
302
- expect(version.patch).to eql 0
303
- end
304
-
305
- example '1.11.0' do
306
- version = subject('1.11.0')
307
- expect(version.major).to eql 1
308
- expect(version.minor).to eql 11
309
- expect(version.patch).to eql 0
310
- end
311
- end
312
- end
313
-
314
- context 'Section 4' do
315
- # A pre-release version number MAY be denoted by appending an arbitrary
316
- # string immediately following the patch version and a dash. The string
317
- # MUST be comprised of only alphanumerics plus dash [0-9A-Za-z-].
318
- # Pre-release versions satisfy but have a lower precedence than the
319
- # associated normal version. Precedence SHOULD be determined by
320
- # lexicographic ASCII sort order.
321
- # For instance: 1.0.0-alpha1 < 1.0.0-beta1 < 1.0.0-beta2 < 1.0.0-rc1
322
-
323
- let(:restricted_charset) do
324
- 'Prerelease identifiers MUST use only ASCII alphanumerics and hyphens'
325
- end
326
-
327
- let(:must_not_be_empty) do
328
- 'Prerelease identifiers MUST NOT be empty'
329
- end
330
-
331
- let(:no_leading_zeroes) do
332
- 'Prerelease identifiers MUST NOT contain leading zeroes'
333
- end
334
-
335
- it 'rejects prerelease identifiers with non-alphanumerics' do
336
- expect { subject('1.2.3-$100') }.to raise_error(restricted_charset)
337
- expect { subject('1.2.3-rc.1@me') }.to raise_error(restricted_charset)
338
- end
339
-
340
- it 'rejects empty prerelease versions' do
341
- expect { subject('1.2.3-') }.to raise_error(must_not_be_empty)
342
- end
343
-
344
- pending 'permits numeric prerelease identifiers with leading zeroes' do
345
- expect { subject('1.2.3-01') }.to raise_error(no_leading_zeroes)
346
- end
347
-
348
- it 'permits numeric prerelease identifiers of zero' do
349
- expect { subject('1.2.3-0') }.to_not raise_error
350
- end
351
-
352
- it 'permits non-numeric prerelease identifiers with leading zeroes' do
353
- expect { subject('1.2.3-0xDEADBEEF') }.to_not raise_error
354
- end
355
-
356
- context 'examples' do
357
- example '1.0.0-alpha1' do
358
- version = subject('1.0.0-alpha1')
359
- expect(version.major).to eql 1
360
- expect(version.minor).to eql 0
361
- expect(version.patch).to eql 0
362
- expect(version.prerelease).to eql 'alpha1'
363
- end
364
-
365
- example '1.0.0-beta1' do
366
- version = subject('1.0.0-beta1')
367
- expect(version.major).to eql 1
368
- expect(version.minor).to eql 0
369
- expect(version.patch).to eql 0
370
- expect(version.prerelease).to eql 'beta1'
371
- end
372
-
373
- example '1.0.0-beta2' do
374
- version = subject('1.0.0-beta2')
375
- expect(version.major).to eql 1
376
- expect(version.minor).to eql 0
377
- expect(version.patch).to eql 0
378
- expect(version.prerelease).to eql 'beta2'
379
- end
380
-
381
- example '1.0.0-rc1' do
382
- version = subject('1.0.0-rc1')
383
- expect(version.major).to eql 1
384
- expect(version.minor).to eql 0
385
- expect(version.patch).to eql 0
386
- expect(version.prerelease).to eql 'rc1'
387
- end
388
- end
389
- end
390
- end
391
-
392
- end
393
-
394
- describe '#<=>' do
395
- def parse(vstring)
396
- Semantic::Version.parse(vstring)
397
- end
398
-
399
- context 'Spec v2.0.0' do
400
- context 'Section 11' do
401
- # Precedence refers to how versions are compared to each other when
402
- # ordered. Precedence MUST be calculated by separating the version into
403
- # major, minor, patch and pre-release identifiers in that order (Build
404
- # metadata does not figure into precedence). Precedence is determined
405
- # by the first difference when comparing each of these identifiers from
406
- # left to right as follows: Major, minor, and patch versions are always
407
- # compared numerically.
408
- # Example: 1.0.0 < 2.0.0 < 2.1.0 < 2.1.1.
409
- # When major, minor, and patch are equal, a pre-release version has
410
- # lower precedence than a normal version.
411
- # Example: 1.0.0-alpha < 1.0.0.
412
- # Precedence for two pre-release versions with the same major, minor,
413
- # and patch version MUST be determined by comparing each dot separated
414
- # identifier from left to right until a difference is found as follows:
415
- # identifiers consisting of only digits are compared numerically and
416
- # identifiers with letters or hyphens are compared lexically in ASCII
417
- # sort order. Numeric identifiers always have lower precedence than
418
- # non-numeric identifiers. A larger set of pre-release fields has a
419
- # higher precedence than a smaller set, if all of the preceding
420
- # identifiers are equal.
421
- # Example: 1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-alpha.beta < 1.0.0-beta
422
- # < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0-rc.1 < 1.0.0.
423
-
424
- context 'comparisons without prereleases' do
425
- subject do
426
- %w[ 1.0.0 2.0.0 2.1.0 2.1.1 ].map { |v| parse(v) }.shuffle
427
- end
428
-
429
- example 'sorted order' do
430
- sorted = subject.sort.map { |v| v.to_s }
431
- expect(sorted).to eql(%w[ 1.0.0 2.0.0 2.1.0 2.1.1 ])
432
- end
433
- end
434
-
435
- context 'comparisons against prereleases' do
436
- let(:stable) { parse('1.0.0') }
437
- let(:prerelease) { parse('1.0.0-alpha') }
438
-
439
- example 'prereleases have lower precedence' do
440
- expect(stable).to be > prerelease
441
- expect(prerelease).to be < stable
442
- end
443
- end
444
-
445
- context 'comparisions between prereleases' do
446
- example 'identical prereleases are equal' do
447
- expect(parse('1.0.0-rc1')).to eql parse('1.0.0-rc1')
448
- end
449
-
450
- example 'non-numeric identifiers sort ASCIIbetically' do
451
- alpha, beta = parse('1.0.0-alpha'), parse('1.0.0-beta')
452
- expect(alpha).to be < beta
453
- expect(beta).to be > alpha
454
- end
455
-
456
- example 'numeric identifiers sort numerically' do
457
- two, eleven = parse('1.0.0-2'), parse('1.0.0-11')
458
- expect(two).to be < eleven
459
- expect(eleven).to be > two
460
- end
461
-
462
- example 'non-numeric identifiers have a higher precendence' do
463
- number, word = parse('1.0.0-1'), parse('1.0.0-one')
464
- expect(number).to be < word
465
- expect(word).to be > number
466
- end
467
-
468
- example 'identifiers are parsed left-to-right' do
469
- a = parse('1.0.0-these.parts.are.the-same.but.not.waffles.123')
470
- b = parse('1.0.0-these.parts.are.the-same.but.not.123.waffles')
471
- expect(b).to be < a
472
- expect(a).to be > b
473
- end
474
-
475
- example 'larger identifier sets have precendence' do
476
- a = parse('1.0.0-alpha')
477
- b = parse('1.0.0-alpha.1')
478
- expect(a).to be < b
479
- expect(b).to be > a
480
- end
481
-
482
- example 'build metadata does not figure into precendence' do
483
- a = parse('1.0.0-alpha+SHA1')
484
- b = parse('1.0.0-alpha+MD5')
485
- expect(a).to eql b
486
- expect(a.to_s).to_not eql b.to_s
487
- end
488
-
489
- example 'sorted order' do
490
- list = %w[
491
- 1.0.0-alpha
492
- 1.0.0-alpha.1
493
- 1.0.0-alpha.beta
494
- 1.0.0-beta
495
- 1.0.0-beta.2
496
- 1.0.0-beta.11
497
- 1.0.0-rc.1
498
- 1.0.0
499
- ].map { |v| parse(v) }.shuffle
500
-
501
- sorted = list.sort.map { |v| v.to_s }
502
- expect(sorted).to eql %w[
503
- 1.0.0-alpha
504
- 1.0.0-alpha.1
505
- 1.0.0-alpha.beta
506
- 1.0.0-beta
507
- 1.0.0-beta.2
508
- 1.0.0-beta.11
509
- 1.0.0-rc.1
510
- 1.0.0
511
- ]
512
- end
513
- end
514
- end
515
- end
516
-
517
- context 'Spec v1.0.0' do
518
- context 'Section 4' do
519
- # A pre-release version number MAY be denoted by appending an arbitrary
520
- # string immediately following the patch version and a dash. The string
521
- # MUST be comprised of only alphanumerics plus dash [0-9A-Za-z-].
522
- # Pre-release versions satisfy but have a lower precedence than the
523
- # associated normal version. Precedence SHOULD be determined by
524
- # lexicographic ASCII sort order.
525
- # For instance: 1.0.0-alpha1 < 1.0.0-beta1 < 1.0.0-beta2 < 1.0.0-rc1 <
526
- # 1.0.0
527
-
528
- example 'sorted order' do
529
- list = %w[
530
- 1.0.0-alpha1
531
- 1.0.0-beta1
532
- 1.0.0-beta2
533
- 1.0.0-rc1
534
- 1.0.0
535
- ].map { |v| parse(v) }.shuffle
536
-
537
- sorted = list.sort.map { |v| v.to_s }
538
- expect(sorted).to eql %w[
539
- 1.0.0-alpha1
540
- 1.0.0-beta1
541
- 1.0.0-beta2
542
- 1.0.0-rc1
543
- 1.0.0
544
- ]
545
- end
546
- end
547
- end
548
-
549
- end
550
-
551
- describe '#next' do
552
- context 'with :major' do
553
- it 'returns the next major version' do
554
- expect(subject('1.0.0').next(:major)).to eql(subject('2.0.0'))
555
- end
556
-
557
- it 'does not modify the original version' do
558
- v1 = subject('1.0.0')
559
- v2 = v1.next(:major)
560
- expect(v1).to_not eql(v2)
561
- end
562
-
563
- it 'resets the minor and patch versions to 0' do
564
- expect(subject('1.1.1').next(:major)).to eql(subject('2.0.0'))
565
- end
566
-
567
- it 'removes any prerelease or build information' do
568
- expect(subject('1.0.0-alpha+abc').next(:major)).to eql(subject('2.0.0'))
569
- end
570
- end
571
-
572
- context 'with :minor' do
573
- it 'returns the next minor version' do
574
- expect(subject('1.0.0').next(:minor)).to eql(subject('1.1.0'))
575
- end
576
-
577
- it 'does not modify the original version' do
578
- v1 = subject('1.0.0')
579
- v2 = v1.next(:minor)
580
- expect(v1).to_not eql(v2)
581
- end
582
-
583
- it 'resets the patch version to 0' do
584
- expect(subject('1.1.1').next(:minor)).to eql(subject('1.2.0'))
585
- end
586
-
587
- it 'removes any prerelease or build information' do
588
- expect(subject('1.1.0-alpha+abc').next(:minor)).to eql(subject('1.2.0'))
589
- end
590
- end
591
-
592
- context 'with :patch' do
593
- it 'returns the next patch version' do
594
- expect(subject('1.1.1').next(:patch)).to eql(subject('1.1.2'))
595
- end
596
-
597
- it 'does not modify the original version' do
598
- v1 = subject('1.0.0')
599
- v2 = v1.next(:patch)
600
- expect(v1).to_not eql(v2)
601
- end
602
-
603
- it 'removes any prerelease or build information' do
604
- expect(subject('1.0.0-alpha+abc').next(:patch)).to eql(subject('1.0.1'))
605
- end
606
- end
607
- end
608
- end