openvox 7.37.1 → 8.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -3
- data/Gemfile +17 -12
- data/README.md +25 -30
- data/Rakefile +43 -33
- data/bin/puppet +1 -0
- data/examples/hiera/README.md +68 -57
- data/examples/hiera/data/common.yaml +12 -0
- data/examples/hiera/data/dc1.yaml +6 -0
- data/examples/hiera/hiera.yaml +15 -0
- data/examples/hiera/modules/ntp/data/common.yaml +4 -0
- data/examples/hiera/modules/ntp/hiera.yaml +9 -0
- data/examples/hiera/modules/ntp/manifests/config.pp +16 -4
- data/examples/hiera/modules/ntp/templates/ntp.conf.epp +3 -0
- data/examples/hiera/modules/users/manifests/common.pp +7 -2
- data/examples/hiera/modules/users/manifests/dc1.pp +7 -2
- data/examples/hiera/site.pp +1 -1
- data/ext/build_defaults.yaml +1 -1
- data/ext/windows/service/daemon.rb +54 -60
- data/install.rb +21 -92
- data/lib/hiera/puppet_function.rb +8 -6
- data/lib/hiera/scope.rb +15 -13
- data/lib/hiera_puppet.rb +4 -6
- data/lib/puppet/agent/disabler.rb +5 -3
- data/lib/puppet/agent/locker.rb +2 -2
- data/lib/puppet/agent.rb +6 -4
- data/lib/puppet/application/agent.rb +305 -301
- data/lib/puppet/application/apply.rb +124 -117
- data/lib/puppet/application/catalog.rb +2 -0
- data/lib/puppet/application/config.rb +2 -0
- data/lib/puppet/application/describe.rb +50 -48
- data/lib/puppet/application/device.rb +224 -223
- data/lib/puppet/application/doc.rb +57 -58
- data/lib/puppet/application/epp.rb +2 -0
- data/lib/puppet/application/face_base.rb +18 -17
- data/lib/puppet/application/facts.rb +2 -0
- data/lib/puppet/application/filebucket.rb +174 -168
- data/lib/puppet/application/generate.rb +3 -1
- data/lib/puppet/application/help.rb +2 -0
- data/lib/puppet/application/indirection_base.rb +2 -0
- data/lib/puppet/application/lookup.rb +181 -181
- data/lib/puppet/application/module.rb +2 -0
- data/lib/puppet/application/node.rb +2 -0
- data/lib/puppet/application/parser.rb +2 -0
- data/lib/puppet/application/plugin.rb +2 -0
- data/lib/puppet/application/report.rb +2 -0
- data/lib/puppet/application/resource.rb +106 -96
- data/lib/puppet/application/script.rb +76 -74
- data/lib/puppet/application/ssl.rb +100 -92
- data/lib/puppet/application.rb +32 -32
- data/lib/puppet/application_support.rb +3 -2
- data/lib/puppet/coercion.rb +5 -3
- data/lib/puppet/compilable_resource_type.rb +4 -2
- data/lib/puppet/concurrent/lock.rb +2 -3
- data/lib/puppet/concurrent/synchronized.rb +2 -2
- data/lib/puppet/concurrent/thread_local_singleton.rb +1 -0
- data/lib/puppet/concurrent.rb +2 -0
- data/lib/puppet/configurer/downloader.rb +11 -5
- data/lib/puppet/configurer/fact_handler.rb +17 -16
- data/lib/puppet/configurer/plugin_handler.rb +2 -0
- data/lib/puppet/configurer.rb +40 -36
- data/lib/puppet/confine/any.rb +3 -1
- data/lib/puppet/confine/boolean.rb +3 -1
- data/lib/puppet/confine/exists.rb +3 -1
- data/lib/puppet/confine/false.rb +3 -1
- data/lib/puppet/confine/feature.rb +3 -2
- data/lib/puppet/confine/true.rb +3 -1
- data/lib/puppet/confine/variable.rb +4 -2
- data/lib/puppet/confine.rb +5 -2
- data/lib/puppet/confine_collection.rb +6 -3
- data/lib/puppet/confiner.rb +5 -3
- data/lib/puppet/context/trusted_information.rb +12 -10
- data/lib/puppet/context.rb +2 -0
- data/lib/puppet/daemon.rb +26 -10
- data/lib/puppet/data_binding.rb +3 -1
- data/lib/puppet/datatypes/error.rb +3 -1
- data/lib/puppet/datatypes/impl/error.rb +2 -0
- data/lib/puppet/datatypes.rb +12 -7
- data/lib/puppet/defaults.rb +164 -125
- data/lib/puppet/environments.rb +13 -15
- data/lib/puppet/error.rb +19 -15
- data/lib/puppet/etc.rb +10 -5
- data/lib/puppet/external/dot.rb +65 -75
- data/lib/puppet/face/catalog/select.rb +4 -2
- data/lib/puppet/face/catalog.rb +7 -5
- data/lib/puppet/face/config.rb +30 -31
- data/lib/puppet/face/epp.rb +25 -26
- data/lib/puppet/face/facts.rb +8 -6
- data/lib/puppet/face/generate.rb +5 -2
- data/lib/puppet/face/help/action.erb +0 -1
- data/lib/puppet/face/help/face.erb +0 -1
- data/lib/puppet/face/help/global.erb +1 -1
- data/lib/puppet/face/help.rb +80 -62
- data/lib/puppet/face/module/changes.rb +4 -3
- data/lib/puppet/face/module/install.rb +7 -4
- data/lib/puppet/face/module/list.rb +52 -53
- data/lib/puppet/face/module/uninstall.rb +2 -0
- data/lib/puppet/face/module/upgrade.rb +5 -3
- data/lib/puppet/face/module.rb +3 -1
- data/lib/puppet/face/node/clean.rb +4 -2
- data/lib/puppet/face/node.rb +5 -3
- data/lib/puppet/face/parser.rb +18 -19
- data/lib/puppet/face/plugin.rb +10 -8
- data/lib/puppet/face/report.rb +10 -10
- data/lib/puppet/face/resource.rb +2 -0
- data/lib/puppet/face.rb +2 -0
- data/lib/puppet/facter_impl.rb +1 -1
- data/lib/puppet/feature/base.rb +13 -13
- data/lib/puppet/feature/bolt.rb +2 -0
- data/lib/puppet/feature/cfpropertylist.rb +2 -0
- data/lib/puppet/feature/eventlog.rb +2 -0
- data/lib/puppet/feature/hiera_eyaml.rb +2 -0
- data/lib/puppet/feature/hocon.rb +2 -0
- data/lib/puppet/feature/libuser.rb +5 -3
- data/lib/puppet/feature/msgpack.rb +2 -0
- data/lib/puppet/feature/pe_license.rb +4 -2
- data/lib/puppet/feature/pson.rb +6 -0
- data/lib/puppet/feature/selinux.rb +2 -0
- data/lib/puppet/feature/ssh.rb +3 -1
- data/lib/puppet/feature/telnet.rb +3 -7
- data/lib/puppet/feature/zlib.rb +3 -1
- data/lib/puppet/ffi/posix/constants.rb +3 -1
- data/lib/puppet/ffi/posix/functions.rb +2 -1
- data/lib/puppet/ffi/posix.rb +2 -0
- data/lib/puppet/ffi/windows/api_types.rb +3 -1
- data/lib/puppet/ffi/windows/constants.rb +80 -78
- data/lib/puppet/ffi/windows/functions.rb +76 -75
- data/lib/puppet/ffi/windows/structs.rb +6 -5
- data/lib/puppet/ffi/windows.rb +2 -0
- data/lib/puppet/file_bucket/dipper.rb +20 -11
- data/lib/puppet/file_bucket/file.rb +8 -6
- data/lib/puppet/file_bucket.rb +2 -0
- data/lib/puppet/file_serving/base.rb +17 -9
- data/lib/puppet/file_serving/configuration/parser.rb +13 -10
- data/lib/puppet/file_serving/configuration.rb +10 -7
- data/lib/puppet/file_serving/content.rb +2 -0
- data/lib/puppet/file_serving/fileset.rb +23 -19
- data/lib/puppet/file_serving/http_metadata.rb +3 -4
- data/lib/puppet/file_serving/metadata.rb +26 -23
- data/lib/puppet/file_serving/mount/file.rb +15 -11
- data/lib/puppet/file_serving/mount/locales.rb +5 -5
- data/lib/puppet/file_serving/mount/modules.rb +3 -0
- data/lib/puppet/file_serving/mount/pluginfacts.rb +5 -5
- data/lib/puppet/file_serving/mount/plugins.rb +5 -5
- data/lib/puppet/file_serving/mount/scripts.rb +3 -0
- data/lib/puppet/file_serving/mount/tasks.rb +3 -0
- data/lib/puppet/file_serving/mount.rb +4 -1
- data/lib/puppet/file_serving/terminus_helper.rb +2 -0
- data/lib/puppet/file_serving/terminus_selector.rb +3 -1
- data/lib/puppet/file_serving.rb +2 -0
- data/lib/puppet/file_system/file_impl.rb +9 -8
- data/lib/puppet/file_system/jruby.rb +2 -0
- data/lib/puppet/file_system/memory_file.rb +3 -0
- data/lib/puppet/file_system/memory_impl.rb +5 -1
- data/lib/puppet/file_system/path_pattern.rb +4 -2
- data/lib/puppet/file_system/posix.rb +7 -2
- data/lib/puppet/file_system/uniquefile.rb +33 -31
- data/lib/puppet/file_system/windows.rb +33 -22
- data/lib/puppet/file_system.rb +5 -3
- data/lib/puppet/forge/cache.rb +4 -3
- data/lib/puppet/forge/errors.rb +3 -4
- data/lib/puppet/forge/repository.rb +6 -3
- data/lib/puppet/forge.rb +20 -22
- data/lib/puppet/functions/abs.rb +7 -4
- data/lib/puppet/functions/alert.rb +2 -0
- data/lib/puppet/functions/all.rb +3 -1
- data/lib/puppet/functions/annotate.rb +2 -0
- data/lib/puppet/functions/any.rb +3 -1
- data/lib/puppet/functions/assert_type.rb +5 -2
- data/lib/puppet/functions/binary_file.rb +4 -1
- data/lib/puppet/functions/break.rb +4 -2
- data/lib/puppet/functions/call.rb +2 -1
- data/lib/puppet/functions/camelcase.rb +4 -3
- data/lib/puppet/functions/capitalize.rb +4 -3
- data/lib/puppet/functions/ceiling.rb +3 -2
- data/lib/puppet/functions/chomp.rb +3 -2
- data/lib/puppet/functions/chop.rb +3 -2
- data/lib/puppet/functions/compare.rb +5 -3
- data/lib/puppet/functions/contain.rb +7 -4
- data/lib/puppet/functions/convert_to.rb +2 -0
- data/lib/puppet/functions/crit.rb +2 -0
- data/lib/puppet/functions/debug.rb +2 -0
- data/lib/puppet/functions/defined.rb +10 -6
- data/lib/puppet/functions/dig.rb +13 -10
- data/lib/puppet/functions/downcase.rb +4 -2
- data/lib/puppet/functions/each.rb +2 -0
- data/lib/puppet/functions/emerg.rb +2 -0
- data/lib/puppet/functions/empty.rb +2 -0
- data/lib/puppet/functions/epp.rb +2 -1
- data/lib/puppet/functions/err.rb +2 -0
- data/lib/puppet/functions/eyaml_lookup_key.rb +17 -16
- data/lib/puppet/functions/filter.rb +8 -7
- data/lib/puppet/functions/find_file.rb +6 -0
- data/lib/puppet/functions/find_template.rb +2 -0
- data/lib/puppet/functions/flatten.rb +2 -0
- data/lib/puppet/functions/floor.rb +3 -2
- data/lib/puppet/functions/get.rb +4 -2
- data/lib/puppet/functions/getvar.rb +7 -5
- data/lib/puppet/functions/group_by.rb +2 -2
- data/lib/puppet/functions/hiera.rb +2 -0
- data/lib/puppet/functions/hiera_array.rb +2 -0
- data/lib/puppet/functions/hiera_hash.rb +2 -0
- data/lib/puppet/functions/hiera_include.rb +3 -0
- data/lib/puppet/functions/hocon_data.rb +5 -5
- data/lib/puppet/functions/import.rb +3 -1
- data/lib/puppet/functions/include.rb +5 -2
- data/lib/puppet/functions/index.rb +5 -4
- data/lib/puppet/functions/info.rb +2 -0
- data/lib/puppet/functions/inline_epp.rb +2 -1
- data/lib/puppet/functions/join.rb +4 -2
- data/lib/puppet/functions/json_data.rb +6 -6
- data/lib/puppet/functions/keys.rb +2 -0
- data/lib/puppet/functions/length.rb +2 -1
- data/lib/puppet/functions/lest.rb +2 -0
- data/lib/puppet/functions/lookup.rb +12 -12
- data/lib/puppet/functions/lstrip.rb +3 -2
- data/lib/puppet/functions/map.rb +4 -2
- data/lib/puppet/functions/match.rb +8 -5
- data/lib/puppet/functions/max.rb +75 -8
- data/lib/puppet/functions/min.rb +75 -8
- data/lib/puppet/functions/module_directory.rb +2 -0
- data/lib/puppet/functions/new.rb +5 -3
- data/lib/puppet/functions/next.rb +3 -1
- data/lib/puppet/functions/notice.rb +2 -0
- data/lib/puppet/functions/reduce.rb +8 -11
- data/lib/puppet/functions/regsubst.rb +15 -16
- data/lib/puppet/functions/require.rb +7 -3
- data/lib/puppet/functions/return.rb +2 -0
- data/lib/puppet/functions/reverse_each.rb +2 -0
- data/lib/puppet/functions/round.rb +2 -0
- data/lib/puppet/functions/rstrip.rb +3 -2
- data/lib/puppet/functions/scanf.rb +2 -0
- data/lib/puppet/functions/size.rb +2 -2
- data/lib/puppet/functions/slice.rb +4 -1
- data/lib/puppet/functions/sort.rb +2 -0
- data/lib/puppet/functions/split.rb +2 -0
- data/lib/puppet/functions/step.rb +2 -0
- data/lib/puppet/functions/strftime.rb +5 -3
- data/lib/puppet/functions/strip.rb +3 -2
- data/lib/puppet/functions/then.rb +3 -0
- data/lib/puppet/functions/tree_each.rb +4 -3
- data/lib/puppet/functions/type.rb +2 -0
- data/lib/puppet/functions/unique.rb +12 -9
- data/lib/puppet/functions/unwrap.rb +2 -0
- data/lib/puppet/functions/upcase.rb +4 -2
- data/lib/puppet/functions/values.rb +2 -0
- data/lib/puppet/functions/versioncmp.rb +2 -1
- data/lib/puppet/functions/warning.rb +2 -0
- data/lib/puppet/functions/with.rb +2 -0
- data/lib/puppet/functions/yaml_data.rb +13 -13
- data/lib/puppet/functions.rb +57 -61
- data/lib/puppet/generate/models/type/property.rb +4 -1
- data/lib/puppet/generate/models/type/type.rb +5 -2
- data/lib/puppet/generate/type.rb +11 -5
- data/lib/puppet/gettext/config.rb +16 -9
- data/lib/puppet/gettext/module_translations.rb +2 -1
- data/lib/puppet/gettext/stubs.rb +2 -0
- data/lib/puppet/graph/key.rb +2 -0
- data/lib/puppet/graph/prioritizer.rb +2 -0
- data/lib/puppet/graph/rb_tree_map.rb +43 -24
- data/lib/puppet/graph/relationship_graph.rb +31 -29
- data/lib/puppet/graph/sequential_prioritizer.rb +2 -0
- data/lib/puppet/graph/simple_graph.rb +63 -57
- data/lib/puppet/graph.rb +2 -0
- data/lib/puppet/http/client.rb +10 -6
- data/lib/puppet/http/dns.rb +12 -12
- data/lib/puppet/http/errors.rb +4 -2
- data/lib/puppet/http/external_client.rb +4 -3
- data/lib/puppet/http/factory.rb +3 -1
- data/lib/puppet/http/pool.rb +3 -1
- data/lib/puppet/http/pool_entry.rb +2 -0
- data/lib/puppet/http/proxy.rb +21 -19
- data/lib/puppet/http/redirector.rb +5 -3
- data/lib/puppet/http/resolver/server_list.rb +5 -4
- data/lib/puppet/http/resolver/settings.rb +2 -1
- data/lib/puppet/http/resolver/srv.rb +2 -1
- data/lib/puppet/http/resolver.rb +4 -2
- data/lib/puppet/http/response.rb +2 -0
- data/lib/puppet/http/response_converter.rb +4 -3
- data/lib/puppet/http/response_net_http.rb +2 -1
- data/lib/puppet/http/retry_after_handler.rb +4 -3
- data/lib/puppet/http/service/ca.rb +37 -5
- data/lib/puppet/http/service/compiler.rb +13 -10
- data/lib/puppet/http/service/file_server.rb +5 -3
- data/lib/puppet/http/service/puppetserver.rb +3 -2
- data/lib/puppet/http/service/report.rb +5 -7
- data/lib/puppet/http/service.rb +17 -22
- data/lib/puppet/http/session.rb +6 -4
- data/lib/puppet/http/site.rb +3 -1
- data/lib/puppet/http.rb +4 -2
- data/lib/puppet/indirector/catalog/compiler.rb +81 -80
- data/lib/puppet/indirector/catalog/json.rb +2 -0
- data/lib/puppet/indirector/catalog/msgpack.rb +2 -0
- data/lib/puppet/indirector/catalog/rest.rb +2 -0
- data/lib/puppet/indirector/catalog/store_configs.rb +3 -3
- data/lib/puppet/indirector/catalog/yaml.rb +2 -0
- data/lib/puppet/indirector/code.rb +2 -0
- data/lib/puppet/indirector/data_binding/hiera.rb +2 -1
- data/lib/puppet/indirector/data_binding/none.rb +2 -0
- data/lib/puppet/indirector/direct_file_server.rb +4 -1
- data/lib/puppet/indirector/envelope.rb +2 -0
- data/lib/puppet/indirector/errors.rb +2 -0
- data/lib/puppet/indirector/exec.rb +5 -3
- data/lib/puppet/indirector/face.rb +17 -28
- data/lib/puppet/indirector/fact_search.rb +4 -2
- data/lib/puppet/indirector/facts/facter.rb +10 -7
- data/lib/puppet/indirector/facts/json.rb +4 -2
- data/lib/puppet/indirector/facts/memory.rb +2 -0
- data/lib/puppet/indirector/facts/network_device.rb +2 -0
- data/lib/puppet/indirector/facts/rest.rb +2 -0
- data/lib/puppet/indirector/facts/store_configs.rb +3 -2
- data/lib/puppet/indirector/facts/yaml.rb +2 -0
- data/lib/puppet/indirector/file_bucket_file/file.rb +33 -27
- data/lib/puppet/indirector/file_bucket_file/rest.rb +6 -3
- data/lib/puppet/indirector/file_bucket_file/selector.rb +2 -1
- data/lib/puppet/indirector/file_content/file.rb +2 -0
- data/lib/puppet/indirector/file_content/file_server.rb +2 -0
- data/lib/puppet/indirector/file_content/rest.rb +3 -1
- data/lib/puppet/indirector/file_content/selector.rb +2 -0
- data/lib/puppet/indirector/file_content.rb +2 -0
- data/lib/puppet/indirector/file_metadata/file.rb +2 -0
- data/lib/puppet/indirector/file_metadata/file_server.rb +2 -0
- data/lib/puppet/indirector/file_metadata/http.rb +4 -2
- data/lib/puppet/indirector/file_metadata/rest.rb +3 -1
- data/lib/puppet/indirector/file_metadata/selector.rb +2 -0
- data/lib/puppet/indirector/file_metadata.rb +2 -0
- data/lib/puppet/indirector/file_server.rb +3 -0
- data/lib/puppet/indirector/generic_http.rb +2 -0
- data/lib/puppet/indirector/hiera.rb +8 -7
- data/lib/puppet/indirector/indirection.rb +50 -41
- data/lib/puppet/indirector/json.rb +9 -6
- data/lib/puppet/indirector/memory.rb +5 -2
- data/lib/puppet/indirector/msgpack.rb +11 -7
- data/lib/puppet/indirector/node/exec.rb +6 -6
- data/lib/puppet/indirector/node/json.rb +2 -1
- data/lib/puppet/indirector/node/memory.rb +2 -0
- data/lib/puppet/indirector/node/msgpack.rb +2 -0
- data/lib/puppet/indirector/node/plain.rb +2 -0
- data/lib/puppet/indirector/node/rest.rb +2 -0
- data/lib/puppet/indirector/node/store_configs.rb +3 -3
- data/lib/puppet/indirector/node/yaml.rb +2 -0
- data/lib/puppet/indirector/none.rb +3 -2
- data/lib/puppet/indirector/plain.rb +2 -0
- data/lib/puppet/indirector/report/json.rb +4 -2
- data/lib/puppet/indirector/report/msgpack.rb +3 -1
- data/lib/puppet/indirector/report/processor.rb +3 -0
- data/lib/puppet/indirector/report/rest.rb +2 -13
- data/lib/puppet/indirector/report/yaml.rb +4 -2
- data/lib/puppet/indirector/request.rb +15 -12
- data/lib/puppet/indirector/resource/ral.rb +10 -10
- data/lib/puppet/indirector/resource/store_configs.rb +3 -1
- data/lib/puppet/indirector/resource/validator.rb +2 -0
- data/lib/puppet/indirector/rest.rb +3 -1
- data/lib/puppet/indirector/store_configs.rb +2 -0
- data/lib/puppet/indirector/terminus.rb +8 -4
- data/lib/puppet/indirector/yaml.rb +7 -5
- data/lib/puppet/indirector.rb +3 -0
- data/lib/puppet/info_service/class_information_service.rb +16 -17
- data/lib/puppet/info_service/plan_information_service.rb +5 -3
- data/lib/puppet/info_service/task_information_service.rb +10 -9
- data/lib/puppet/info_service.rb +1 -0
- data/lib/puppet/interface/action.rb +46 -42
- data/lib/puppet/interface/action_builder.rb +12 -6
- data/lib/puppet/interface/action_manager.rb +9 -6
- data/lib/puppet/interface/documentation.rb +40 -34
- data/lib/puppet/interface/face_collection.rb +18 -14
- data/lib/puppet/interface/option.rb +23 -11
- data/lib/puppet/interface/option_builder.rb +14 -9
- data/lib/puppet/interface/option_manager.rb +12 -10
- data/lib/puppet/interface.rb +9 -8
- data/lib/puppet/loaders.rb +2 -1
- data/lib/puppet/metatype/manager.rb +16 -15
- data/lib/puppet/module/plan.rb +22 -15
- data/lib/puppet/module/task.rb +33 -28
- data/lib/puppet/module.rb +59 -47
- data/lib/puppet/module_tool/applications/application.rb +17 -12
- data/lib/puppet/module_tool/applications/checksummer.rb +3 -3
- data/lib/puppet/module_tool/applications/installer.rb +78 -87
- data/lib/puppet/module_tool/applications/uninstaller.rb +24 -22
- data/lib/puppet/module_tool/applications/unpacker.rb +11 -9
- data/lib/puppet/module_tool/applications/upgrader.rb +66 -60
- data/lib/puppet/module_tool/applications.rb +2 -0
- data/lib/puppet/module_tool/checksums.rb +4 -3
- data/lib/puppet/module_tool/dependency.rb +5 -4
- data/lib/puppet/module_tool/errors/base.rb +3 -1
- data/lib/puppet/module_tool/errors/installer.rb +6 -5
- data/lib/puppet/module_tool/errors/shared.rb +16 -15
- data/lib/puppet/module_tool/errors/uninstaller.rb +3 -2
- data/lib/puppet/module_tool/errors/upgrader.rb +4 -3
- data/lib/puppet/module_tool/errors.rb +2 -0
- data/lib/puppet/module_tool/install_directory.rb +8 -5
- data/lib/puppet/module_tool/installed_modules.rb +5 -2
- data/lib/puppet/module_tool/local_tarball.rb +10 -8
- data/lib/puppet/module_tool/metadata.rb +36 -30
- data/lib/puppet/module_tool/shared_behaviors.rb +61 -43
- data/lib/puppet/module_tool/tar/gnu.rb +12 -8
- data/lib/puppet/module_tool/tar/mini.rb +6 -4
- data/lib/puppet/module_tool/tar.rb +4 -2
- data/lib/puppet/module_tool.rb +11 -11
- data/lib/puppet/network/authconfig.rb +2 -0
- data/lib/puppet/network/authorization.rb +2 -0
- data/lib/puppet/network/client_request.rb +7 -4
- data/lib/puppet/network/format.rb +9 -3
- data/lib/puppet/network/format_handler.rb +9 -7
- data/lib/puppet/network/format_support.rb +8 -7
- data/lib/puppet/network/formats.rb +34 -25
- data/lib/puppet/network/http/api/indirected_routes.rb +38 -45
- data/lib/puppet/network/http/api/indirection_type.rb +2 -1
- data/lib/puppet/network/http/api/master/v3/environments.rb +2 -1
- data/lib/puppet/network/http/api/master/v3.rb +2 -1
- data/lib/puppet/network/http/api/master.rb +2 -0
- data/lib/puppet/network/http/api/server/v3/environments.rb +21 -15
- data/lib/puppet/network/http/api/server/v3.rb +14 -13
- data/lib/puppet/network/http/api/server.rb +2 -0
- data/lib/puppet/network/http/api.rb +20 -18
- data/lib/puppet/network/http/connection.rb +6 -4
- data/lib/puppet/network/http/error.rb +5 -3
- data/lib/puppet/network/http/handler.rb +12 -14
- data/lib/puppet/network/http/issues.rb +2 -0
- data/lib/puppet/network/http/memory_response.rb +3 -1
- data/lib/puppet/network/http/request.rb +22 -10
- data/lib/puppet/network/http/response.rb +2 -0
- data/lib/puppet/network/http/route.rb +14 -11
- data/lib/puppet/network/http.rb +2 -0
- data/lib/puppet/network/http_pool.rb +4 -3
- data/lib/puppet/network/uri.rb +2 -0
- data/lib/puppet/network.rb +2 -0
- data/lib/puppet/node/environment.rb +36 -33
- data/lib/puppet/node/facts.rb +10 -10
- data/lib/puppet/node/server_facts.rb +6 -6
- data/lib/puppet/node.rb +12 -12
- data/lib/puppet/pal/catalog_compiler.rb +2 -3
- data/lib/puppet/pal/compiler.rb +11 -6
- data/lib/puppet/pal/function_signature.rb +5 -3
- data/lib/puppet/pal/json_catalog_encoder.rb +7 -2
- data/lib/puppet/pal/pal_api.rb +2 -0
- data/lib/puppet/pal/pal_impl.rb +103 -108
- data/lib/puppet/pal/plan_signature.rb +4 -2
- data/lib/puppet/pal/script_compiler.rb +4 -2
- data/lib/puppet/pal/task_signature.rb +15 -9
- data/lib/puppet/parameter/boolean.rb +2 -0
- data/lib/puppet/parameter/package_options.rb +3 -1
- data/lib/puppet/parameter/path.rb +7 -3
- data/lib/puppet/parameter/value.rb +5 -3
- data/lib/puppet/parameter/value_collection.rb +17 -16
- data/lib/puppet/parameter.rb +17 -16
- data/lib/puppet/parser/abstract_compiler.rb +2 -3
- data/lib/puppet/parser/ast/block_expression.rb +4 -2
- data/lib/puppet/parser/ast/branch.rb +2 -0
- data/lib/puppet/parser/ast/hostclass.rb +4 -2
- data/lib/puppet/parser/ast/leaf.rb +3 -0
- data/lib/puppet/parser/ast/node.rb +2 -0
- data/lib/puppet/parser/ast/pops_bridge.rb +13 -13
- data/lib/puppet/parser/ast/resource.rb +8 -8
- data/lib/puppet/parser/ast/resource_instance.rb +3 -0
- data/lib/puppet/parser/ast/resourceparam.rb +9 -7
- data/lib/puppet/parser/ast/top_level_construct.rb +2 -0
- data/lib/puppet/parser/ast.rb +16 -15
- data/lib/puppet/parser/catalog_compiler.rb +3 -3
- data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +4 -2
- data/lib/puppet/parser/compiler/catalog_validator.rb +2 -0
- data/lib/puppet/parser/compiler.rb +45 -44
- data/lib/puppet/parser/e4_parser_adapter.rb +17 -16
- data/lib/puppet/parser/files.rb +8 -6
- data/lib/puppet/parser/functions/assert_type.rb +43 -41
- data/lib/puppet/parser/functions/binary_file.rb +16 -14
- data/lib/puppet/parser/functions/break.rb +29 -27
- data/lib/puppet/parser/functions/contain.rb +3 -1
- data/lib/puppet/parser/functions/create_resources.rb +18 -14
- data/lib/puppet/parser/functions/defined.rb +104 -102
- data/lib/puppet/parser/functions/dig.rb +26 -24
- data/lib/puppet/parser/functions/digest.rb +3 -1
- data/lib/puppet/parser/functions/each.rb +101 -99
- data/lib/puppet/parser/functions/epp.rb +4 -3
- data/lib/puppet/parser/functions/fail.rb +11 -9
- data/lib/puppet/parser/functions/file.rb +16 -14
- data/lib/puppet/parser/functions/filter.rb +57 -55
- data/lib/puppet/parser/functions/find_file.rb +19 -18
- data/lib/puppet/parser/functions/fqdn_rand.rb +25 -23
- data/lib/puppet/parser/functions/generate.rb +23 -21
- data/lib/puppet/parser/functions/hiera.rb +95 -93
- data/lib/puppet/parser/functions/hiera_array.rb +83 -82
- data/lib/puppet/parser/functions/hiera_hash.rb +93 -92
- data/lib/puppet/parser/functions/hiera_include.rb +93 -92
- data/lib/puppet/parser/functions/include.rb +5 -3
- data/lib/puppet/parser/functions/inline_epp.rb +4 -3
- data/lib/puppet/parser/functions/inline_template.rb +15 -13
- data/lib/puppet/parser/functions/lest.rb +36 -34
- data/lib/puppet/parser/functions/lookup.rb +132 -130
- data/lib/puppet/parser/functions/map.rb +54 -52
- data/lib/puppet/parser/functions/match.rb +31 -29
- data/lib/puppet/parser/functions/md5.rb +4 -2
- data/lib/puppet/parser/functions/new.rb +916 -915
- data/lib/puppet/parser/functions/next.rb +36 -34
- data/lib/puppet/parser/functions/realize.rb +13 -11
- data/lib/puppet/parser/functions/reduce.rb +134 -132
- data/lib/puppet/parser/functions/regsubst.rb +8 -5
- data/lib/puppet/parser/functions/require.rb +8 -5
- data/lib/puppet/parser/functions/return.rb +90 -88
- data/lib/puppet/parser/functions/reverse_each.rb +59 -57
- data/lib/puppet/parser/functions/scanf.rb +25 -23
- data/lib/puppet/parser/functions/sha1.rb +4 -2
- data/lib/puppet/parser/functions/sha256.rb +3 -1
- data/lib/puppet/parser/functions/shellquote.rb +2 -0
- data/lib/puppet/parser/functions/slice.rb +27 -25
- data/lib/puppet/parser/functions/split.rb +7 -6
- data/lib/puppet/parser/functions/sprintf.rb +8 -7
- data/lib/puppet/parser/functions/step.rb +62 -60
- data/lib/puppet/parser/functions/strftime.rb +175 -173
- data/lib/puppet/parser/functions/tag.rb +10 -7
- data/lib/puppet/parser/functions/tagged.rb +16 -13
- data/lib/puppet/parser/functions/template.rb +27 -24
- data/lib/puppet/parser/functions/then.rb +54 -52
- data/lib/puppet/parser/functions/type.rb +36 -34
- data/lib/puppet/parser/functions/versioncmp.rb +3 -2
- data/lib/puppet/parser/functions/with.rb +22 -20
- data/lib/puppet/parser/functions.rb +12 -9
- data/lib/puppet/parser/parser_factory.rb +2 -0
- data/lib/puppet/parser/relationship.rb +9 -3
- data/lib/puppet/parser/resource/param.rb +4 -2
- data/lib/puppet/parser/resource.rb +42 -40
- data/lib/puppet/parser/scope.rb +84 -70
- data/lib/puppet/parser/script_compiler.rb +12 -12
- data/lib/puppet/parser/templatewrapper.rb +3 -2
- data/lib/puppet/parser/type_loader.rb +31 -30
- data/lib/puppet/parser.rb +3 -1
- data/lib/puppet/plugins/configuration.rb +2 -0
- data/lib/puppet/plugins/syntax_checkers.rb +2 -1
- data/lib/puppet/plugins.rb +3 -1
- data/lib/puppet/pops/adaptable.rb +5 -3
- data/lib/puppet/pops/adapters.rb +4 -1
- data/lib/puppet/pops/evaluator/access_operator.rb +133 -120
- data/lib/puppet/pops/evaluator/callable_signature.rb +6 -5
- data/lib/puppet/pops/evaluator/closure.rb +272 -277
- data/lib/puppet/pops/evaluator/collector_transformer.rb +18 -15
- data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +10 -8
- data/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +4 -3
- data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +6 -5
- data/lib/puppet/pops/evaluator/collectors/fixed_set_collector.rb +10 -10
- data/lib/puppet/pops/evaluator/compare_operator.rb +36 -21
- data/lib/puppet/pops/evaluator/deferred_resolver.rb +19 -17
- data/lib/puppet/pops/evaluator/epp_evaluator.rb +19 -18
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +245 -245
- data/lib/puppet/pops/evaluator/external_syntax_support.rb +3 -2
- data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +6 -5
- data/lib/puppet/pops/evaluator/literal_evaluator.rb +5 -5
- data/lib/puppet/pops/evaluator/puppet_proc.rb +6 -3
- data/lib/puppet/pops/evaluator/relationship_operator.rb +14 -11
- data/lib/puppet/pops/evaluator/runtime3_converter.rb +34 -30
- data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +35 -35
- data/lib/puppet/pops/evaluator/runtime3_support.rb +32 -39
- data/lib/puppet/pops/functions/dispatch.rb +7 -7
- data/lib/puppet/pops/functions/dispatcher.rb +8 -7
- data/lib/puppet/pops/functions/function.rb +18 -20
- data/lib/puppet/pops/issue_reporter.rb +25 -22
- data/lib/puppet/pops/issues.rb +10 -5
- data/lib/puppet/pops/label_provider.rb +6 -4
- data/lib/puppet/pops/loader/base_loader.rb +4 -4
- data/lib/puppet/pops/loader/dependency_loader.rb +8 -4
- data/lib/puppet/pops/loader/gem_support.rb +5 -2
- data/lib/puppet/pops/loader/generic_plan_instantiator.rb +2 -0
- data/lib/puppet/pops/loader/loader.rb +8 -8
- data/lib/puppet/pops/loader/loader_paths.rb +42 -41
- data/lib/puppet/pops/loader/module_loaders.rb +45 -49
- data/lib/puppet/pops/loader/predefined_loader.rb +3 -3
- data/lib/puppet/pops/loader/puppet_function_instantiator.rb +6 -2
- data/lib/puppet/pops/loader/puppet_plan_instantiator.rb +6 -2
- data/lib/puppet/pops/loader/puppet_resource_type_impl_instantiator.rb +6 -5
- data/lib/puppet/pops/loader/ruby_data_type_instantiator.rb +5 -1
- data/lib/puppet/pops/loader/ruby_function_instantiator.rb +5 -1
- data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +18 -8
- data/lib/puppet/pops/loader/runtime3_type_loader.rb +4 -3
- data/lib/puppet/pops/loader/simple_environment_loader.rb +3 -3
- data/lib/puppet/pops/loader/static_loader.rb +29 -27
- data/lib/puppet/pops/loader/task_instantiator.rb +4 -2
- data/lib/puppet/pops/loader/type_definition_instantiator.rb +9 -5
- data/lib/puppet/pops/loader/typed_name.rb +4 -2
- data/lib/puppet/pops/loader/uri_helper.rb +3 -1
- data/lib/puppet/pops/loaders.rb +27 -23
- data/lib/puppet/pops/lookup/configured_data_provider.rb +2 -0
- data/lib/puppet/pops/lookup/context.rb +32 -23
- data/lib/puppet/pops/lookup/data_adapter.rb +2 -0
- data/lib/puppet/pops/lookup/data_dig_function_provider.rb +8 -7
- data/lib/puppet/pops/lookup/data_hash_function_provider.rb +5 -3
- data/lib/puppet/pops/lookup/data_provider.rb +2 -0
- data/lib/puppet/pops/lookup/environment_data_provider.rb +2 -0
- data/lib/puppet/pops/lookup/explainer.rb +47 -45
- data/lib/puppet/pops/lookup/function_provider.rb +8 -6
- data/lib/puppet/pops/lookup/global_data_provider.rb +4 -3
- data/lib/puppet/pops/lookup/hiera_config.rb +208 -160
- data/lib/puppet/pops/lookup/interpolation.rb +21 -10
- data/lib/puppet/pops/lookup/invocation.rb +4 -0
- data/lib/puppet/pops/lookup/key_recorder.rb +6 -3
- data/lib/puppet/pops/lookup/location_resolver.rb +4 -2
- data/lib/puppet/pops/lookup/lookup_adapter.rb +39 -34
- data/lib/puppet/pops/lookup/lookup_key.rb +3 -1
- data/lib/puppet/pops/lookup/lookup_key_function_provider.rb +4 -2
- data/lib/puppet/pops/lookup/module_data_provider.rb +12 -9
- data/lib/puppet/pops/lookup/sub_lookup.rb +7 -3
- data/lib/puppet/pops/lookup.rb +16 -11
- data/lib/puppet/pops/merge_strategy.rb +22 -16
- data/lib/puppet/pops/migration/migration_checker.rb +8 -5
- data/lib/puppet/pops/model/ast.rb +786 -685
- data/lib/puppet/pops/model/ast_transformer.rb +18 -18
- data/lib/puppet/pops/model/factory.rb +33 -31
- data/lib/puppet/pops/model/model_label_provider.rb +5 -2
- data/lib/puppet/pops/model/model_tree_dumper.rb +32 -30
- data/lib/puppet/pops/model/pn_transformer.rb +5 -6
- data/lib/puppet/pops/model/tree_dumper.rb +7 -4
- data/lib/puppet/pops/parser/code_merger.rb +3 -3
- data/lib/puppet/pops/parser/epp_parser.rb +6 -5
- data/lib/puppet/pops/parser/epp_support.rb +10 -9
- data/lib/puppet/pops/parser/evaluating_parser.rb +13 -9
- data/lib/puppet/pops/parser/heredoc_support.rb +14 -14
- data/lib/puppet/pops/parser/interpolation_support.rb +25 -25
- data/lib/puppet/pops/parser/lexer2.rb +74 -62
- data/lib/puppet/pops/parser/lexer_support.rb +57 -57
- data/lib/puppet/pops/parser/locatable.rb +2 -2
- data/lib/puppet/pops/parser/locator.rb +47 -43
- data/lib/puppet/pops/parser/parser_support.rb +22 -21
- data/lib/puppet/pops/parser/pn_parser.rb +10 -9
- data/lib/puppet/pops/parser/slurp_support.rb +41 -40
- data/lib/puppet/pops/patterns.rb +14 -14
- data/lib/puppet/pops/pcore.rb +7 -6
- data/lib/puppet/pops/pn.rb +8 -5
- data/lib/puppet/pops/puppet_stack.rb +3 -1
- data/lib/puppet/pops/resource/param.rb +13 -12
- data/lib/puppet/pops/resource/resource_type_impl.rb +47 -45
- data/lib/puppet/pops/semantic_error.rb +3 -1
- data/lib/puppet/pops/serialization/abstract_reader.rb +6 -4
- data/lib/puppet/pops/serialization/abstract_writer.rb +11 -9
- data/lib/puppet/pops/serialization/deserializer.rb +3 -0
- data/lib/puppet/pops/serialization/extension.rb +8 -0
- data/lib/puppet/pops/serialization/from_data_converter.rb +16 -9
- data/lib/puppet/pops/serialization/instance_reader.rb +2 -0
- data/lib/puppet/pops/serialization/instance_writer.rb +2 -0
- data/lib/puppet/pops/serialization/json.rb +9 -5
- data/lib/puppet/pops/serialization/json_path.rb +3 -1
- data/lib/puppet/pops/serialization/object.rb +6 -3
- data/lib/puppet/pops/serialization/serializer.rb +20 -16
- data/lib/puppet/pops/serialization/time_factory.rb +2 -1
- data/lib/puppet/pops/serialization/to_data_converter.rb +9 -6
- data/lib/puppet/pops/serialization/to_stringified_converter.rb +8 -7
- data/lib/puppet/pops/serialization.rb +10 -8
- data/lib/puppet/pops/time/timespan.rb +33 -21
- data/lib/puppet/pops/time/timestamp.rb +12 -5
- data/lib/puppet/pops/types/annotatable.rb +3 -2
- data/lib/puppet/pops/types/annotation.rb +6 -4
- data/lib/puppet/pops/types/class_loader.rb +17 -15
- data/lib/puppet/pops/types/implementation_registry.rb +4 -1
- data/lib/puppet/pops/types/iterable.rb +24 -14
- data/lib/puppet/pops/types/p_binary_type.rb +6 -6
- data/lib/puppet/pops/types/p_init_type.rb +15 -12
- data/lib/puppet/pops/types/p_meta_type.rb +6 -5
- data/lib/puppet/pops/types/p_object_type.rb +104 -79
- data/lib/puppet/pops/types/p_object_type_extension.rb +15 -14
- data/lib/puppet/pops/types/p_runtime_type.rb +12 -10
- data/lib/puppet/pops/types/p_sem_ver_range_type.rb +3 -2
- data/lib/puppet/pops/types/p_sem_ver_type.rb +8 -8
- data/lib/puppet/pops/types/p_sensitive_type.rb +3 -5
- data/lib/puppet/pops/types/p_timespan_type.rb +7 -5
- data/lib/puppet/pops/types/p_timestamp_type.rb +4 -3
- data/lib/puppet/pops/types/p_type_set_type.rb +51 -44
- data/lib/puppet/pops/types/p_uri_type.rb +41 -33
- data/lib/puppet/pops/types/puppet_object.rb +2 -1
- data/lib/puppet/pops/types/recursion_guard.rb +12 -6
- data/lib/puppet/pops/types/ruby_generator.rb +19 -14
- data/lib/puppet/pops/types/ruby_method.rb +8 -7
- data/lib/puppet/pops/types/string_converter.rb +113 -103
- data/lib/puppet/pops/types/tree_iterators.rb +16 -20
- data/lib/puppet/pops/types/type_acceptor.rb +2 -0
- data/lib/puppet/pops/types/type_asserter.rb +5 -3
- data/lib/puppet/pops/types/type_assertion_error.rb +1 -1
- data/lib/puppet/pops/types/type_calculator.rb +56 -49
- data/lib/puppet/pops/types/type_conversion_error.rb +2 -10
- data/lib/puppet/pops/types/type_factory.rb +25 -16
- data/lib/puppet/pops/types/type_formatter.rb +60 -65
- data/lib/puppet/pops/types/type_mismatch_describer.rb +62 -53
- data/lib/puppet/pops/types/type_parser.rb +124 -117
- data/lib/puppet/pops/types/type_set_reference.rb +3 -0
- data/lib/puppet/pops/types/type_with_members.rb +2 -2
- data/lib/puppet/pops/types/types.rb +267 -249
- data/lib/puppet/pops/utils.rb +43 -45
- data/lib/puppet/pops/validation/checker4_0.rb +65 -58
- data/lib/puppet/pops/validation/tasks_checker.rb +7 -5
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +2 -2
- data/lib/puppet/pops/validation.rb +26 -23
- data/lib/puppet/pops/visitable.rb +2 -0
- data/lib/puppet/pops/visitor.rb +18 -4
- data/lib/puppet/pops.rb +6 -3
- data/lib/puppet/property/boolean.rb +2 -0
- data/lib/puppet/property/ensure.rb +17 -16
- data/lib/puppet/property/keyvalue.rb +15 -14
- data/lib/puppet/property/list.rb +10 -9
- data/lib/puppet/property/ordered_list.rb +6 -5
- data/lib/puppet/property.rb +47 -48
- data/lib/puppet/provider/aix_object.rb +15 -9
- data/lib/puppet/provider/command.rb +2 -0
- data/lib/puppet/provider/confine.rb +2 -0
- data/lib/puppet/provider/exec/posix.rb +4 -1
- data/lib/puppet/provider/exec/shell.rb +2 -0
- data/lib/puppet/provider/exec/windows.rb +6 -4
- data/lib/puppet/provider/exec.rb +6 -4
- data/lib/puppet/provider/file/posix.rb +37 -19
- data/lib/puppet/provider/file/windows.rb +28 -29
- data/lib/puppet/provider/group/aix.rb +4 -2
- data/lib/puppet/provider/group/directoryservice.rb +7 -5
- data/lib/puppet/provider/group/groupadd.rb +16 -10
- data/lib/puppet/provider/group/ldap.rb +3 -0
- data/lib/puppet/provider/group/pw.rb +4 -3
- data/lib/puppet/provider/group/windows_adsi.rb +10 -7
- data/lib/puppet/provider/ldap.rb +5 -3
- data/lib/puppet/provider/nameservice/directoryservice.rb +72 -62
- data/lib/puppet/provider/nameservice/objectadd.rb +4 -4
- data/lib/puppet/provider/nameservice/pw.rb +8 -8
- data/lib/puppet/provider/nameservice.rb +23 -19
- data/lib/puppet/provider/network_device.rb +2 -2
- data/lib/puppet/provider/package/aix.rb +29 -27
- data/lib/puppet/provider/package/appdmg.rb +24 -22
- data/lib/puppet/provider/package/apple.rb +7 -5
- data/lib/puppet/provider/package/apt.rb +28 -25
- data/lib/puppet/provider/package/aptitude.rb +3 -3
- data/lib/puppet/provider/package/aptrpm.rb +18 -14
- data/lib/puppet/provider/package/blastwave.rb +19 -22
- data/lib/puppet/provider/package/dnf.rb +12 -5
- data/lib/puppet/provider/package/dnfmodule.rb +17 -15
- data/lib/puppet/provider/package/dpkg.rb +24 -25
- data/lib/puppet/provider/package/fink.rb +17 -15
- data/lib/puppet/provider/package/freebsd.rb +6 -4
- data/lib/puppet/provider/package/gem.rb +29 -26
- data/lib/puppet/provider/package/hpux.rb +9 -7
- data/lib/puppet/provider/package/macports.rb +6 -4
- data/lib/puppet/provider/package/nim.rb +27 -28
- data/lib/puppet/provider/package/openbsd.rb +37 -34
- data/lib/puppet/provider/package/opkg.rb +17 -14
- data/lib/puppet/provider/package/pacman.rb +39 -42
- data/lib/puppet/provider/package/pip.rb +32 -31
- data/lib/puppet/provider/package/pip2.rb +3 -2
- data/lib/puppet/provider/package/pip3.rb +3 -2
- data/lib/puppet/provider/package/pkg.rb +46 -41
- data/lib/puppet/provider/package/pkgdmg.rb +23 -17
- data/lib/puppet/provider/package/pkgin.rb +14 -13
- data/lib/puppet/provider/package/pkgng.rb +20 -15
- data/lib/puppet/provider/package/pkgutil.rb +40 -41
- data/lib/puppet/provider/package/portage.rb +73 -69
- data/lib/puppet/provider/package/ports.rb +19 -16
- data/lib/puppet/provider/package/portupgrade.rb +48 -55
- data/lib/puppet/provider/package/puppet_gem.rb +6 -15
- data/lib/puppet/provider/package/puppetserver_gem.rb +16 -13
- data/lib/puppet/provider/package/rpm.rb +45 -40
- data/lib/puppet/provider/package/rug.rb +11 -11
- data/lib/puppet/provider/package/sun.rb +28 -24
- data/lib/puppet/provider/package/sunfreeware.rb +3 -1
- data/lib/puppet/provider/package/tdnf.rb +9 -2
- data/lib/puppet/provider/package/up2date.rb +10 -10
- data/lib/puppet/provider/package/urpmi.rb +9 -7
- data/lib/puppet/provider/package/windows/exe_package.rb +11 -9
- data/lib/puppet/provider/package/windows/msi_package.rb +5 -3
- data/lib/puppet/provider/package/windows/package.rb +8 -5
- data/lib/puppet/provider/package/windows.rb +10 -9
- data/lib/puppet/provider/package/xbps.rb +127 -0
- data/lib/puppet/provider/package/yum.rb +65 -62
- data/lib/puppet/provider/package/zypper.rb +29 -29
- data/lib/puppet/provider/package.rb +9 -7
- data/lib/puppet/provider/package_targetable.rb +5 -3
- data/lib/puppet/provider/parsedfile.rb +21 -17
- data/lib/puppet/provider/service/base.rb +19 -23
- data/lib/puppet/provider/service/bsd.rb +7 -5
- data/lib/puppet/provider/service/daemontools.rb +42 -39
- data/lib/puppet/provider/service/debian.rb +12 -10
- data/lib/puppet/provider/service/freebsd.rb +50 -52
- data/lib/puppet/provider/service/gentoo.rb +11 -9
- data/lib/puppet/provider/service/init.rb +33 -31
- data/lib/puppet/provider/service/launchd.rb +38 -31
- data/lib/puppet/provider/service/openbsd.rb +17 -16
- data/lib/puppet/provider/service/openrc.rb +6 -5
- data/lib/puppet/provider/service/openwrt.rb +7 -6
- data/lib/puppet/provider/service/rcng.rb +7 -5
- data/lib/puppet/provider/service/redhat.rb +10 -7
- data/lib/puppet/provider/service/runit.rb +16 -15
- data/lib/puppet/provider/service/service.rb +7 -8
- data/lib/puppet/provider/service/smf.rb +42 -37
- data/lib/puppet/provider/service/src.rb +29 -29
- data/lib/puppet/provider/service/systemd.rb +48 -48
- data/lib/puppet/provider/service/upstart.rb +37 -37
- data/lib/puppet/provider/service/windows.rb +45 -48
- data/lib/puppet/provider/user/aix.rb +24 -20
- data/lib/puppet/provider/user/directoryservice.rb +98 -91
- data/lib/puppet/provider/user/hpux.rb +33 -35
- data/lib/puppet/provider/user/ldap.rb +13 -10
- data/lib/puppet/provider/user/openbsd.rb +24 -22
- data/lib/puppet/provider/user/pw.rb +8 -7
- data/lib/puppet/provider/user/user_role_add.rb +40 -36
- data/lib/puppet/provider/user/useradd.rb +64 -53
- data/lib/puppet/provider/user/windows_adsi.rb +14 -10
- data/lib/puppet/provider.rb +20 -19
- data/lib/puppet/reference/configuration.rb +55 -47
- data/lib/puppet/reference/function.rb +2 -0
- data/lib/puppet/reference/indirection.rb +33 -28
- data/lib/puppet/reference/metaparameter.rb +3 -1
- data/lib/puppet/reference/providers.rb +12 -10
- data/lib/puppet/reference/report.rb +2 -0
- data/lib/puppet/reference/type.rb +7 -5
- data/lib/puppet/relationship.rb +10 -9
- data/lib/puppet/reports/http.rb +3 -2
- data/lib/puppet/reports/log.rb +4 -3
- data/lib/puppet/reports/store.rb +9 -6
- data/lib/puppet/reports.rb +8 -6
- data/lib/puppet/resource/catalog.rb +54 -53
- data/lib/puppet/resource/status.rb +9 -7
- data/lib/puppet/resource/type.rb +65 -41
- data/lib/puppet/resource/type_collection.rb +10 -6
- data/lib/puppet/resource.rb +91 -81
- data/lib/puppet/runtime.rb +2 -0
- data/lib/puppet/scheduler/job.rb +2 -0
- data/lib/puppet/scheduler/scheduler.rb +4 -2
- data/lib/puppet/scheduler/splay_job.rb +16 -3
- data/lib/puppet/scheduler/timer.rb +2 -0
- data/lib/puppet/scheduler.rb +3 -1
- data/lib/puppet/settings/alias_setting.rb +5 -5
- data/lib/puppet/settings/array_setting.rb +2 -1
- data/lib/puppet/settings/autosign_setting.rb +2 -1
- data/lib/puppet/settings/base_setting.rb +23 -18
- data/lib/puppet/settings/boolean_setting.rb +5 -3
- data/lib/puppet/settings/certificate_revocation_setting.rb +2 -1
- data/lib/puppet/settings/config_file.rb +11 -9
- data/lib/puppet/settings/directory_setting.rb +2 -0
- data/lib/puppet/settings/duration_setting.rb +5 -4
- data/lib/puppet/settings/enum_setting.rb +3 -1
- data/lib/puppet/settings/environment_conf.rb +19 -15
- data/lib/puppet/settings/errors.rb +6 -3
- data/lib/puppet/settings/file_or_directory_setting.rb +4 -7
- data/lib/puppet/settings/file_setting.rb +15 -24
- data/lib/puppet/settings/http_extra_headers_setting.rb +2 -1
- data/lib/puppet/settings/ini_file.rb +5 -3
- data/lib/puppet/settings/integer_setting.rb +3 -1
- data/lib/puppet/settings/path_setting.rb +2 -0
- data/lib/puppet/settings/port_setting.rb +4 -2
- data/lib/puppet/settings/priority_setting.rb +13 -12
- data/lib/puppet/settings/server_list_setting.rb +7 -6
- data/lib/puppet/settings/string_setting.rb +2 -0
- data/lib/puppet/settings/symbolic_enum_setting.rb +3 -1
- data/lib/puppet/settings/terminus_setting.rb +2 -0
- data/lib/puppet/settings/ttl_setting.rb +7 -5
- data/lib/puppet/settings/value_translator.rb +9 -7
- data/lib/puppet/settings.rb +171 -163
- data/lib/puppet/ssl/base.rb +9 -6
- data/lib/puppet/ssl/certificate.rb +6 -4
- data/lib/puppet/ssl/certificate_request.rb +34 -38
- data/lib/puppet/ssl/certificate_request_attributes.rb +7 -4
- data/lib/puppet/ssl/certificate_signer.rb +3 -3
- data/lib/puppet/ssl/digest.rb +2 -0
- data/lib/puppet/ssl/error.rb +3 -0
- data/lib/puppet/ssl/oids.rb +11 -9
- data/lib/puppet/ssl/openssl_loader.rb +6 -4
- data/lib/puppet/ssl/ssl_context.rb +2 -0
- data/lib/puppet/ssl/ssl_provider.rb +13 -9
- data/lib/puppet/ssl/state_machine.rb +153 -22
- data/lib/puppet/ssl/verifier.rb +3 -2
- data/lib/puppet/ssl.rb +3 -1
- data/lib/puppet/syntax_checkers/base64.rb +7 -5
- data/lib/puppet/syntax_checkers/epp.rb +7 -6
- data/lib/puppet/syntax_checkers/json.rb +7 -7
- data/lib/puppet/syntax_checkers/pp.rb +7 -6
- data/lib/puppet/syntax_checkers.rb +3 -1
- data/lib/puppet/test/test_helper.rb +30 -44
- data/lib/puppet/thread_local.rb +2 -0
- data/lib/puppet/transaction/additional_resource_generator.rb +12 -7
- data/lib/puppet/transaction/event.rb +8 -5
- data/lib/puppet/transaction/event_manager.rb +12 -11
- data/lib/puppet/transaction/persistence.rb +16 -16
- data/lib/puppet/transaction/report.rb +34 -27
- data/lib/puppet/transaction/resource_harness.rb +17 -9
- data/lib/puppet/transaction.rb +37 -35
- data/lib/puppet/trusted_external.rb +10 -5
- data/lib/puppet/type/component.rb +14 -7
- data/lib/puppet/type/exec.rb +71 -61
- data/lib/puppet/type/file/checksum.rb +6 -2
- data/lib/puppet/type/file/checksum_value.rb +6 -4
- data/lib/puppet/type/file/content.rb +24 -20
- data/lib/puppet/type/file/ctime.rb +5 -4
- data/lib/puppet/type/file/data_sync.rb +9 -6
- data/lib/puppet/type/file/ensure.rb +24 -25
- data/lib/puppet/type/file/group.rb +3 -1
- data/lib/puppet/type/file/mode.rb +14 -11
- data/lib/puppet/type/file/mtime.rb +5 -3
- data/lib/puppet/type/file/owner.rb +3 -2
- data/lib/puppet/type/file/selcontext.rb +24 -23
- data/lib/puppet/type/file/source.rb +31 -30
- data/lib/puppet/type/file/target.rb +23 -25
- data/lib/puppet/type/file/type.rb +3 -2
- data/lib/puppet/type/file.rb +60 -54
- data/lib/puppet/type/filebucket.rb +6 -4
- data/lib/puppet/type/group.rb +14 -13
- data/lib/puppet/type/notify.rb +4 -3
- data/lib/puppet/type/package.rb +47 -45
- data/lib/puppet/type/resources.rb +39 -34
- data/lib/puppet/type/schedule.rb +21 -21
- data/lib/puppet/type/service.rb +19 -18
- data/lib/puppet/type/stage.rb +2 -0
- data/lib/puppet/type/tidy.rb +40 -34
- data/lib/puppet/type/user.rb +62 -56
- data/lib/puppet/type/whit.rb +2 -1
- data/lib/puppet/type.rb +180 -227
- data/lib/puppet/util/at_fork/noop.rb +2 -0
- data/lib/puppet/util/at_fork/solaris.rb +37 -39
- data/lib/puppet/util/at_fork.rb +3 -1
- data/lib/puppet/util/autoload.rb +10 -4
- data/lib/puppet/util/backups.rb +13 -11
- data/lib/puppet/util/character_encoding.rb +9 -6
- data/lib/puppet/util/checksums.rb +16 -12
- data/lib/puppet/util/classgen.rb +18 -23
- data/lib/puppet/util/colors.rb +67 -65
- data/lib/puppet/util/command_line/puppet_option_parser.rb +18 -16
- data/lib/puppet/util/command_line/trollop.rb +695 -673
- data/lib/puppet/util/command_line.rb +7 -5
- data/lib/puppet/util/constant_inflector.rb +4 -3
- data/lib/puppet/util/diff.rb +17 -18
- data/lib/puppet/util/docs.rb +8 -4
- data/lib/puppet/util/errors.rb +13 -11
- data/lib/puppet/util/execution.rb +58 -36
- data/lib/puppet/util/execution_stub.rb +2 -0
- data/lib/puppet/util/feature.rb +9 -9
- data/lib/puppet/util/file_watcher.rb +3 -0
- data/lib/puppet/util/fileparsing.rb +20 -24
- data/lib/puppet/util/filetype.rb +43 -43
- data/lib/puppet/util/http_proxy.rb +2 -0
- data/lib/puppet/util/inifile.rb +13 -18
- data/lib/puppet/util/instance_loader.rb +3 -0
- data/lib/puppet/util/json.rb +2 -0
- data/lib/puppet/util/json_lockfile.rb +4 -1
- data/lib/puppet/util/ldap/connection.rb +21 -19
- data/lib/puppet/util/ldap/generator.rb +2 -0
- data/lib/puppet/util/ldap/manager.rb +20 -21
- data/lib/puppet/util/ldap.rb +2 -0
- data/lib/puppet/util/libuser.rb +3 -2
- data/lib/puppet/util/limits.rb +2 -0
- data/lib/puppet/util/lockfile.rb +8 -8
- data/lib/puppet/util/log/destination.rb +4 -3
- data/lib/puppet/util/log/destinations.rb +20 -20
- data/lib/puppet/util/log.rb +40 -31
- data/lib/puppet/util/logging.rb +34 -30
- data/lib/puppet/util/metaid.rb +2 -1
- data/lib/puppet/util/metric.rb +9 -6
- data/lib/puppet/util/monkey_patches.rb +22 -30
- data/lib/puppet/util/multi_match.rb +9 -5
- data/lib/puppet/util/network_device/base.rb +3 -2
- data/lib/puppet/util/network_device/config.rb +9 -9
- data/lib/puppet/util/network_device/transport/base.rb +1 -1
- data/lib/puppet/util/network_device/transport.rb +2 -0
- data/lib/puppet/util/network_device.rb +2 -0
- data/lib/puppet/util/package/version/debian.rb +33 -31
- data/lib/puppet/util/package/version/gem.rb +3 -0
- data/lib/puppet/util/package/version/pip.rb +14 -8
- data/lib/puppet/util/package/version/range/eq.rb +4 -1
- data/lib/puppet/util/package/version/range/gt.rb +3 -0
- data/lib/puppet/util/package/version/range/gt_eq.rb +3 -0
- data/lib/puppet/util/package/version/range/lt.rb +4 -1
- data/lib/puppet/util/package/version/range/lt_eq.rb +3 -0
- data/lib/puppet/util/package/version/range/min_max.rb +5 -0
- data/lib/puppet/util/package/version/range/simple.rb +2 -0
- data/lib/puppet/util/package/version/range.rb +9 -5
- data/lib/puppet/util/package/version/rpm.rb +7 -5
- data/lib/puppet/util/package.rb +5 -2
- data/lib/puppet/util/pidlock.rb +11 -10
- data/lib/puppet/util/platform.rb +5 -3
- data/lib/puppet/util/plist.rb +16 -16
- data/lib/puppet/util/posix.rb +27 -24
- data/lib/puppet/util/profiler/aggregate.rb +7 -10
- data/lib/puppet/util/profiler/around_profiler.rb +2 -1
- data/lib/puppet/util/profiler/logging.rb +3 -1
- data/lib/puppet/util/profiler/object_counts.rb +2 -0
- data/lib/puppet/util/profiler/wall_clock.rb +6 -5
- data/lib/puppet/util/profiler.rb +2 -0
- data/lib/puppet/util/provider_features.rb +10 -6
- data/lib/puppet/util/psych_support.rb +2 -0
- data/lib/puppet/util/rdoc/code_objects.rb +18 -20
- data/lib/puppet/util/rdoc/generators/puppet_generator.rb +118 -128
- data/lib/puppet/util/rdoc/generators/template/puppet/puppet.rb +62 -79
- data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +32 -29
- data/lib/puppet/util/rdoc/parser/puppet_parser_rdoc2.rb +3 -1
- data/lib/puppet/util/rdoc/parser.rb +3 -1
- data/lib/puppet/util/rdoc.rb +10 -9
- data/lib/puppet/util/reference.rb +7 -32
- data/lib/puppet/util/resource_template.rb +3 -1
- data/lib/puppet/util/retry_action.rb +6 -5
- data/lib/puppet/util/rpm_compare.rb +31 -28
- data/lib/puppet/util/rubygems.rb +3 -3
- data/lib/puppet/util/run_mode.rb +46 -4
- data/lib/puppet/util/selinux.rb +72 -38
- data/lib/puppet/util/skip_tags.rb +2 -0
- data/lib/puppet/util/splayer.rb +2 -0
- data/lib/puppet/util/storage.rb +13 -13
- data/lib/puppet/util/suidmanager.rb +38 -37
- data/lib/puppet/util/symbolic_file_mode.rb +76 -76
- data/lib/puppet/util/tag_set.rb +4 -2
- data/lib/puppet/util/tagging.rb +12 -13
- data/lib/puppet/util/terminal.rb +6 -4
- data/lib/puppet/util/user_attr.rb +9 -7
- data/lib/puppet/util/warnings.rb +4 -0
- data/lib/puppet/util/watched_file.rb +4 -1
- data/lib/puppet/util/watcher/change_watcher.rb +2 -0
- data/lib/puppet/util/watcher/periodic_watcher.rb +2 -1
- data/lib/puppet/util/watcher/timer.rb +2 -0
- data/lib/puppet/util/watcher.rb +5 -5
- data/lib/puppet/util/windows/access_control_entry.rb +3 -1
- data/lib/puppet/util/windows/access_control_list.rb +10 -7
- data/lib/puppet/util/windows/adsi.rb +82 -74
- data/lib/puppet/util/windows/com.rb +10 -7
- data/lib/puppet/util/windows/daemon.rb +77 -80
- data/lib/puppet/util/windows/error.rb +7 -5
- data/lib/puppet/util/windows/eventlog.rb +13 -9
- data/lib/puppet/util/windows/file.rb +49 -45
- data/lib/puppet/util/windows/monkey_patches/process.rb +2 -3
- data/lib/puppet/util/windows/principal.rb +37 -34
- data/lib/puppet/util/windows/process.rb +36 -40
- data/lib/puppet/util/windows/registry.rb +60 -58
- data/lib/puppet/util/windows/root_certs.rb +5 -3
- data/lib/puppet/util/windows/security.rb +92 -90
- data/lib/puppet/util/windows/security_descriptor.rb +2 -0
- data/lib/puppet/util/windows/service.rb +24 -12
- data/lib/puppet/util/windows/sid.rb +23 -21
- data/lib/puppet/util/windows/string.rb +2 -0
- data/lib/puppet/util/windows/user.rb +56 -55
- data/lib/puppet/util/windows.rb +8 -1
- data/lib/puppet/util/yaml.rb +3 -1
- data/lib/puppet/util.rb +112 -161
- data/lib/puppet/vendor.rb +3 -1
- data/lib/puppet/version.rb +5 -2
- data/lib/puppet/x509/cert_provider.rb +48 -12
- data/lib/puppet/x509/pem_store.rb +3 -1
- data/lib/puppet/x509.rb +2 -0
- data/lib/puppet.rb +22 -19
- data/lib/puppet_pal.rb +2 -0
- data/lib/puppet_x.rb +2 -0
- data/locales/puppet.pot +9723 -5
- data/man/man5/puppet.conf.5 +121 -912
- data/man/man8/puppet-agent.8 +39 -107
- data/man/man8/puppet-apply.8 +18 -51
- data/man/man8/puppet-catalog.8 +25 -122
- data/man/man8/puppet-config.8 +22 -70
- data/man/man8/puppet-describe.8 +6 -22
- data/man/man8/puppet-device.8 +13 -49
- data/man/man8/puppet-doc.8 +8 -24
- data/man/man8/puppet-epp.8 +23 -168
- data/man/man8/puppet-facts.8 +14 -92
- data/man/man8/puppet-filebucket.8 +22 -54
- data/man/man8/puppet-generate.8 +5 -35
- data/man/man8/puppet-help.8 +8 -29
- data/man/man8/puppet-lookup.8 +25 -61
- data/man/man8/puppet-module.8 +19 -124
- data/man/man8/puppet-node.8 +47 -68
- data/man/man8/puppet-parser.8 +12 -55
- data/man/man8/puppet-plugin.8 +10 -33
- data/man/man8/puppet-report.8 +10 -53
- data/man/man8/puppet-resource.8 +19 -44
- data/man/man8/puppet-script.8 +11 -33
- data/man/man8/puppet-ssl.8 +12 -30
- data/man/man8/puppet.8 +90 -20
- data/tasks/tag.rake +34 -0
- metadata +77 -65
- data/CONTRIBUTING.md +0 -161
- data/examples/hiera/etc/hiera.yaml +0 -15
- data/examples/hiera/etc/hieradb/common.yaml +0 -3
- data/examples/hiera/etc/hieradb/dc1.yaml +0 -6
- data/examples/hiera/etc/hieradb/development.yaml +0 -2
- data/examples/hiera/etc/puppet.conf +0 -3
- data/examples/hiera/modules/data/manifests/common.pp +0 -4
- data/examples/hiera/modules/ntp/manifests/data.pp +0 -4
- data/examples/hiera/modules/ntp/templates/ntp.conf.erb +0 -3
- data/examples/hiera/modules/users/manifests/development.pp +0 -4
- data/lib/puppet/external/pson/common.rb +0 -374
- data/lib/puppet/external/pson/pure/generator.rb +0 -395
- data/lib/puppet/external/pson/pure/parser.rb +0 -308
- data/lib/puppet/external/pson/pure.rb +0 -15
- data/lib/puppet/external/pson/version.rb +0 -8
- data/lib/puppet/module_tool/contents_description.rb +0 -89
- data/tasks/benchmark.rake +0 -180
- data/tasks/ci.rake +0 -24
- data/tasks/generate_ast_model.rake +0 -90
- data/tasks/generate_cert_fixtures.rake +0 -194
- data/tasks/manpages.rake +0 -67
- data/tasks/memwalk.rake +0 -195
- data/tasks/parallel.rake +0 -410
- data/tasks/parser.rake +0 -22
- data/tasks/yard.rake +0 -59
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative 'iterable'
|
2
4
|
require_relative 'recursion_guard'
|
3
5
|
require_relative 'type_acceptor'
|
@@ -14,7 +16,6 @@ require_relative 'puppet_object'
|
|
14
16
|
|
15
17
|
module Puppet::Pops
|
16
18
|
module Types
|
17
|
-
|
18
19
|
# The EMPTY_xxx declarations is for backward compatibility. They should not be explicitly referenced
|
19
20
|
|
20
21
|
# @api private
|
@@ -50,18 +51,20 @@ class TypedModelObject < Object
|
|
50
51
|
end
|
51
52
|
|
52
53
|
def self.create_ptype(loader, ir, parent_name, attributes_hash = EMPTY_HASH)
|
53
|
-
@type = Pcore
|
54
|
+
@type = Pcore.create_object_type(loader, ir, self, "Pcore::#{simple_name}Type", "Pcore::#{parent_name}", attributes_hash)
|
54
55
|
end
|
55
56
|
|
56
57
|
def self.register_ptypes(loader, ir)
|
57
58
|
types = [
|
58
59
|
Annotation.register_ptype(loader, ir),
|
59
|
-
RubyMethod.register_ptype(loader, ir)
|
60
|
+
RubyMethod.register_ptype(loader, ir)
|
60
61
|
]
|
61
62
|
Types.constants.each do |c|
|
62
63
|
next if c == :PType || c == :PHostClassType
|
64
|
+
|
63
65
|
cls = Types.const_get(c)
|
64
66
|
next unless cls.is_a?(Class) && cls < self
|
67
|
+
|
65
68
|
type = cls.register_ptype(loader, ir)
|
66
69
|
types << type unless type.nil?
|
67
70
|
end
|
@@ -73,9 +76,8 @@ end
|
|
73
76
|
# @api public
|
74
77
|
#
|
75
78
|
class PAnyType < TypedModelObject
|
76
|
-
|
77
79
|
def self.register_ptype(loader, ir)
|
78
|
-
@type = Pcore
|
80
|
+
@type = Pcore.create_object_type(loader, ir, self, 'Pcore::AnyType', 'Any', EMPTY_HASH)
|
79
81
|
end
|
80
82
|
|
81
83
|
def self.create(*args)
|
@@ -129,9 +131,10 @@ class PAnyType < TypedModelObject
|
|
129
131
|
end
|
130
132
|
when PVariantType
|
131
133
|
# Assignable if all contained types are assignable, or if this is exactly Any
|
132
|
-
return true if
|
134
|
+
return true if instance_of?(PAnyType)
|
133
135
|
# An empty variant may be assignable to NotUndef[T] if T is assignable to empty variant
|
134
136
|
return _assignable?(o, guard) if is_a?(PNotUndefType) && o.types.empty?
|
137
|
+
|
135
138
|
!o.types.empty? && o.types.all? { |vt| assignable?(vt, guard) }
|
136
139
|
when POptionalType
|
137
140
|
# Assignable if undef and contained type is assignable
|
@@ -161,7 +164,7 @@ class PAnyType < TypedModelObject
|
|
161
164
|
# @param args [Array] the arguments to test
|
162
165
|
# @param block [Proc] block, or nil if not called with a block
|
163
166
|
# @return [Boolean] `true` if this instance is a callable that accepts the given _args_
|
164
|
-
def callable_with?(args,
|
167
|
+
def callable_with?(args, block = nil)
|
165
168
|
false
|
166
169
|
end
|
167
170
|
|
@@ -295,7 +298,7 @@ class PAnyType < TypedModelObject
|
|
295
298
|
def self.simple_name
|
296
299
|
@simple_name ||= (
|
297
300
|
n = name
|
298
|
-
n[n.rindex(DOUBLE_COLON)+3..n.size-5].freeze
|
301
|
+
n[n.rindex(DOUBLE_COLON) + 3..n.size - 5].freeze
|
299
302
|
)
|
300
303
|
end
|
301
304
|
|
@@ -339,7 +342,7 @@ class PAnyType < TypedModelObject
|
|
339
342
|
# @raises ArgumentError
|
340
343
|
#
|
341
344
|
def self.new_function(type)
|
342
|
-
raise ArgumentError
|
345
|
+
raise ArgumentError, "Creation of new instance of type '#{type}' is not supported"
|
343
346
|
end
|
344
347
|
|
345
348
|
# Answers the question if instances of this type can represent themselves as a string that
|
@@ -397,7 +400,7 @@ class PAnyType < TypedModelObject
|
|
397
400
|
modified = false
|
398
401
|
modified_types = types.map do |t|
|
399
402
|
t_mod = t.send(method, *method_args)
|
400
|
-
modified
|
403
|
+
modified ||= !t.equal?(t_mod)
|
401
404
|
t_mod
|
402
405
|
end
|
403
406
|
if modified
|
@@ -463,14 +466,12 @@ end
|
|
463
466
|
# @api public
|
464
467
|
#
|
465
468
|
class PTypeType < PTypeWithContainedType
|
466
|
-
|
467
469
|
def self.register_ptype(loader, ir)
|
468
470
|
create_ptype(loader, ir, 'AnyType',
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
)
|
471
|
+
'type' => {
|
472
|
+
KEY_TYPE => POptionalType.new(PTypeType::DEFAULT),
|
473
|
+
KEY_VALUE => nil
|
474
|
+
})
|
474
475
|
end
|
475
476
|
|
476
477
|
# Returns a new function that produces a Type instance
|
@@ -488,9 +489,10 @@ class PTypeType < PTypeWithContainedType
|
|
488
489
|
end
|
489
490
|
|
490
491
|
def instance?(o, guard = nil)
|
491
|
-
|
492
|
+
case o
|
493
|
+
when PAnyType
|
492
494
|
type.nil? || type.assignable?(o, guard)
|
493
|
-
|
495
|
+
when Module, Puppet::Resource, Puppet::Parser::Resource
|
494
496
|
@type.nil? ? true : assignable?(TypeCalculator.infer(o))
|
495
497
|
else
|
496
498
|
false
|
@@ -537,6 +539,7 @@ class PTypeType < PTypeWithContainedType
|
|
537
539
|
return false unless o.is_a?(PTypeType)
|
538
540
|
return true if @type.nil? # wide enough to handle all types
|
539
541
|
return false if o.type.nil? # wider than t
|
542
|
+
|
540
543
|
@type.assignable?(o.type, guard)
|
541
544
|
end
|
542
545
|
end
|
@@ -547,15 +550,14 @@ PType = PTypeType
|
|
547
550
|
class PNotUndefType < PTypeWithContainedType
|
548
551
|
def self.register_ptype(loader, ir)
|
549
552
|
create_ptype(loader, ir, 'AnyType',
|
550
|
-
|
551
|
-
|
552
|
-
|
553
|
-
|
554
|
-
)
|
553
|
+
'type' => {
|
554
|
+
KEY_TYPE => POptionalType.new(PTypeType::DEFAULT),
|
555
|
+
KEY_VALUE => nil
|
556
|
+
})
|
555
557
|
end
|
556
558
|
|
557
559
|
def initialize(type = nil)
|
558
|
-
super(type.
|
560
|
+
super(type.instance_of?(PAnyType) ? nil : type)
|
559
561
|
end
|
560
562
|
|
561
563
|
def instance?(o, guard = nil)
|
@@ -566,16 +568,14 @@ class PNotUndefType < PTypeWithContainedType
|
|
566
568
|
n = super
|
567
569
|
if n.type.nil?
|
568
570
|
n
|
571
|
+
elsif n.type.is_a?(POptionalType)
|
572
|
+
PNotUndefType.new(n.type.type).normalize
|
573
|
+
# No point in having an optional in a NotUndef
|
574
|
+
elsif !n.type.assignable?(PUndefType::DEFAULT)
|
575
|
+
# THe type is NotUndef anyway, so it can be stripped of
|
576
|
+
n.type
|
569
577
|
else
|
570
|
-
|
571
|
-
# No point in having an optional in a NotUndef
|
572
|
-
PNotUndefType.new(n.type.type).normalize
|
573
|
-
elsif !n.type.assignable?(PUndefType::DEFAULT)
|
574
|
-
# THe type is NotUndef anyway, so it can be stripped of
|
575
|
-
n.type
|
576
|
-
else
|
577
|
-
n
|
578
|
-
end
|
578
|
+
n
|
579
579
|
end
|
580
580
|
end
|
581
581
|
|
@@ -618,6 +618,7 @@ class PUndefType < PAnyType
|
|
618
618
|
DEFAULT = PUndefType.new
|
619
619
|
|
620
620
|
protected
|
621
|
+
|
621
622
|
# @api private
|
622
623
|
def _assignable?(o, guard)
|
623
624
|
o.is_a?(PUndefType)
|
@@ -640,7 +641,7 @@ class PUnitType < PAnyType
|
|
640
641
|
def self.new_function(type)
|
641
642
|
@new_function ||= Puppet::Functions.create_loaded_function(:new_unit, type.loader) do
|
642
643
|
dispatch :from_args do
|
643
|
-
param
|
644
|
+
param 'Any', :from
|
644
645
|
end
|
645
646
|
|
646
647
|
def from_args(from)
|
@@ -651,7 +652,7 @@ class PUnitType < PAnyType
|
|
651
652
|
|
652
653
|
DEFAULT = PUnitType.new
|
653
654
|
|
654
|
-
def assignable?(o, guard=nil)
|
655
|
+
def assignable?(o, guard = nil)
|
655
656
|
true
|
656
657
|
end
|
657
658
|
|
@@ -679,6 +680,7 @@ class PDefaultType < PAnyType
|
|
679
680
|
DEFAULT = PDefaultType.new
|
680
681
|
|
681
682
|
protected
|
683
|
+
|
682
684
|
# @api private
|
683
685
|
def _assignable?(o, guard)
|
684
686
|
o.is_a?(PDefaultType)
|
@@ -735,7 +737,7 @@ class PScalarDataType < PScalarType
|
|
735
737
|
end
|
736
738
|
|
737
739
|
def instance?(o, guard = nil)
|
738
|
-
|
740
|
+
o.instance_of?(String) || o.is_a?(Integer) || o.is_a?(Float) || o.is_a?(TrueClass) || o.is_a?(FalseClass)
|
739
741
|
end
|
740
742
|
|
741
743
|
DEFAULT = PScalarDataType.new
|
@@ -758,8 +760,8 @@ end
|
|
758
760
|
class PEnumType < PScalarDataType
|
759
761
|
def self.register_ptype(loader, ir)
|
760
762
|
create_ptype(loader, ir, 'ScalarDataType',
|
761
|
-
|
762
|
-
|
763
|
+
'values' => PArrayType.new(PStringType::NON_EMPTY),
|
764
|
+
'case_insensitive' => { 'type' => PBooleanType::DEFAULT, 'value' => false })
|
763
765
|
end
|
764
766
|
|
765
767
|
attr_reader :values, :case_insensitive
|
@@ -822,18 +824,19 @@ class PEnumType < PScalarDataType
|
|
822
824
|
# @api private
|
823
825
|
def _assignable?(o, guard)
|
824
826
|
return true if self == o
|
827
|
+
|
825
828
|
svalues = values
|
826
829
|
if svalues.empty?
|
827
830
|
return true if o.is_a?(PStringType) || o.is_a?(PEnumType) || o.is_a?(PPatternType)
|
828
831
|
end
|
829
832
|
case o
|
830
|
-
|
831
|
-
|
832
|
-
|
833
|
-
|
834
|
-
|
835
|
-
|
836
|
-
|
833
|
+
when PStringType
|
834
|
+
# if the contained string is found in the set of enums
|
835
|
+
instance?(o.value, guard)
|
836
|
+
when PEnumType
|
837
|
+
!o.values.empty? && (case_insensitive? || !o.case_insensitive?) && o.values.all? { |s| instance?(s, guard) }
|
838
|
+
else
|
839
|
+
false
|
837
840
|
end
|
838
841
|
end
|
839
842
|
end
|
@@ -849,18 +852,17 @@ OPTIONAL_FRACTION = '(?:\.\d+)?'
|
|
849
852
|
OPTIONAL_EXPONENT = '(?:[eE]-?\d+)?'
|
850
853
|
FLOAT_DEC = '(?:' + INTEGER_DEC + OPTIONAL_FRACTION + OPTIONAL_EXPONENT + ')'
|
851
854
|
|
852
|
-
INTEGER_PATTERN
|
855
|
+
INTEGER_PATTERN = '\A' + SIGN_PREFIX + '(?:' + INTEGER_DEC + '|' + INTEGER_HEX + '|' + INTEGER_OCT + '|' + INTEGER_BIN + ')\z'
|
853
856
|
INTEGER_PATTERN_LENIENT = '\A' + SIGN_PREFIX + '(?:' + INTEGER_DEC_OR_OCT + '|' + INTEGER_HEX + '|' + INTEGER_BIN + ')\z'
|
854
|
-
FLOAT_PATTERN
|
857
|
+
FLOAT_PATTERN = '\A' + SIGN_PREFIX + '(?:' + FLOAT_DEC + '|' + INTEGER_HEX + '|' + INTEGER_OCT + '|' + INTEGER_BIN + ')\z'
|
855
858
|
|
856
859
|
# @api public
|
857
860
|
#
|
858
861
|
class PNumericType < PScalarDataType
|
859
862
|
def self.register_ptype(loader, ir)
|
860
863
|
create_ptype(loader, ir, 'ScalarDataType',
|
861
|
-
|
862
|
-
|
863
|
-
)
|
864
|
+
'from' => { KEY_TYPE => POptionalType.new(PNumericType::DEFAULT), KEY_VALUE => nil },
|
865
|
+
'to' => { KEY_TYPE => POptionalType.new(PNumericType::DEFAULT), KEY_VALUE => nil })
|
864
866
|
end
|
865
867
|
|
866
868
|
def self.new_function(type)
|
@@ -876,7 +878,7 @@ class PNumericType < PScalarDataType
|
|
876
878
|
end
|
877
879
|
|
878
880
|
dispatch :from_hash do
|
879
|
-
param 'NamedArgs',
|
881
|
+
param 'NamedArgs', :hash_args
|
880
882
|
end
|
881
883
|
|
882
884
|
argument_mismatch :on_error do
|
@@ -917,9 +919,9 @@ class PNumericType < PScalarDataType
|
|
917
919
|
|
918
920
|
Puppet::Pops::Utils.to_n(from)
|
919
921
|
rescue TypeError => e
|
920
|
-
raise TypeConversionError
|
922
|
+
raise TypeConversionError, e.message
|
921
923
|
rescue ArgumentError => e
|
922
|
-
raise TypeConversionError
|
924
|
+
raise TypeConversionError, e.message
|
923
925
|
end
|
924
926
|
end
|
925
927
|
end
|
@@ -939,6 +941,7 @@ class PNumericType < PScalarDataType
|
|
939
941
|
from = -Float::INFINITY if from.nil? || from == :default
|
940
942
|
to = Float::INFINITY if to.nil? || to == :default
|
941
943
|
raise ArgumentError, "'from' must be less or equal to 'to'. Got (#{from}, #{to}" if from > to
|
944
|
+
|
942
945
|
@from = from
|
943
946
|
@to = to
|
944
947
|
end
|
@@ -949,7 +952,7 @@ class PNumericType < PScalarDataType
|
|
949
952
|
# @return [Boolean] `true` if this range intersects with the other range
|
950
953
|
# @api public
|
951
954
|
def intersect?(o)
|
952
|
-
|
955
|
+
instance_of?(o.class) && !(@to < o.numeric_from || o.numeric_to < @from)
|
953
956
|
end
|
954
957
|
|
955
958
|
# Returns the lower bound of the numeric range or `nil` if no lower bound is set.
|
@@ -997,6 +1000,7 @@ class PNumericType < PScalarDataType
|
|
997
1000
|
# @api_private
|
998
1001
|
def _assignable?(o, guard)
|
999
1002
|
return false unless o.is_a?(self.class)
|
1003
|
+
|
1000
1004
|
# If o min and max are within the range of t
|
1001
1005
|
@from <= o.numeric_from && @to >= o.numeric_to
|
1002
1006
|
end
|
@@ -1032,7 +1036,7 @@ class PIntegerType < PNumericType
|
|
1032
1036
|
# @return [Boolean] `true` if this range is adjacent to the other range
|
1033
1037
|
# @api public
|
1034
1038
|
def adjacent?(o)
|
1035
|
-
o.is_a?(PIntegerType) &&
|
1039
|
+
o.is_a?(PIntegerType) && (@to + 1 == o.from || o.to + 1 == @from)
|
1036
1040
|
end
|
1037
1041
|
|
1038
1042
|
# Concatenates this range with another range provided that the ranges intersect or
|
@@ -1063,7 +1067,8 @@ class PIntegerType < PNumericType
|
|
1063
1067
|
# Returns Float.Infinity if one end of the range is unbound
|
1064
1068
|
def size
|
1065
1069
|
return Float::INFINITY if @from == -Float::INFINITY || @to == Float::INFINITY
|
1066
|
-
|
1070
|
+
|
1071
|
+
1 + (to - from).abs
|
1067
1072
|
end
|
1068
1073
|
|
1069
1074
|
# Returns the range as an array ordered so the smaller number is always first.
|
@@ -1083,7 +1088,11 @@ class PIntegerType < PNumericType
|
|
1083
1088
|
# numbers are converted to zero
|
1084
1089
|
# @return [PIntegerType] a positive range
|
1085
1090
|
def to_size
|
1086
|
-
@from >= 0
|
1091
|
+
if @from >= 0
|
1092
|
+
self
|
1093
|
+
else
|
1094
|
+
PIntegerType.new(0, @to < 0 ? 0 : @to)
|
1095
|
+
end
|
1087
1096
|
end
|
1088
1097
|
|
1089
1098
|
def new_function
|
@@ -1095,17 +1104,17 @@ class PIntegerType < PNumericType
|
|
1095
1104
|
end
|
1096
1105
|
|
1097
1106
|
dispatch :from_args do
|
1098
|
-
param 'Convertible',
|
1107
|
+
param 'Convertible', :from
|
1099
1108
|
optional_param 'Radix', :radix
|
1100
1109
|
optional_param 'Boolean', :abs
|
1101
1110
|
end
|
1102
1111
|
|
1103
1112
|
dispatch :from_hash do
|
1104
|
-
param 'NamedArgs',
|
1113
|
+
param 'NamedArgs', :hash_args
|
1105
1114
|
end
|
1106
1115
|
|
1107
1116
|
argument_mismatch :on_error_hash do
|
1108
|
-
param 'Hash',
|
1117
|
+
param 'Hash', :hash_args
|
1109
1118
|
end
|
1110
1119
|
|
1111
1120
|
argument_mismatch :on_error do
|
@@ -1137,7 +1146,7 @@ class PIntegerType < PNumericType
|
|
1137
1146
|
begin
|
1138
1147
|
radix == :default ? Integer(from) : Integer(from, radix)
|
1139
1148
|
rescue TypeError => e
|
1140
|
-
raise TypeConversionError
|
1149
|
+
raise TypeConversionError, e.message
|
1141
1150
|
rescue ArgumentError => e
|
1142
1151
|
# Test for special case where there is whitespace between sign and number
|
1143
1152
|
match = Patterns::WS_BETWEEN_SIGN_AND_NUMBER.match(from)
|
@@ -1149,7 +1158,7 @@ class PIntegerType < PNumericType
|
|
1149
1158
|
# Ignored to retain original error
|
1150
1159
|
end
|
1151
1160
|
end
|
1152
|
-
raise TypeConversionError
|
1161
|
+
raise TypeConversionError, e.message
|
1153
1162
|
end
|
1154
1163
|
end
|
1155
1164
|
end
|
@@ -1177,12 +1186,12 @@ class PIntegerType < PNumericType
|
|
1177
1186
|
def assert_radix(radix)
|
1178
1187
|
case radix
|
1179
1188
|
when 2, 8, 10, 16
|
1189
|
+
# do nothing
|
1180
1190
|
else
|
1181
|
-
raise ArgumentError
|
1191
|
+
raise ArgumentError, _("Illegal radix: %{radix}, expected 2, 8, 10, 16, or default") % { radix: radix }
|
1182
1192
|
end
|
1183
1193
|
radix
|
1184
1194
|
end
|
1185
|
-
|
1186
1195
|
end
|
1187
1196
|
end
|
1188
1197
|
|
@@ -1235,7 +1244,7 @@ class PFloatType < PNumericType
|
|
1235
1244
|
end
|
1236
1245
|
|
1237
1246
|
dispatch :from_hash do
|
1238
|
-
param 'NamedArgs',
|
1247
|
+
param 'NamedArgs', :hash_args
|
1239
1248
|
end
|
1240
1249
|
|
1241
1250
|
argument_mismatch :on_error do
|
@@ -1272,7 +1281,7 @@ class PFloatType < PNumericType
|
|
1272
1281
|
end
|
1273
1282
|
Float(from)
|
1274
1283
|
rescue TypeError => e
|
1275
|
-
raise TypeConversionError
|
1284
|
+
raise TypeConversionError, e.message
|
1276
1285
|
rescue ArgumentError => e
|
1277
1286
|
# Test for special case where there is whitespace between sign and number
|
1278
1287
|
match = Patterns::WS_BETWEEN_SIGN_AND_NUMBER.match(from)
|
@@ -1284,7 +1293,7 @@ class PFloatType < PNumericType
|
|
1284
1293
|
# Ignored to retain original error
|
1285
1294
|
end
|
1286
1295
|
end
|
1287
|
-
raise TypeConversionError
|
1296
|
+
raise TypeConversionError, e.message
|
1288
1297
|
end
|
1289
1298
|
end
|
1290
1299
|
end
|
@@ -1308,11 +1317,10 @@ end
|
|
1308
1317
|
class PCollectionType < PAnyType
|
1309
1318
|
def self.register_ptype(loader, ir)
|
1310
1319
|
create_ptype(loader, ir, 'AnyType',
|
1311
|
-
|
1312
|
-
|
1313
|
-
|
1314
|
-
|
1315
|
-
)
|
1320
|
+
'size_type' => {
|
1321
|
+
KEY_TYPE => POptionalType.new(PTypeType.new(PIntegerType::DEFAULT)),
|
1322
|
+
KEY_VALUE => nil
|
1323
|
+
})
|
1316
1324
|
end
|
1317
1325
|
|
1318
1326
|
attr_reader :size_type
|
@@ -1365,7 +1373,6 @@ class PCollectionType < PAnyType
|
|
1365
1373
|
self.class == o.class && @size_type == o.size_type
|
1366
1374
|
end
|
1367
1375
|
|
1368
|
-
|
1369
1376
|
DEFAULT_SIZE = PIntegerType.new(0)
|
1370
1377
|
ZERO_SIZE = PIntegerType.new(0, 0)
|
1371
1378
|
NOT_EMPTY_SIZE = PIntegerType.new(1)
|
@@ -1377,22 +1384,22 @@ class PCollectionType < PAnyType
|
|
1377
1384
|
#
|
1378
1385
|
def _assignable?(o, guard)
|
1379
1386
|
case o
|
1380
|
-
|
1381
|
-
|
1382
|
-
|
1383
|
-
|
1384
|
-
|
1385
|
-
|
1386
|
-
|
1387
|
-
|
1388
|
-
|
1389
|
-
|
1390
|
-
|
1391
|
-
|
1392
|
-
|
1393
|
-
|
1394
|
-
|
1395
|
-
|
1387
|
+
when PCollectionType
|
1388
|
+
(@size_type || DEFAULT_SIZE).assignable?(o.size_type || DEFAULT_SIZE, guard)
|
1389
|
+
when PTupleType
|
1390
|
+
# compute the tuple's min/max size, and check if that size matches
|
1391
|
+
size_s = size_type || DEFAULT_SIZE
|
1392
|
+
size_o = o.size_type
|
1393
|
+
if size_o.nil?
|
1394
|
+
type_count = o.types.size
|
1395
|
+
size_o = PIntegerType.new(type_count, type_count)
|
1396
|
+
end
|
1397
|
+
size_s.assignable?(size_o)
|
1398
|
+
when PStructType
|
1399
|
+
from = to = o.elements.size
|
1400
|
+
(@size_type || DEFAULT_SIZE).assignable?(PIntegerType.new(from, to), guard)
|
1401
|
+
else
|
1402
|
+
false
|
1396
1403
|
end
|
1397
1404
|
end
|
1398
1405
|
end
|
@@ -1400,11 +1407,10 @@ end
|
|
1400
1407
|
class PIterableType < PTypeWithContainedType
|
1401
1408
|
def self.register_ptype(loader, ir)
|
1402
1409
|
create_ptype(loader, ir, 'AnyType',
|
1403
|
-
|
1404
|
-
|
1405
|
-
|
1406
|
-
|
1407
|
-
)
|
1410
|
+
'type' => {
|
1411
|
+
KEY_TYPE => POptionalType.new(PTypeType::DEFAULT),
|
1412
|
+
KEY_VALUE => nil
|
1413
|
+
})
|
1408
1414
|
end
|
1409
1415
|
|
1410
1416
|
def element_type
|
@@ -1460,11 +1466,10 @@ end
|
|
1460
1466
|
class PIteratorType < PTypeWithContainedType
|
1461
1467
|
def self.register_ptype(loader, ir)
|
1462
1468
|
create_ptype(loader, ir, 'AnyType',
|
1463
|
-
|
1464
|
-
|
1465
|
-
|
1466
|
-
|
1467
|
-
)
|
1469
|
+
'type' => {
|
1470
|
+
KEY_TYPE => POptionalType.new(PTypeType::DEFAULT),
|
1471
|
+
KEY_VALUE => nil
|
1472
|
+
})
|
1468
1473
|
end
|
1469
1474
|
|
1470
1475
|
def element_type
|
@@ -1498,10 +1503,10 @@ end
|
|
1498
1503
|
class PStringType < PScalarDataType
|
1499
1504
|
def self.register_ptype(loader, ir)
|
1500
1505
|
create_ptype(loader, ir, 'ScalarDataType',
|
1501
|
-
|
1502
|
-
|
1503
|
-
|
1504
|
-
|
1506
|
+
'size_type_or_value' => {
|
1507
|
+
KEY_TYPE => POptionalType.new(PVariantType.new([PStringType::DEFAULT, PTypeType.new(PIntegerType::DEFAULT)])),
|
1508
|
+
KEY_VALUE => nil
|
1509
|
+
})
|
1505
1510
|
end
|
1506
1511
|
|
1507
1512
|
attr_reader :size_type_or_value
|
@@ -1509,7 +1514,7 @@ class PStringType < PScalarDataType
|
|
1509
1514
|
def initialize(size_type_or_value, deprecated_multi_args = EMPTY_ARRAY)
|
1510
1515
|
unless deprecated_multi_args.empty?
|
1511
1516
|
if Puppet[:strict] != :off
|
1512
|
-
#TRANSLATORS 'PStringType#initialize' is a class and method name and should not be translated
|
1517
|
+
# TRANSLATORS 'PStringType#initialize' is a class and method name and should not be translated
|
1513
1518
|
Puppet.warn_once('deprecations', "PStringType#initialize_multi_args",
|
1514
1519
|
_("Passing more than one argument to PStringType#initialize is deprecated"))
|
1515
1520
|
end
|
@@ -1564,7 +1569,7 @@ class PStringType < PScalarDataType
|
|
1564
1569
|
# @api private
|
1565
1570
|
def values
|
1566
1571
|
if Puppet[:strict] != :off
|
1567
|
-
#TRANSLATORS 'PStringType#values' and '#value' are classes and method names and should not be translated
|
1572
|
+
# TRANSLATORS 'PStringType#values' and '#value' are classes and method names and should not be translated
|
1568
1573
|
Puppet.warn_once('deprecations', "PStringType#values", _("Method PStringType#values is deprecated. Use #value instead"))
|
1569
1574
|
end
|
1570
1575
|
@value.is_a?(String) ? [@value] : EMPTY_ARRAY
|
@@ -1575,9 +1580,10 @@ class PStringType < PScalarDataType
|
|
1575
1580
|
end
|
1576
1581
|
|
1577
1582
|
def derived_size_type
|
1578
|
-
|
1583
|
+
case @size_type_or_value
|
1584
|
+
when PIntegerType
|
1579
1585
|
@size_type_or_value
|
1580
|
-
|
1586
|
+
when String
|
1581
1587
|
sz = @size_type_or_value.size
|
1582
1588
|
PIntegerType.new(sz, sz)
|
1583
1589
|
else
|
@@ -1615,7 +1621,7 @@ class PStringType < PScalarDataType
|
|
1615
1621
|
NON_EMPTY = PStringType.new(PCollectionType::NOT_EMPTY_SIZE)
|
1616
1622
|
|
1617
1623
|
# Iterates over each character of the string
|
1618
|
-
ITERABLE_TYPE = PIterableType.new(PStringType.new(PIntegerType.new(1,1)))
|
1624
|
+
ITERABLE_TYPE = PIterableType.new(PStringType.new(PIntegerType.new(1, 1)))
|
1619
1625
|
|
1620
1626
|
protected
|
1621
1627
|
|
@@ -1672,13 +1678,12 @@ end
|
|
1672
1678
|
class PRegexpType < PScalarType
|
1673
1679
|
def self.register_ptype(loader, ir)
|
1674
1680
|
create_ptype(loader, ir, 'ScalarType',
|
1675
|
-
|
1676
|
-
|
1677
|
-
|
1678
|
-
|
1681
|
+
'pattern' => {
|
1682
|
+
KEY_TYPE => PVariantType.new([PUndefType::DEFAULT, PStringType::DEFAULT, PRegexpType::DEFAULT]),
|
1683
|
+
KEY_VALUE => nil
|
1684
|
+
})
|
1679
1685
|
end
|
1680
1686
|
|
1681
|
-
|
1682
1687
|
# Returns a new function that produces a Regexp instance
|
1683
1688
|
#
|
1684
1689
|
def self.new_function(type)
|
@@ -1712,7 +1717,7 @@ class PRegexpType < PScalarType
|
|
1712
1717
|
if options == 0
|
1713
1718
|
rx_string
|
1714
1719
|
else
|
1715
|
-
bld = '(?'
|
1720
|
+
bld = '(?'.dup
|
1716
1721
|
bld << 'i' if (options & Regexp::IGNORECASE) != 0
|
1717
1722
|
bld << 'm' if (options & Regexp::MULTILINE) != 0
|
1718
1723
|
bld << 'x' if (options & Regexp::EXTENDED) != 0
|
@@ -1748,7 +1753,7 @@ class PRegexpType < PScalarType
|
|
1748
1753
|
self.class == o.class && @pattern == o.pattern
|
1749
1754
|
end
|
1750
1755
|
|
1751
|
-
def instance?(o, guard=nil)
|
1756
|
+
def instance?(o, guard = nil)
|
1752
1757
|
o.is_a?(Regexp) && @pattern.nil? || regexp == o
|
1753
1758
|
end
|
1754
1759
|
|
@@ -1804,6 +1809,7 @@ class PPatternType < PScalarDataType
|
|
1804
1809
|
#
|
1805
1810
|
def _assignable?(o, guard)
|
1806
1811
|
return true if self == o
|
1812
|
+
|
1807
1813
|
case o
|
1808
1814
|
when PStringType
|
1809
1815
|
v = o.value
|
@@ -1814,7 +1820,7 @@ class PPatternType < PScalarDataType
|
|
1814
1820
|
else
|
1815
1821
|
# the string in String type must match one of the patterns in Pattern type,
|
1816
1822
|
# or Pattern represents all Patterns == all Strings
|
1817
|
-
regexps = @patterns.map
|
1823
|
+
regexps = @patterns.map(&:regexp)
|
1818
1824
|
regexps.empty? || regexps.any? { |re| re.match(v) }
|
1819
1825
|
end
|
1820
1826
|
when PEnumType
|
@@ -1825,8 +1831,8 @@ class PPatternType < PScalarDataType
|
|
1825
1831
|
else
|
1826
1832
|
# all strings in String/Enum type must match one of the patterns in Pattern type,
|
1827
1833
|
# or Pattern represents all Patterns == all Strings
|
1828
|
-
regexps = @patterns.map
|
1829
|
-
regexps.empty? || o.values.all? { |s| regexps.any? {|re| re.match(s) } }
|
1834
|
+
regexps = @patterns.map(&:regexp)
|
1835
|
+
regexps.empty? || o.values.all? { |s| regexps.any? { |re| re.match(s) } }
|
1830
1836
|
end
|
1831
1837
|
when PPatternType
|
1832
1838
|
@patterns.empty?
|
@@ -1868,7 +1874,7 @@ class PBooleanType < PScalarDataType
|
|
1868
1874
|
def self.new_function(type)
|
1869
1875
|
@new_function ||= Puppet::Functions.create_loaded_function(:new_boolean, type.loader) do
|
1870
1876
|
dispatch :from_args do
|
1871
|
-
param "Variant[Integer, Float, Boolean, Enum['false','true','yes','no','y','n',true]]",
|
1877
|
+
param "Variant[Integer, Float, Boolean, Enum['false','true','yes','no','y','n',true]]", :from
|
1872
1878
|
end
|
1873
1879
|
|
1874
1880
|
argument_mismatch :on_error do
|
@@ -1878,10 +1884,8 @@ class PBooleanType < PScalarDataType
|
|
1878
1884
|
def from_args(from)
|
1879
1885
|
from = from.downcase if from.is_a?(String)
|
1880
1886
|
case from
|
1881
|
-
when Float
|
1882
|
-
from
|
1883
|
-
when Integer
|
1884
|
-
from != 0
|
1887
|
+
when Float, Integer
|
1888
|
+
!from.zero?
|
1885
1889
|
when false, 'false', 'no', 'n'
|
1886
1890
|
false
|
1887
1891
|
else
|
@@ -1919,9 +1923,9 @@ end
|
|
1919
1923
|
#
|
1920
1924
|
class PStructElement < TypedModelObject
|
1921
1925
|
def self.register_ptype(loader, ir)
|
1922
|
-
@type = Pcore
|
1923
|
-
|
1924
|
-
|
1926
|
+
@type = Pcore.create_object_type(loader, ir, self, 'Pcore::StructElement', nil,
|
1927
|
+
'key_type' => PTypeType::DEFAULT,
|
1928
|
+
'value_type' => PTypeType::DEFAULT)
|
1925
1929
|
end
|
1926
1930
|
|
1927
1931
|
attr_accessor :key_type, :value_type
|
@@ -1963,7 +1967,7 @@ class PStructElement < TypedModelObject
|
|
1963
1967
|
end
|
1964
1968
|
|
1965
1969
|
def <=>(o)
|
1966
|
-
|
1970
|
+
name <=> o.name
|
1967
1971
|
end
|
1968
1972
|
|
1969
1973
|
def eql?(o)
|
@@ -2025,9 +2029,11 @@ class PStructType < PAnyType
|
|
2025
2029
|
end
|
2026
2030
|
end
|
2027
2031
|
|
2032
|
+
# rubocop:disable Naming/MemoizedInstanceVariableName
|
2028
2033
|
def hashed_elements
|
2029
|
-
@hashed ||= @elements.
|
2034
|
+
@hashed ||= @elements.each_with_object({}) { |e, memo| memo[e.name] = e; }
|
2030
2035
|
end
|
2036
|
+
# rubocop:enable Naming/MemoizedInstanceVariableName
|
2031
2037
|
|
2032
2038
|
def hash
|
2033
2039
|
@elements.hash
|
@@ -2043,9 +2049,11 @@ class PStructType < PAnyType
|
|
2043
2049
|
else
|
2044
2050
|
PIterableType.new(
|
2045
2051
|
PTupleType.new([
|
2046
|
-
|
2047
|
-
|
2048
|
-
|
2052
|
+
PVariantType.maybe_create(@elements.map(&:key_type)),
|
2053
|
+
PVariantType.maybe_create(@elements.map(&:value_type))
|
2054
|
+
],
|
2055
|
+
PHashType::KEY_PAIR_TUPLE_SIZE)
|
2056
|
+
)
|
2049
2057
|
end
|
2050
2058
|
end
|
2051
2059
|
|
@@ -2070,6 +2078,7 @@ class PStructType < PAnyType
|
|
2070
2078
|
def instance?(o, guard = nil)
|
2071
2079
|
# The inferred type of a class derived from Hash is either Runtime or Object. It's not assignable to the Struct type.
|
2072
2080
|
return false unless o.instance_of?(Hash)
|
2081
|
+
|
2073
2082
|
matched = 0
|
2074
2083
|
@elements.all? do |e|
|
2075
2084
|
key = e.name
|
@@ -2096,7 +2105,8 @@ class PStructType < PAnyType
|
|
2096
2105
|
|
2097
2106
|
# @api private
|
2098
2107
|
def _assignable?(o, guard)
|
2099
|
-
|
2108
|
+
case o
|
2109
|
+
when Types::PStructType
|
2100
2110
|
h2 = o.hashed_elements
|
2101
2111
|
matched = 0
|
2102
2112
|
elements.all? do |e1|
|
@@ -2108,7 +2118,7 @@ class PStructType < PAnyType
|
|
2108
2118
|
e1.key_type.assignable?(e2.key_type, guard) && e1.value_type.assignable?(e2.value_type, guard)
|
2109
2119
|
end
|
2110
2120
|
end && matched == h2.size
|
2111
|
-
|
2121
|
+
when Types::PHashType
|
2112
2122
|
required = 0
|
2113
2123
|
required_elements_assignable = elements.all? do |e|
|
2114
2124
|
key_type = e.key_type
|
@@ -2145,12 +2155,11 @@ class PTupleType < PAnyType
|
|
2145
2155
|
|
2146
2156
|
def self.register_ptype(loader, ir)
|
2147
2157
|
create_ptype(loader, ir, 'AnyType',
|
2148
|
-
|
2149
|
-
|
2150
|
-
|
2151
|
-
|
2152
|
-
|
2153
|
-
)
|
2158
|
+
'types' => PArrayType.new(PTypeType::DEFAULT),
|
2159
|
+
'size_type' => {
|
2160
|
+
KEY_TYPE => POptionalType.new(PTypeType.new(PIntegerType::DEFAULT)),
|
2161
|
+
KEY_VALUE => nil
|
2162
|
+
})
|
2154
2163
|
end
|
2155
2164
|
|
2156
2165
|
# If set, describes min and max required of the given types - if max > size of
|
@@ -2243,6 +2252,7 @@ class PTupleType < PAnyType
|
|
2243
2252
|
def instance?(o, guard = nil)
|
2244
2253
|
# The inferred type of a class derived from Array is either Runtime or Object. It's not assignable to the Tuple type.
|
2245
2254
|
return false unless o.instance_of?(Array)
|
2255
|
+
|
2246
2256
|
if @size_type
|
2247
2257
|
return false unless @size_type.instance?(o.size, guard)
|
2248
2258
|
else
|
@@ -2279,11 +2289,12 @@ class PTupleType < PAnyType
|
|
2279
2289
|
if @size_type.nil?
|
2280
2290
|
return [1, 1]
|
2281
2291
|
end
|
2292
|
+
|
2282
2293
|
types_size = @types.size
|
2283
2294
|
from, to = @size_type.range
|
2284
|
-
min = from - (types_size-1)
|
2295
|
+
min = from - (types_size - 1)
|
2285
2296
|
min = min <= 0 ? 0 : min
|
2286
|
-
max = to - (types_size-1)
|
2297
|
+
max = to - (types_size - 1)
|
2287
2298
|
[min, max]
|
2288
2299
|
end
|
2289
2300
|
|
@@ -2309,15 +2320,18 @@ class PTupleType < PAnyType
|
|
2309
2320
|
def _assignable?(o, guard)
|
2310
2321
|
return true if self == o
|
2311
2322
|
return false unless o.is_a?(PTupleType) || o.is_a?(PArrayType)
|
2323
|
+
|
2312
2324
|
s_types = types
|
2313
2325
|
size_s = size_type || PIntegerType.new(*size_range)
|
2314
2326
|
|
2315
2327
|
if o.is_a?(PTupleType)
|
2316
2328
|
size_o = o.size_type || PIntegerType.new(*o.size_range)
|
2317
2329
|
return false unless size_s.assignable?(size_o, guard)
|
2330
|
+
|
2318
2331
|
unless s_types.empty?
|
2319
2332
|
o_types = o.types
|
2320
2333
|
return size_s.numeric_from == 0 if o_types.empty?
|
2334
|
+
|
2321
2335
|
o_types.size.times do |index|
|
2322
2336
|
return false unless (s_types[index] || s_types[-1]).assignable?(o_types[index], guard)
|
2323
2337
|
end
|
@@ -2325,12 +2339,14 @@ class PTupleType < PAnyType
|
|
2325
2339
|
else
|
2326
2340
|
size_o = o.size_type || PCollectionType::DEFAULT_SIZE
|
2327
2341
|
return false unless size_s.assignable?(size_o, guard)
|
2342
|
+
|
2328
2343
|
unless s_types.empty?
|
2329
2344
|
o_entry = o.element_type
|
2330
2345
|
# Array of anything can not be assigned (unless tuple is tuple of anything) - this case
|
2331
2346
|
# was handled at the top of this method.
|
2332
2347
|
#
|
2333
2348
|
return false if o_entry.nil?
|
2349
|
+
|
2334
2350
|
[s_types.size, size_o.range[1]].min.times { |index| return false unless (s_types[index] || s_types[-1]).assignable?(o_entry, guard) }
|
2335
2351
|
end
|
2336
2352
|
end
|
@@ -2343,19 +2359,18 @@ end
|
|
2343
2359
|
class PCallableType < PAnyType
|
2344
2360
|
def self.register_ptype(loader, ir)
|
2345
2361
|
create_ptype(loader, ir, 'AnyType',
|
2346
|
-
|
2347
|
-
|
2348
|
-
|
2349
|
-
|
2350
|
-
|
2351
|
-
|
2352
|
-
|
2353
|
-
|
2354
|
-
|
2355
|
-
|
2356
|
-
|
2357
|
-
|
2358
|
-
)
|
2362
|
+
'param_types' => {
|
2363
|
+
KEY_TYPE => POptionalType.new(PTypeType.new(PTupleType::DEFAULT)),
|
2364
|
+
KEY_VALUE => nil
|
2365
|
+
},
|
2366
|
+
'block_type' => {
|
2367
|
+
KEY_TYPE => POptionalType.new(PTypeType.new(PCallableType::DEFAULT)),
|
2368
|
+
KEY_VALUE => nil
|
2369
|
+
},
|
2370
|
+
'return_type' => {
|
2371
|
+
KEY_TYPE => POptionalType.new(PTypeType::DEFAULT),
|
2372
|
+
KEY_VALUE => PAnyType::DEFAULT
|
2373
|
+
})
|
2359
2374
|
end
|
2360
2375
|
|
2361
2376
|
# @return [PAnyType] The type for the values returned by this callable. Returns `nil` if return value is unconstrained
|
@@ -2421,8 +2436,9 @@ class PCallableType < PAnyType
|
|
2421
2436
|
# nil param_types and compatible return type means other Callable is assignable
|
2422
2437
|
return true if @param_types.nil?
|
2423
2438
|
return false unless @param_types.instance?(args)
|
2439
|
+
|
2424
2440
|
if @block_type.nil?
|
2425
|
-
block
|
2441
|
+
block.nil?
|
2426
2442
|
else
|
2427
2443
|
@block_type.instance?(block)
|
2428
2444
|
end
|
@@ -2434,7 +2450,7 @@ class PCallableType < PAnyType
|
|
2434
2450
|
required_callable_t.assignable?(self, guard)
|
2435
2451
|
end
|
2436
2452
|
|
2437
|
-
def kind_of_callable?(optional=true, guard = nil)
|
2453
|
+
def kind_of_callable?(optional = true, guard = nil)
|
2438
2454
|
true
|
2439
2455
|
end
|
2440
2456
|
|
@@ -2454,11 +2470,11 @@ class PCallableType < PAnyType
|
|
2454
2470
|
def block_range
|
2455
2471
|
case block_type
|
2456
2472
|
when POptionalType
|
2457
|
-
[0,1]
|
2473
|
+
[0, 1]
|
2458
2474
|
when PVariantType, PCallableType
|
2459
|
-
[1,1]
|
2475
|
+
[1, 1]
|
2460
2476
|
else
|
2461
|
-
[0,0]
|
2477
|
+
[0, 0]
|
2462
2478
|
end
|
2463
2479
|
end
|
2464
2480
|
|
@@ -2493,7 +2509,8 @@ class PCallableType < PAnyType
|
|
2493
2509
|
# (it's lower bound), not its upper bound
|
2494
2510
|
other_param_types = o.param_types
|
2495
2511
|
|
2496
|
-
return false if other_param_types.nil? ||
|
2512
|
+
return false if other_param_types.nil? || !other_param_types.assignable?(@param_types, guard)
|
2513
|
+
|
2497
2514
|
# names are ignored, they are just information
|
2498
2515
|
# Blocks must be compatible
|
2499
2516
|
this_block_t = @block_type || PUndefType::DEFAULT
|
@@ -2505,14 +2522,12 @@ end
|
|
2505
2522
|
# @api public
|
2506
2523
|
#
|
2507
2524
|
class PArrayType < PCollectionType
|
2508
|
-
|
2509
2525
|
def self.register_ptype(loader, ir)
|
2510
2526
|
create_ptype(loader, ir, 'CollectionType',
|
2511
|
-
|
2512
|
-
|
2513
|
-
|
2514
|
-
|
2515
|
-
)
|
2527
|
+
'element_type' => {
|
2528
|
+
KEY_TYPE => POptionalType.new(PTypeType::DEFAULT),
|
2529
|
+
KEY_VALUE => PAnyType::DEFAULT
|
2530
|
+
})
|
2516
2531
|
end
|
2517
2532
|
|
2518
2533
|
attr_reader :element_type
|
@@ -2573,7 +2588,8 @@ class PArrayType < PCollectionType
|
|
2573
2588
|
def instance?(o, guard = nil)
|
2574
2589
|
# The inferred type of a class derived from Array is either Runtime or Object. It's not assignable to the Array type.
|
2575
2590
|
return false unless o.instance_of?(Array)
|
2576
|
-
return false unless o.all? {|element| @element_type.instance?(element, guard) }
|
2591
|
+
return false unless o.all? { |element| @element_type.instance?(element, guard) }
|
2592
|
+
|
2577
2593
|
size_t = size_type
|
2578
2594
|
size_t.nil? || size_t.instance?(o.size, guard)
|
2579
2595
|
end
|
@@ -2586,7 +2602,6 @@ class PArrayType < PCollectionType
|
|
2586
2602
|
#
|
2587
2603
|
def self.new_function(type)
|
2588
2604
|
@new_function ||= Puppet::Functions.create_loaded_function(:new_array, type.loader) do
|
2589
|
-
|
2590
2605
|
dispatch :to_array do
|
2591
2606
|
param 'Variant[Array,Hash,Binary,Iterable]', :from
|
2592
2607
|
optional_param 'Boolean[false]', :wrap
|
@@ -2635,7 +2650,8 @@ class PArrayType < PCollectionType
|
|
2635
2650
|
# Array is assignable if o is an Array and o's element type is assignable, or if o is a Tuple
|
2636
2651
|
# @api private
|
2637
2652
|
def _assignable?(o, guard)
|
2638
|
-
|
2653
|
+
case o
|
2654
|
+
when PTupleType
|
2639
2655
|
o_types = o.types
|
2640
2656
|
size_s = size_type || DEFAULT_SIZE
|
2641
2657
|
size_o = o.size_type
|
@@ -2644,7 +2660,7 @@ class PArrayType < PCollectionType
|
|
2644
2660
|
size_o = PIntegerType.new(type_count, type_count)
|
2645
2661
|
end
|
2646
2662
|
size_s.assignable?(size_o) && o_types.all? { |ot| @element_type.assignable?(ot, guard) }
|
2647
|
-
|
2663
|
+
when PArrayType
|
2648
2664
|
super && @element_type.assignable?(o.element_type, guard)
|
2649
2665
|
else
|
2650
2666
|
false
|
@@ -2655,18 +2671,16 @@ end
|
|
2655
2671
|
# @api public
|
2656
2672
|
#
|
2657
2673
|
class PHashType < PCollectionType
|
2658
|
-
|
2659
2674
|
def self.register_ptype(loader, ir)
|
2660
2675
|
create_ptype(loader, ir, 'CollectionType',
|
2661
|
-
|
2662
|
-
|
2663
|
-
|
2664
|
-
|
2665
|
-
|
2666
|
-
|
2667
|
-
|
2668
|
-
|
2669
|
-
)
|
2676
|
+
'key_type' => {
|
2677
|
+
KEY_TYPE => POptionalType.new(PTypeType::DEFAULT),
|
2678
|
+
KEY_VALUE => PAnyType::DEFAULT
|
2679
|
+
},
|
2680
|
+
'value_type' => {
|
2681
|
+
KEY_TYPE => POptionalType.new(PTypeType::DEFAULT),
|
2682
|
+
KEY_VALUE => PAnyType::DEFAULT
|
2683
|
+
})
|
2670
2684
|
end
|
2671
2685
|
|
2672
2686
|
attr_accessor :key_type, :value_type
|
@@ -2690,9 +2704,9 @@ class PHashType < PCollectionType
|
|
2690
2704
|
|
2691
2705
|
def element_type
|
2692
2706
|
if Puppet[:strict] != :off
|
2693
|
-
#TRANSLATOR 'Puppet::Pops::Types::PHashType#element_type' and '#value_type' are class and method names and should not be translated
|
2707
|
+
# TRANSLATOR 'Puppet::Pops::Types::PHashType#element_type' and '#value_type' are class and method names and should not be translated
|
2694
2708
|
Puppet.warn_once('deprecations', 'Puppet::Pops::Types::PHashType#element_type',
|
2695
|
-
|
2709
|
+
_('Puppet::Pops::Types::PHashType#element_type is deprecated, use #value_type instead'))
|
2696
2710
|
end
|
2697
2711
|
@value_type
|
2698
2712
|
end
|
@@ -2726,7 +2740,8 @@ class PHashType < PCollectionType
|
|
2726
2740
|
def instance?(o, guard = nil)
|
2727
2741
|
# The inferred type of a class derived from Hash is either Runtime or Object. It's not assignable to the Hash type.
|
2728
2742
|
return false unless o.instance_of?(Hash)
|
2729
|
-
|
2743
|
+
|
2744
|
+
if o.keys.all? { |key| @key_type.instance?(key, guard) } && o.values.all? { |value| @value_type.instance?(value, guard) }
|
2730
2745
|
size_t = size_type
|
2731
2746
|
size_t.nil? || size_t.instance?(o.size, guard)
|
2732
2747
|
else
|
@@ -2762,8 +2777,9 @@ class PHashType < PCollectionType
|
|
2762
2777
|
|
2763
2778
|
def self.array_as_hash(value)
|
2764
2779
|
return value unless value.is_a?(Array)
|
2780
|
+
|
2765
2781
|
result = {}
|
2766
|
-
value.each_with_index {|v, idx| result[idx] = array_as_hash(v) }
|
2782
|
+
value.each_with_index { |v, idx| result[idx] = array_as_hash(v) }
|
2767
2783
|
result
|
2768
2784
|
end
|
2769
2785
|
|
@@ -2783,21 +2799,22 @@ class PHashType < PCollectionType
|
|
2783
2799
|
end
|
2784
2800
|
|
2785
2801
|
dispatch :from_tuples do
|
2786
|
-
param 'KeyValueArray',
|
2802
|
+
param 'KeyValueArray', :from
|
2787
2803
|
end
|
2788
2804
|
|
2789
2805
|
dispatch :from_array do
|
2790
|
-
param 'Any',
|
2806
|
+
param 'Any', :from
|
2791
2807
|
end
|
2792
2808
|
|
2793
2809
|
def from_tuples(tuple_array)
|
2794
|
-
|
2810
|
+
tuple_array.to_h
|
2795
2811
|
end
|
2796
2812
|
|
2797
2813
|
def from_tree(tuple_array, build_option = nil)
|
2798
2814
|
if build_option.nil?
|
2799
2815
|
return from_tuples(tuple_array)
|
2800
2816
|
end
|
2817
|
+
|
2801
2818
|
# only remaining possible options is 'tree' or 'hash_tree'
|
2802
2819
|
|
2803
2820
|
all_hashes = build_option == 'hash_tree'
|
@@ -2810,13 +2827,13 @@ class PHashType < PCollectionType
|
|
2810
2827
|
# An array must be changed to a hash first as this is the root
|
2811
2828
|
# (Cannot return an array from a Hash.new)
|
2812
2829
|
if value.is_a?(Array)
|
2813
|
-
value.each_with_index {|v, idx| result[idx] = v }
|
2830
|
+
value.each_with_index { |v, idx| result[idx] = v }
|
2814
2831
|
else
|
2815
2832
|
result.merge!(value)
|
2816
2833
|
end
|
2817
2834
|
else
|
2818
|
-
r = path[0..-2].reduce(result) {|memo, idx| (memo.is_a?(Array) || memo.has_key?(idx)) ? memo[idx] : memo[idx] = {}}
|
2819
|
-
r[path[-1]]= (all_hashes ? PHashType.array_as_hash(value) : value)
|
2835
|
+
r = path[0..-2].reduce(result) { |memo, idx| (memo.is_a?(Array) || memo.has_key?(idx)) ? memo[idx] : memo[idx] = {} }
|
2836
|
+
r[path[-1]] = (all_hashes ? PHashType.array_as_hash(value) : value)
|
2820
2837
|
end
|
2821
2838
|
end
|
2822
2839
|
result
|
@@ -2828,9 +2845,10 @@ class PHashType < PCollectionType
|
|
2828
2845
|
if from.size == 0
|
2829
2846
|
{}
|
2830
2847
|
else
|
2831
|
-
unless from.size
|
2832
|
-
raise TypeConversionError
|
2848
|
+
unless from.size.even?
|
2849
|
+
raise TypeConversionError, _('odd number of arguments for Hash')
|
2833
2850
|
end
|
2851
|
+
|
2834
2852
|
Hash[*from]
|
2835
2853
|
end
|
2836
2854
|
when Hash
|
@@ -2840,7 +2858,7 @@ class PHashType < PCollectionType
|
|
2840
2858
|
Hash[*Iterable.on(from).to_a]
|
2841
2859
|
else
|
2842
2860
|
t = TypeCalculator.singleton.infer(from).generalize
|
2843
|
-
raise TypeConversionError
|
2861
|
+
raise TypeConversionError, _("Value of type %{type} cannot be converted to Hash") % { type: t }
|
2844
2862
|
end
|
2845
2863
|
end
|
2846
2864
|
end
|
@@ -2848,7 +2866,7 @@ class PHashType < PCollectionType
|
|
2848
2866
|
end
|
2849
2867
|
|
2850
2868
|
DEFAULT = PHashType.new(nil, nil)
|
2851
|
-
KEY_PAIR_TUPLE_SIZE = PIntegerType.new(2,2)
|
2869
|
+
KEY_PAIR_TUPLE_SIZE = PIntegerType.new(2, 2)
|
2852
2870
|
DEFAULT_KEY_PAIR_TUPLE = PTupleType.new([PUnitType::DEFAULT, PUnitType::DEFAULT], KEY_PAIR_TUPLE_SIZE)
|
2853
2871
|
EMPTY = PHashType.new(PUnitType::DEFAULT, PUnitType::DEFAULT, PIntegerType.new(0, 0))
|
2854
2872
|
|
@@ -2862,6 +2880,7 @@ class PHashType < PCollectionType
|
|
2862
2880
|
size_s = size_type
|
2863
2881
|
return true if (size_s.nil? || size_s.from == 0) && o.is_the_empty_hash?
|
2864
2882
|
return false unless @key_type.assignable?(o.key_type, guard) && @value_type.assignable?(o.value_type, guard)
|
2883
|
+
|
2865
2884
|
super
|
2866
2885
|
when PStructType
|
2867
2886
|
# hash must accept String as key type
|
@@ -2869,7 +2888,7 @@ class PHashType < PCollectionType
|
|
2869
2888
|
# hash must accept the size of the struct
|
2870
2889
|
o_elements = o.elements
|
2871
2890
|
(size_type || DEFAULT_SIZE).instance?(o_elements.size, guard) &&
|
2872
|
-
|
2891
|
+
o_elements.all? { |e| @key_type.instance?(e.name, guard) && @value_type.assignable?(e.value_type, guard) }
|
2873
2892
|
else
|
2874
2893
|
false
|
2875
2894
|
end
|
@@ -2994,6 +3013,7 @@ class PVariantType < PAnyType
|
|
2994
3013
|
@types.reduce(-1) do |memo, type|
|
2995
3014
|
ri = type.really_instance?(o, guard)
|
2996
3015
|
break ri if ri > 0
|
3016
|
+
|
2997
3017
|
ri > memo ? ri : memo
|
2998
3018
|
end
|
2999
3019
|
end
|
@@ -3017,6 +3037,7 @@ class PVariantType < PAnyType
|
|
3017
3037
|
return super unless o.is_a?(PVariantType)
|
3018
3038
|
# If empty, all Variant types match irrespective of the types they hold (including being empty)
|
3019
3039
|
return true if types.empty?
|
3040
|
+
|
3020
3041
|
# Since this variant is not empty, an empty Variant cannot match, because it matches nothing
|
3021
3042
|
# otherwise all types in o must be assignable to this
|
3022
3043
|
!o.types.empty? && o.types.all? { |vt| super(vt, guard) }
|
@@ -3033,11 +3054,11 @@ class PVariantType < PAnyType
|
|
3033
3054
|
# @api private
|
3034
3055
|
def swap_not_undefs(array)
|
3035
3056
|
if array.size > 1
|
3036
|
-
parts = array.partition {|t| t.is_a?(PNotUndefType) }
|
3057
|
+
parts = array.partition { |t| t.is_a?(PNotUndefType) }
|
3037
3058
|
not_undefs = parts[0]
|
3038
3059
|
if not_undefs.size > 1
|
3039
3060
|
others = parts[1]
|
3040
|
-
others <<
|
3061
|
+
others << PNotUndefType.new(PVariantType.maybe_create(not_undefs.map(&:type)).normalize)
|
3041
3062
|
array = others
|
3042
3063
|
end
|
3043
3064
|
end
|
@@ -3048,25 +3069,25 @@ class PVariantType < PAnyType
|
|
3048
3069
|
def merge_enums(array)
|
3049
3070
|
# Merge case sensitive enums and strings
|
3050
3071
|
if array.size > 1
|
3051
|
-
parts = array.partition {|t| t.is_a?(PEnumType) && !t.values.empty? && !t.case_insensitive? || t.is_a?(PStringType) && !t.value.nil? }
|
3072
|
+
parts = array.partition { |t| t.is_a?(PEnumType) && !t.values.empty? && !t.case_insensitive? || t.is_a?(PStringType) && !t.value.nil? }
|
3052
3073
|
enums = parts[0]
|
3053
3074
|
if enums.size > 1
|
3054
3075
|
others = parts[1]
|
3055
|
-
others <<
|
3076
|
+
others << PEnumType.new(enums.map { |enum| enum.is_a?(PStringType) ? enum.value : enum.values }.flatten.uniq)
|
3056
3077
|
array = others
|
3057
3078
|
end
|
3058
3079
|
end
|
3059
3080
|
|
3060
3081
|
# Merge case insensitive enums
|
3061
3082
|
if array.size > 1
|
3062
|
-
parts = array.partition {|t| t.is_a?(PEnumType) && !t.values.empty? && t.case_insensitive? }
|
3083
|
+
parts = array.partition { |t| t.is_a?(PEnumType) && !t.values.empty? && t.case_insensitive? }
|
3063
3084
|
enums = parts[0]
|
3064
3085
|
if enums.size > 1
|
3065
3086
|
others = parts[1]
|
3066
3087
|
values = []
|
3067
|
-
enums.each { |enum| enum.values.each { |value| values << value.downcase }}
|
3088
|
+
enums.each { |enum| enum.values.each { |value| values << value.downcase } }
|
3068
3089
|
values.uniq!
|
3069
|
-
others <<
|
3090
|
+
others << PEnumType.new(values, true)
|
3070
3091
|
array = others
|
3071
3092
|
end
|
3072
3093
|
end
|
@@ -3076,11 +3097,11 @@ class PVariantType < PAnyType
|
|
3076
3097
|
# @api private
|
3077
3098
|
def merge_patterns(array)
|
3078
3099
|
if array.size > 1
|
3079
|
-
parts = array.partition {|t| t.is_a?(PPatternType) }
|
3100
|
+
parts = array.partition { |t| t.is_a?(PPatternType) }
|
3080
3101
|
patterns = parts[0]
|
3081
3102
|
if patterns.size > 1
|
3082
3103
|
others = parts[1]
|
3083
|
-
others <<
|
3104
|
+
others << PPatternType.new(patterns.map(&:patterns).flatten.uniq)
|
3084
3105
|
array = others
|
3085
3106
|
end
|
3086
3107
|
end
|
@@ -3090,7 +3111,7 @@ class PVariantType < PAnyType
|
|
3090
3111
|
# @api private
|
3091
3112
|
def merge_numbers(clazz, array)
|
3092
3113
|
if array.size > 1
|
3093
|
-
parts = array.partition {|t| t.is_a?(clazz) }
|
3114
|
+
parts = array.partition { |t| t.is_a?(clazz) }
|
3094
3115
|
ranges = parts[0]
|
3095
3116
|
array = merge_ranges(ranges) + parts[1] if ranges.size > 1
|
3096
3117
|
end
|
@@ -3099,7 +3120,7 @@ class PVariantType < PAnyType
|
|
3099
3120
|
|
3100
3121
|
def merge_version_ranges(array)
|
3101
3122
|
if array.size > 1
|
3102
|
-
parts = array.partition {|t| t.is_a?(PSemVerType) }
|
3123
|
+
parts = array.partition { |t| t.is_a?(PSemVerType) }
|
3103
3124
|
ranges = parts[0]
|
3104
3125
|
array = [PSemVerType.new(ranges.map(&:ranges).flatten)] + parts[1] if ranges.size > 1
|
3105
3126
|
end
|
@@ -3142,6 +3163,7 @@ class PCatalogEntryType < PAnyType
|
|
3142
3163
|
end
|
3143
3164
|
|
3144
3165
|
protected
|
3166
|
+
|
3145
3167
|
# @api private
|
3146
3168
|
def _assignable?(o, guard)
|
3147
3169
|
o.is_a?(PCatalogEntryType)
|
@@ -3156,11 +3178,10 @@ class PClassType < PCatalogEntryType
|
|
3156
3178
|
|
3157
3179
|
def self.register_ptype(loader, ir)
|
3158
3180
|
create_ptype(loader, ir, 'CatalogEntryType',
|
3159
|
-
|
3160
|
-
|
3161
|
-
|
3162
|
-
|
3163
|
-
)
|
3181
|
+
'class_name' => {
|
3182
|
+
KEY_TYPE => POptionalType.new(PStringType::NON_EMPTY),
|
3183
|
+
KEY_VALUE => nil
|
3184
|
+
})
|
3164
3185
|
end
|
3165
3186
|
|
3166
3187
|
def initialize(class_name)
|
@@ -3170,6 +3191,7 @@ class PClassType < PCatalogEntryType
|
|
3170
3191
|
def hash
|
3171
3192
|
11 ^ @class_name.hash
|
3172
3193
|
end
|
3194
|
+
|
3173
3195
|
def eql?(o)
|
3174
3196
|
self.class == o.class && @class_name == o.class_name
|
3175
3197
|
end
|
@@ -3183,6 +3205,7 @@ class PClassType < PCatalogEntryType
|
|
3183
3205
|
return false unless o.is_a?(PClassType)
|
3184
3206
|
# Class = Class[name}, Class[name] != Class
|
3185
3207
|
return true if @class_name.nil?
|
3208
|
+
|
3186
3209
|
# Class[name] = Class[name]
|
3187
3210
|
@class_name == o.class_name
|
3188
3211
|
end
|
@@ -3191,23 +3214,20 @@ end
|
|
3191
3214
|
# For backward compatibility
|
3192
3215
|
PHostClassType = PClassType
|
3193
3216
|
|
3194
|
-
|
3195
3217
|
# Represents a Resource Type in the Puppet Language
|
3196
3218
|
# @api public
|
3197
3219
|
#
|
3198
3220
|
class PResourceType < PCatalogEntryType
|
3199
|
-
|
3200
3221
|
def self.register_ptype(loader, ir)
|
3201
3222
|
create_ptype(loader, ir, 'CatalogEntryType',
|
3202
|
-
|
3203
|
-
|
3204
|
-
|
3205
|
-
|
3206
|
-
|
3207
|
-
|
3208
|
-
|
3209
|
-
|
3210
|
-
)
|
3223
|
+
'type_name' => {
|
3224
|
+
KEY_TYPE => POptionalType.new(PStringType::NON_EMPTY),
|
3225
|
+
KEY_VALUE => nil
|
3226
|
+
},
|
3227
|
+
'title' => {
|
3228
|
+
KEY_TYPE => POptionalType.new(PStringType::NON_EMPTY),
|
3229
|
+
KEY_VALUE => nil
|
3230
|
+
})
|
3211
3231
|
end
|
3212
3232
|
|
3213
3233
|
attr_reader :type_name, :title, :downcased_name
|
@@ -3241,22 +3261,20 @@ end
|
|
3241
3261
|
# @api public
|
3242
3262
|
#
|
3243
3263
|
class POptionalType < PTypeWithContainedType
|
3244
|
-
|
3245
3264
|
def self.register_ptype(loader, ir)
|
3246
3265
|
create_ptype(loader, ir, 'AnyType',
|
3247
|
-
|
3248
|
-
|
3249
|
-
|
3250
|
-
|
3251
|
-
)
|
3266
|
+
'type' => {
|
3267
|
+
KEY_TYPE => POptionalType.new(PTypeType::DEFAULT),
|
3268
|
+
KEY_VALUE => nil
|
3269
|
+
})
|
3252
3270
|
end
|
3253
3271
|
|
3254
3272
|
def optional_type
|
3255
3273
|
@type
|
3256
3274
|
end
|
3257
3275
|
|
3258
|
-
def kind_of_callable?(optional=true, guard = nil)
|
3259
|
-
|
3276
|
+
def kind_of_callable?(optional = true, guard = nil)
|
3277
|
+
optional && !@type.nil? && @type.kind_of_callable?(optional, guard)
|
3260
3278
|
end
|
3261
3279
|
|
3262
3280
|
def instance?(o, guard = nil)
|
@@ -3267,16 +3285,14 @@ class POptionalType < PTypeWithContainedType
|
|
3267
3285
|
n = super
|
3268
3286
|
if n.type.nil?
|
3269
3287
|
n
|
3288
|
+
elsif n.type.is_a?(PNotUndefType)
|
3289
|
+
POptionalType.new(n.type.type).normalize
|
3290
|
+
# No point in having an NotUndef in an Optional
|
3291
|
+
elsif n.type.assignable?(PUndefType::DEFAULT)
|
3292
|
+
# THe type is Optional anyway, so it can be stripped of
|
3293
|
+
n.type
|
3270
3294
|
else
|
3271
|
-
|
3272
|
-
# No point in having an NotUndef in an Optional
|
3273
|
-
POptionalType.new(n.type.type).normalize
|
3274
|
-
elsif n.type.assignable?(PUndefType::DEFAULT)
|
3275
|
-
# THe type is Optional anyway, so it can be stripped of
|
3276
|
-
n.type
|
3277
|
-
else
|
3278
|
-
n
|
3279
|
-
end
|
3295
|
+
n
|
3280
3296
|
end
|
3281
3297
|
end
|
3282
3298
|
|
@@ -3292,6 +3308,7 @@ class POptionalType < PTypeWithContainedType
|
|
3292
3308
|
def _assignable?(o, guard)
|
3293
3309
|
return true if o.is_a?(PUndefType)
|
3294
3310
|
return true if @type.nil?
|
3311
|
+
|
3295
3312
|
if o.is_a?(POptionalType)
|
3296
3313
|
@type.assignable?(o.optional_type, guard)
|
3297
3314
|
else
|
@@ -3301,7 +3318,6 @@ class POptionalType < PTypeWithContainedType
|
|
3301
3318
|
end
|
3302
3319
|
|
3303
3320
|
class PTypeReferenceType < PAnyType
|
3304
|
-
|
3305
3321
|
def self.register_ptype(loader, ir)
|
3306
3322
|
create_ptype(loader, ir, 'AnyType', 'type_string' => PStringType::NON_EMPTY)
|
3307
3323
|
end
|
@@ -3350,16 +3366,14 @@ end
|
|
3350
3366
|
#
|
3351
3367
|
# @api public
|
3352
3368
|
class PTypeAliasType < PAnyType
|
3353
|
-
|
3354
3369
|
def self.register_ptype(loader, ir)
|
3355
3370
|
create_ptype(loader, ir, 'AnyType',
|
3356
|
-
|
3357
|
-
|
3358
|
-
|
3359
|
-
|
3360
|
-
|
3361
|
-
|
3362
|
-
)
|
3371
|
+
'name' => PStringType::NON_EMPTY,
|
3372
|
+
'type_expr' => PAnyType::DEFAULT,
|
3373
|
+
'resolved_type' => {
|
3374
|
+
KEY_TYPE => POptionalType.new(PTypeType::DEFAULT),
|
3375
|
+
KEY_VALUE => nil
|
3376
|
+
})
|
3363
3377
|
end
|
3364
3378
|
|
3365
3379
|
attr_reader :loader, :name
|
@@ -3390,6 +3404,7 @@ class PTypeAliasType < PAnyType
|
|
3390
3404
|
# @raise [Puppet::Error] unless the type has been resolved prior to calling this method
|
3391
3405
|
def resolved_type
|
3392
3406
|
raise Puppet::Error, "Reference to unresolved type #{@name}" unless @resolved_type
|
3407
|
+
|
3393
3408
|
@resolved_type
|
3394
3409
|
end
|
3395
3410
|
|
@@ -3401,7 +3416,7 @@ class PTypeAliasType < PAnyType
|
|
3401
3416
|
resolved_type.check_self_recursion(originator) unless originator.equal?(self)
|
3402
3417
|
end
|
3403
3418
|
|
3404
|
-
def kind_of_callable?(optional=true, guard = nil)
|
3419
|
+
def kind_of_callable?(optional = true, guard = nil)
|
3405
3420
|
guarded_recursion(guard, false) { |g| resolved_type.kind_of_callable?(optional, g) }
|
3406
3421
|
end
|
3407
3422
|
|
@@ -3452,6 +3467,7 @@ class PTypeAliasType < PAnyType
|
|
3452
3467
|
|
3453
3468
|
def set_self_recursion_status
|
3454
3469
|
return if @self_recursion || @resolved_type.is_a?(PTypeReferenceType)
|
3470
|
+
|
3455
3471
|
@self_recursion = true
|
3456
3472
|
guard = RecursionGuard.new
|
3457
3473
|
accept(NoopTypeAcceptor::INSTANCE, guard)
|
@@ -3489,6 +3505,7 @@ class PTypeAliasType < PAnyType
|
|
3489
3505
|
unless real_type_asserter.other_type_detected?
|
3490
3506
|
raise ArgumentError, "Type alias '#{name}' cannot be resolved to a real type"
|
3491
3507
|
end
|
3508
|
+
|
3492
3509
|
@self_recursion = guard.recursive_this?(self)
|
3493
3510
|
# All aliases involved must re-check status since this alias is now resolved
|
3494
3511
|
if @self_recursion
|
@@ -3586,6 +3603,7 @@ class PTypeAliasType < PAnyType
|
|
3586
3603
|
resolved_types = @resolved_type.types
|
3587
3604
|
real_types = resolved_types.select do |type|
|
3588
3605
|
next false if type == self
|
3606
|
+
|
3589
3607
|
real_type_asserter = AssertOtherTypeAcceptor.new
|
3590
3608
|
type.accept(real_type_asserter, RecursionGuard.new)
|
3591
3609
|
real_type_asserter.other_type_detected?
|