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.
- checksums.yaml +15 -0
- data/CONTRIBUTING.md +25 -1
- data/Gemfile +6 -0
- data/Rakefile +1 -0
- data/ext/project_data.yaml +5 -1
- data/ext/windows/service/daemon.rb +2 -1
- data/install.rb +43 -6
- data/lib/hiera/puppet_function.rb +15 -17
- data/lib/hiera/scope.rb +12 -14
- data/lib/puppet.rb +52 -0
- data/lib/puppet/application/face_base.rb +4 -0
- data/lib/puppet/application/lookup.rb +4 -2
- data/lib/puppet/application/resource.rb +1 -1
- data/lib/puppet/data_providers.rb +6 -3
- data/lib/puppet/data_providers/data_adapter.rb +6 -0
- data/lib/puppet/data_providers/data_function_support.rb +7 -0
- data/lib/puppet/data_providers/function_env_data_provider.rb +7 -0
- data/lib/puppet/data_providers/function_module_data_provider.rb +6 -0
- data/lib/puppet/data_providers/hiera_config.rb +31 -10
- data/lib/puppet/data_providers/hiera_env_data_provider.rb +6 -0
- data/lib/puppet/data_providers/hiera_interpolate.rb +2 -1
- data/lib/puppet/data_providers/hiera_module_data_provider.rb +6 -0
- data/lib/puppet/data_providers/hiera_support.rb +6 -0
- data/lib/puppet/data_providers/json_data_provider_factory.rb +12 -0
- data/lib/puppet/data_providers/yaml_data_provider_factory.rb +12 -0
- data/lib/puppet/defaults.rb +25 -4
- data/lib/puppet/face/ca.rb +2 -0
- data/lib/puppet/face/certificate_request.rb +2 -0
- data/lib/puppet/face/certificate_revocation_list.rb +2 -0
- data/lib/puppet/face/file.rb +3 -0
- data/lib/puppet/face/help.rb +19 -17
- data/lib/puppet/face/help/face.erb +3 -0
- data/lib/puppet/face/key.rb +1 -0
- data/lib/puppet/face/man.rb +4 -2
- data/lib/puppet/face/module/generate.rb +1 -1
- data/lib/puppet/face/status.rb +2 -0
- data/lib/puppet/feature/base.rb +9 -2
- data/lib/puppet/feature/hocon.rb +3 -0
- data/lib/puppet/file_system.rb +15 -3
- data/lib/puppet/file_system/windows.rb +8 -0
- data/lib/puppet/forge.rb +6 -6
- data/lib/puppet/forge/repository.rb +1 -2
- data/lib/puppet/functions/binary_file.rb +4 -10
- data/lib/puppet/functions/hiera_array.rb +1 -1
- data/lib/puppet/functions/hiera_include.rb +1 -1
- data/lib/puppet/functions/hocon_data.rb +24 -0
- data/lib/puppet/functions/json_data.rb +18 -0
- data/lib/puppet/functions/yaml_data.rb +21 -0
- data/lib/puppet/generate/type.rb +1 -1
- data/lib/puppet/graph/simple_graph.rb +4 -2
- data/lib/puppet/indirector/file_bucket_file/file.rb +10 -2
- data/lib/puppet/indirector/request.rb +5 -1
- data/lib/puppet/interface.rb +14 -2
- data/lib/puppet/interface/face_collection.rb +1 -1
- data/lib/puppet/module.rb +14 -2
- data/lib/puppet/module_tool.rb +4 -4
- data/lib/puppet/module_tool/applications/builder.rb +3 -2
- data/lib/puppet/module_tool/applications/installer.rb +14 -14
- data/lib/puppet/module_tool/applications/upgrader.rb +13 -13
- data/lib/puppet/module_tool/installed_modules.rb +7 -7
- data/lib/puppet/module_tool/local_tarball.rb +3 -3
- data/lib/puppet/module_tool/metadata.rb +1 -1
- data/lib/puppet/network/http/connection.rb +2 -0
- data/lib/puppet/network/http/webrick.rb +2 -1
- data/lib/puppet/parser/functions/hiera.rb +14 -0
- data/lib/puppet/parser/functions/hiera_array.rb +14 -0
- data/lib/puppet/parser/functions/hiera_hash.rb +14 -0
- data/lib/puppet/parser/functions/hiera_include.rb +14 -0
- data/lib/puppet/parser/scope.rb +14 -20
- data/lib/puppet/plugins/data_providers.rb +2 -0
- data/lib/puppet/plugins/data_providers/data_provider.rb +108 -17
- data/lib/puppet/plugins/data_providers/registry.rb +2 -36
- data/lib/puppet/pops.rb +6 -9
- data/lib/puppet/pops/adaptable.rb +0 -3
- data/lib/puppet/pops/binder/producers.rb +3 -3
- data/lib/puppet/pops/evaluator/access_operator.rb +4 -4
- data/lib/puppet/pops/evaluator/closure.rb +1 -1
- data/lib/puppet/pops/evaluator/compare_operator.rb +4 -4
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +1 -1
- data/lib/puppet/pops/issues.rb +4 -0
- data/lib/puppet/pops/label_provider.rb +14 -0
- data/lib/puppet/pops/loader/loader_paths.rb +3 -1
- data/lib/puppet/pops/loader/module_loaders.rb +21 -7
- data/lib/puppet/pops/loader/typed_name.rb +0 -2
- data/lib/puppet/pops/loaders.rb +31 -12
- data/lib/puppet/pops/lookup.rb +4 -3
- data/lib/puppet/pops/lookup/configured_data_provider.rb +87 -0
- data/lib/puppet/pops/lookup/context.rb +121 -71
- data/lib/puppet/pops/lookup/data_adapter.rb +27 -0
- data/lib/puppet/pops/lookup/data_dig_function_provider.rb +55 -0
- data/lib/puppet/pops/lookup/data_hash_function_provider.rb +111 -0
- data/lib/puppet/pops/lookup/data_provider.rb +102 -0
- data/lib/puppet/pops/lookup/environment_data_provider.rb +27 -0
- data/lib/puppet/pops/lookup/explainer.rb +122 -82
- data/lib/puppet/pops/lookup/function_provider.rb +82 -0
- data/lib/puppet/pops/lookup/global_data_provider.rb +49 -0
- data/lib/puppet/pops/lookup/hiera_config.rb +601 -0
- data/lib/puppet/pops/lookup/interpolation.rb +56 -35
- data/lib/puppet/pops/lookup/invocation.rb +179 -101
- data/lib/puppet/pops/lookup/location_resolver.rb +72 -0
- data/lib/puppet/pops/lookup/lookup_adapter.rb +451 -0
- data/lib/puppet/pops/lookup/lookup_key.rb +99 -0
- data/lib/puppet/pops/lookup/lookup_key_function_provider.rb +119 -0
- data/lib/puppet/pops/lookup/module_data_provider.rb +58 -0
- data/lib/puppet/pops/lookup/sub_lookup.rb +8 -4
- data/lib/puppet/pops/merge_strategy.rb +120 -39
- data/lib/puppet/pops/parser/egrammar.ra +2 -0
- data/lib/puppet/pops/parser/eparser.rb +816 -808
- data/lib/puppet/pops/parser/locator.rb +3 -3
- data/lib/puppet/pops/parser/slurp_support.rb +4 -3
- data/lib/puppet/pops/pcore.rb +21 -12
- data/lib/puppet/pops/serialization/abstract_reader.rb +17 -7
- data/lib/puppet/pops/serialization/abstract_writer.rb +27 -12
- data/lib/puppet/pops/serialization/deserializer.rb +17 -4
- data/lib/puppet/pops/serialization/extension.rb +37 -8
- data/lib/puppet/pops/serialization/object.rb +14 -6
- data/lib/puppet/pops/serialization/rgen.rb +2 -1
- data/lib/puppet/pops/serialization/serializer.rb +30 -7
- data/lib/puppet/pops/types/implementation_registry.rb +1 -1
- data/lib/puppet/pops/types/p_object_type.rb +55 -12
- data/lib/puppet/pops/types/p_sem_ver_range_type.rb +27 -27
- data/lib/puppet/pops/types/p_sem_ver_type.rb +12 -12
- data/lib/puppet/pops/types/p_timespan_type.rb +6 -6
- data/lib/puppet/pops/types/p_timestamp_type.rb +2 -2
- data/lib/puppet/pops/types/p_type_set_type.rb +7 -16
- data/lib/puppet/pops/types/recursion_guard.rb +64 -20
- data/lib/puppet/pops/types/ruby_generator.rb +10 -0
- data/lib/puppet/pops/types/type_calculator.rb +23 -13
- data/lib/puppet/pops/types/type_factory.rb +20 -9
- data/lib/puppet/pops/types/type_formatter.rb +37 -17
- data/lib/puppet/pops/types/type_mismatch_describer.rb +7 -6
- data/lib/puppet/pops/types/type_parser.rb +6 -0
- data/lib/puppet/pops/types/types.rb +225 -132
- data/lib/puppet/pops/validation.rb +1 -1
- data/lib/puppet/pops/validation/checker4_0.rb +12 -2
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
- data/lib/puppet/pops/visitor.rb +4 -3
- data/lib/puppet/provider/mcx/mcxcontent.rb +2 -1
- data/lib/puppet/provider/nameservice.rb +15 -0
- data/lib/puppet/provider/package/appdmg.rb +1 -1
- data/lib/puppet/provider/package/dnf.rb +1 -1
- data/lib/puppet/provider/package/pkg.rb +1 -1
- data/lib/puppet/provider/package/pkgdmg.rb +1 -1
- data/lib/puppet/provider/package/pkgng.rb +1 -1
- data/lib/puppet/provider/package/rpm.rb +2 -2
- data/lib/puppet/provider/service/smf.rb +3 -3
- data/lib/puppet/provider/service/systemd.rb +5 -1
- data/lib/puppet/provider/user/directoryservice.rb +1 -0
- data/lib/puppet/provider/user/user_role_add.rb +15 -0
- data/lib/puppet/provider/yumrepo/inifile.rb +2 -2
- data/lib/puppet/provider/zone/solaris.rb +4 -1
- data/lib/puppet/reference/indirection.rb +1 -1
- data/lib/puppet/resource.rb +2 -3
- data/lib/puppet/resource/catalog.rb +12 -4
- data/lib/puppet/resource/type.rb +3 -3
- data/lib/puppet/settings.rb +1 -1
- data/lib/puppet/settings/config_file.rb +2 -1
- data/lib/puppet/settings/directory_setting.rb +6 -0
- data/lib/puppet/settings/environment_conf.rb +6 -2
- data/lib/puppet/settings/file_or_directory_setting.rb +6 -0
- data/lib/puppet/settings/file_setting.rb +10 -0
- data/lib/puppet/ssl/certificate_authority.rb +13 -2
- data/lib/puppet/ssl/host.rb +23 -1
- data/lib/puppet/transaction/additional_resource_generator.rb +7 -0
- data/lib/puppet/type/user.rb +16 -3
- data/lib/puppet/util.rb +1 -0
- data/lib/puppet/util/execution.rb +3 -3
- data/lib/puppet/util/filetype.rb +11 -5
- data/lib/puppet/util/logging.rb +2 -1
- data/lib/puppet/util/network_device/config.rb +1 -1
- data/lib/puppet/util/plist.rb +6 -0
- data/lib/puppet/util/profiler/aggregate.rb +1 -1
- data/lib/puppet/util/rdoc/generators/puppet_generator.rb +2 -2
- data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +2 -1
- data/lib/puppet/util/windows/adsi.rb +15 -12
- data/lib/puppet/vendor/load_semantic_puppet.rb +1 -0
- data/lib/puppet/vendor/pathspec/lib/pathspec.rb +2 -1
- data/lib/puppet/vendor/require_vendored.rb +0 -1
- data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet.rb +17 -0
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency.rb +7 -7
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/graph.rb +2 -2
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/graph_node.rb +2 -2
- data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/module_release.rb +58 -0
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/source.rb +2 -2
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/unsatisfiable_graph.rb +2 -2
- data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/gem_version.rb +3 -0
- data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/locales/config.yaml +21 -0
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/version.rb +48 -21
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/version_range.rb +15 -17
- data/lib/puppet/version.rb +1 -1
- data/lib/semver.rb +19 -12
- data/locales/config.yaml +29 -0
- data/locales/puppet.pot +79 -0
- data/man/man5/puppet.conf.5 +1 -1
- data/spec/fixtures/unit/application/environments/puppet_func_provider/functions/{data.pp → environment/data.pp} +0 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_misc/data/common.yaml +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/data/common.yaml +1 -1
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/hiera.yaml +5 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/lib/puppet/bindings/backend/default.rb +9 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/lib/puppet_x/backend/special_data_provider_factory.rb +23 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/manifests/init.pp +5 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/metadata.json +9 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_env_data.rb +1 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/manifests/init.pp +1 -1
- data/spec/fixtures/unit/functions/lookup/data/common.yaml +19 -0
- data/spec/fixtures/unit/functions/lookup_fixture/data/common.yaml +19 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/environment.conf +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/lib/puppet/functions/environment/data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/lib/puppet/bindings/abc/default.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/lib/puppet/functions/abc/data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/lib/puppet/bindings/bad_data/default.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/lib/puppet/bindings/bca/default.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/lib/puppet/functions/bca/data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/data/empty.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/hiera.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/data/empty_key.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/hiera.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/data/empty_key.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/hiera.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/data/empty.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/hiera.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/data/first.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/hiera.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/meta/lib/puppet/functions/meta/data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/meta/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/meta/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/lib/puppet/bindings/metawcp/default.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/lib/puppet_x/thallgren/sample_module_data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/no_provider/manifests/init.pp +0 -0
- data/spec/integration/application/apply_spec.rb +88 -2
- data/spec/integration/application/lookup_spec.rb +155 -0
- data/spec/integration/data_binding_spec.rb +5 -5
- data/spec/integration/defaults_spec.rb +13 -0
- data/spec/integration/environments/default_manifest_spec.rb +16 -16
- data/spec/integration/environments/setting_hooks_spec.rb +1 -1
- data/spec/integration/test/test_helper_spec.rb +6 -2
- data/spec/integration/transaction_spec.rb +74 -0
- data/spec/integration/util/execution_spec.rb +8 -0
- data/spec/lib/puppet_spec/module_tool/shared_functions.rb +2 -2
- data/spec/lib/puppet_spec/module_tool/stub_source.rb +1 -1
- data/spec/lib/puppet_spec/unindent.rb +2 -2
- data/spec/unit/application/face_base_spec.rb +16 -0
- data/spec/unit/application/lookup_spec.rb +262 -227
- data/spec/unit/data_providers/{sample_data_provider_spec.rb → custom_data_provider_spec.rb} +14 -16
- data/spec/unit/data_providers/function_data_provider_spec.rb +2 -2
- data/spec/unit/data_providers/hiera_data_provider_spec.rb +60 -97
- data/spec/unit/defaults_spec.rb +1 -1
- data/spec/unit/face/ca_spec.rb +10 -0
- data/spec/unit/face/certificate_request_spec.rb +10 -0
- data/spec/unit/face/certificate_revocation_list_spec.rb +10 -0
- data/spec/unit/face/file_spec.rb +4 -0
- data/spec/unit/face/help_spec.rb +17 -0
- data/spec/unit/face/key_spec.rb +10 -0
- data/spec/unit/face/status_spec.rb +10 -0
- data/spec/unit/file_system_spec.rb +143 -6
- data/spec/unit/functions/binary_file_spec.rb +1 -1
- data/spec/unit/functions/hiera_spec.rb +257 -47
- data/spec/unit/functions/lookup_fixture_spec.rb +693 -0
- data/spec/unit/functions/lookup_spec.rb +1319 -608
- data/spec/unit/functions/new_spec.rb +3 -3
- data/spec/unit/graph/rb_tree_map_spec.rb +1 -1
- data/spec/unit/graph/simple_graph_spec.rb +1 -1
- data/spec/unit/hiera/scope_spec.rb +4 -4
- data/spec/unit/indirector/request_spec.rb +9 -0
- data/spec/unit/interface_spec.rb +27 -0
- data/spec/unit/man_spec.rb +1 -1
- data/spec/unit/module_spec.rb +1 -1
- data/spec/unit/module_tool/applications/builder_spec.rb +16 -1
- data/spec/unit/module_tool/applications/installer_spec.rb +1 -1
- data/spec/unit/module_tool/applications/upgrader_spec.rb +1 -1
- data/spec/unit/module_tool/installed_modules_spec.rb +6 -6
- data/spec/unit/module_tool_spec.rb +3 -3
- data/spec/unit/network/http/connection_spec.rb +10 -0
- data/spec/unit/network/http/webrick_spec.rb +1 -1
- data/spec/unit/pops/evaluator/access_ops_spec.rb +2 -2
- data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +9 -9
- data/spec/unit/pops/loaders/environment_loader_spec.rb +172 -0
- data/spec/unit/pops/lookup/context_spec.rb +45 -16
- data/spec/unit/pops/lookup/interpolation_spec.rb +28 -20
- data/spec/unit/pops/lookup/lookup_spec.rb +197 -0
- data/spec/unit/pops/merge_strategy_spec.rb +18 -0
- data/spec/unit/pops/parser/lexer2_spec.rb +16 -1
- data/spec/unit/pops/parser/parse_site_spec.rb +4 -0
- data/spec/unit/pops/serialization/packer_spec.rb +4 -23
- data/spec/unit/pops/serialization/serialization_spec.rb +32 -8
- data/spec/unit/pops/types/p_object_type_spec.rb +68 -3
- data/spec/unit/pops/types/p_sem_ver_type_spec.rb +4 -4
- data/spec/unit/pops/types/p_type_set_type_spec.rb +31 -2
- data/spec/unit/pops/types/type_acceptor_spec.rb +18 -17
- data/spec/unit/pops/types/type_calculator_spec.rb +39 -40
- data/spec/unit/pops/types/type_factory_spec.rb +3 -3
- data/spec/unit/pops/types/type_formatter_spec.rb +7 -3
- data/spec/unit/pops/types/type_mismatch_describer_spec.rb +13 -2
- data/spec/unit/pops/types/types_spec.rb +25 -2
- data/spec/unit/pops/validator/validator_spec.rb +60 -4
- data/spec/unit/provider/nameservice_spec.rb +42 -0
- data/spec/unit/provider/package/aptrpm_spec.rb +1 -1
- data/spec/unit/provider/package/pkg_spec.rb +22 -0
- data/spec/unit/provider/package/pkgng_spec.rb +12 -0
- data/spec/unit/provider/package/rpm_spec.rb +8 -8
- data/spec/unit/provider/service/smf_spec.rb +13 -11
- data/spec/unit/provider/service/systemd_spec.rb +8 -1
- data/spec/unit/provider/user/useradd_spec.rb +1 -0
- data/spec/unit/puppet_spec.rb +14 -0
- data/spec/unit/resource/catalog_spec.rb +15 -9
- data/spec/unit/resource_spec.rb +20 -17
- data/spec/unit/semver_spec.rb +14 -0
- data/spec/unit/ssl/certificate_authority_spec.rb +12 -1
- data/spec/unit/transaction/additional_resource_generator_spec.rb +11 -0
- data/spec/unit/type/user_spec.rb +32 -6
- data/spec/unit/util/filetype_spec.rb +3 -3
- data/spec/unit/util/yaml_spec.rb +1 -1
- data/spec/unit/util_spec.rb +10 -2
- data/tasks/i18n.rake +20 -0
- metadata +2661 -2593
- data/lib/puppet/data_providers/lookup_adapter.rb +0 -254
- data/lib/puppet/vendor/load_semantic.rb +0 -1
- data/lib/puppet/vendor/semantic/Gemfile +0 -20
- data/lib/puppet/vendor/semantic/PUPPET_README.md +0 -6
- data/lib/puppet/vendor/semantic/Rakefile +0 -69
- data/lib/puppet/vendor/semantic/lib/semantic.rb +0 -7
- data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +0 -60
- data/lib/puppet/vendor/semantic/spec/spec_helper.rb +0 -24
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/graph_node_spec.rb +0 -141
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/graph_spec.rb +0 -162
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/module_release_spec.rb +0 -143
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/source_spec.rb +0 -5
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/unsatisfiable_graph_spec.rb +0 -44
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency_spec.rb +0 -383
- data/lib/puppet/vendor/semantic/spec/unit/semantic/version_range_spec.rb +0 -307
- data/lib/puppet/vendor/semantic/spec/unit/semantic/version_spec.rb +0 -608
- 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
|