puppet 4.3.2-x64-mingw32 → 4.4.0-x64-mingw32
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,7 +1,9 @@
|
|
1
|
+
module Puppet::Pops
|
2
|
+
module Binder
|
1
3
|
# The KeyFactory is responsible for creating keys used for lookup of bindings.
|
2
4
|
# @api public
|
3
5
|
#
|
4
|
-
class
|
6
|
+
class KeyFactory
|
5
7
|
|
6
8
|
# @api public
|
7
9
|
def binding_key(binding)
|
@@ -10,12 +12,12 @@ class Puppet::Pops::Binder::KeyFactory
|
|
10
12
|
|
11
13
|
# @api public
|
12
14
|
def named_key(type, name)
|
13
|
-
[(
|
15
|
+
[(Types::PDataType::DEFAULT.assignable?(type) ? Types::PDataType::DEFAULT : type), name]
|
14
16
|
end
|
15
17
|
|
16
18
|
# @api public
|
17
19
|
def data_key(name)
|
18
|
-
[
|
20
|
+
[Types::PDataType::DEFAULT, name]
|
19
21
|
end
|
20
22
|
|
21
23
|
# @api public
|
@@ -42,13 +44,13 @@ class Puppet::Pops::Binder::KeyFactory
|
|
42
44
|
|
43
45
|
# @api public
|
44
46
|
def is_data?(key)
|
45
|
-
return false unless key.is_a?(Array) && key[0].is_a?(
|
46
|
-
|
47
|
+
return false unless key.is_a?(Array) && key[0].is_a?(Types::PAnyType)
|
48
|
+
Types::PDataType::DEFAULT.assignable?(key[0])
|
47
49
|
end
|
48
50
|
|
49
51
|
# @api public
|
50
52
|
def is_ruby?(key)
|
51
|
-
key.is_a?(Array) && key[0].is_a?(
|
53
|
+
key.is_a?(Array) && key[0].is_a?(Types::PRuntimeType) && key[0].runtime == :ruby
|
52
54
|
end
|
53
55
|
|
54
56
|
# Returns the type of the key
|
@@ -59,3 +61,5 @@ class Puppet::Pops::Binder::KeyFactory
|
|
59
61
|
key[0]
|
60
62
|
end
|
61
63
|
end
|
64
|
+
end
|
65
|
+
end
|
@@ -1,10 +1,13 @@
|
|
1
|
+
module Puppet::Pops
|
2
|
+
module Binder
|
1
3
|
# This module contains the various producers used by Puppet Bindings.
|
2
|
-
|
4
|
+
|
5
|
+
# The main (abstract) class is {Producers::Producer} which documents the
|
3
6
|
# Producer API and serves as a base class for all other producers.
|
4
7
|
# It is required that custom producers inherit from this producer (directly or indirectly).
|
5
8
|
#
|
6
9
|
# The selection of a Producer is typically performed by the Innjector when it configures itself
|
7
|
-
# from a Bindings model where a {
|
10
|
+
# from a Bindings model where a {Bindings::ProducerDescriptor} describes
|
8
11
|
# which producer to use. The configuration uses this to create the concrete producer.
|
9
12
|
# It is possible to describe that a particular producer class is to be used, and also to describe that
|
10
13
|
# a custom producer (derived from Producer) should be used. This is available for both regular
|
@@ -13,7 +16,7 @@
|
|
13
16
|
#
|
14
17
|
# @api public
|
15
18
|
#
|
16
|
-
module
|
19
|
+
module Producers
|
17
20
|
# Producer is an abstract base class representing the base contract for a bound producer.
|
18
21
|
# Typically, when a lookup is performed it is the value that is returned (via a producer), but
|
19
22
|
# it is also possible to lookup the producer, and ask it to produce the value (the producer may
|
@@ -48,10 +51,10 @@ module Puppet::Pops::Binder::Producers
|
|
48
51
|
# Creates a Producer.
|
49
52
|
# Derived classes should call this constructor to get support for transformer lambda.
|
50
53
|
#
|
51
|
-
# @param injector [
|
52
|
-
# @param binding [
|
54
|
+
# @param injector [Injector] The injector where the lookup originates
|
55
|
+
# @param binding [Bindings::Binding, nil] The binding using this producer
|
53
56
|
# @param scope [Puppet::Parser::Scope] The scope to use for evaluation
|
54
|
-
# @option options [
|
57
|
+
# @option options [Model::LambdaExpression] :transformer (nil) a transformer of produced value
|
55
58
|
# @api public
|
56
59
|
#
|
57
60
|
def initialize(injector, binding, scope, options)
|
@@ -60,9 +63,9 @@ module Puppet::Pops::Binder::Producers
|
|
60
63
|
raise ArgumentError, "Transformer Proc must take one argument; value." unless transformer_lambda.arity == 1
|
61
64
|
@transformer = transformer_lambda
|
62
65
|
else
|
63
|
-
raise ArgumentError, "Transformer must be a LambdaExpression" unless transformer_lambda.is_a?(
|
66
|
+
raise ArgumentError, "Transformer must be a LambdaExpression" unless transformer_lambda.is_a?(Model::LambdaExpression)
|
64
67
|
raise ArgumentError, "Transformer lambda must take one argument; value." unless transformer_lambda.parameters.size() == 1
|
65
|
-
@transformer =
|
68
|
+
@transformer = Parser::EvaluatingParser.new.closure(transformer_lambda, scope)
|
66
69
|
end
|
67
70
|
end
|
68
71
|
end
|
@@ -81,9 +84,9 @@ module Puppet::Pops::Binder::Producers
|
|
81
84
|
# This implementation returns `self`. A derived class may want to override this method
|
82
85
|
# to perform initialization/refresh of its internal state. This method is called when
|
83
86
|
# a producer is requested.
|
84
|
-
# @see
|
87
|
+
# @see ProducerProducer for an example of implementation.
|
85
88
|
# @param scope [Puppet::Parser:Scope] the scope to use for evaluation
|
86
|
-
# @return [
|
89
|
+
# @return [Producer] the producer to use
|
87
90
|
# @api public
|
88
91
|
#
|
89
92
|
def producer(scope)
|
@@ -123,11 +126,11 @@ module Puppet::Pops::Binder::Producers
|
|
123
126
|
# @api public
|
124
127
|
attr_reader :value
|
125
128
|
|
126
|
-
# @param injector [
|
127
|
-
# @param binding [
|
129
|
+
# @param injector [Injector] The injector where the lookup originates
|
130
|
+
# @param binding [Bindings::Binding, nil] The binding using this producer
|
128
131
|
# @param scope [Puppet::Parser::Scope] The scope to use for evaluation
|
129
|
-
# @option options [
|
130
|
-
# @option options [
|
132
|
+
# @option options [Model::LambdaExpression] :transformer (nil) a transformer of produced value
|
133
|
+
# @option options [Model::LambdaExpression, nil] :value (nil) the value to produce
|
131
134
|
# @api public
|
132
135
|
#
|
133
136
|
def initialize(injector, binding, scope, options)
|
@@ -182,10 +185,10 @@ module Puppet::Pops::Binder::Producers
|
|
182
185
|
# @api public
|
183
186
|
attr_reader :binding
|
184
187
|
|
185
|
-
# @param injector [
|
186
|
-
# @param binding [
|
188
|
+
# @param injector [Injector] The injector where the lookup originates
|
189
|
+
# @param binding [Bindings::Binding, nil] The binding using this producer
|
187
190
|
# @param scope [Puppet::Parser::Scope] The scope to use for evaluation
|
188
|
-
# @option options [
|
191
|
+
# @option options [Model::LambdaExpression] :transformer (nil) a transformer of produced value
|
189
192
|
# @api public
|
190
193
|
#
|
191
194
|
def initialize(injector, binding, scope, options)
|
@@ -204,10 +207,10 @@ module Puppet::Pops::Binder::Producers
|
|
204
207
|
# @api public
|
205
208
|
attr_reader :init_args
|
206
209
|
|
207
|
-
# @param injector [
|
208
|
-
# @param binding [
|
210
|
+
# @param injector [Injector] The injector where the lookup originates
|
211
|
+
# @param binding [Bindings::Binding, nil] The binding using this producer
|
209
212
|
# @param scope [Puppet::Parser::Scope] The scope to use for evaluation
|
210
|
-
# @option options [
|
213
|
+
# @option options [Model::LambdaExpression] :transformer (nil) a transformer of produced value
|
211
214
|
# @option options [String] :class_name The name of the class to create instance of
|
212
215
|
# @option options [Array<Object>] :init_args ([]) Optional arguments to class constructor
|
213
216
|
# @api public
|
@@ -220,7 +223,7 @@ module Puppet::Pops::Binder::Producers
|
|
220
223
|
class_name = options[:class_name]
|
221
224
|
raise ArgumentError, "Option 'class_name' must be given for an InstantiatingProducer" unless class_name
|
222
225
|
# get class by name
|
223
|
-
@the_class =
|
226
|
+
@the_class = Types::ClassLoader.provide(class_name)
|
224
227
|
@init_args = options[:init_args] || []
|
225
228
|
raise ArgumentError, "Can not load the class #{class_name} specified in binding named: '#{binding.name}'" unless @the_class
|
226
229
|
end
|
@@ -255,11 +258,11 @@ module Puppet::Pops::Binder::Producers
|
|
255
258
|
# @api public
|
256
259
|
attr_reader :producers
|
257
260
|
|
258
|
-
# @param injector [
|
259
|
-
# @param binding [
|
261
|
+
# @param injector [Injector] The injector where the lookup originates
|
262
|
+
# @param binding [Bindings::Binding, nil] The binding using this producer
|
260
263
|
# @param scope [Puppet::Parser::Scope] The scope to use for evaluation
|
261
|
-
# @option options [
|
262
|
-
# @option options [Array<
|
264
|
+
# @option options [Model::LambdaExpression] :transformer (nil) a transformer of produced value
|
265
|
+
# @option options [Array<Producers::Producer>] :producers list of producers to consult. Required.
|
263
266
|
# @api public
|
264
267
|
#
|
265
268
|
def initialize(injector, binding, scope, options)
|
@@ -288,11 +291,11 @@ module Puppet::Pops::Binder::Producers
|
|
288
291
|
#
|
289
292
|
attr_reader :expression
|
290
293
|
|
291
|
-
# @param injector [
|
292
|
-
# @param binding [
|
294
|
+
# @param injector [Injector] The injector where the lookup originates
|
295
|
+
# @param binding [Bindings::Binding, nil] The binding using this producer
|
293
296
|
# @param scope [Puppet::Parser::Scope] The scope to use for evaluation
|
294
|
-
# @option options [
|
295
|
-
# @option options [Array<
|
297
|
+
# @option options [Model::LambdaExpression] :transformer (nil) a transformer of produced value
|
298
|
+
# @option options [Array<Model::Expression>] :expression The expression to evaluate
|
296
299
|
# @api public
|
297
300
|
#
|
298
301
|
def initialize(injector, binding, scope, options)
|
@@ -303,7 +306,7 @@ module Puppet::Pops::Binder::Producers
|
|
303
306
|
|
304
307
|
# @api private
|
305
308
|
def internal_produce(scope)
|
306
|
-
|
309
|
+
Parser::EvaluatingParser.new.evaluate(scope, expression)
|
307
310
|
end
|
308
311
|
end
|
309
312
|
|
@@ -316,11 +319,11 @@ module Puppet::Pops::Binder::Producers
|
|
316
319
|
# @api public
|
317
320
|
attr_reader :name
|
318
321
|
|
319
|
-
# @param injector [
|
320
|
-
# @param binder [
|
322
|
+
# @param injector [Injector] The injector where the lookup originates
|
323
|
+
# @param binder [Bindings::Binding, nil] The binding using this producer
|
321
324
|
# @param scope [Puppet::Parser::Scope] The scope to use for evaluation
|
322
|
-
# @option options [
|
323
|
-
# @option options [
|
325
|
+
# @option options [Model::LambdaExpression] :transformer (nil) a transformer of produced value
|
326
|
+
# @option options [Types::PAnyType] :type The type to lookup
|
324
327
|
# @option options [String] :name ('') The name to lookup
|
325
328
|
# @api public
|
326
329
|
#
|
@@ -345,13 +348,13 @@ module Puppet::Pops::Binder::Producers
|
|
345
348
|
# @api public
|
346
349
|
attr_reader :key
|
347
350
|
|
348
|
-
# @param injector [
|
349
|
-
# @param binder [
|
351
|
+
# @param injector [Injector] The injector where the lookup originates
|
352
|
+
# @param binder [Bindings::Binding, nil] The binding using this producer
|
350
353
|
# @param scope [Puppet::Parser::Scope] The scope to use for evaluation
|
351
|
-
# @option options [
|
352
|
-
# @option options [
|
354
|
+
# @option options [Model::LambdaExpression] :transformer (nil) a transformer of produced value
|
355
|
+
# @option options [Types::PAnyType] :type The type to lookup
|
353
356
|
# @option options [String] :name ('') The name to lookup
|
354
|
-
# @option options [
|
357
|
+
# @option options [Types::PAnyType] :key The key to lookup in the hash
|
355
358
|
# @api public
|
356
359
|
#
|
357
360
|
def initialize(injector, binder, scope, options)
|
@@ -379,11 +382,11 @@ module Puppet::Pops::Binder::Producers
|
|
379
382
|
# @api public
|
380
383
|
attr_reader :value_producer
|
381
384
|
|
382
|
-
# @param injector [
|
383
|
-
# @param binding [
|
385
|
+
# @param injector [Injector] The injector where the lookup originates
|
386
|
+
# @param binding [Bindings::Binding, nil] The binding using this producer
|
384
387
|
# @param scope [Puppet::Parser::Scope] The scope to use for evaluation
|
385
|
-
# @option options [
|
386
|
-
# @option options [
|
388
|
+
# @option options [Model::LambdaExpression] :transformer (nil) a transformer of produced value
|
389
|
+
# @option options [Model::LambdaExpression] :producer_producer a producer of a value producer (required)
|
387
390
|
# @api public
|
388
391
|
#
|
389
392
|
def initialize(injector, binding, scope, options)
|
@@ -420,11 +423,11 @@ module Puppet::Pops::Binder::Producers
|
|
420
423
|
|
421
424
|
# Creates new ProducerProducer given a producer.
|
422
425
|
#
|
423
|
-
# @param injector [
|
424
|
-
# @param binding [
|
426
|
+
# @param injector [Injector] The injector where the lookup originates
|
427
|
+
# @param binding [Bindings::Binding, nil] The binding using this producer
|
425
428
|
# @param scope [Puppet::Parser::Scope] The scope to use for evaluation
|
426
|
-
# @option options [
|
427
|
-
# @option options [
|
429
|
+
# @option options [Model::LambdaExpression] :transformer (nil) a transformer of produced value
|
430
|
+
# @option options [Producer] :producer_producer a producer of a value producer (required)
|
428
431
|
#
|
429
432
|
# @api public
|
430
433
|
#
|
@@ -512,10 +515,10 @@ module Puppet::Pops::Binder::Producers
|
|
512
515
|
class MultibindProducer < AbstractArgumentedProducer
|
513
516
|
attr_reader :contributions_key
|
514
517
|
|
515
|
-
# @param injector [
|
516
|
-
# @param binding [
|
518
|
+
# @param injector [Injector] The injector where the lookup originates
|
519
|
+
# @param binding [Bindings::Binding, nil] The binding using this producer
|
517
520
|
# @param scope [Puppet::Parser::Scope] The scope to use for evaluation
|
518
|
-
# @option options [
|
521
|
+
# @option options [Model::LambdaExpression] :transformer (nil) a transformer of produced value
|
519
522
|
#
|
520
523
|
# @api public
|
521
524
|
#
|
@@ -524,8 +527,8 @@ module Puppet::Pops::Binder::Producers
|
|
524
527
|
@contributions_key = injector.key_factory.multibind_contributions(binding.id)
|
525
528
|
end
|
526
529
|
|
527
|
-
# @param expected [Array<
|
528
|
-
# @param actual [Object,
|
530
|
+
# @param expected [Array<Types::PAnyType>, Types::PAnyType] expected type or types
|
531
|
+
# @param actual [Object, Types::PAnyType> the actual value (or its type)
|
529
532
|
# @return [String] a formatted string for inclusion as detail in an error message
|
530
533
|
# @api private
|
531
534
|
#
|
@@ -533,8 +536,8 @@ module Puppet::Pops::Binder::Producers
|
|
533
536
|
tc = injector.type_calculator
|
534
537
|
expected = [expected] unless expected.is_a?(Array)
|
535
538
|
actual_t = tc.is_ptype?(actual) ? actual : tc.infer(actual)
|
536
|
-
expstrs = expected.collect {|t|
|
537
|
-
"expected: #{expstrs.join(', or ')}, got: #{
|
539
|
+
expstrs = expected.collect {|t| t.to_s }
|
540
|
+
"expected: #{expstrs.join(', or ')}, got: #{actual_t}"
|
538
541
|
end
|
539
542
|
end
|
540
543
|
|
@@ -578,10 +581,10 @@ module Puppet::Pops::Binder::Producers
|
|
578
581
|
# @api public
|
579
582
|
attr_reader :priority_on_unnamed
|
580
583
|
|
581
|
-
# @param injector [
|
582
|
-
# @param binding [
|
584
|
+
# @param injector [Injector] The injector where the lookup originates
|
585
|
+
# @param binding [Bindings::Binding, nil] The binding using this producer
|
583
586
|
# @param scope [Puppet::Parser::Scope] The scope to use for evaluation
|
584
|
-
# @option options [
|
587
|
+
# @option options [Model::LambdaExpression] :transformer (nil) a transformer of produced value
|
585
588
|
# @option options [Boolean] :uniq (false) if collected result should be post-processed to contain only unique entries
|
586
589
|
# @option options [Boolean, Integer] :flatten (false) if collected result should be post-processed so all contained arrays
|
587
590
|
# are flattened. May be set to an Integer value to indicate the level of recursion (-1 is endless, 0 is none).
|
@@ -680,10 +683,10 @@ module Puppet::Pops::Binder::Producers
|
|
680
683
|
# By default, the hash is produced using `:priority` resolution - the highest entry is selected, the rest are
|
681
684
|
# ignored unless they have the same priority which is an error.
|
682
685
|
#
|
683
|
-
# @param injector [
|
684
|
-
# @param binding [
|
686
|
+
# @param injector [Injector] The injector where the lookup originates
|
687
|
+
# @param binding [Bindings::Binding, nil] The binding using this producer
|
685
688
|
# @param scope [Puppet::Parser::Scope] The scope to use for evaluation
|
686
|
-
# @option options [
|
689
|
+
# @option options [Model::LambdaExpression] :transformer (nil) a transformer of produced value
|
687
690
|
# @option options [Symbol, String] :conflict_resolution (:priority) One of `:error`, `:merge`, `:append`, `:priority`, `:ignore`
|
688
691
|
# <ul><li> `ignore` the first found highest priority contribution is used, the rest are ignored</li>
|
689
692
|
# <li>`error` any duplicate key is an error</li>
|
@@ -720,13 +723,13 @@ module Puppet::Pops::Binder::Producers
|
|
720
723
|
|
721
724
|
if uniq || flatten || conflict_resolution.to_s == 'append'
|
722
725
|
etype = binding.type.element_type
|
723
|
-
unless etype.class ==
|
726
|
+
unless etype.class == Types::PDataType || etype.is_a?(Types::PArrayType)
|
724
727
|
detail = []
|
725
728
|
detail << ":uniq" if uniq
|
726
729
|
detail << ":flatten" if flatten
|
727
730
|
detail << ":conflict_resolution => :append" if conflict_resolution.to_s == 'append'
|
728
731
|
raise ArgumentError, ["Options #{detail.join(', and ')} cannot be used with a Multibind ",
|
729
|
-
"of type #{
|
732
|
+
"of type #{binding.type}"].join()
|
730
733
|
end
|
731
734
|
end
|
732
735
|
end
|
@@ -824,3 +827,5 @@ module Puppet::Pops::Binder::Producers
|
|
824
827
|
end
|
825
828
|
|
826
829
|
end
|
830
|
+
end
|
831
|
+
end
|
@@ -1,24 +1,24 @@
|
|
1
|
+
module Puppet::Pops
|
2
|
+
module Evaluator
|
1
3
|
# AccessOperator handles operator []
|
2
4
|
# This operator is part of evaluation.
|
3
5
|
#
|
4
|
-
class
|
6
|
+
class AccessOperator
|
5
7
|
# Provides access to the Puppet 3.x runtime (scope, etc.)
|
6
8
|
# This separation has been made to make it easier to later migrate the evaluator to an improved runtime.
|
7
9
|
#
|
8
|
-
include
|
10
|
+
include Runtime3Support
|
9
11
|
|
10
|
-
Issues = Puppet::Pops::Issues
|
11
|
-
TYPEFACTORY = Puppet::Pops::Types::TypeFactory
|
12
12
|
EMPTY_STRING = ''.freeze
|
13
13
|
|
14
14
|
attr_reader :semantic
|
15
15
|
|
16
16
|
# Initialize with AccessExpression to enable reporting issues
|
17
|
-
# @param access_expression [
|
17
|
+
# @param access_expression [Model::AccessExpression] the semantic object being evaluated
|
18
18
|
# @return [void]
|
19
19
|
#
|
20
20
|
def initialize(access_expression)
|
21
|
-
@@access_visitor ||=
|
21
|
+
@@access_visitor ||= Visitor.new(self, "access", 2, nil)
|
22
22
|
@semantic = access_expression
|
23
23
|
end
|
24
24
|
|
@@ -36,7 +36,7 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
36
36
|
keys.flatten!
|
37
37
|
result = case keys.size
|
38
38
|
when 0
|
39
|
-
fail(
|
39
|
+
fail(Issues::BAD_STRING_SLICE_ARITY, @semantic.left_expr, {:actual => keys.size})
|
40
40
|
when 1
|
41
41
|
# Note that Ruby 1.8.7 requires a length of 1 to produce a String
|
42
42
|
k1 = coerce_numeric(keys[0], @semantic.keys[0], scope)
|
@@ -63,7 +63,7 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
63
63
|
end
|
64
64
|
o[ k1, k2 ]
|
65
65
|
else
|
66
|
-
fail(
|
66
|
+
fail(Issues::BAD_STRING_SLICE_ARITY, @semantic.left_expr, {:actual => keys.size})
|
67
67
|
end
|
68
68
|
# Specified as: an index outside of range, or empty result == empty string
|
69
69
|
(result.nil? || result.empty?) ? EMPTY_STRING : result
|
@@ -75,10 +75,10 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
75
75
|
keys.flatten!
|
76
76
|
unless keys.size == 1
|
77
77
|
blamed = keys.size == 0 ? @semantic : @semantic.keys[1]
|
78
|
-
fail(
|
78
|
+
fail(Issues::BAD_TYPE_SLICE_ARITY, blamed, :base_type => o, :min=>1, :actual => keys.size)
|
79
79
|
end
|
80
80
|
assert_keys(keys, o, 1, 1, String, Regexp)
|
81
|
-
|
81
|
+
Types::TypeFactory.regexp(*keys)
|
82
82
|
end
|
83
83
|
|
84
84
|
# Evaluates <ary>[] with 1 or 2 arguments. One argument is an index lookup, two arguments is a slice from/to.
|
@@ -87,7 +87,7 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
87
87
|
keys.flatten!
|
88
88
|
case keys.size
|
89
89
|
when 0
|
90
|
-
fail(
|
90
|
+
fail(Issues::BAD_ARRAY_SLICE_ARITY, @semantic.left_expr, {:actual => keys.size})
|
91
91
|
when 1
|
92
92
|
key = coerce_numeric(keys[0], @semantic.keys[0], scope)
|
93
93
|
unless key.is_a?(Integer)
|
@@ -114,7 +114,7 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
114
114
|
result = o[ k1, k2 ]
|
115
115
|
result.nil? ? [] : result
|
116
116
|
else
|
117
|
-
fail(
|
117
|
+
fail(Issues::BAD_ARRAY_SLICE_ARITY, @semantic.left_expr, {:actual => keys.size})
|
118
118
|
end
|
119
119
|
end
|
120
120
|
|
@@ -132,7 +132,7 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
132
132
|
end
|
133
133
|
case result.size
|
134
134
|
when 0
|
135
|
-
fail(
|
135
|
+
fail(Issues::BAD_HASH_SLICE_ARITY, @semantic.left_expr, {:actual => keys.size})
|
136
136
|
when 1
|
137
137
|
result.pop
|
138
138
|
else
|
@@ -145,35 +145,35 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
145
145
|
def access_PEnumType(o, scope, keys)
|
146
146
|
keys.flatten!
|
147
147
|
assert_keys(keys, o, 1, Float::INFINITY, String)
|
148
|
-
|
148
|
+
Types::TypeFactory.enum(*keys)
|
149
149
|
end
|
150
150
|
|
151
151
|
def access_PVariantType(o, scope, keys)
|
152
152
|
keys.flatten!
|
153
|
-
assert_keys(keys, o, 1, Float::INFINITY,
|
154
|
-
|
153
|
+
assert_keys(keys, o, 1, Float::INFINITY, Types::PAnyType)
|
154
|
+
Types::TypeFactory.variant(*keys)
|
155
155
|
end
|
156
156
|
|
157
157
|
def access_PTupleType(o, scope, keys)
|
158
158
|
keys.flatten!
|
159
|
-
if
|
160
|
-
size_type =
|
159
|
+
if Types::TypeFactory.is_range_parameter?(keys[-2]) && Types::TypeFactory.is_range_parameter?(keys[-1])
|
160
|
+
size_type = Types::TypeFactory.range(keys[-2], keys[-1])
|
161
161
|
keys = keys[0, keys.size - 2]
|
162
|
-
elsif
|
163
|
-
size_type =
|
162
|
+
elsif Types::TypeFactory.is_range_parameter?(keys[-1])
|
163
|
+
size_type = Types::TypeFactory.range(keys[-1], :default)
|
164
164
|
keys = keys[0, keys.size - 1]
|
165
165
|
end
|
166
|
-
assert_keys(keys, o, 1, Float::INFINITY,
|
167
|
-
|
166
|
+
assert_keys(keys, o, 1, Float::INFINITY, Types::PAnyType)
|
167
|
+
Types::TypeFactory.tuple(keys, size_type)
|
168
168
|
end
|
169
169
|
|
170
170
|
def access_PCallableType(o, scope, keys)
|
171
|
-
|
171
|
+
Types::TypeFactory.callable(*keys)
|
172
172
|
end
|
173
173
|
|
174
174
|
def access_PStructType(o, scope, keys)
|
175
175
|
assert_keys(keys, o, 1, 1, Hash)
|
176
|
-
|
176
|
+
Types::TypeFactory.struct(keys[0])
|
177
177
|
end
|
178
178
|
|
179
179
|
def access_PStringType(o, scope, keys)
|
@@ -184,9 +184,9 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
184
184
|
when 2
|
185
185
|
size_t = collection_size_t(0, keys[0], keys[1])
|
186
186
|
else
|
187
|
-
fail(
|
187
|
+
fail(Issues::BAD_STRING_SLICE_ARITY, @semantic, {:actual => keys.size})
|
188
188
|
end
|
189
|
-
|
189
|
+
Types::TypeFactory.string(size_t)
|
190
190
|
end
|
191
191
|
|
192
192
|
# Asserts type of each key and calls fail with BAD_TYPE_SPECIFICATION
|
@@ -200,7 +200,7 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
200
200
|
def assert_keys(keys, o, min, max, *allowed_classes)
|
201
201
|
size = keys.size
|
202
202
|
unless size.between?(min, max || Float::INFINITY)
|
203
|
-
fail(
|
203
|
+
fail(Issues::BAD_TYPE_SLICE_ARITY, @semantic, :base_type => o, :min=>1, :max => max, :actual => keys.size)
|
204
204
|
end
|
205
205
|
keys.each_with_index do |k, i|
|
206
206
|
unless allowed_classes.any? {|clazz| k.is_a?(clazz) }
|
@@ -210,7 +210,7 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
210
210
|
end
|
211
211
|
|
212
212
|
def bad_access_key_type(lhs, key_index, actual, *expected_classes)
|
213
|
-
fail(
|
213
|
+
fail(Issues::BAD_SLICE_KEY_TYPE, @semantic.keys[key_index], {
|
214
214
|
:left_value => lhs,
|
215
215
|
:actual => bad_key_type_name(actual),
|
216
216
|
:expected_classes => expected_classes
|
@@ -224,14 +224,14 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
224
224
|
when :default
|
225
225
|
'Default'
|
226
226
|
else
|
227
|
-
|
227
|
+
Types::TypeCalculator.generalize(Types::TypeCalculator.infer(actual)).to_s
|
228
228
|
end
|
229
229
|
end
|
230
230
|
|
231
231
|
def bad_type_specialization_key_type(type, key_index, actual, *expected_classes)
|
232
|
-
label_provider =
|
232
|
+
label_provider = Model::ModelLabelProvider.new()
|
233
233
|
expected = expected_classes.map {|c| label_provider.label(c) }.join(' or ')
|
234
|
-
fail(
|
234
|
+
fail(Issues::BAD_TYPE_SPECIALIZATION, @semantic.keys[key_index], {
|
235
235
|
:type => type,
|
236
236
|
:message => "Cannot use #{bad_key_type_name(actual)} where #{expected} is expected"
|
237
237
|
})
|
@@ -239,24 +239,24 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
239
239
|
|
240
240
|
def access_PPatternType(o, scope, keys)
|
241
241
|
keys.flatten!
|
242
|
-
assert_keys(keys, o, 1, Float::INFINITY, String, Regexp,
|
243
|
-
|
242
|
+
assert_keys(keys, o, 1, Float::INFINITY, String, Regexp, Types::PPatternType, Types::PRegexpType)
|
243
|
+
Types::TypeFactory.pattern(*keys)
|
244
244
|
end
|
245
245
|
|
246
246
|
def access_POptionalType(o, scope, keys)
|
247
247
|
keys.flatten!
|
248
248
|
if keys.size == 1
|
249
249
|
type = keys[0]
|
250
|
-
unless type.is_a?(
|
250
|
+
unless type.is_a?(Types::PAnyType)
|
251
251
|
if type.is_a?(String)
|
252
|
-
type =
|
252
|
+
type = Types::TypeFactory.string(nil, type)
|
253
253
|
else
|
254
|
-
fail(
|
254
|
+
fail(Issues::BAD_TYPE_SLICE_TYPE, @semantic.keys[0], {:base_type => 'Optional-Type', :actual => type.class})
|
255
255
|
end
|
256
256
|
end
|
257
|
-
|
257
|
+
Types::POptionalType.new(type)
|
258
258
|
else
|
259
|
-
fail(
|
259
|
+
fail(Issues::BAD_TYPE_SLICE_ARITY, @semantic, {:base_type => 'Optional-Type', :min => 1, :actual => keys.size})
|
260
260
|
end
|
261
261
|
end
|
262
262
|
|
@@ -264,32 +264,32 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
264
264
|
keys.flatten!
|
265
265
|
case keys.size
|
266
266
|
when 0
|
267
|
-
|
267
|
+
Types::TypeFactory.not_undef
|
268
268
|
when 1
|
269
269
|
type = keys[0]
|
270
270
|
case type
|
271
271
|
when String
|
272
|
-
type =
|
273
|
-
when
|
274
|
-
type = nil if type.class ==
|
272
|
+
type = Types::TypeFactory.string(nil, type)
|
273
|
+
when Types::PAnyType
|
274
|
+
type = nil if type.class == Types::PAnyType
|
275
275
|
else
|
276
|
-
fail(
|
276
|
+
fail(Issues::BAD_NOT_UNDEF_SLICE_TYPE, @semantic.keys[0], {:base_type => 'NotUndef-Type', :actual => type.class})
|
277
277
|
end
|
278
|
-
|
278
|
+
Types::TypeFactory.not_undef(type)
|
279
279
|
else
|
280
|
-
fail(
|
280
|
+
fail(Issues::BAD_TYPE_SLICE_ARITY, @semantic, {:base_type => 'NotUndef-Type', :min => 0, :max => 1, :actual => keys.size})
|
281
281
|
end
|
282
282
|
end
|
283
283
|
|
284
284
|
def access_PType(o, scope, keys)
|
285
285
|
keys.flatten!
|
286
286
|
if keys.size == 1
|
287
|
-
unless keys[0].is_a?(
|
288
|
-
fail(
|
287
|
+
unless keys[0].is_a?(Types::PAnyType)
|
288
|
+
fail(Issues::BAD_TYPE_SLICE_TYPE, @semantic.keys[0], {:base_type => 'Type-Type', :actual => keys[0].class})
|
289
289
|
end
|
290
|
-
|
290
|
+
Types::PType.new(keys[0])
|
291
291
|
else
|
292
|
-
fail(
|
292
|
+
fail(Issues::BAD_TYPE_SLICE_ARITY, @semantic, {:base_type => 'Type-Type', :min => 1, :actual => keys.size})
|
293
293
|
end
|
294
294
|
end
|
295
295
|
|
@@ -297,34 +297,34 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
297
297
|
keys.flatten!
|
298
298
|
assert_keys(keys, o, 2, 2, String, String)
|
299
299
|
# create runtime type based on runtime and name of class, (not inference of key's type)
|
300
|
-
|
300
|
+
Types::TypeFactory.runtime(*keys)
|
301
301
|
end
|
302
302
|
|
303
303
|
def access_PIntegerType(o, scope, keys)
|
304
304
|
keys.flatten!
|
305
305
|
unless keys.size.between?(1, 2)
|
306
|
-
fail(
|
306
|
+
fail(Issues::BAD_INTEGER_SLICE_ARITY, @semantic, {:actual => keys.size})
|
307
307
|
end
|
308
308
|
keys.each_with_index do |x, index|
|
309
|
-
fail(
|
309
|
+
fail(Issues::BAD_INTEGER_SLICE_TYPE, @semantic.keys[index],
|
310
310
|
{:actual => x.class}) unless (x.is_a?(Integer) || x == :default)
|
311
311
|
end
|
312
|
-
|
312
|
+
Types::PIntegerType.new(*keys)
|
313
313
|
end
|
314
314
|
|
315
315
|
def access_PFloatType(o, scope, keys)
|
316
316
|
keys.flatten!
|
317
317
|
unless keys.size.between?(1, 2)
|
318
|
-
fail(
|
318
|
+
fail(Issues::BAD_FLOAT_SLICE_ARITY, @semantic, {:actual => keys.size})
|
319
319
|
end
|
320
320
|
keys.each_with_index do |x, index|
|
321
|
-
fail(
|
321
|
+
fail(Issues::BAD_FLOAT_SLICE_TYPE, @semantic.keys[index],
|
322
322
|
{:actual => x.class}) unless (x.is_a?(Float) || x.is_a?(Integer) || x == :default)
|
323
323
|
end
|
324
324
|
from, to = keys
|
325
325
|
from = from == :default || from.nil? ? nil : Float(from)
|
326
326
|
to = to == :default || to.nil? ? nil : Float(to)
|
327
|
-
|
327
|
+
Types::PFloatType.new(from, to)
|
328
328
|
end
|
329
329
|
|
330
330
|
# A Hash can create a new Hash type, one arg sets value type, two args sets key and value type in new type.
|
@@ -334,21 +334,21 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
334
334
|
def access_PHashType(o, scope, keys)
|
335
335
|
keys.flatten!
|
336
336
|
keys[0,2].each_with_index do |k, index|
|
337
|
-
unless k.is_a?(
|
338
|
-
fail(
|
337
|
+
unless k.is_a?(Types::PAnyType)
|
338
|
+
fail(Issues::BAD_TYPE_SLICE_TYPE, @semantic.keys[index], {:base_type => 'Hash-Type', :actual => k.class})
|
339
339
|
end
|
340
340
|
end
|
341
341
|
case keys.size
|
342
342
|
when 2
|
343
|
-
|
343
|
+
Types::PHashType.new(keys[0], keys[1], nil)
|
344
344
|
when 3
|
345
345
|
size_t = keys[2]
|
346
|
-
size_t =
|
347
|
-
|
346
|
+
size_t = Types::PIntegerType.new(size_t) unless size_t.is_a?(Types::PIntegerType)
|
347
|
+
Types::PHashType.new(keys[0], keys[1], size_t)
|
348
348
|
when 4
|
349
|
-
|
349
|
+
Types::PHashType.new(keys[0], keys[1], collection_size_t(1, keys[2], keys[3]))
|
350
350
|
else
|
351
|
-
fail(
|
351
|
+
fail(Issues::BAD_TYPE_SLICE_ARITY, @semantic, {
|
352
352
|
:base_type => 'Hash-Type', :min => 2, :max => 4, :actual => keys.size
|
353
353
|
})
|
354
354
|
end
|
@@ -363,10 +363,10 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
363
363
|
when 2
|
364
364
|
size_t = collection_size_t(1, keys[0], keys[1])
|
365
365
|
else
|
366
|
-
fail(
|
366
|
+
fail(Issues::BAD_TYPE_SLICE_ARITY, @semantic,
|
367
367
|
{:base_type => 'Collection-Type', :min => 1, :max => 2, :actual => keys.size})
|
368
368
|
end
|
369
|
-
|
369
|
+
Types::PCollectionType.new(size_t)
|
370
370
|
end
|
371
371
|
|
372
372
|
# An Array can create a new Array type. It is not possible to create a collection of Array types.
|
@@ -381,25 +381,25 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
381
381
|
when 3
|
382
382
|
size_t = collection_size_t(1, keys[1], keys[2])
|
383
383
|
else
|
384
|
-
fail(
|
384
|
+
fail(Issues::BAD_TYPE_SLICE_ARITY, @semantic,
|
385
385
|
{:base_type => 'Array-Type', :min => 1, :max => 3, :actual => keys.size})
|
386
386
|
end
|
387
|
-
unless keys[0].is_a?(
|
388
|
-
fail(
|
387
|
+
unless keys[0].is_a?(Types::PAnyType)
|
388
|
+
fail(Issues::BAD_TYPE_SLICE_TYPE, @semantic.keys[0], {:base_type => 'Array-Type', :actual => keys[0].class})
|
389
389
|
end
|
390
|
-
|
390
|
+
Types::PArrayType.new(keys[0], size_t)
|
391
391
|
end
|
392
392
|
|
393
393
|
# Produces an PIntegerType (range) given one or two keys.
|
394
394
|
def collection_size_t(start_index, *keys)
|
395
|
-
if keys.size == 1 && keys[0].is_a?(
|
395
|
+
if keys.size == 1 && keys[0].is_a?(Types::PIntegerType)
|
396
396
|
keys[0]
|
397
397
|
else
|
398
398
|
keys.each_with_index do |x, index|
|
399
|
-
fail(
|
399
|
+
fail(Issues::BAD_COLLECTION_SLICE_TYPE, @semantic.keys[start_index + index],
|
400
400
|
{:actual => x.class}) unless (x.is_a?(Integer) || x == :default)
|
401
401
|
end
|
402
|
-
|
402
|
+
Types::PIntegerType.new(*keys)
|
403
403
|
end
|
404
404
|
end
|
405
405
|
|
@@ -408,7 +408,7 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
408
408
|
def access_Resource(o, scope, keys)
|
409
409
|
# To access a Puppet::Resource as if it was a PResourceType, simply infer it, and take the type of
|
410
410
|
# the parameterized meta type (i.e. Type[Resource[the_resource_type, the_resource_title]])
|
411
|
-
t =
|
411
|
+
t = Types::TypeCalculator.infer(o).type
|
412
412
|
# must map "undefined title" from resource to nil
|
413
413
|
t.title = nil if t.title == EMPTY_STRING
|
414
414
|
access(t, scope, *keys)
|
@@ -430,8 +430,8 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
430
430
|
blamed = keys.size == 0 ? @semantic : @semantic.keys[0]
|
431
431
|
|
432
432
|
if keys.size == 0
|
433
|
-
fail(
|
434
|
-
:base_type =>
|
433
|
+
fail(Issues::BAD_TYPE_SLICE_ARITY, blamed,
|
434
|
+
:base_type => o.to_s, :min => 1, :max => -1, :actual => 0)
|
435
435
|
end
|
436
436
|
|
437
437
|
# Must know which concrete resource type to operate on in all cases.
|
@@ -439,19 +439,19 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
439
439
|
# type_name is LHS type_name if set, else the first given arg
|
440
440
|
type_name = o.type_name || keys.shift
|
441
441
|
type_name = case type_name
|
442
|
-
when
|
442
|
+
when Types::PResourceType
|
443
443
|
type_name.type_name
|
444
444
|
when String
|
445
445
|
type_name.downcase
|
446
446
|
else
|
447
447
|
# blame given left expression if it defined the type, else the first given key expression
|
448
448
|
blame = o.type_name.nil? ? @semantic.keys[0] : @semantic.left_expr
|
449
|
-
fail(
|
449
|
+
fail(Issues::ILLEGAL_RESOURCE_SPECIALIZATION, blame, {:actual => bad_key_type_name(type_name)})
|
450
450
|
end
|
451
451
|
|
452
452
|
# type name must conform
|
453
|
-
if type_name !~
|
454
|
-
fail(
|
453
|
+
if type_name !~ Patterns::CLASSREF
|
454
|
+
fail(Issues::ILLEGAL_CLASSREF, blamed, {:name=>type_name})
|
455
455
|
end
|
456
456
|
|
457
457
|
# The result is an array if multiple titles are given, or if titles are specified with an array
|
@@ -467,7 +467,7 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
467
467
|
# Return an empty array
|
468
468
|
#
|
469
469
|
if keys.empty? && keys_orig_size > 0
|
470
|
-
optionally_fail(
|
470
|
+
optionally_fail(Issues::EMPTY_RESOURCE_SPECIALIZATION, blamed)
|
471
471
|
return result_type_array ? [] : nil
|
472
472
|
end
|
473
473
|
|
@@ -475,12 +475,12 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
475
475
|
# lookup resource and return one or more parameter values
|
476
476
|
resource = find_resource(scope, o.type_name, o.title)
|
477
477
|
unless resource
|
478
|
-
fail(
|
478
|
+
fail(Issues::UNKNOWN_RESOURCE, @semantic, {:type_name => o.type_name, :title => o.title})
|
479
479
|
end
|
480
480
|
|
481
481
|
result = keys.map do |k|
|
482
482
|
unless is_parameter_of_resource?(scope, resource, k)
|
483
|
-
fail(
|
483
|
+
fail(Issues::UNKNOWN_RESOURCE_PARAMETER, @semantic,
|
484
484
|
{:type_name => o.type_name, :title => o.title, :param_name=>k})
|
485
485
|
end
|
486
486
|
get_resource_parameter_value(scope, resource, k)
|
@@ -493,13 +493,13 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
493
493
|
result = keys.each_with_index.map do |t, i|
|
494
494
|
unless t.is_a?(String) || t == :no_title
|
495
495
|
index = keys_orig_size != keys.size ? i+1 : i
|
496
|
-
fail(
|
496
|
+
fail(Issues::BAD_TYPE_SPECIALIZATION, @semantic.keys[index], {
|
497
497
|
:type => o,
|
498
498
|
:message => "Cannot use #{bad_key_type_name(t)} where a resource title String is expected"
|
499
499
|
})
|
500
500
|
end
|
501
501
|
|
502
|
-
|
502
|
+
Types::PResourceType.new(type_name, t == :no_title ? nil : t)
|
503
503
|
end
|
504
504
|
# returns single type if request was for a single entity, else an array of types (possibly empty)
|
505
505
|
return result_type_array ? result : result.pop
|
@@ -510,8 +510,8 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
510
510
|
keys_orig_size = keys.size
|
511
511
|
|
512
512
|
if keys_orig_size == 0
|
513
|
-
fail(
|
514
|
-
:base_type =>
|
513
|
+
fail(Issues::BAD_TYPE_SLICE_ARITY, blamed,
|
514
|
+
:base_type => o.to_s, :min => 1, :max => -1, :actual => 0)
|
515
515
|
end
|
516
516
|
|
517
517
|
# The result is an array if multiple classnames are given, or if classnames are specified with an array
|
@@ -526,7 +526,7 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
526
526
|
# Return an empty array
|
527
527
|
#
|
528
528
|
if keys.empty? && keys_orig_size > 0
|
529
|
-
optionally_fail(
|
529
|
+
optionally_fail(Issues::EMPTY_RESOURCE_SPECIALIZATION, blamed)
|
530
530
|
return result_type_array ? [] : nil
|
531
531
|
end
|
532
532
|
|
@@ -536,18 +536,18 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
536
536
|
# does not have a title. This should probably be deprecated.
|
537
537
|
#
|
538
538
|
result = keys.each_with_index.map do |c, i|
|
539
|
-
name = if c.is_a?(
|
539
|
+
name = if c.is_a?(Types::PResourceType) && !c.type_name.nil? && c.title.nil?
|
540
540
|
# type_name is already downcase. Don't waste time trying to downcase again
|
541
541
|
c.type_name
|
542
542
|
elsif c.is_a?(String)
|
543
543
|
c.downcase
|
544
544
|
else
|
545
|
-
fail(
|
545
|
+
fail(Issues::ILLEGAL_HOSTCLASS_NAME, @semantic.keys[i], {:name => c})
|
546
546
|
end
|
547
547
|
|
548
|
-
if name =~
|
548
|
+
if name =~ Patterns::NAME
|
549
549
|
# Remove leading '::' since all references are global, and 3x runtime does the wrong thing
|
550
|
-
|
550
|
+
Types::PHostClassType.new(name.sub(/^::/, EMPTY_STRING))
|
551
551
|
else
|
552
552
|
fail(Issues::ILLEGAL_NAME, @semantic.keys[i], {:name=>c})
|
553
553
|
end
|
@@ -560,12 +560,12 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
560
560
|
if is_parameter_of_resource?(scope, resource, k)
|
561
561
|
get_resource_parameter_value(scope, resource, k)
|
562
562
|
else
|
563
|
-
fail(
|
563
|
+
fail(Issues::UNKNOWN_RESOURCE_PARAMETER, @semantic,
|
564
564
|
{:type_name => 'Class', :title => o.class_name, :param_name=>k})
|
565
565
|
end
|
566
566
|
end
|
567
567
|
else
|
568
|
-
fail(
|
568
|
+
fail(Issues::UNKNOWN_RESOURCE, @semantic, {:type_name => 'Class', :title => o.class_name})
|
569
569
|
end
|
570
570
|
end
|
571
571
|
|
@@ -573,3 +573,5 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
573
573
|
return result_type_array ? result : result.pop
|
574
574
|
end
|
575
575
|
end
|
576
|
+
end
|
577
|
+
end
|