puppet 4.3.2 → 4.4.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 +4 -4
- data/COMMITTERS.md +2 -2
- data/CONTRIBUTING.md +6 -6
- data/LICENSE +1 -1
- data/README.md +8 -9
- data/conf/auth.conf +2 -2
- data/ext/README.environment +1 -1
- data/ext/debian/README.source +1 -1
- data/ext/debian/control +1 -1
- data/ext/debian/copyright +4 -4
- data/ext/debian/puppetmaster.README.debian +11 -9
- data/ext/emacs/puppet-mode.el +1 -1
- data/ext/envpuppet +2 -2
- data/ext/ips/puppetagent.xml +1 -1
- data/ext/ips/puppetmaster.xml +1 -1
- data/ext/project_data.yaml +8 -0
- data/ext/puppet-test +3 -3
- data/ext/rack/example-passenger-vhost.conf +1 -1
- data/ext/redhat/puppet.spec.erb +2 -2
- data/ext/regexp_nodes/regexp_nodes.rb +1 -1
- data/ext/solaris/pkginfo +1 -1
- data/ext/solaris/smf/puppet.xml +1 -1
- data/ext/suse/puppet.spec +2 -2
- data/ext/upload_facts.rb +1 -1
- data/ext/windows/puppet_interactive.bat +6 -0
- data/ext/windows/puppet_shell.bat +9 -0
- data/ext/windows/run_puppet_interactive.bat +9 -0
- data/ext/yaml_nodes.rb +1 -1
- data/install.rb +30 -20
- data/lib/puppet/agent.rb +1 -1
- data/lib/puppet/application/agent.rb +4 -2
- data/lib/puppet/application/apply.rb +7 -4
- data/lib/puppet/application/cert.rb +1 -1
- data/lib/puppet/application/device.rb +1 -1
- data/lib/puppet/application/filebucket.rb +1 -1
- data/lib/puppet/application/inspect.rb +1 -1
- data/lib/puppet/application/lookup.rb +4 -4
- data/lib/puppet/application/master.rb +2 -2
- data/lib/puppet/application/resource.rb +1 -1
- data/lib/puppet/configurer.rb +100 -22
- data/lib/puppet/data_providers/hiera_config.rb +28 -3
- data/lib/puppet/data_providers/hiera_interpolate.rb +30 -15
- data/lib/puppet/data_providers/hiera_support.rb +1 -1
- data/lib/puppet/data_providers/json_data_provider_factory.rb +2 -2
- data/lib/puppet/data_providers/yaml_data_provider_factory.rb +2 -2
- data/lib/puppet/defaults.rb +65 -19
- data/lib/puppet/environments.rb +3 -1
- data/lib/puppet/face/config.rb +1 -1
- data/lib/puppet/face/epp.rb +1 -1
- data/lib/puppet/face/help/man.erb +1 -1
- data/lib/puppet/face/module/install.rb +6 -6
- data/lib/puppet/face/parser.rb +12 -9
- data/lib/puppet/face/status.rb +2 -1
- data/lib/puppet/feature/cfpropertylist.rb +3 -0
- data/lib/puppet/feature/telnet.rb +9 -0
- data/lib/puppet/file_serving/http_metadata.rb +46 -0
- data/lib/puppet/file_serving/metadata.rb +18 -2
- data/lib/puppet/file_serving/terminus_selector.rb +2 -0
- data/lib/puppet/file_system.rb +2 -2
- data/lib/puppet/file_system/file_impl.rb +2 -2
- data/lib/puppet/file_system/memory_impl.rb +1 -1
- data/lib/puppet/file_system/uniquefile.rb +1 -1
- data/lib/puppet/forge.rb +1 -1
- data/lib/puppet/forge/repository.rb +1 -31
- data/lib/puppet/functions.rb +45 -6
- data/lib/puppet/functions/assert_type.rb +9 -9
- data/lib/puppet/functions/each.rb +5 -13
- data/lib/puppet/functions/filter.rb +5 -14
- data/lib/puppet/functions/map.rb +6 -14
- data/lib/puppet/functions/reduce.rb +5 -13
- data/lib/puppet/functions/reverse_each.rb +82 -0
- data/lib/puppet/functions/scanf.rb +15 -18
- data/lib/puppet/functions/slice.rb +22 -36
- data/lib/puppet/functions/split.rb +2 -2
- data/lib/puppet/functions/step.rb +88 -0
- data/lib/puppet/functions/type.rb +70 -0
- data/lib/puppet/graph/rb_tree_map.rb +1 -1
- data/lib/puppet/indirector/catalog/compiler.rb +188 -5
- data/lib/puppet/indirector/file_content/http.rb +15 -0
- data/lib/puppet/indirector/file_metadata/http.rb +27 -0
- data/lib/puppet/indirector/generic_http.rb +16 -0
- data/lib/puppet/indirector/node/exec.rb +1 -1
- data/lib/puppet/indirector/node/ldap.rb +1 -1
- data/lib/puppet/indirector/rest.rb +2 -1
- data/lib/puppet/info_service/class_information_service.rb +13 -12
- data/lib/puppet/loaders.rb +1 -0
- data/lib/puppet/module.rb +3 -0
- data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +9 -2
- data/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +1 -1
- data/lib/puppet/module_tool/skeleton/templates/generator/tests/init.pp.erb +2 -2
- data/lib/puppet/module_tool/tar/mini.rb +3 -3
- data/lib/puppet/network/http/pool.rb +9 -0
- data/lib/puppet/node.rb +1 -1
- data/lib/puppet/node/environment.rb +11 -2
- data/lib/puppet/parser/ast/pops_bridge.rb +19 -22
- data/lib/puppet/parser/compiler.rb +3 -3
- data/lib/puppet/parser/environment_compiler.rb +0 -1
- data/lib/puppet/parser/functions.rb +28 -16
- data/lib/puppet/parser/functions/fqdn_rand.rb +1 -1
- data/lib/puppet/parser/functions/inline_template.rb +1 -1
- data/lib/puppet/parser/functions/map.rb +1 -1
- data/lib/puppet/parser/functions/scanf.rb +15 -26
- data/lib/puppet/parser/functions/slice.rb +17 -24
- data/lib/puppet/parser/functions/split.rb +1 -1
- data/lib/puppet/parser/resource.rb +19 -17
- data/lib/puppet/parser/scope.rb +176 -5
- data/lib/puppet/plugins/data_providers/data_provider.rb +54 -13
- data/lib/puppet/pops.rb +0 -8
- data/lib/puppet/pops/adaptable.rb +4 -1
- data/lib/puppet/pops/adapters.rb +38 -13
- data/lib/puppet/pops/binder/binder.rb +21 -17
- data/lib/puppet/pops/binder/binder_issues.rb +8 -6
- data/lib/puppet/pops/binder/bindings_checker.rb +12 -8
- data/lib/puppet/pops/binder/bindings_composer.rb +16 -12
- data/lib/puppet/pops/binder/bindings_factory.rb +108 -104
- data/lib/puppet/pops/binder/bindings_model.rb +49 -47
- data/lib/puppet/pops/binder/config/diagnostic_producer.rb +10 -6
- data/lib/puppet/pops/binder/injector.rb +53 -48
- data/lib/puppet/pops/binder/key_factory.rb +10 -6
- data/lib/puppet/pops/binder/producers.rb +67 -62
- data/lib/puppet/pops/evaluator/access_operator.rb +95 -93
- data/lib/puppet/pops/evaluator/closure.rb +84 -68
- data/lib/puppet/pops/evaluator/collector_transformer.rb +18 -14
- data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +0 -1
- data/lib/puppet/pops/evaluator/compare_operator.rb +13 -9
- data/lib/puppet/pops/evaluator/epp_evaluator.rb +9 -8
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +78 -76
- data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +85 -0
- data/lib/puppet/pops/evaluator/relationship_operator.rb +13 -11
- data/lib/puppet/pops/evaluator/runtime3_converter.rb +5 -0
- data/lib/puppet/pops/evaluator/runtime3_support.rb +41 -45
- data/lib/puppet/pops/issue_reporter.rb +6 -4
- data/lib/puppet/pops/issues.rb +34 -11
- data/lib/puppet/pops/loader/base_loader.rb +1 -1
- data/lib/puppet/pops/loader/loader.rb +1 -1
- data/lib/puppet/pops/loader/loader_paths.rb +15 -0
- data/lib/puppet/pops/loader/module_loaders.rb +17 -13
- data/lib/puppet/pops/loader/puppet_function_instantiator.rb +16 -12
- data/lib/puppet/pops/loader/ruby_function_instantiator.rb +16 -3
- data/lib/puppet/pops/loader/type_definition_instantiator.rb +55 -0
- data/lib/puppet/pops/loaders.rb +51 -9
- data/lib/puppet/pops/lookup.rb +14 -12
- data/lib/puppet/pops/merge_strategy.rb +16 -19
- data/lib/puppet/pops/model/factory.rb +26 -2
- data/lib/puppet/pops/model/model.rb +8 -8
- data/lib/puppet/pops/model/model_label_provider.rb +13 -7
- data/lib/puppet/pops/model/model_meta.rb +17 -0
- data/lib/puppet/pops/model/model_tree_dumper.rb +8 -0
- data/lib/puppet/pops/parser/egrammar.ra +38 -14
- data/lib/puppet/pops/parser/eparser.rb +1353 -1276
- data/lib/puppet/pops/parser/epp_support.rb +11 -7
- data/lib/puppet/pops/parser/evaluating_parser.rb +14 -10
- data/lib/puppet/pops/parser/heredoc_support.rb +15 -11
- data/lib/puppet/pops/parser/lexer2.rb +26 -19
- data/lib/puppet/pops/parser/lexer_support.rb +85 -7
- data/lib/puppet/pops/parser/locator.rb +21 -0
- data/lib/puppet/pops/parser/parser_support.rb +19 -16
- data/lib/puppet/pops/parser/slurp_support.rb +11 -7
- data/lib/puppet/pops/types/class_loader.rb +23 -19
- data/lib/puppet/pops/types/enumeration.rb +9 -26
- data/lib/puppet/pops/types/iterable.rb +308 -0
- data/lib/puppet/pops/types/recursion_guard.rb +82 -0
- data/lib/puppet/pops/types/type_acceptor.rb +25 -0
- data/lib/puppet/pops/types/type_asserter.rb +10 -9
- data/lib/puppet/pops/types/type_calculator.rb +138 -381
- data/lib/puppet/pops/types/type_factory.rb +91 -57
- data/lib/puppet/pops/types/type_formatter.rb +334 -0
- data/lib/puppet/pops/types/type_mismatch_describer.rb +226 -59
- data/lib/puppet/pops/types/type_parser.rb +159 -112
- data/lib/puppet/pops/types/types.rb +2057 -1247
- data/lib/puppet/pops/utils.rb +11 -10
- data/lib/puppet/pops/validation.rb +11 -9
- data/lib/puppet/pops/validation/checker4_0.rb +83 -55
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +8 -4
- data/lib/puppet/provider/aixobject.rb +1 -1
- data/lib/puppet/provider/augeas/augeas.rb +1 -1
- data/lib/puppet/provider/cron/crontab.rb +1 -1
- data/lib/puppet/provider/exec/windows.rb +1 -1
- data/lib/puppet/provider/macauthorization/macauthorization.rb +10 -9
- data/lib/puppet/provider/nameservice/directoryservice.rb +35 -50
- data/lib/puppet/provider/package/appdmg.rb +3 -2
- data/lib/puppet/provider/package/dnf.rb +1 -1
- data/lib/puppet/provider/package/pip.rb +5 -8
- data/lib/puppet/provider/package/pip3.rb +1 -1
- data/lib/puppet/provider/package/pkg.rb +1 -1
- data/lib/puppet/provider/package/pkgdmg.rb +3 -2
- data/lib/puppet/provider/package/pkgng.rb +13 -4
- data/lib/puppet/provider/package/windows.rb +1 -1
- data/lib/puppet/provider/package/yum.rb +1 -1
- data/lib/puppet/provider/package/zypper.rb +19 -0
- data/lib/puppet/provider/service/debian.rb +2 -2
- data/lib/puppet/provider/service/launchd.rb +6 -18
- data/lib/puppet/provider/service/systemd.rb +9 -2
- data/lib/puppet/provider/sshkey/parsed.rb +1 -1
- data/lib/puppet/provider/user/aix.rb +1 -1
- data/lib/puppet/provider/user/directoryservice.rb +33 -58
- data/lib/puppet/provider/zfs/zfs.rb +1 -1
- data/lib/puppet/provider/zpool/zpool.rb +1 -1
- data/lib/puppet/reference/configuration.rb +1 -1
- data/lib/puppet/reference/providers.rb +1 -1
- data/lib/puppet/resource.rb +15 -12
- data/lib/puppet/resource/capability_finder.rb +20 -13
- data/lib/puppet/resource/catalog.rb +60 -3
- data/lib/puppet/resource/status.rb +11 -2
- data/lib/puppet/resource/type.rb +28 -38
- data/lib/puppet/settings.rb +1 -1
- data/lib/puppet/settings/config_file.rb +1 -1
- data/lib/puppet/settings/environment_conf.rb +13 -5
- data/lib/puppet/ssl/certificate_factory.rb +3 -3
- data/lib/puppet/ssl/certificate_request.rb +4 -4
- data/lib/puppet/ssl/certificate_signer.rb +1 -1
- data/lib/puppet/ssl/validator/default_validator.rb +1 -1
- data/lib/puppet/test/test_helper.rb +16 -4
- data/lib/puppet/transaction.rb +15 -2
- data/lib/puppet/transaction/additional_resource_generator.rb +6 -2
- data/lib/puppet/transaction/report.rb +31 -1
- data/lib/puppet/transaction/resource_harness.rb +0 -25
- data/lib/puppet/type.rb +11 -11
- data/lib/puppet/type/augeas.rb +1 -1
- data/lib/puppet/type/cron.rb +12 -12
- data/lib/puppet/type/file.rb +91 -39
- data/lib/puppet/type/file/checksum_value.rb +53 -0
- data/lib/puppet/type/file/content.rb +26 -111
- data/lib/puppet/type/file/data_sync.rb +84 -0
- data/lib/puppet/type/file/ensure.rb +17 -14
- data/lib/puppet/type/file/selcontext.rb +1 -1
- data/lib/puppet/type/file/source.rb +103 -18
- data/lib/puppet/type/filebucket.rb +1 -1
- data/lib/puppet/type/interface.rb +8 -3
- data/lib/puppet/type/macauthorization.rb +1 -1
- data/lib/puppet/type/package.rb +6 -0
- data/lib/puppet/type/schedule.rb +1 -1
- data/lib/puppet/type/stage.rb +1 -1
- data/lib/puppet/type/user.rb +19 -17
- data/lib/puppet/type/yumrepo.rb +20 -0
- data/lib/puppet/util.rb +109 -22
- data/lib/puppet/util/autoload.rb +16 -11
- data/lib/puppet/util/checksums.rb +74 -31
- data/lib/puppet/util/execution.rb +1 -1
- data/lib/puppet/util/http_proxy.rb +72 -0
- data/lib/puppet/util/log.rb +2 -0
- data/lib/puppet/util/logging.rb +43 -1
- data/lib/puppet/util/monkey_patches.rb +2 -2
- data/lib/puppet/util/multi_match.rb +51 -0
- data/lib/puppet/util/network_device/cisco/device.rb +10 -2
- data/lib/puppet/util/network_device/cisco/interface.rb +21 -8
- data/lib/puppet/util/network_device/transport/ssh.rb +7 -3
- data/lib/puppet/util/network_device/transport/telnet.rb +39 -36
- data/lib/puppet/util/plist.rb +130 -0
- data/lib/puppet/util/resource_template.rb +1 -1
- data/lib/puppet/util/run_mode.rb +2 -2
- data/lib/puppet/util/skip_tags.rb +9 -0
- data/lib/puppet/util/windows/access_control_entry.rb +1 -1
- data/lib/puppet/util/windows/access_control_list.rb +3 -3
- data/lib/puppet/util/windows/adsi.rb +4 -4
- data/lib/puppet/util/windows/api_types.rb +24 -18
- data/lib/puppet/util/windows/com.rb +3 -3
- data/lib/puppet/util/windows/error.rb +1 -1
- data/lib/puppet/util/windows/file.rb +8 -8
- data/lib/puppet/util/windows/principal.rb +23 -14
- data/lib/puppet/util/windows/process.rb +78 -11
- data/lib/puppet/util/windows/registry.rb +1 -1
- data/lib/puppet/util/windows/root_certs.rb +5 -5
- data/lib/puppet/util/windows/security.rb +33 -35
- data/lib/puppet/util/windows/security_descriptor.rb +1 -1
- data/lib/puppet/util/windows/sid.rb +42 -4
- data/lib/puppet/util/windows/taskscheduler.rb +15 -15
- data/lib/puppet/util/windows/user.rb +10 -10
- data/lib/puppet/vendor/deep_merge/deep_merge.gemspec +1 -1
- data/lib/puppet/vendor/pathspec/LICENSE +2 -2
- data/lib/puppet/vendor/pathspec/README.md +1 -1
- data/lib/puppet/vendor/rgen/README.rdoc +1 -1
- data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +14 -0
- data/lib/puppet/version.rb +1 -1
- data/lib/semver.rb +17 -1
- data/man/man5/puppet.conf.5 +12 -12
- data/man/man8/extlookup2hiera.8 +1 -1
- data/man/man8/puppet-agent.8 +2 -2
- data/man/man8/puppet-apply.8 +2 -2
- data/man/man8/puppet-ca.8 +2 -2
- data/man/man8/puppet-catalog.8 +2 -2
- data/man/man8/puppet-cert.8 +2 -2
- data/man/man8/puppet-certificate.8 +2 -2
- data/man/man8/puppet-certificate_request.8 +2 -2
- data/man/man8/puppet-certificate_revocation_list.8 +2 -2
- data/man/man8/puppet-config.8 +3 -3
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +1 -1
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +2 -2
- data/man/man8/puppet-facts.8 +2 -2
- data/man/man8/puppet-file.8 +2 -2
- data/man/man8/puppet-filebucket.8 +2 -2
- data/man/man8/puppet-help.8 +2 -2
- data/man/man8/puppet-inspect.8 +2 -2
- data/man/man8/puppet-key.8 +2 -2
- data/man/man8/puppet-man.8 +2 -2
- data/man/man8/puppet-master.8 +2 -2
- data/man/man8/puppet-module.8 +9 -9
- data/man/man8/puppet-node.8 +2 -2
- data/man/man8/puppet-parser.8 +2 -2
- data/man/man8/puppet-plugin.8 +2 -2
- data/man/man8/puppet-report.8 +2 -2
- data/man/man8/puppet-resource.8 +2 -2
- data/man/man8/puppet-resource_type.8 +2 -2
- data/man/man8/puppet-status.8 +3 -3
- data/man/man8/puppet.8 +1 -1
- data/spec/fixtures/module.tar.gz +0 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +1 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/manifests/init.pp +0 -1
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/data/empty.json +0 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/hiera.yaml +5 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/manifests/init.pp +2 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/data/empty.yaml +1 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/hiera.yaml +5 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/manifests/init.pp +2 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/data/first.json +2 -1
- data/spec/fixtures/unit/module/trailing-comma.json +1 -1
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/manifests/init.pp +3 -1
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/types/zero.pp +1 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseeone.pp +1 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseezero.pp +1 -0
- data/spec/fixtures/unit/provider/package/yum/yum-check-update-broken-notices.txt +187 -0
- data/spec/fixtures/unit/provider/sshkey/parsed/sample_with_blank_lines +8 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +205 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_not_update_if_content_on_disk_is_up-to-date.yml +213 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +213 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +205 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +197 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +205 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +205 -0
- data/spec/integration/defaults_spec.rb +14 -2
- data/spec/integration/file_system/uniquefile_spec.rb +29 -0
- data/spec/integration/module_tool/tar/mini_spec.rb +28 -0
- data/spec/integration/node/environment_spec.rb +13 -0
- data/spec/integration/parser/dynamic_scoping_spec.rb +67 -0
- data/spec/integration/parser/parameter_defaults_spec.rb +336 -0
- data/spec/integration/parser/undef_param_spec.rb +8 -0
- data/spec/integration/provider/yumrepo_spec.rb +1 -1
- data/spec/integration/test/test_helper_spec.rb +28 -0
- data/spec/integration/transaction/report_spec.rb +16 -0
- data/spec/integration/transaction_spec.rb +11 -0
- data/spec/integration/type/file_spec.rb +194 -4
- data/spec/integration/type/package_spec.rb +5 -1
- data/spec/integration/type/tidy_spec.rb +21 -9
- data/spec/integration/util/execution_spec.rb +22 -0
- data/spec/integration/util/windows/principal_spec.rb +90 -4
- data/spec/integration/util/windows/process_spec.rb +31 -0
- data/spec/integration/util/windows/security_spec.rb +6 -6
- data/spec/integration/util/windows/user_spec.rb +1 -1
- data/spec/integration/util_spec.rb +49 -27
- data/spec/lib/puppet_spec/compiler.rb +17 -0
- data/spec/lib/puppet_spec/files.rb +2 -2
- data/spec/lib/puppet_spec/pops.rb +13 -0
- data/spec/shared_behaviours/iterative_functions.rb +1 -1
- data/spec/shared_contexts/types_setup.rb +96 -0
- data/spec/unit/agent_spec.rb +1 -0
- data/spec/unit/application/agent_spec.rb +10 -0
- data/spec/unit/application/apply_spec.rb +9 -0
- data/spec/unit/configurer/downloader_spec.rb +5 -5
- data/spec/unit/configurer_spec.rb +271 -39
- data/spec/unit/data_providers/hiera_interpolation_spec.rb +57 -0
- data/spec/unit/defaults_spec.rb +15 -0
- data/spec/unit/environments_spec.rb +24 -4
- data/spec/unit/face/parser_spec.rb +43 -2
- data/spec/unit/file_serving/http_metadata_spec.rb +85 -0
- data/spec/unit/file_serving/metadata_spec.rb +50 -0
- data/spec/unit/file_serving/terminus_selector_spec.rb +12 -2
- data/spec/unit/file_system_spec.rb +26 -0
- data/spec/unit/functions/assert_type_spec.rb +36 -2
- data/spec/unit/functions/defined_spec.rb +2 -2
- data/spec/unit/functions/epp_spec.rb +11 -3
- data/spec/unit/functions/lookup_spec.rb +58 -13
- data/spec/unit/functions/regsubst_spec.rb +1 -1
- data/spec/unit/functions/reverse_each_spec.rb +108 -0
- data/spec/unit/functions/step_spec.rb +113 -0
- data/spec/unit/functions/type_spec.rb +35 -0
- data/spec/unit/functions4_spec.rb +61 -5
- data/spec/unit/indirector/catalog/compiler_spec.rb +705 -4
- data/spec/unit/indirector/file_bucket_file/file_spec.rb +1 -1
- data/spec/unit/indirector/indirection_spec.rb +1 -1
- data/spec/unit/info_service_spec.rb +94 -32
- data/spec/unit/module_spec.rb +14 -0
- data/spec/unit/module_tool/applications/builder_spec.rb +4 -4
- data/spec/unit/network/authstore_spec.rb +1 -1
- data/spec/unit/network/http/connection_spec.rb +1 -0
- data/spec/unit/network/http/pool_spec.rb +30 -0
- data/spec/unit/node_spec.rb +1 -1
- data/spec/unit/parser/compiler_spec.rb +16 -0
- data/spec/unit/parser/scope_spec.rb +28 -11
- data/spec/unit/pops/evaluator/access_ops_spec.rb +3 -3
- data/spec/unit/pops/evaluator/comparison_ops_spec.rb +3 -0
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +7 -1
- data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +4 -4
- data/spec/unit/pops/evaluator/json_strict_literal_evaluator_spec.rb +63 -0
- data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +6 -0
- data/spec/unit/pops/loaders/dependency_loader_spec.rb +53 -0
- data/spec/unit/pops/loaders/loaders_spec.rb +44 -1
- data/spec/unit/pops/parser/lexer2_spec.rb +112 -3
- data/spec/unit/pops/parser/parse_calls_spec.rb +8 -0
- data/spec/unit/pops/parser/parser_spec.rb +10 -0
- data/spec/unit/pops/parser/source_pos_adapter_spec.rb +26 -0
- data/spec/unit/pops/types/iterable_spec.rb +262 -0
- data/spec/unit/pops/types/recursion_guard_spec.rb +91 -0
- data/spec/unit/pops/types/type_acceptor_spec.rb +105 -0
- data/spec/unit/pops/types/type_asserter_spec.rb +43 -0
- data/spec/unit/pops/types/type_calculator_spec.rb +275 -373
- data/spec/unit/pops/types/type_formatter_spec.rb +280 -0
- data/spec/unit/pops/types/type_mismatch_describer_spec.rb +152 -0
- data/spec/unit/pops/types/type_parser_spec.rb +58 -13
- data/spec/unit/pops/types/types_spec.rb +241 -0
- data/spec/unit/pops/validator/validator_spec.rb +100 -43
- data/spec/unit/provider/cron/parsed_spec.rb +1 -0
- data/spec/unit/provider/macauthorization_spec.rb +5 -2
- data/spec/unit/provider/nameservice/directoryservice_spec.rb +14 -19
- data/spec/unit/provider/package/appdmg_spec.rb +3 -3
- data/spec/unit/provider/package/dnf_spec.rb +16 -0
- data/spec/unit/provider/package/pip3_spec.rb +60 -42
- data/spec/unit/provider/package/pip_spec.rb +47 -34
- data/spec/unit/provider/package/pkgdmg_spec.rb +18 -9
- data/spec/unit/provider/package/pkgng_spec.rb +4 -2
- data/spec/unit/provider/package/yum_spec.rb +11 -0
- data/spec/unit/provider/package/zypper_spec.rb +14 -0
- data/spec/unit/provider/service/launchd_spec.rb +17 -35
- data/spec/unit/provider/service/systemd_spec.rb +7 -0
- data/spec/unit/provider/sshkey/parsed_spec.rb +20 -19
- data/spec/unit/provider/user/directoryservice_spec.rb +40 -59
- data/spec/unit/resource/capability_finder_spec.rb +28 -15
- data/spec/unit/resource/catalog_spec.rb +33 -1
- data/spec/unit/resource/type_spec.rb +149 -7
- data/spec/unit/resource_spec.rb +96 -57
- data/spec/unit/settings/environment_conf_spec.rb +18 -1
- data/spec/unit/ssl/certificate_revocation_list_spec.rb +3 -3
- data/spec/unit/transaction/report_spec.rb +27 -0
- data/spec/unit/transaction/resource_harness_spec.rb +0 -47
- data/spec/unit/transaction_spec.rb +5 -0
- data/spec/unit/type/file/checksum_spec.rb +6 -0
- data/spec/unit/type/file/checksum_value_spec.rb +286 -0
- data/spec/unit/type/file/content_spec.rb +12 -193
- data/spec/unit/type/file/source_spec.rb +211 -119
- data/spec/unit/type/file_spec.rb +133 -34
- data/spec/unit/type/interface_spec.rb +32 -0
- data/spec/unit/type/macauthorization_spec.rb +4 -1
- data/spec/unit/type/yumrepo_spec.rb +2 -2
- data/spec/unit/util/filetype_spec.rb +1 -1
- data/spec/unit/util/http_proxy_spec.rb +2 -2
- data/spec/unit/util/log/destinations_spec.rb +0 -2
- data/spec/unit/util/logging_spec.rb +69 -0
- data/spec/unit/util/multi_match_spec.rb +39 -0
- data/spec/unit/util/network_device/cisco/device_spec.rb +253 -216
- data/spec/unit/util/network_device/transport/telnet_spec.rb +60 -58
- data/spec/unit/util/plist_spec.rb +110 -0
- data/spec/unit/util/resource_template_spec.rb +2 -2
- data/spec/unit/util/run_mode_spec.rb +27 -3
- data/spec/unit/util/windows/adsi_spec.rb +4 -4
- data/spec/unit/util/windows/api_types_spec.rb +42 -0
- data/spec/unit/util/windows/security_descriptor_spec.rb +3 -3
- data/spec/unit/util/windows/sid_spec.rb +1 -1
- data/spec/unit/util_spec.rb +123 -13
- data/tasks/cfpropertylist.rake +15 -0
- metadata +114 -26
- data/lib/puppet/vendor/load_plist.rb +0 -1
- data/lib/puppet/vendor/plist/CHANGELOG +0 -82
- data/lib/puppet/vendor/plist/MIT-LICENSE +0 -21
- data/lib/puppet/vendor/plist/PUPPET_README.md +0 -6
- data/lib/puppet/vendor/plist/README +0 -36
- data/lib/puppet/vendor/plist/Rakefile +0 -144
- data/lib/puppet/vendor/plist/docs/USAGE +0 -104
- data/lib/puppet/vendor/plist/docs/jamis-template.rb +0 -591
- data/lib/puppet/vendor/plist/lib/plist.rb +0 -22
- data/lib/puppet/vendor/plist/lib/plist/generator.rb +0 -224
- data/lib/puppet/vendor/plist/lib/plist/parser.rb +0 -225
- data/lib/puppet/vendor/plist/test/assets/AlbumData.xml +0 -203
- data/lib/puppet/vendor/plist/test/assets/Cookies.plist +0 -104
- data/lib/puppet/vendor/plist/test/assets/commented.plist +0 -9
- data/lib/puppet/vendor/plist/test/assets/example_data.bin +0 -0
- data/lib/puppet/vendor/plist/test/assets/example_data.jpg +0 -0
- data/lib/puppet/vendor/plist/test/assets/example_data.plist +0 -259
- data/lib/puppet/vendor/plist/test/assets/test_data_elements.plist +0 -24
- data/lib/puppet/vendor/plist/test/assets/test_empty_key.plist +0 -13
- data/lib/puppet/vendor/plist/test/test_data_elements.rb +0 -115
- data/lib/puppet/vendor/plist/test/test_generator.rb +0 -59
- data/lib/puppet/vendor/plist/test/test_generator_basic_types.rb +0 -58
- data/lib/puppet/vendor/plist/test/test_generator_collections.rb +0 -82
- data/lib/puppet/vendor/plist/test/test_parser.rb +0 -90
@@ -1,4 +1,5 @@
|
|
1
|
-
module Puppet::Pops
|
1
|
+
module Puppet::Pops
|
2
|
+
module Types
|
2
3
|
EMPTY_ARRAY = [].freeze
|
3
4
|
|
4
5
|
class TypePathElement
|
@@ -19,6 +20,12 @@ module Puppet::Pops::Types
|
|
19
20
|
alias :eql? :==
|
20
21
|
end
|
21
22
|
|
23
|
+
class SubjectPathElement < TypePathElement
|
24
|
+
def to_s
|
25
|
+
key
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
22
29
|
class MemberPathElement < TypePathElement
|
23
30
|
def to_s
|
24
31
|
"struct member #{key}"
|
@@ -65,7 +72,42 @@ module Puppet::Pops::Types
|
|
65
72
|
end
|
66
73
|
end
|
67
74
|
|
75
|
+
# Module to handle present/past tense.
|
76
|
+
#
|
77
|
+
# All method names prefixed with "it_" to avoid conflict with Mocha expectations. Adding a method
|
78
|
+
# named 'expects' just doesn't work.
|
79
|
+
#
|
80
|
+
module TenseVariants
|
81
|
+
def it_expects(tense)
|
82
|
+
case tense
|
83
|
+
when :present
|
84
|
+
'expects'
|
85
|
+
else
|
86
|
+
'expected'
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def it_does_not_expect(tense)
|
91
|
+
case tense
|
92
|
+
when :present
|
93
|
+
'does not expect'
|
94
|
+
else
|
95
|
+
'did not expect'
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
def it_has_no(tense)
|
100
|
+
case tense
|
101
|
+
when :present
|
102
|
+
'has no'
|
103
|
+
else
|
104
|
+
'did not have a'
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
68
109
|
class Mismatch
|
110
|
+
include TenseVariants
|
69
111
|
attr_reader :path
|
70
112
|
|
71
113
|
def initialize(path)
|
@@ -76,7 +118,7 @@ module Puppet::Pops::Types
|
|
76
118
|
@canonical_path ||= @path.reject { |e| e.is_a?(VariantPathElement) }
|
77
119
|
end
|
78
120
|
|
79
|
-
def message(variant, position)
|
121
|
+
def message(variant, position, tense = :present)
|
80
122
|
"#{variant}unknown mismatch#{position}"
|
81
123
|
end
|
82
124
|
|
@@ -108,6 +150,10 @@ module Puppet::Pops::Types
|
|
108
150
|
end
|
109
151
|
|
110
152
|
def to_s
|
153
|
+
format(:present)
|
154
|
+
end
|
155
|
+
|
156
|
+
def format(tense)
|
111
157
|
p = @path
|
112
158
|
variant = ''
|
113
159
|
position = ''
|
@@ -119,7 +165,7 @@ module Puppet::Pops::Types
|
|
119
165
|
end
|
120
166
|
position = " #{p.join(' ')}" unless p.empty?
|
121
167
|
end
|
122
|
-
message(variant, position)
|
168
|
+
message(variant, position, tense)
|
123
169
|
end
|
124
170
|
end
|
125
171
|
|
@@ -142,38 +188,38 @@ module Puppet::Pops::Types
|
|
142
188
|
end
|
143
189
|
|
144
190
|
class MissingKey < KeyMismatch
|
145
|
-
def message(variant, position)
|
146
|
-
"#{variant}#{position}
|
191
|
+
def message(variant, position, tense = :present)
|
192
|
+
"#{variant}#{position} #{it_expects(tense)} a value for key '#{key}'"
|
147
193
|
end
|
148
194
|
end
|
149
195
|
|
150
196
|
class MissingParameter < KeyMismatch
|
151
|
-
def message(variant, position)
|
152
|
-
"#{variant}#{position}
|
197
|
+
def message(variant, position, tense = :present)
|
198
|
+
"#{variant}#{position} #{it_expects(tense)} a value for parameter '#{key}'"
|
153
199
|
end
|
154
200
|
end
|
155
201
|
|
156
202
|
class ExtraneousKey < KeyMismatch
|
157
|
-
def message(variant, position)
|
158
|
-
"#{variant}#{position}
|
203
|
+
def message(variant, position, tense = :present)
|
204
|
+
"#{variant}#{position} #{it_has_no(tense)} '#{@key}' key"
|
159
205
|
end
|
160
206
|
end
|
161
207
|
|
162
208
|
class InvalidParameter < ExtraneousKey
|
163
|
-
def message(variant, position)
|
164
|
-
"#{variant}#{position}
|
209
|
+
def message(variant, position, tense = :present)
|
210
|
+
"#{variant}#{position} #{it_has_no(tense)} parameter named '#{@key}'"
|
165
211
|
end
|
166
212
|
end
|
167
213
|
|
168
214
|
class UnexpectedBlock < Mismatch
|
169
|
-
def message(variant, position)
|
170
|
-
"#{variant}#{position}
|
215
|
+
def message(variant, position, tense = :present)
|
216
|
+
"#{variant}#{position} #{it_does_not_expect(tense)} a block"
|
171
217
|
end
|
172
218
|
end
|
173
219
|
|
174
220
|
class MissingRequiredBlock < Mismatch
|
175
|
-
def message(variant, position)
|
176
|
-
"#{variant}#{position}
|
221
|
+
def message(variant, position, tense = :present)
|
222
|
+
"#{variant}#{position} #{it_expects(tense)} a block"
|
177
223
|
end
|
178
224
|
end
|
179
225
|
|
@@ -182,8 +228,8 @@ module Puppet::Pops::Types
|
|
182
228
|
|
183
229
|
def initialize(path, expected, actual)
|
184
230
|
super(path)
|
185
|
-
@expected = expected
|
186
|
-
@actual = actual
|
231
|
+
@expected = (expected.is_a?(Array) ? PVariantType.new(expected) : expected).normalize
|
232
|
+
@actual = actual.normalize
|
187
233
|
end
|
188
234
|
|
189
235
|
def ==(o)
|
@@ -195,30 +241,34 @@ module Puppet::Pops::Types
|
|
195
241
|
hash = hash * 31 + expected.hash
|
196
242
|
hash * 31 + actual.hash
|
197
243
|
end
|
244
|
+
|
245
|
+
def swap_expected(expected)
|
246
|
+
copy = self.clone
|
247
|
+
copy.instance_variable_set(:@expected, expected)
|
248
|
+
copy
|
249
|
+
end
|
198
250
|
end
|
199
251
|
|
200
252
|
class TypeMismatch < ExpectedActualMismatch
|
201
|
-
include
|
253
|
+
include LabelProvider
|
202
254
|
|
203
255
|
# @return A new instance with the least restrictive respective boundaries
|
204
256
|
def merge(path, o)
|
205
257
|
self.class.new(path, [expected, o.expected].flatten.uniq, actual)
|
206
258
|
end
|
207
259
|
|
208
|
-
def message(variant, position)
|
260
|
+
def message(variant, position, tense = :present)
|
209
261
|
e = expected
|
210
262
|
a = actual
|
211
263
|
multi = false
|
212
|
-
if e.is_a?(
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
e = e.map { |t| t.to_s }
|
218
|
-
a = a.to_s
|
264
|
+
if e.is_a?(PVariantType)
|
265
|
+
e = e.types
|
266
|
+
if report_detailed?(e, a)
|
267
|
+
a = detailed_actual_to_s(e, a)
|
268
|
+
e = e.map { |t| t.to_alias_expanded_s }
|
219
269
|
else
|
220
|
-
sns = e.map { |t| t.simple_name }
|
221
|
-
e = e.map { |t| s = t.simple_name; sns.count {|x| x == s } == 1 ? s : t.to_s }
|
270
|
+
sns = e.map { |t| t.simple_name }.uniq
|
271
|
+
e = e.map { |t| s = t.simple_name; sns.count {|x| x == s } == 1 ? s : t.to_s }.uniq
|
222
272
|
a = a.simple_name
|
223
273
|
end
|
224
274
|
case e.size
|
@@ -232,25 +282,105 @@ module Puppet::Pops::Types
|
|
232
282
|
multi = true
|
233
283
|
end
|
234
284
|
else
|
235
|
-
if e
|
285
|
+
if report_detailed?(e, a)
|
286
|
+
a = detailed_actual_to_s(e, a)
|
287
|
+
e = e.to_alias_expanded_s
|
288
|
+
else
|
236
289
|
e = e.simple_name
|
237
290
|
a = a.simple_name
|
238
|
-
else
|
239
|
-
e = e.to_s
|
240
|
-
a = a.to_s
|
241
291
|
end
|
242
292
|
end
|
243
|
-
multi
|
293
|
+
if multi
|
294
|
+
"#{variant}#{position} #{it_expects(tense)} a value of type #{e}, got #{label(a)}"
|
295
|
+
else
|
296
|
+
"#{variant}#{position} #{it_expects(tense)} #{a_an(e)} value, got #{label(a)}"
|
297
|
+
end
|
244
298
|
end
|
245
299
|
|
246
300
|
def label(o)
|
247
301
|
o.to_s
|
248
302
|
end
|
303
|
+
|
304
|
+
private
|
305
|
+
|
306
|
+
# Decides whether or not the report must be fully detailed, or if generalization can be permitted
|
307
|
+
# in the mismatch report. All comparisons are made using resolved aliases rather than the alias
|
308
|
+
# itself.
|
309
|
+
#
|
310
|
+
# @param e [PAnyType,Array[PAnyType]] the expected type or array of expected types
|
311
|
+
# @param a [PAnyType] the actual type
|
312
|
+
# @return [Boolean] `true` when the class of _a_ equals the class _e_ or,
|
313
|
+
# in case _e_ is an `Array`, the class of at least one element of _e_
|
314
|
+
def always_fully_detailed?(e, a)
|
315
|
+
if e.is_a?(Array)
|
316
|
+
e.any? { |t| always_fully_detailed?(t, a) }
|
317
|
+
else
|
318
|
+
e.class == a.class || e.is_a?(PTypeAliasType) || a.is_a?(PTypeAliasType)
|
319
|
+
end
|
320
|
+
end
|
321
|
+
|
322
|
+
# @param e [PAnyType,Array[PAnyType]] the expected type or array of expected types
|
323
|
+
# @param a [PAnyType] the actual type
|
324
|
+
# @return [Boolean] `true` when _a_ is assignable to _e_ or, in case _e_ is an `Array`,
|
325
|
+
# to at least one element of _e_
|
326
|
+
def any_assignable?(e, a)
|
327
|
+
e.is_a?(Array) ? e.any? { |t| t.assignable?(a) } : e.assignable?(a)
|
328
|
+
end
|
329
|
+
|
330
|
+
# @param e [PAnyType,Array[PAnyType]] the expected type or array of expected types
|
331
|
+
# @param a [PAnyType] the actual type
|
332
|
+
# @return [Boolean] `true` when _a_ is assignable to the default generalization of _e_ or,
|
333
|
+
# in case _e_ is an `Array`, to the default generalization of at least one element of _e_
|
334
|
+
def assignable_to_default?(e, a)
|
335
|
+
if e.is_a?(Array)
|
336
|
+
e.any? { |t| assignable_to_default?(t, a) }
|
337
|
+
else
|
338
|
+
e = e.resolved_type if e.is_a?(PTypeAliasType)
|
339
|
+
e.class::DEFAULT.assignable?(a)
|
340
|
+
end
|
341
|
+
end
|
342
|
+
|
343
|
+
# @param e [PAnyType,Array[PAnyType]] the expected type or array of expected types
|
344
|
+
# @param a [PAnyType] the actual type
|
345
|
+
# @return [Boolean] `true` when either #always_fully_detailed or #assignable_to_default returns `true`
|
346
|
+
def report_detailed?(e, a)
|
347
|
+
always_fully_detailed?(e, a) || assignable_to_default?(e, a)
|
348
|
+
end
|
349
|
+
|
350
|
+
# Returns its argument with all type aliases resolved
|
351
|
+
# @param e [PAnyType,Array[PAnyType]] the expected type or array of expected types
|
352
|
+
# @return [PAnyType,Array[PAnyType]] the resolved result
|
353
|
+
def all_resolved(e)
|
354
|
+
if e.is_a?(Array)
|
355
|
+
e.map { |t| all_resolved(t) }
|
356
|
+
else
|
357
|
+
e.is_a?(PTypeAliasType) ? e.resolved_type : e
|
358
|
+
end
|
359
|
+
end
|
360
|
+
|
361
|
+
# Returns a string that either represents the generalized type _a_ or the type _a_ verbatim. The latter
|
362
|
+
# form is used when at least one of the following conditions are met:
|
363
|
+
#
|
364
|
+
# - #always_fully_detailed returns `true` for the resolved type of _e_ and _a_
|
365
|
+
# - #any_assignable? returns `true` for the resolved type of _e_ and the generalized type of _a_.
|
366
|
+
#
|
367
|
+
# @param e [PAnyType,Array[PAnyType]] the expected type or array of expected types
|
368
|
+
# @param a [PAnyType] the actual type
|
369
|
+
# @return [String] The string representation of the type _a_ or generalized type _a_
|
370
|
+
def detailed_actual_to_s(e, a)
|
371
|
+
e = all_resolved(e)
|
372
|
+
if always_fully_detailed?(e, a)
|
373
|
+
a.to_alias_expanded_s
|
374
|
+
else
|
375
|
+
g = a.generalize
|
376
|
+
any_assignable?(e, g) ? a.to_alias_expanded_s : g.to_s
|
377
|
+
end
|
378
|
+
end
|
249
379
|
end
|
250
380
|
|
251
381
|
class PatternMismatch < TypeMismatch
|
252
|
-
def message(variant, position)
|
253
|
-
"#{variant}#{position}
|
382
|
+
def message(variant, position, tense = :present)
|
383
|
+
"#{variant}#{position} #{it_expects(tense)} a match for #{expected.to_alias_expanded_s}, got #{actual_string}"
|
254
384
|
end
|
255
385
|
|
256
386
|
def actual_string
|
@@ -274,8 +404,8 @@ module Puppet::Pops::Types
|
|
274
404
|
self.class.new(path, range, @actual)
|
275
405
|
end
|
276
406
|
|
277
|
-
def message(variant, position)
|
278
|
-
"#{variant}#{position}
|
407
|
+
def message(variant, position, tense = :present)
|
408
|
+
"#{variant}#{position} #{it_expects(tense)} size to be #{range_to_s(expected, '0')}, got #{range_to_s(actual, '0')}"
|
279
409
|
end
|
280
410
|
|
281
411
|
def range_to_s(range, zero_string)
|
@@ -298,15 +428,17 @@ module Puppet::Pops::Types
|
|
298
428
|
super(path, expected, actual)
|
299
429
|
end
|
300
430
|
|
301
|
-
def message(variant, position)
|
431
|
+
def message(variant, position, tense = :present)
|
302
432
|
min = expected.from || 0
|
303
433
|
max = expected.to || Float::INFINITY
|
304
434
|
suffix = min == 1 && (max == 1 || max == Float::INFINITY) || min == 0 && max == 1 ? '' : 's'
|
305
|
-
"#{variant}#{position}
|
435
|
+
"#{variant}#{position} #{it_expects(tense)} #{range_to_s(expected, 'no')} argument#{suffix}, got #{range_to_s(actual, 'none')}"
|
306
436
|
end
|
307
437
|
end
|
308
438
|
|
309
439
|
class TypeMismatchDescriber
|
440
|
+
include TenseVariants
|
441
|
+
|
310
442
|
def self.validate_parameters(subject, params_struct, given_hash, missing_ok = false)
|
311
443
|
singleton.validate_parameters(subject, params_struct, given_hash, missing_ok)
|
312
444
|
end
|
@@ -330,15 +462,36 @@ module Puppet::Pops::Types
|
|
330
462
|
# @param params_struct [PStructType] Struct to use for validation
|
331
463
|
# @param given_hash [Hash<String,Object>] the parameters to validate
|
332
464
|
# @param missing_ok [Boolean] Do not generate errors on missing parameters
|
465
|
+
# @param tense [Symbol] the symbol :present or :past
|
333
466
|
#
|
334
|
-
def validate_parameters(subject, params_struct, given_hash, missing_ok = false)
|
467
|
+
def validate_parameters(subject, params_struct, given_hash, missing_ok = false, tense = :present)
|
335
468
|
errors = describe_struct_signature(params_struct, given_hash, missing_ok).flatten
|
336
469
|
case errors.size
|
337
470
|
when 0
|
338
471
|
when 1
|
339
|
-
raise Puppet::ParseError.new("#{subject}:#{errors[0]}")
|
472
|
+
raise Puppet::ParseError.new("#{subject}:#{errors[0].format(tense)}")
|
340
473
|
else
|
341
|
-
|
474
|
+
errors_str = errors.map { |error| error.format(tense) }.join("\n ")
|
475
|
+
raise Puppet::ParseError.new("#{subject}:\n #{errors_str}")
|
476
|
+
end
|
477
|
+
end
|
478
|
+
|
479
|
+
# Describe a confirmed mismatch using present tense
|
480
|
+
#
|
481
|
+
# @param name [String] name of mismatch
|
482
|
+
# @param expected [PAnyType] expected type
|
483
|
+
# @param actual [PAnyType] actual type
|
484
|
+
# @param tense [Symbol] the symbol :present or :past
|
485
|
+
#
|
486
|
+
def describe_mismatch(name, expected, actual, tense = :past)
|
487
|
+
errors = describe(expected, actual, [SubjectPathElement.new(name)])
|
488
|
+
case errors.size
|
489
|
+
when 0
|
490
|
+
''
|
491
|
+
when 1
|
492
|
+
errors[0].format(tense).strip
|
493
|
+
else
|
494
|
+
errors.map { |error| error.format(tense) }.join("\n ")
|
342
495
|
end
|
343
496
|
end
|
344
497
|
|
@@ -346,16 +499,18 @@ module Puppet::Pops::Types
|
|
346
499
|
# @param param_name [String] parameter name
|
347
500
|
# @param param_type [PAnyType] parameter type
|
348
501
|
# @param value [Object] value to be validated against the given type
|
502
|
+
# @param tense [Symbol] the symbol :present or :past
|
349
503
|
#
|
350
|
-
def validate_default_parameter(subject, param_name, param_type, value)
|
504
|
+
def validate_default_parameter(subject, param_name, param_type, value, tense = :present)
|
351
505
|
unless param_type.instance?(value)
|
352
506
|
errors = describe(param_type, TypeCalculator.singleton.infer_set(value).generalize, [ParameterPathElement.new(param_name)])
|
353
507
|
case errors.size
|
354
508
|
when 0
|
355
509
|
when 1
|
356
|
-
raise Puppet::ParseError.new("#{subject}:#{errors[0]}")
|
510
|
+
raise Puppet::ParseError.new("#{subject}:#{errors[0].format(tense)}")
|
357
511
|
else
|
358
|
-
|
512
|
+
errors_str = errors.map { |error| error.format(tense) }.join("\n ")
|
513
|
+
raise Puppet::ParseError.new("#{subject}:\n #{errors_str}")
|
359
514
|
end
|
360
515
|
end
|
361
516
|
end
|
@@ -385,7 +540,7 @@ module Puppet::Pops::Types
|
|
385
540
|
result
|
386
541
|
end
|
387
542
|
|
388
|
-
def describe_signatures(closure, signatures, args_tuple)
|
543
|
+
def describe_signatures(closure, signatures, args_tuple, tense = :present)
|
389
544
|
error_arrays = []
|
390
545
|
signatures.each_with_index do |signature, index|
|
391
546
|
error_arrays << describe_signature_arguments(signature, args_tuple, [SignaturePathElement.new(index)])
|
@@ -411,17 +566,17 @@ module Puppet::Pops::Types
|
|
411
566
|
label = closure == 'lambda' ? 'block' : "'#{closure}'"
|
412
567
|
errors = merge_descriptions(0, CountMismatch, error_arrays)
|
413
568
|
if errors.size == 1
|
414
|
-
"#{label}#{errors[0]}"
|
569
|
+
"#{label}#{errors[0].format(tense)}"
|
415
570
|
else
|
416
571
|
if signatures.size == 1
|
417
572
|
sig = signatures[0]
|
418
|
-
result = ["#{label}
|
419
|
-
result.concat(error_arrays[0].map { |e| " rejected:#{e.chop_path(0)}" })
|
573
|
+
result = ["#{label} #{it_expects(tense)} (#{signature_string(sig)})"]
|
574
|
+
result.concat(error_arrays[0].map { |e| " rejected:#{e.chop_path(0).format(tense)}" })
|
420
575
|
else
|
421
|
-
result = ["#{label}
|
576
|
+
result = ["#{label} #{it_expects(tense)} one of:"]
|
422
577
|
signatures.each_with_index do |sg, index|
|
423
578
|
result << " (#{signature_string(sg)})"
|
424
|
-
result.concat(error_arrays[index].map { |e| " rejected:#{e.chop_path(0)}" })
|
579
|
+
result.concat(error_arrays[index].map { |e| " rejected:#{e.chop_path(0).format(tense)}" })
|
425
580
|
end
|
426
581
|
end
|
427
582
|
result.join("\n")
|
@@ -531,6 +686,17 @@ module Puppet::Pops::Types
|
|
531
686
|
[PatternMismatch.new(path, expected, actual)]
|
532
687
|
end
|
533
688
|
|
689
|
+
def describe_PTypeAliasType(expected, actual, path)
|
690
|
+
resolved_type = expected.resolved_type.normalize
|
691
|
+
describe(resolved_type, actual, path).map do |description|
|
692
|
+
if description.is_a?(ExpectedActualMismatch) && description.expected.equal?(resolved_type)
|
693
|
+
description.swap_expected(expected)
|
694
|
+
else
|
695
|
+
description
|
696
|
+
end
|
697
|
+
end
|
698
|
+
end
|
699
|
+
|
534
700
|
def describe_PStructType(expected, actual, path)
|
535
701
|
elements = expected.elements
|
536
702
|
descriptions = []
|
@@ -667,6 +833,8 @@ module Puppet::Pops::Types
|
|
667
833
|
describe_PPatternType(expected, actual, path)
|
668
834
|
when PEnumType
|
669
835
|
describe_PEnumType(expected, actual, path)
|
836
|
+
when PTypeAliasType
|
837
|
+
describe_PTypeAliasType(expected, actual, path)
|
670
838
|
else
|
671
839
|
describe_PAnyType(expected, actual, path)
|
672
840
|
end
|
@@ -688,12 +856,11 @@ module Puppet::Pops::Types
|
|
688
856
|
required_count = from
|
689
857
|
types =
|
690
858
|
case param_types
|
691
|
-
when
|
859
|
+
when PTupleType
|
692
860
|
param_types.types
|
693
|
-
when
|
861
|
+
when PArrayType
|
694
862
|
[param_types.element_type]
|
695
863
|
end
|
696
|
-
tc = Puppet::Pops::Types::TypeCalculator.singleton
|
697
864
|
|
698
865
|
# join type with names (types are always present, names are optional)
|
699
866
|
# separate entries with comma
|
@@ -708,17 +875,17 @@ module Puppet::Pops::Types
|
|
708
875
|
indicator = from == param_names.size ? '+' : '*'
|
709
876
|
elsif optional(index, required_count)
|
710
877
|
indicator = '?'
|
711
|
-
type = type.optional_type if type.is_a?(
|
878
|
+
type = type.optional_type if type.is_a?(POptionalType)
|
712
879
|
end
|
713
|
-
"#{
|
880
|
+
"#{type} #{name}#{indicator}"
|
714
881
|
end.join(', ')
|
715
882
|
|
716
883
|
# If there is a block, include it
|
717
884
|
case signature.type.block_type
|
718
|
-
when
|
885
|
+
when POptionalType
|
719
886
|
result << ', ' unless result == ''
|
720
887
|
result << "#{signature.type.block_type.optional_type} #{signature.block_name}?"
|
721
|
-
when
|
888
|
+
when PCallableType
|
722
889
|
result << ', ' unless result == ''
|
723
890
|
result << "#{signature.type.block_type} #{signature.block_name}"
|
724
891
|
when NilClass
|
@@ -740,4 +907,4 @@ module Puppet::Pops::Types
|
|
740
907
|
end
|
741
908
|
end
|
742
909
|
end
|
743
|
-
|
910
|
+
end
|