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,68 +1,70 @@
|
|
1
1
|
require 'rgen/metamodel_builder'
|
2
2
|
|
3
|
+
module Puppet::Pops
|
4
|
+
module Binder
|
3
5
|
# The Bindings model is a model of Key to Producer mappings (bindings).
|
4
6
|
# It is composed of a meta-model part (bindings_model_meta.rb), and
|
5
7
|
# and implementation part (this file).
|
6
8
|
#
|
7
|
-
# @see
|
9
|
+
# @see BindingsFactory The BindingsFactory for more details on how to create model instances.
|
8
10
|
# @api public
|
9
|
-
|
10
|
-
require 'puppet/pops/binder/bindings_model_meta'
|
11
|
+
require 'puppet/pops/binder/bindings_model_meta'
|
11
12
|
|
12
|
-
|
13
|
+
# TODO: See PUP-2978 for possible performance optimization
|
13
14
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
15
|
+
# Mix in implementation into the generated code
|
16
|
+
module Bindings
|
17
|
+
class BindingsModelObject
|
18
|
+
include Visitable
|
19
|
+
include Adaptable
|
20
|
+
include Containment
|
21
|
+
end
|
21
22
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
end
|
23
|
+
class ConstantProducerDescriptor
|
24
|
+
module ClassModule
|
25
|
+
def setValue(v)
|
26
|
+
@value = v
|
27
|
+
end
|
28
|
+
def getValue()
|
29
|
+
@value
|
30
|
+
end
|
31
|
+
def value=(v)
|
32
|
+
@value = v
|
33
33
|
end
|
34
34
|
end
|
35
|
+
end
|
35
36
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
end
|
37
|
+
class NamedArgument
|
38
|
+
module ClassModule
|
39
|
+
def setValue(v)
|
40
|
+
@value = v
|
41
|
+
end
|
42
|
+
def getValue()
|
43
|
+
@value
|
44
|
+
end
|
45
|
+
def value=(v)
|
46
|
+
@value = v
|
47
47
|
end
|
48
48
|
end
|
49
|
+
end
|
49
50
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
end
|
51
|
+
class InstanceProducerDescriptor
|
52
|
+
module ClassModule
|
53
|
+
def addArguments(val, index =-1)
|
54
|
+
@arguments ||= []
|
55
|
+
@arguments.insert(index, val)
|
56
|
+
end
|
57
|
+
def removeArguments(val)
|
58
|
+
raise "unsupported operation"
|
59
|
+
end
|
60
|
+
def setArguments(values)
|
61
|
+
@arguments = []
|
62
|
+
values.each {|v| addArguments(v) }
|
63
63
|
end
|
64
64
|
end
|
65
|
-
|
66
65
|
end
|
67
66
|
|
68
67
|
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
@@ -1,15 +1,17 @@
|
|
1
|
-
module Puppet::Pops
|
1
|
+
module Puppet::Pops
|
2
|
+
module Binder
|
3
|
+
module Config
|
2
4
|
# Generates validation diagnostics
|
3
|
-
class
|
5
|
+
class DiagnosticProducer
|
4
6
|
def initialize(acceptor)
|
5
7
|
@acceptor = acceptor
|
6
|
-
@severity_producer =
|
8
|
+
@severity_producer = Validation::SeverityProducer.new
|
7
9
|
end
|
8
10
|
|
9
11
|
def accept(issue, semantic, arguments={})
|
10
12
|
arguments[:semantic] ||= semantic
|
11
13
|
severity = severity_producer.severity(issue)
|
12
|
-
@acceptor.accept(
|
14
|
+
@acceptor.accept(Validation::Diagnostic.new(severity, issue, nil, nil, arguments))
|
13
15
|
end
|
14
16
|
|
15
17
|
def errors?()
|
@@ -22,11 +24,13 @@ module Puppet::Pops::Binder::Config
|
|
22
24
|
# p[Issues::XXX] = :warning
|
23
25
|
|
24
26
|
# ignored because there is a default
|
25
|
-
p[
|
27
|
+
p[Issues::CONFIG_LAYERS_MISSING] = :ignore
|
26
28
|
|
27
29
|
# ignored because there is a default
|
28
|
-
p[
|
30
|
+
p[Issues::CONFIG_CATEGORIES_MISSING] = :ignore
|
29
31
|
p
|
30
32
|
end
|
31
33
|
end
|
32
34
|
end
|
35
|
+
end
|
36
|
+
end
|
@@ -1,8 +1,10 @@
|
|
1
|
+
module Puppet::Pops
|
2
|
+
module Binder
|
1
3
|
# The injector is the "lookup service" class
|
2
4
|
#
|
3
5
|
# Initialization
|
4
6
|
# --------------
|
5
|
-
# The injector is initialized with a configured {
|
7
|
+
# The injector is initialized with a configured {Binder Binder}. The Binder instance contains a resolved set of
|
6
8
|
# `key => "binding information"` that is used to setup the injector.
|
7
9
|
#
|
8
10
|
# Lookup
|
@@ -34,8 +36,8 @@
|
|
34
36
|
# recreate the producer on each call to `produce`; i.e. each `lookup_producer` returns a producer capable of returning
|
35
37
|
# a series of objects.
|
36
38
|
#
|
37
|
-
# @see
|
38
|
-
# @see
|
39
|
+
# @see Binder Binder, for details about how to bind keys to producers
|
40
|
+
# @see BindingsFactory BindingsFactory, for a convenient way to create a Binder and bindings
|
39
41
|
#
|
40
42
|
# Assisted Inject
|
41
43
|
# ---------------
|
@@ -66,7 +68,7 @@
|
|
66
68
|
# injector.lookup(scope, Duck)
|
67
69
|
# # Produces a Duck named 'Donald Duck' or named after the binding 'default-duck-name' (and with similar treatment of
|
68
70
|
# # year_of_birth).
|
69
|
-
# @see
|
71
|
+
# @see Producers::AssistedInjectProducer AssistedInjectProducer, for more details on assisted injection
|
70
72
|
#
|
71
73
|
# Access to key factory and type calculator
|
72
74
|
# -----------------------------------------
|
@@ -82,19 +84,19 @@
|
|
82
84
|
#
|
83
85
|
# @api public
|
84
86
|
#
|
85
|
-
class
|
87
|
+
class Injector
|
86
88
|
|
87
|
-
Producers =
|
89
|
+
Producers = Producers
|
88
90
|
|
89
91
|
def self.create_from_model(layered_bindings_model)
|
90
|
-
self.new(
|
92
|
+
self.new(Binder.new(layered_bindings_model))
|
91
93
|
end
|
92
94
|
|
93
95
|
def self.create_from_hash(name, key_value_hash)
|
94
|
-
factory =
|
96
|
+
factory = BindingsFactory
|
95
97
|
named_bindings = factory.named_bindings(name) { key_value_hash.each {|k,v| bind.name(k).to(v) }}
|
96
98
|
layered_bindings = factory.layered_bindings(factory.named_layer(name+'-layer',named_bindings.model))
|
97
|
-
self.new(
|
99
|
+
self.new(Binder.new(layered_bindings))
|
98
100
|
end
|
99
101
|
|
100
102
|
# Creates an injector with a single bindings layer created with the given name, and the bindings
|
@@ -108,9 +110,9 @@ class Puppet::Pops::Binder::Injector
|
|
108
110
|
# @api public
|
109
111
|
#
|
110
112
|
def self.create(name, &block)
|
111
|
-
factory =
|
113
|
+
factory = BindingsFactory
|
112
114
|
layered_bindings = factory.layered_bindings(factory.named_layer(name+'-layer',factory.named_bindings(name, &block).model))
|
113
|
-
self.new(
|
115
|
+
self.new(Binder.new(layered_bindings))
|
114
116
|
end
|
115
117
|
|
116
118
|
# Creates an overriding injector with a single bindings layer
|
@@ -125,9 +127,9 @@ class Puppet::Pops::Binder::Injector
|
|
125
127
|
# @api public
|
126
128
|
#
|
127
129
|
def override(name, &block)
|
128
|
-
factory =
|
130
|
+
factory = BindingsFactory
|
129
131
|
layered_bindings = factory.layered_bindings(factory.named_layer(name+'-layer',factory.named_bindings(name, &block).model))
|
130
|
-
self.class.new(
|
132
|
+
self.class.new(Binder.new(layered_bindings, @impl.binder))
|
131
133
|
end
|
132
134
|
|
133
135
|
# Creates an overriding injector with bindings from a bindings model (a LayeredBindings) which
|
@@ -136,10 +138,10 @@ class Puppet::Pops::Binder::Injector
|
|
136
138
|
# @api public
|
137
139
|
#
|
138
140
|
def override_with_model(layered_bindings)
|
139
|
-
unless layered_bindings.is_a?(
|
141
|
+
unless layered_bindings.is_a?(Bindings::LayeredBindings)
|
140
142
|
raise ArgumentError, "Expected a LayeredBindings model, got '#{bindings_model.class}'"
|
141
143
|
end
|
142
|
-
self.class.new(
|
144
|
+
self.class.new(Binder.new(layered_bindings, @impl.binder))
|
143
145
|
end
|
144
146
|
|
145
147
|
# Creates an overriding injector with a single bindings layer
|
@@ -147,15 +149,15 @@ class Puppet::Pops::Binder::Injector
|
|
147
149
|
# @api public
|
148
150
|
#
|
149
151
|
def override_with_hash(name, key_value_hash)
|
150
|
-
factory =
|
152
|
+
factory = BindingsFactory
|
151
153
|
named_bindings = factory.named_bindings(name) { key_value_hash.each {|k,v| bind.name(k).to(v) }}
|
152
154
|
layered_bindings = factory.layered_bindings(factory.named_layer(name+'-layer',named_bindings.model))
|
153
|
-
self.class.new(
|
155
|
+
self.class.new(Binder.new(layered_bindings, @impl.binder))
|
154
156
|
end
|
155
157
|
|
156
|
-
# An Injector is initialized with a configured {
|
158
|
+
# An Injector is initialized with a configured {Binder Binder}.
|
157
159
|
#
|
158
|
-
# @param configured_binder [
|
160
|
+
# @param configured_binder [Binder,nil] The configured binder containing effective bindings. A given value
|
159
161
|
# of nil creates an injector that returns or yields nil on all lookup requests.
|
160
162
|
# @raise ArgumentError if the given binder is not fully configured
|
161
163
|
#
|
@@ -172,7 +174,7 @@ class Puppet::Pops::Binder::Injector
|
|
172
174
|
# The KeyFactory used to produce keys in this injector.
|
173
175
|
# The factory is shared with the Binder to ensure consistent translation to keys.
|
174
176
|
# A compatible type calculator can also be obtained from the key factory.
|
175
|
-
# @return [
|
177
|
+
# @return [KeyFactory] the key factory in use
|
176
178
|
#
|
177
179
|
# @api public
|
178
180
|
#
|
@@ -183,7 +185,7 @@ class Puppet::Pops::Binder::Injector
|
|
183
185
|
# Returns the TypeCalculator in use for keys. The same calculator (as used for keys) should be used if there is a need
|
184
186
|
# to check type conformance, or infer the type of Ruby objects.
|
185
187
|
#
|
186
|
-
# @return [
|
188
|
+
# @return [Types::TypeCalculator] the type calculator that is in use for keys
|
187
189
|
# @api public
|
188
190
|
#
|
189
191
|
def type_calculator()
|
@@ -205,7 +207,7 @@ class Puppet::Pops::Binder::Injector
|
|
205
207
|
# @overload lookup(scope, type, name = '')
|
206
208
|
# (see #lookup_type)
|
207
209
|
# @param scope [Puppet::Parser::Scope] the scope to use for evaluation
|
208
|
-
# @param type [
|
210
|
+
# @param type [Types::PAnyType] the type of what to lookup
|
209
211
|
# @param name [String] the name to use, defaults to empty string (for unnamed)
|
210
212
|
#
|
211
213
|
# @overload lookup(scope, name)
|
@@ -231,7 +233,7 @@ class Puppet::Pops::Binder::Injector
|
|
231
233
|
# Creates a key for the type/name combination using a KeyFactory. Specialization of the Data type are transformed
|
232
234
|
# to a Data key, and the result is type checked to conform with the given key.
|
233
235
|
#
|
234
|
-
# @param type [
|
236
|
+
# @param type [Types::PAnyType] the type to lookup as defined by Types::TypeFactory
|
235
237
|
# @param name [String] the (optional for non `Data` types) name of the entry to lookup.
|
236
238
|
# The name may be an empty String (the default), but not nil. The name is required for lookup for subtypes of
|
237
239
|
# `Data`.
|
@@ -247,7 +249,7 @@ class Puppet::Pops::Binder::Injector
|
|
247
249
|
# Looks up the key and returns the entry, or nil if no entry is found.
|
248
250
|
# Produced type is checked for type conformance with its binding, but not with the lookup key.
|
249
251
|
# (This since all subtypes of PDataType are looked up using a key based on PDataType).
|
250
|
-
# Use the
|
252
|
+
# Use the Types::TypeCalculator#instance? method to check for conformance of the result
|
251
253
|
# if this is wanted, or use #lookup_type.
|
252
254
|
#
|
253
255
|
# @param key [Object] lookup of key as produced by the key factory
|
@@ -275,7 +277,7 @@ class Puppet::Pops::Binder::Injector
|
|
275
277
|
# @overload lookup_producer(scope, type, name = '')
|
276
278
|
# (see #lookup_type)
|
277
279
|
# @param scope [Puppet::Parser::Scope] the scope to use for evaluation
|
278
|
-
# @param type [
|
280
|
+
# @param type [Types::PAnyType], the type of what to lookup
|
279
281
|
# @param name [String], the name to use, defaults to empty string (for unnamed)
|
280
282
|
#
|
281
283
|
# @overload lookup_producer(scope, name)
|
@@ -284,11 +286,11 @@ class Puppet::Pops::Binder::Injector
|
|
284
286
|
# @param scope [Puppet::Parser::Scope] the scope to use for evaluation
|
285
287
|
# @param name [String], the Data/name to lookup
|
286
288
|
#
|
287
|
-
# @return [
|
289
|
+
# @return [Producers::Producer, Object, nil] a producer, or what the optional block returns
|
288
290
|
#
|
289
291
|
# @yield [producer] passes the looked up producer to an optional block and returns what this block returns
|
290
292
|
# @yield [scope, producer] passes scope and producer to the block and returns what this block returns
|
291
|
-
# @yieldparam producer [
|
293
|
+
# @yieldparam producer [Producers::Producer, nil] the looked up producer or nil if nothing was bound
|
292
294
|
# @yieldparam scope [Puppet::Parser::Scope] the scope given to lookup
|
293
295
|
#
|
294
296
|
# @raise [ArgumentError] if the block has an arity that is not 1 or 2
|
@@ -300,7 +302,7 @@ class Puppet::Pops::Binder::Injector
|
|
300
302
|
end
|
301
303
|
|
302
304
|
# Looks up a Producer given an opaque binder key.
|
303
|
-
# @return [
|
305
|
+
# @return [Producers::Producer, nil] the bound producer, or nil if no such producer was found.
|
304
306
|
#
|
305
307
|
# @api public
|
306
308
|
#
|
@@ -310,7 +312,7 @@ class Puppet::Pops::Binder::Injector
|
|
310
312
|
|
311
313
|
# Looks up a Producer given a type/name key.
|
312
314
|
# @note The result is not type checked (it cannot be until the producer has produced an instance).
|
313
|
-
# @return [
|
315
|
+
# @return [Producers::Producer, nil] the bound producer, or nil if no such producer was found
|
314
316
|
#
|
315
317
|
# @api public
|
316
318
|
#
|
@@ -323,7 +325,7 @@ class Puppet::Pops::Binder::Injector
|
|
323
325
|
#
|
324
326
|
# @param scope [Puppet::Parser::Scope] the scope to use
|
325
327
|
# @param contributions_key [Object] Opaque key as produced by KeyFactory as the contributions key for a multibinding
|
326
|
-
# @return [Array<
|
328
|
+
# @return [Array<InjectorEntry>] the contributions sorted in deecending order of precedence
|
327
329
|
#
|
328
330
|
# @api public
|
329
331
|
#
|
@@ -339,7 +341,7 @@ class Puppet::Pops::Binder::Injector
|
|
339
341
|
end
|
340
342
|
|
341
343
|
# The implementation of the Injector is private.
|
342
|
-
# @see
|
344
|
+
# @see Injector The public API this module implements.
|
343
345
|
# @api private
|
344
346
|
#
|
345
347
|
module Private
|
@@ -353,8 +355,8 @@ module Private
|
|
353
355
|
|
354
356
|
def initialize
|
355
357
|
@entries = []
|
356
|
-
@key_factory =
|
357
|
-
@type_calculator =
|
358
|
+
@key_factory = KeyFactory.new()
|
359
|
+
@type_calculator = Types::TypeCalculator.singleton
|
358
360
|
end
|
359
361
|
|
360
362
|
def lookup(scope, *args, &block)
|
@@ -430,8 +432,8 @@ module Private
|
|
430
432
|
# represented the same (but still opaque) way.
|
431
433
|
#
|
432
434
|
@key_factory = configured_binder.key_factory()
|
433
|
-
@type_calculator =
|
434
|
-
@@transform_visitor ||=
|
435
|
+
@type_calculator = Types::TypeCalculator.singleton
|
436
|
+
@@transform_visitor ||= Visitor.new(nil,"transform", 2, 2)
|
435
437
|
@recursion_lock = [ ]
|
436
438
|
end
|
437
439
|
|
@@ -441,7 +443,7 @@ module Private
|
|
441
443
|
|
442
444
|
val = case args[ 0 ]
|
443
445
|
|
444
|
-
when
|
446
|
+
when Types::PAnyType
|
445
447
|
lookup_type(scope, *args)
|
446
448
|
|
447
449
|
when String
|
@@ -493,7 +495,7 @@ module Private
|
|
493
495
|
# @api private
|
494
496
|
def type_error_detail(expected, actual)
|
495
497
|
actual_t = type_calculator.infer(actual)
|
496
|
-
"expected: #{
|
498
|
+
"expected: #{expected}, got: #{actual_t}"
|
497
499
|
end
|
498
500
|
|
499
501
|
# @api private
|
@@ -507,7 +509,7 @@ module Private
|
|
507
509
|
when NilClass
|
508
510
|
@parent ? @parent.lookup_key(scope, key) : nil
|
509
511
|
|
510
|
-
when
|
512
|
+
when InjectorEntry
|
511
513
|
val = produce(scope, entry)
|
512
514
|
return nil if val.nil?
|
513
515
|
unless type_calculator.instance?(entry.binding.type, val)
|
@@ -561,7 +563,7 @@ module Private
|
|
561
563
|
#
|
562
564
|
def assistable_injected_class(key)
|
563
565
|
kt = key_factory.get_type(key)
|
564
|
-
return nil unless kt.is_a?(
|
566
|
+
return nil unless kt.is_a?(Types::PRuntimeType) && kt.runtime == :ruby && !key_factory.is_named?(key)
|
565
567
|
type_calculator.injectable_class(kt)
|
566
568
|
end
|
567
569
|
|
@@ -569,7 +571,7 @@ module Private
|
|
569
571
|
raise ArgumentError, "lookup_producer should be called with two or three arguments, got: #{args.size()+1}" unless args.size <= 2
|
570
572
|
|
571
573
|
p = case args[ 0 ]
|
572
|
-
when
|
574
|
+
when Types::PAnyType
|
573
575
|
lookup_producer_type(scope, *args)
|
574
576
|
|
575
577
|
when String
|
@@ -615,7 +617,7 @@ module Private
|
|
615
617
|
end
|
616
618
|
|
617
619
|
# Returns the producer for the entry
|
618
|
-
# @return [
|
620
|
+
# @return [Producers::Producer] the entry's producer.
|
619
621
|
#
|
620
622
|
# @api private
|
621
623
|
#
|
@@ -660,21 +662,21 @@ module Private
|
|
660
662
|
|
661
663
|
# @api private
|
662
664
|
def format_binding(b)
|
663
|
-
|
665
|
+
Binder.format_binding(b)
|
664
666
|
end
|
665
667
|
|
666
668
|
# Handles a missing producer (which is valid for a Multibinding where one is selected automatically)
|
667
669
|
# @api private
|
668
670
|
#
|
669
671
|
def transform_NilClass(descriptor, scope, entry)
|
670
|
-
unless entry.binding.is_a?(
|
672
|
+
unless entry.binding.is_a?(Bindings::Multibinding)
|
671
673
|
raise ArgumentError, "Binding without producer detected, #{format_binding(entry.binding)}"
|
672
674
|
end
|
673
675
|
case entry.binding.type
|
674
|
-
when
|
675
|
-
transform(
|
676
|
-
when
|
677
|
-
transform(
|
676
|
+
when Types::PArrayType
|
677
|
+
transform(Bindings::ArrayMultibindProducerDescriptor.new(), scope, entry)
|
678
|
+
when Types::PHashType
|
679
|
+
transform(Bindings::HashMultibindProducerDescriptor.new(), scope, entry)
|
678
680
|
else
|
679
681
|
raise ArgumentError, "Unsupported multibind type, must be an array or hash type, #{format_binding(entry.binding)}"
|
680
682
|
end
|
@@ -754,7 +756,7 @@ module Private
|
|
754
756
|
|
755
757
|
# @api private
|
756
758
|
def singleton?(descriptor)
|
757
|
-
! descriptor.eContainer().is_a?(
|
759
|
+
! descriptor.eContainer().is_a?(Bindings::NonCachingProducerDescriptor)
|
758
760
|
end
|
759
761
|
|
760
762
|
# Special marker class used in entries
|
@@ -764,3 +766,6 @@ module Private
|
|
764
766
|
end
|
765
767
|
end
|
766
768
|
end
|
769
|
+
end
|
770
|
+
end
|
771
|
+
|