puppet 4.8.2-universal-darwin → 4.9.0-universal-darwin
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/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/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/data_providers.rb +6 -3
- 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/face.erb +3 -0
- data/lib/puppet/face/help.rb +19 -17
- 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/windows.rb +8 -0
- data/lib/puppet/file_system.rb +15 -3
- data/lib/puppet/forge/repository.rb +1 -2
- data/lib/puppet/forge.rb +6 -6
- 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/face_collection.rb +1 -1
- data/lib/puppet/interface.rb +14 -2
- data/lib/puppet/module.rb +14 -2
- 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/module_tool.rb +4 -4
- 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/data_provider.rb +108 -17
- data/lib/puppet/plugins/data_providers/registry.rb +2 -36
- data/lib/puppet/plugins/data_providers.rb +2 -0
- 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/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/lookup.rb +4 -3
- 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/checker4_0.rb +12 -2
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
- data/lib/puppet/pops/validation.rb +1 -1
- data/lib/puppet/pops/visitor.rb +4 -3
- data/lib/puppet/pops.rb +6 -9
- 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/catalog.rb +12 -4
- data/lib/puppet/resource/type.rb +3 -3
- data/lib/puppet/resource.rb +2 -3
- 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/settings.rb +1 -1
- 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/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/util.rb +1 -0
- 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/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/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency.rb +7 -7
- 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/vendor/semantic_puppet/lib/semantic_puppet.rb +17 -0
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet.rb +52 -0
- 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 -2595
- 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/dependency/module_release.rb +0 -60
- data/lib/puppet/vendor/semantic/lib/semantic.rb +0 -7
- 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
@@ -10,21 +10,21 @@ class PSemVerRangeType < PScalarType
|
|
10
10
|
end
|
11
11
|
|
12
12
|
# Check if a version is included in a version range. The version can be a string or
|
13
|
-
# a `
|
13
|
+
# a `SemanticPuppet::SemVer`
|
14
14
|
#
|
15
|
-
# @param range [
|
16
|
-
# @param version [
|
15
|
+
# @param range [SemanticPuppet::VersionRange] the range to match against
|
16
|
+
# @param version [SemanticPuppet::Version,String] the version to match
|
17
17
|
# @return [Boolean] `true` if the range includes the given version
|
18
18
|
#
|
19
19
|
# @api public
|
20
20
|
def self.include?(range, version)
|
21
21
|
case version
|
22
|
-
when
|
22
|
+
when SemanticPuppet::Version
|
23
23
|
range.include?(version)
|
24
24
|
when String
|
25
25
|
begin
|
26
|
-
range.include?(
|
27
|
-
rescue
|
26
|
+
range.include?(SemanticPuppet::Version.parse(version))
|
27
|
+
rescue SemanticPuppet::Version::ValidationFailure
|
28
28
|
false
|
29
29
|
end
|
30
30
|
else
|
@@ -32,28 +32,28 @@ class PSemVerRangeType < PScalarType
|
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
-
# Creates a {
|
36
|
-
# a {
|
37
|
-
# {
|
35
|
+
# Creates a {SemanticPuppet::VersionRange} from the given _version_range_ argument. If the argument is `nil` or
|
36
|
+
# a {SemanticPuppet::VersionRange}, it is returned. If it is a {String}, it will be parsed into a
|
37
|
+
# {SemanticPuppet::VersionRange}. Any other class will raise an {ArgumentError}.
|
38
38
|
#
|
39
|
-
# @param version_range [
|
40
|
-
# @return [
|
39
|
+
# @param version_range [SemanticPuppet::VersionRange,String,nil] the version range to convert
|
40
|
+
# @return [SemanticPuppet::VersionRange] the converted version range
|
41
41
|
# @raise [ArgumentError] when the argument cannot be converted into a version range
|
42
42
|
#
|
43
43
|
def self.convert(version_range)
|
44
44
|
case version_range
|
45
|
-
when nil,
|
45
|
+
when nil, SemanticPuppet::VersionRange
|
46
46
|
version_range
|
47
47
|
when String
|
48
|
-
|
48
|
+
SemanticPuppet::VersionRange.parse(version_range)
|
49
49
|
else
|
50
50
|
raise ArgumentError, "Unable to convert a #{version_range.class.name} to a SemVerRange"
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
54
54
|
# Checks if range _a_ is a sub-range of (i.e. completely covered by) range _b_
|
55
|
-
# @param a [
|
56
|
-
# @param b [
|
55
|
+
# @param a [SemanticPuppet::VersionRange] the first range
|
56
|
+
# @param b [SemanticPuppet::VersionRange] the second range
|
57
57
|
#
|
58
58
|
# @return [Boolean] `true` if _a_ is completely covered by _b_
|
59
59
|
def self.covered_by?(a, b)
|
@@ -63,9 +63,9 @@ class PSemVerRangeType < PScalarType
|
|
63
63
|
# Merge two ranges so that the result matches all versions matched by both. A merge
|
64
64
|
# is only possible when the ranges are either adjacent or have an overlap.
|
65
65
|
#
|
66
|
-
# @param a [
|
67
|
-
# @param b [
|
68
|
-
# @return [
|
66
|
+
# @param a [SemanticPuppet::VersionRange] the first range
|
67
|
+
# @param b [SemanticPuppet::VersionRange] the second range
|
68
|
+
# @return [SemanticPuppet::VersionRange,nil] the result of the merge
|
69
69
|
#
|
70
70
|
# @api public
|
71
71
|
def self.merge(a, b)
|
@@ -77,13 +77,13 @@ class PSemVerRangeType < PScalarType
|
|
77
77
|
elsif b.exclude_end?
|
78
78
|
exclude_end = max == b.end && (max > a.end || a.exclude_end?)
|
79
79
|
end
|
80
|
-
|
80
|
+
SemanticPuppet::VersionRange.new([a.begin, b.begin].min, max, exclude_end)
|
81
81
|
elsif a.exclude_end? && a.end == b.begin
|
82
82
|
# Adjacent, a before b
|
83
|
-
|
83
|
+
SemanticPuppet::VersionRange.new(a.begin, b.end, b.exclude_end?)
|
84
84
|
elsif b.exclude_end? && b.end == a.begin
|
85
85
|
# Adjacent, b before a
|
86
|
-
|
86
|
+
SemanticPuppet::VersionRange.new(b.begin, a.end, a.exclude_end?)
|
87
87
|
else
|
88
88
|
# No overlap
|
89
89
|
nil
|
@@ -91,7 +91,7 @@ class PSemVerRangeType < PScalarType
|
|
91
91
|
end
|
92
92
|
|
93
93
|
def instance?(o, guard = nil)
|
94
|
-
o.is_a?(
|
94
|
+
o.is_a?(SemanticPuppet::VersionRange)
|
95
95
|
end
|
96
96
|
|
97
97
|
def eql?(o)
|
@@ -115,7 +115,7 @@ class PSemVerRangeType < PScalarType
|
|
115
115
|
# https://github.com/npm/node-semver#range-grammar
|
116
116
|
#
|
117
117
|
# The logical or || operator is not implemented since it effectively builds
|
118
|
-
# an array of ranges that may be disparate. The {{
|
118
|
+
# an array of ranges that may be disparate. The {{SemanticPuppet::VersionRange}} inherits
|
119
119
|
# from the standard ruby range. It must be possible to describe that range in terms
|
120
120
|
# of min, max, and exclude max.
|
121
121
|
#
|
@@ -144,13 +144,13 @@ class PSemVerRangeType < PScalarType
|
|
144
144
|
end
|
145
145
|
|
146
146
|
def from_string(str)
|
147
|
-
|
147
|
+
SemanticPuppet::VersionRange.parse(str)
|
148
148
|
end
|
149
149
|
|
150
150
|
def from_versions(min, max = :default, exclude_max = false)
|
151
|
-
min =
|
152
|
-
max =
|
153
|
-
|
151
|
+
min = SemanticPuppet::Version::MIN if min == :default
|
152
|
+
max = SemanticPuppet::Version::MAX if max == :default
|
153
|
+
SemanticPuppet::VersionRange.new(min, max, exclude_max)
|
154
154
|
end
|
155
155
|
|
156
156
|
def from_hash(hash)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Puppet::Pops
|
2
2
|
module Types
|
3
3
|
|
4
|
-
# A Puppet Language Type that exposes the {{
|
4
|
+
# A Puppet Language Type that exposes the {{SemanticPuppet::Version}} and {{SemanticPuppet::VersionRange}}.
|
5
5
|
# The version type is parameterized with version ranges.
|
6
6
|
#
|
7
7
|
# @api public
|
@@ -18,13 +18,13 @@ class PSemVerType < PScalarType
|
|
18
18
|
attr_reader :ranges
|
19
19
|
|
20
20
|
def initialize(ranges)
|
21
|
-
ranges = ranges.map { |range| range.is_a?(
|
21
|
+
ranges = ranges.map { |range| range.is_a?(SemanticPuppet::VersionRange) ? range : SemanticPuppet::VersionRange.parse(range) }
|
22
22
|
ranges = merge_ranges(ranges) if ranges.size > 1
|
23
23
|
@ranges = ranges
|
24
24
|
end
|
25
25
|
|
26
26
|
def instance?(o, guard = nil)
|
27
|
-
o.is_a?(
|
27
|
+
o.is_a?(SemanticPuppet::Version) && (@ranges.empty? || @ranges.any? {|range| range.include?(o) })
|
28
28
|
end
|
29
29
|
|
30
30
|
def eql?(o)
|
@@ -36,19 +36,19 @@ class PSemVerType < PScalarType
|
|
36
36
|
end
|
37
37
|
|
38
38
|
# Creates a SemVer version from the given _version_ argument. If the argument is `nil` or
|
39
|
-
# a {
|
40
|
-
# {
|
39
|
+
# a {SemanticPuppet::Version}, it is returned. If it is a {String}, it will be parsed into a
|
40
|
+
# {SemanticPuppet::Version}. Any other class will raise an {ArgumentError}.
|
41
41
|
#
|
42
|
-
# @param version [
|
43
|
-
# @return [
|
42
|
+
# @param version [SemanticPuppet::Version,String,nil] the version to convert
|
43
|
+
# @return [SemanticPuppet::Version] the converted version
|
44
44
|
# @raise [ArgumentError] when the argument cannot be converted into a version
|
45
45
|
#
|
46
46
|
def self.convert(version)
|
47
47
|
case version
|
48
|
-
when nil,
|
48
|
+
when nil, SemanticPuppet::Version
|
49
49
|
version
|
50
50
|
when String
|
51
|
-
|
51
|
+
SemanticPuppet::Version.parse(version)
|
52
52
|
else
|
53
53
|
raise ArgumentError, "Unable to convert a #{version.class.name} to a SemVer"
|
54
54
|
end
|
@@ -87,15 +87,15 @@ class PSemVerType < PScalarType
|
|
87
87
|
end
|
88
88
|
|
89
89
|
def from_string(str)
|
90
|
-
|
90
|
+
SemanticPuppet::Version.parse(str)
|
91
91
|
end
|
92
92
|
|
93
93
|
def from_args(major, minor, patch, prerelease = nil, build = nil)
|
94
|
-
|
94
|
+
SemanticPuppet::Version.new(major, minor, patch, prerelease, build)
|
95
95
|
end
|
96
96
|
|
97
97
|
def from_hash(hash)
|
98
|
-
|
98
|
+
SemanticPuppet::Version.new(hash['major'], hash['minor'], hash['patch'], hash['prerelease'], hash['build'])
|
99
99
|
end
|
100
100
|
end
|
101
101
|
end
|
@@ -1,10 +1,10 @@
|
|
1
1
|
module Puppet::Pops
|
2
2
|
module Types
|
3
3
|
class PAbstractTimeDataType < PAbstractRangeType
|
4
|
-
# @param [AbstractTime]
|
5
|
-
# @param [AbstractTime]
|
6
|
-
def initialize(
|
7
|
-
super(convert_arg(
|
4
|
+
# @param from [AbstractTime] lower bound for this type. Nil or :default means unbounded
|
5
|
+
# @param to [AbstractTime] upper bound for this type. Nil or :default means unbounded
|
6
|
+
def initialize(from = nil, to = nil)
|
7
|
+
super(convert_arg(from, true), convert_arg(to, false))
|
8
8
|
end
|
9
9
|
|
10
10
|
def convert_arg(arg, min)
|
@@ -51,8 +51,8 @@ module Types
|
|
51
51
|
class PTimespanType < PAbstractTimeDataType
|
52
52
|
def self.register_ptype(loader, ir)
|
53
53
|
create_ptype(loader, ir, 'ScalarType',
|
54
|
-
'from' => { KEY_TYPE => PTimespanType::DEFAULT, KEY_VALUE =>
|
55
|
-
'to' => { KEY_TYPE => PTimespanType::DEFAULT, KEY_VALUE =>
|
54
|
+
'from' => { KEY_TYPE => POptionalType.new(PTimespanType::DEFAULT), KEY_VALUE => nil },
|
55
|
+
'to' => { KEY_TYPE => POptionalType.new(PTimespanType::DEFAULT), KEY_VALUE => nil }
|
56
56
|
)
|
57
57
|
end
|
58
58
|
|
@@ -3,8 +3,8 @@ module Types
|
|
3
3
|
class PTimestampType < PAbstractTimeDataType
|
4
4
|
def self.register_ptype(loader, ir)
|
5
5
|
create_ptype(loader, ir, 'ScalarType',
|
6
|
-
'from' => { KEY_TYPE => PTimestampType::DEFAULT, KEY_VALUE =>
|
7
|
-
'to' => { KEY_TYPE => PTimestampType::DEFAULT, KEY_VALUE =>
|
6
|
+
'from' => { KEY_TYPE => POptionalType.new(PTimestampType::DEFAULT), KEY_VALUE => nil },
|
7
|
+
'to' => { KEY_TYPE => POptionalType.new(PTimestampType::DEFAULT), KEY_VALUE => nil }
|
8
8
|
)
|
9
9
|
end
|
10
10
|
|
@@ -216,27 +216,18 @@ class PTypeSetType < PMetaType
|
|
216
216
|
# @return [String] the name by which the type is referenced within this type set
|
217
217
|
#
|
218
218
|
# @api private
|
219
|
-
def name_for(t)
|
219
|
+
def name_for(t, default_name)
|
220
220
|
key = @types.key(t)
|
221
221
|
if key.nil?
|
222
222
|
qname = t.name
|
223
223
|
if @references.empty?
|
224
|
-
|
224
|
+
default_name
|
225
225
|
else
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
if type_set.nil?
|
230
|
-
qname
|
231
|
-
else
|
232
|
-
if segments.size == 1
|
233
|
-
qname
|
234
|
-
else
|
235
|
-
sub_name = type_set.name_for(t)
|
236
|
-
sub_name = "#{first}::#{sub_name}" unless sub_name == qname
|
237
|
-
sub_name
|
238
|
-
end
|
226
|
+
@references.each_pair do |ref_key, ref|
|
227
|
+
ref_name = ref.type_set.name_for(t, nil)
|
228
|
+
return "#{ref_key}::#{ref_name}" unless ref_name.nil?
|
239
229
|
end
|
230
|
+
default_name
|
240
231
|
end
|
241
232
|
else
|
242
233
|
key
|
@@ -332,7 +323,7 @@ class PTypeSetType < PMetaType
|
|
332
323
|
KEY_NAME_AUTHORITY => Pcore::RUNTIME_NAME_AUTHORITY,
|
333
324
|
Pcore::KEY_PCORE_URI => Pcore::PCORE_URI,
|
334
325
|
Pcore::KEY_PCORE_VERSION => Pcore::PCORE_VERSION,
|
335
|
-
KEY_VERSION =>
|
326
|
+
KEY_VERSION => SemanticPuppet::Version.new(0,0,0)
|
336
327
|
})
|
337
328
|
|
338
329
|
protected
|
@@ -24,14 +24,54 @@ class RecursionGuard
|
|
24
24
|
# @param instance [Object] the instance to check
|
25
25
|
# @return [Integer] the resulting state
|
26
26
|
def recursive_this?(instance)
|
27
|
-
|
27
|
+
instance_variable_defined?(:@recursive_this_map) && @recursive_this_map.has_key?(instance.object_id)
|
28
28
|
end
|
29
29
|
|
30
30
|
# Checks if recursion was detected for the given argument in the 'that' context
|
31
31
|
# @param instance [Object] the instance to check
|
32
32
|
# @return [Integer] the resulting state
|
33
33
|
def recursive_that?(instance)
|
34
|
-
|
34
|
+
instance_variable_defined?(:@recursive_that_map) && @recursive_that_map.has_key?(instance.object_id)
|
35
|
+
end
|
36
|
+
|
37
|
+
# Add the given argument as 'this' invoke the given block with the resulting state
|
38
|
+
# @param instance [Object] the instance to add
|
39
|
+
# @return [Object] the result of yielding
|
40
|
+
def with_this(instance)
|
41
|
+
if (@state & SELF_RECURSION_IN_THIS) == 0
|
42
|
+
tc = this_count
|
43
|
+
@state = @state | SELF_RECURSION_IN_THIS if this_put(instance)
|
44
|
+
if tc < this_count
|
45
|
+
# recursive state detected
|
46
|
+
result = yield(@state)
|
47
|
+
|
48
|
+
# pop state
|
49
|
+
@state &= ~SELF_RECURSION_IN_THIS
|
50
|
+
@this_map.delete(instance.object_id)
|
51
|
+
return result
|
52
|
+
end
|
53
|
+
end
|
54
|
+
yield(@state)
|
55
|
+
end
|
56
|
+
|
57
|
+
# Add the given argument as 'that' invoke the given block with the resulting state
|
58
|
+
# @param instance [Object] the instance to add
|
59
|
+
# @return [Object] the result of yielding
|
60
|
+
def with_that(instance)
|
61
|
+
if (@state & SELF_RECURSION_IN_THAT) == 0
|
62
|
+
tc = that_count
|
63
|
+
@state = @state | SELF_RECURSION_IN_THAT if that_put(instance)
|
64
|
+
if tc < that_count
|
65
|
+
# recursive state detected
|
66
|
+
result = yield(@state)
|
67
|
+
|
68
|
+
# pop state
|
69
|
+
@state &= ~SELF_RECURSION_IN_THAT
|
70
|
+
@that_map.delete(instance.object_id)
|
71
|
+
return result
|
72
|
+
end
|
73
|
+
end
|
74
|
+
yield(@state)
|
35
75
|
end
|
36
76
|
|
37
77
|
# Add the given argument as 'this' and return the resulting state
|
@@ -39,7 +79,7 @@ class RecursionGuard
|
|
39
79
|
# @return [Integer] the resulting state
|
40
80
|
def add_this(instance)
|
41
81
|
if (@state & SELF_RECURSION_IN_THIS) == 0
|
42
|
-
@state = @state | SELF_RECURSION_IN_THIS if
|
82
|
+
@state = @state | SELF_RECURSION_IN_THIS if this_put(instance)
|
43
83
|
end
|
44
84
|
@state
|
45
85
|
end
|
@@ -49,43 +89,47 @@ class RecursionGuard
|
|
49
89
|
# @return [Integer] the resulting state
|
50
90
|
def add_that(instance)
|
51
91
|
if (@state & SELF_RECURSION_IN_THAT) == 0
|
52
|
-
@state = @state | SELF_RECURSION_IN_THAT if
|
92
|
+
@state = @state | SELF_RECURSION_IN_THAT if that_put(instance)
|
53
93
|
end
|
54
94
|
@state
|
55
95
|
end
|
56
96
|
|
57
97
|
# @return the number of objects added to the `this` map
|
58
98
|
def this_count
|
59
|
-
this_map.size
|
99
|
+
instance_variable_defined?(:@this_map) ? @this_map.size : 0
|
60
100
|
end
|
61
101
|
|
62
102
|
# @return the number of objects added to the `that` map
|
63
103
|
def that_count
|
64
|
-
that_map.size
|
104
|
+
instance_variable_defined?(:@that_map) ? @that_map.size : 0
|
65
105
|
end
|
66
106
|
|
67
107
|
private
|
68
108
|
|
69
|
-
def
|
109
|
+
def this_put(o)
|
70
110
|
id = o.object_id
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
true # Recursion occured. This was the second time this entry was added
|
111
|
+
@this_map ||= {}
|
112
|
+
if @this_map.has_key?(id)
|
113
|
+
@recursive_this_map ||= {}
|
114
|
+
@recursive_this_map[id] = true
|
115
|
+
true
|
77
116
|
else
|
78
|
-
|
79
|
-
false
|
117
|
+
@this_map[id] = true
|
118
|
+
false
|
80
119
|
end
|
81
120
|
end
|
82
121
|
|
83
|
-
def
|
84
|
-
|
85
|
-
end
|
86
|
-
|
87
|
-
def that_map
|
122
|
+
def that_put(o)
|
123
|
+
id = o.object_id
|
88
124
|
@that_map ||= {}
|
125
|
+
if @that_map.has_key?(id)
|
126
|
+
@recursive_that_map ||= {}
|
127
|
+
@recursive_that_map[id] = true
|
128
|
+
true
|
129
|
+
else
|
130
|
+
@that_map[id] = true
|
131
|
+
false
|
132
|
+
end
|
89
133
|
end
|
90
134
|
end
|
91
135
|
end
|
@@ -210,6 +210,16 @@ class RubyGenerator < TypeFormatter
|
|
210
210
|
init_params.each { |a| bld << ' @' << a.name << ' = ' << a.name << "\n" if a.container.equal?(obj) }
|
211
211
|
bld << " end\n\n"
|
212
212
|
|
213
|
+
bld << " def i12n_hash\n result = "
|
214
|
+
bld << (obj.parent.nil? ? '{}' : 'super')
|
215
|
+
bld << "\n"
|
216
|
+
init_params.each { |a| bld << " result['" << a.name << "'] = @" << a.name << "\n" if a.container.equal?(obj) }
|
217
|
+
bld << " result\n end\n\n"
|
218
|
+
|
219
|
+
bld << " def to_s\n"
|
220
|
+
bld << " " << namespace_relative(segments, TypeFormatter.name) << ".string(self)\n"
|
221
|
+
bld << " end\n\n"
|
222
|
+
|
213
223
|
# Output attr_readers
|
214
224
|
others.each do |a|
|
215
225
|
next unless a.container.equal?(obj)
|
@@ -312,7 +312,7 @@ class TypeCalculator
|
|
312
312
|
infer_set_Array(o)
|
313
313
|
when Hash
|
314
314
|
infer_set_Hash(o)
|
315
|
-
when
|
315
|
+
when SemanticPuppet::Version
|
316
316
|
infer_set_Version(o)
|
317
317
|
else
|
318
318
|
infer_set_Object(o)
|
@@ -389,8 +389,8 @@ class TypeCalculator
|
|
389
389
|
# when both are hashes, return a hash with common key- and element type
|
390
390
|
if t1.is_a?(PHashType) && t2.is_a?(PHashType)
|
391
391
|
key_type = common_type(t1.key_type, t2.key_type)
|
392
|
-
|
393
|
-
return PHashType.new(key_type,
|
392
|
+
value_type = common_type(t1.value_type, t2.value_type)
|
393
|
+
return PHashType.new(key_type, value_type)
|
394
394
|
end
|
395
395
|
|
396
396
|
# when both are host-classes, reduce to PHostClass[] (since one was not assignable to the other)
|
@@ -414,19 +414,29 @@ class TypeCalculator
|
|
414
414
|
return PFloatType.new([t1.numeric_from, t2.numeric_from].min, [t1.numeric_to, t2.numeric_to].max)
|
415
415
|
end
|
416
416
|
|
417
|
-
if t1.is_a?(PStringType) && t2.is_a?(PStringType)
|
418
|
-
|
419
|
-
|
420
|
-
|
417
|
+
if t1.is_a?(PStringType) && (t2.is_a?(PStringType) || t2.is_a?(PEnumType))
|
418
|
+
if(t2.is_a?(PEnumType))
|
419
|
+
return t1.value.nil? ? PEnumType::DEFAULT : PEnumType.new(t2.values | [t1.value])
|
420
|
+
end
|
421
|
+
|
422
|
+
if t1.size_type.nil? || t2.size_type.nil?
|
423
|
+
return t1.value.nil? || t2.value.nil? ? PStringType::DEFAULT : PEnumType.new([t1.value, t2.value])
|
424
|
+
end
|
425
|
+
|
426
|
+
return PStringType.new(common_type(t1.size_type, t2.size_type))
|
421
427
|
end
|
422
428
|
|
423
429
|
if t1.is_a?(PPatternType) && t2.is_a?(PPatternType)
|
424
430
|
return PPatternType.new(t1.patterns | t2.patterns)
|
425
431
|
end
|
426
432
|
|
427
|
-
if t1.is_a?(PEnumType) && t2.is_a?(PEnumType)
|
433
|
+
if t1.is_a?(PEnumType) && (t2.is_a?(PStringType) || t2.is_a?(PEnumType))
|
428
434
|
# The common type is one that complies with either set
|
429
|
-
|
435
|
+
if t2.is_a?(PEnumType)
|
436
|
+
return PEnumType.new(t1.values | t2.values)
|
437
|
+
end
|
438
|
+
|
439
|
+
return t2.value.nil? ? PEnumType::DEFAULT : PEnumType.new(t1.values | [t2.value])
|
430
440
|
end
|
431
441
|
|
432
442
|
if t1.is_a?(PVariantType) && t2.is_a?(PVariantType)
|
@@ -437,7 +447,7 @@ class TypeCalculator
|
|
437
447
|
if t1.is_a?(PRegexpType) && t2.is_a?(PRegexpType)
|
438
448
|
# if they were identical, the general rule would return a parameterized regexp
|
439
449
|
# since they were not, the result is a generic regexp type
|
440
|
-
return
|
450
|
+
return PRegexpType::DEFAULT
|
441
451
|
end
|
442
452
|
|
443
453
|
if t1.is_a?(PCallableType) && t2.is_a?(PCallableType)
|
@@ -581,7 +591,7 @@ class TypeCalculator
|
|
581
591
|
|
582
592
|
# @api private
|
583
593
|
def infer_String(o)
|
584
|
-
PStringType.new(
|
594
|
+
PStringType.new(o)
|
585
595
|
end
|
586
596
|
|
587
597
|
# @api private
|
@@ -735,7 +745,7 @@ class TypeCalculator
|
|
735
745
|
if o.empty?
|
736
746
|
PHashType::EMPTY
|
737
747
|
elsif o.keys.all? {|k| PStringType::NON_EMPTY.instance?(k) }
|
738
|
-
PStructType.new(o.each_pair.map { |k,v| PStructElement.new(PStringType.new(
|
748
|
+
PStructType.new(o.each_pair.map { |k,v| PStructElement.new(PStringType.new(k), infer_set(v)) })
|
739
749
|
else
|
740
750
|
ktype = PVariantType.maybe_create(o.keys.map {|k| infer_set(k) })
|
741
751
|
etype = PVariantType.maybe_create(o.values.map {|e| infer_set(e) })
|
@@ -745,7 +755,7 @@ class TypeCalculator
|
|
745
755
|
|
746
756
|
# @api private
|
747
757
|
def infer_set_Version(o)
|
748
|
-
PSemVerType.new([
|
758
|
+
PSemVerType.new([SemanticPuppet::VersionRange.new(o, o)])
|
749
759
|
end
|
750
760
|
|
751
761
|
def unwrap_single_variant(possible_variant)
|
@@ -75,11 +75,20 @@ module TypeFactory
|
|
75
75
|
@type_calculator.string(t)
|
76
76
|
end
|
77
77
|
|
78
|
-
# Produces the String type
|
78
|
+
# Produces the String type based on nothing, a string value that becomes an exact match constraint, or a parameterized
|
79
|
+
# Integer type that constraints the size.
|
80
|
+
#
|
79
81
|
# @api public
|
80
82
|
#
|
81
|
-
def self.string(
|
82
|
-
|
83
|
+
def self.string(size_type_or_value = nil, *deprecated_second_argument)
|
84
|
+
if deprecated_second_argument.empty?
|
85
|
+
size_type_or_value.nil? ? PStringType::DEFAULT : PStringType.new(size_type_or_value)
|
86
|
+
else
|
87
|
+
if Puppet[:strict] != :off
|
88
|
+
Puppet.warn_once(:deprecatation, "TypeFactory#string_multi_args", "Passing more than one argument to TypeFactory#string is deprecated")
|
89
|
+
end
|
90
|
+
deprecated_second_argument.size == 1 ? PStringType.new(deprecated_second_argument[0]) : PEnumType.new(*deprecated_second_argument)
|
91
|
+
end
|
83
92
|
end
|
84
93
|
|
85
94
|
# Produces the Optional type, i.e. a short hand for Variant[T, Undef]
|
@@ -92,7 +101,7 @@ module TypeFactory
|
|
92
101
|
# @api public
|
93
102
|
#
|
94
103
|
def self.optional(optional_type = nil)
|
95
|
-
POptionalType.new(type_of(optional_type.is_a?(String) ? string(
|
104
|
+
POptionalType.new(type_of(optional_type.is_a?(String) ? string(optional_type) : type_of(optional_type)))
|
96
105
|
end
|
97
106
|
|
98
107
|
# Produces the Enum type, optionally with specific string values
|
@@ -129,7 +138,7 @@ module TypeFactory
|
|
129
138
|
# TODO: Should have stricter name rule
|
130
139
|
if key_type.is_a?(String)
|
131
140
|
raise ArgumentError, 'Struct element key cannot be an empty String' if key_type.empty?
|
132
|
-
key_type = string(
|
141
|
+
key_type = string(key_type)
|
133
142
|
# Must make key optional if the value can be Undef
|
134
143
|
key_type = optional(key_type) if tc.assignable?(value_type, PUndefType::DEFAULT)
|
135
144
|
else
|
@@ -141,12 +150,14 @@ module TypeFactory
|
|
141
150
|
s = key_type
|
142
151
|
when POptionalType
|
143
152
|
s = key_type.optional_type
|
144
|
-
when PStringType
|
153
|
+
when PStringType
|
145
154
|
s = key_type
|
155
|
+
when PEnumType
|
156
|
+
s = key_type.values.size == 1 ? PStringType.new(key_type.values[0]) : nil
|
146
157
|
else
|
147
158
|
raise ArgumentError, "Illegal Struct member key type. Expected NotUndef, Optional, String, or Enum. Got: #{key_type.class.name}"
|
148
159
|
end
|
149
|
-
unless
|
160
|
+
unless s.is_a?(PStringType) && !s.value.nil?
|
150
161
|
raise ArgumentError, "Unable to extract a non-empty literal string from Struct member key type #{tc.string(key_type)}"
|
151
162
|
end
|
152
163
|
end
|
@@ -307,7 +318,7 @@ module TypeFactory
|
|
307
318
|
# @api public
|
308
319
|
#
|
309
320
|
def self.collection(size_type = nil)
|
310
|
-
size_type.nil? ? PCollectionType::DEFAULT : PCollectionType.new(
|
321
|
+
size_type.nil? ? PCollectionType::DEFAULT : PCollectionType.new(size_type)
|
311
322
|
end
|
312
323
|
|
313
324
|
# Produces the Data type
|
@@ -435,7 +446,7 @@ module TypeFactory
|
|
435
446
|
# @api public
|
436
447
|
#
|
437
448
|
def self.not_undef(inst_type = nil)
|
438
|
-
inst_type = string(
|
449
|
+
inst_type = string(inst_type) if inst_type.is_a?(String)
|
439
450
|
PNotUndefType.new(inst_type)
|
440
451
|
end
|
441
452
|
|