puppet 3.6.2 → 3.7.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CONTRIBUTING.md +2 -3
- data/Gemfile +14 -10
- data/README.md +1 -1
- data/ext/build_defaults.yaml +16 -1
- data/ext/debian/control +3 -2
- data/ext/debian/puppet-common.dirs +1 -0
- data/ext/debian/puppet-common.postinst +8 -8
- data/ext/debian/puppet-common.postrm +2 -1
- data/ext/project_data.yaml +16 -12
- data/ext/rack/example-passenger-vhost.conf +2 -2
- data/ext/redhat/puppet.spec.erb +6 -3
- data/ext/windows/service/daemon.rb +47 -41
- data/install.rb +1 -1
- data/lib/puppet.rb +34 -24
- data/lib/puppet/application.rb +34 -1
- data/lib/puppet/application/agent.rb +9 -8
- data/lib/puppet/application/apply.rb +14 -5
- data/lib/puppet/application/doc.rb +4 -11
- data/lib/puppet/application/master.rb +19 -17
- data/lib/puppet/application/queue.rb +1 -1
- data/lib/puppet/application/resource.rb +0 -1
- data/lib/puppet/configurer.rb +39 -2
- data/lib/puppet/configurer/downloader.rb +5 -10
- data/lib/puppet/configurer/downloader_factory.rb +34 -0
- data/lib/puppet/configurer/plugin_handler.rb +11 -17
- data/lib/puppet/defaults.rb +244 -119
- data/lib/puppet/environments.rb +8 -0
- data/lib/puppet/external/nagios/base.rb +1 -1
- data/lib/puppet/external/pson/pure/generator.rb +1 -8
- data/lib/puppet/face/ca.rb +7 -0
- data/lib/puppet/face/file/download.rb +5 -2
- data/lib/puppet/face/file/store.rb +1 -1
- data/lib/puppet/face/instrumentation_data.rb +2 -1
- data/lib/puppet/face/instrumentation_listener.rb +2 -1
- data/lib/puppet/face/instrumentation_probe.rb +2 -1
- data/lib/puppet/face/module/build.rb +2 -2
- data/lib/puppet/face/module/generate.rb +20 -12
- data/lib/puppet/face/module/install.rb +4 -3
- data/lib/puppet/face/module/uninstall.rb +7 -0
- data/lib/puppet/face/module/upgrade.rb +11 -3
- data/lib/puppet/face/node/clean.rb +1 -1
- data/lib/puppet/face/parser.rb +99 -7
- data/lib/puppet/feature/base.rb +18 -12
- data/lib/puppet/feature/cfacter.rb +14 -0
- data/lib/puppet/feature/pe_license.rb +4 -0
- data/lib/puppet/file_bucket/dipper.rb +19 -12
- data/lib/puppet/file_bucket/file.rb +73 -10
- data/lib/puppet/file_serving/configuration/parser.rb +3 -3
- data/lib/puppet/file_system.rb +1 -1
- data/lib/puppet/file_system/file19.rb +41 -0
- data/lib/puppet/file_system/file19windows.rb +0 -1
- data/lib/puppet/file_system/uniquefile.rb +190 -0
- data/lib/puppet/forge.rb +34 -7
- data/lib/puppet/forge/errors.rb +5 -6
- data/lib/puppet/forge/repository.rb +14 -2
- data/lib/puppet/functions.rb +19 -12
- data/lib/puppet/functions/assert_type.rb +27 -10
- data/lib/puppet/functions/each.rb +111 -0
- data/lib/puppet/functions/epp.rb +54 -0
- data/lib/puppet/functions/filter.rb +113 -0
- data/lib/puppet/functions/inline_epp.rb +88 -0
- data/lib/puppet/functions/map.rb +97 -0
- data/lib/puppet/functions/match.rb +102 -0
- data/lib/puppet/functions/reduce.rb +94 -0
- data/lib/puppet/functions/slice.rb +126 -0
- data/lib/puppet/functions/with.rb +23 -0
- data/lib/puppet/indirector/catalog/compiler.rb +4 -4
- data/lib/puppet/indirector/data_binding/hiera.rb +2 -45
- data/lib/puppet/indirector/facts/couch.rb +3 -1
- data/lib/puppet/indirector/facts/facter.rb +52 -65
- data/lib/puppet/indirector/file_bucket_file/file.rb +6 -3
- data/lib/puppet/indirector/hiera.rb +48 -0
- data/lib/puppet/indirector/indirection.rb +1 -1
- data/lib/puppet/indirector/request.rb +9 -3
- data/lib/puppet/indirector/resource/ral.rb +1 -1
- data/lib/puppet/indirector/rest.rb +7 -3
- data/lib/puppet/loaders.rb +0 -1
- data/lib/puppet/module.rb +2 -1
- data/lib/puppet/module_tool.rb +2 -0
- data/lib/puppet/module_tool/applications/application.rb +4 -5
- data/lib/puppet/module_tool/applications/builder.rb +64 -5
- data/lib/puppet/module_tool/applications/uninstaller.rb +3 -2
- data/lib/puppet/module_tool/applications/unpacker.rb +14 -0
- data/lib/puppet/module_tool/applications/upgrader.rb +23 -13
- data/lib/puppet/module_tool/dependency.rb +12 -0
- data/lib/puppet/module_tool/errors/shared.rb +1 -1
- data/lib/puppet/module_tool/errors/upgrader.rb +20 -0
- data/lib/puppet/module_tool/installed_modules.rb +6 -1
- data/lib/puppet/module_tool/metadata.rb +53 -3
- data/lib/puppet/module_tool/modulefile.rb +1 -1
- data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +7 -0
- data/lib/puppet/module_tool/skeleton/templates/generator/manifests/init.pp.erb +1 -1
- data/lib/puppet/module_tool/skeleton/templates/generator/spec/spec_helper.rb +1 -17
- data/lib/puppet/module_tool/tar/mini.rb +20 -2
- data/lib/puppet/network/http.rb +5 -0
- data/lib/puppet/network/http/api/v1.rb +2 -2
- data/lib/puppet/network/http/api/v2/environments.rb +15 -1
- data/lib/puppet/network/http/connection.rb +54 -68
- data/lib/puppet/network/http/factory.rb +44 -0
- data/lib/puppet/network/http/handler.rb +12 -6
- data/lib/puppet/network/http/nocache_pool.rb +21 -0
- data/lib/puppet/network/http/pool.rb +120 -0
- data/lib/puppet/network/http/rack/rest.rb +3 -1
- data/lib/puppet/network/http/session.rb +17 -0
- data/lib/puppet/network/http/site.rb +39 -0
- data/lib/puppet/network/http/webrick/rest.rb +3 -1
- data/lib/puppet/network/http_pool.rb +3 -4
- data/lib/puppet/node.rb +19 -6
- data/lib/puppet/node/environment.rb +34 -8
- data/lib/puppet/parser/ast/collection.rb +4 -0
- data/lib/puppet/parser/ast/collexpr.rb +1 -1
- data/lib/puppet/parser/ast/node.rb +5 -0
- data/lib/puppet/parser/ast/pops_bridge.rb +49 -6
- data/lib/puppet/parser/compiler.rb +66 -38
- data/lib/puppet/parser/e4_parser_adapter.rb +2 -2
- data/lib/puppet/parser/files.rb +76 -33
- data/lib/puppet/parser/functions.rb +1 -7
- data/lib/puppet/parser/functions/assert_type.rb +31 -0
- data/lib/puppet/parser/functions/contain.rb +15 -5
- data/lib/puppet/parser/functions/create_resources.rb +5 -1
- data/lib/puppet/parser/functions/digest.rb +5 -0
- data/lib/puppet/parser/functions/each.rb +46 -107
- data/lib/puppet/parser/functions/epp.rb +13 -9
- data/lib/puppet/parser/functions/file.rb +20 -12
- data/lib/puppet/parser/functions/filter.rb +32 -88
- data/lib/puppet/parser/functions/include.rb +12 -24
- data/lib/puppet/parser/functions/inline_epp.rb +9 -12
- data/lib/puppet/parser/functions/lookup.rb +1 -1
- data/lib/puppet/parser/functions/map.rb +30 -83
- data/lib/puppet/parser/functions/match.rb +28 -0
- data/lib/puppet/parser/functions/reduce.rb +69 -98
- data/lib/puppet/parser/functions/require.rb +13 -5
- data/lib/puppet/parser/functions/search.rb +6 -1
- data/lib/puppet/parser/functions/slice.rb +35 -103
- data/lib/puppet/parser/functions/template.rb +12 -5
- data/lib/puppet/parser/functions/with.rb +21 -0
- data/lib/puppet/parser/lexer.rb +1 -1
- data/lib/puppet/parser/parser_factory.rb +21 -33
- data/lib/puppet/parser/resource.rb +2 -3
- data/lib/puppet/parser/scope.rb +85 -15
- data/lib/puppet/pops.rb +9 -11
- data/lib/puppet/pops/adapters.rb +2 -1
- data/lib/puppet/pops/binder/bindings_checker.rb +4 -4
- data/lib/puppet/pops/binder/bindings_factory.rb +6 -6
- data/lib/puppet/pops/binder/bindings_label_provider.rb +1 -1
- data/lib/puppet/pops/binder/bindings_loader.rb +2 -2
- data/lib/puppet/pops/binder/bindings_model.rb +58 -191
- data/lib/puppet/pops/binder/bindings_model_dumper.rb +1 -1
- data/lib/puppet/pops/binder/bindings_model_meta.rb +215 -0
- data/lib/puppet/pops/binder/injector.rb +9 -9
- data/lib/puppet/pops/binder/key_factory.rb +2 -2
- data/lib/puppet/pops/binder/lookup.rb +14 -6
- data/lib/puppet/pops/binder/producers.rb +9 -12
- data/lib/puppet/pops/evaluator/access_operator.rb +35 -29
- data/lib/puppet/pops/evaluator/callable_mismatch_describer.rb +175 -0
- data/lib/puppet/pops/evaluator/callable_signature.rb +1 -2
- data/lib/puppet/pops/evaluator/closure.rb +151 -35
- data/lib/puppet/pops/evaluator/compare_operator.rb +26 -22
- data/lib/puppet/pops/evaluator/epp_evaluator.rb +16 -15
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +277 -229
- data/lib/puppet/pops/evaluator/relationship_operator.rb +3 -2
- data/lib/puppet/pops/evaluator/runtime3_support.rb +86 -53
- data/lib/puppet/pops/functions/dispatch.rb +9 -4
- data/lib/puppet/pops/functions/dispatcher.rb +2 -169
- data/lib/puppet/pops/issue_reporter.rb +14 -6
- data/lib/puppet/pops/issues.rb +96 -21
- data/lib/puppet/pops/loader/base_loader.rb +3 -3
- data/lib/puppet/pops/loader/loader.rb +1 -1
- data/lib/puppet/pops/loader/loader_paths.rb +2 -21
- data/lib/puppet/pops/loader/ruby_function_instantiator.rb +1 -1
- data/lib/puppet/pops/loader/static_loader.rb +12 -2
- data/lib/puppet/pops/model/ast_transformer.rb +4 -24
- data/lib/puppet/pops/model/factory.rb +72 -10
- data/lib/puppet/pops/model/model.rb +82 -574
- data/lib/puppet/pops/model/model_label_provider.rb +4 -2
- data/lib/puppet/pops/model/model_meta.rb +576 -0
- data/lib/puppet/pops/model/model_tree_dumper.rb +27 -5
- data/lib/puppet/pops/parser/egrammar.ra +209 -221
- data/lib/puppet/pops/parser/eparser.rb +1459 -1431
- data/lib/puppet/pops/parser/evaluating_parser.rb +15 -75
- data/lib/puppet/pops/parser/lexer2.rb +14 -10
- data/lib/puppet/pops/parser/lexer_support.rb +6 -0
- data/lib/puppet/pops/parser/locator.rb +1 -1
- data/lib/puppet/pops/parser/parser_support.rb +31 -49
- data/lib/puppet/pops/patterns.rb +10 -10
- data/lib/puppet/pops/semantic_error.rb +1 -1
- data/lib/puppet/pops/types/class_loader.rb +24 -13
- data/lib/puppet/pops/types/type_calculator.rb +188 -87
- data/lib/puppet/pops/types/type_factory.rb +79 -53
- data/lib/puppet/pops/types/type_parser.rb +22 -16
- data/lib/puppet/pops/types/types.rb +283 -392
- data/lib/puppet/pops/types/types_meta.rb +223 -0
- data/lib/puppet/pops/utils.rb +16 -14
- data/lib/puppet/pops/validation/checker4_0.rb +264 -18
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +0 -1
- data/lib/puppet/pops/visitor.rb +0 -103
- data/lib/puppet/provider/exec.rb +10 -1
- data/lib/puppet/provider/file/windows.rb +3 -4
- data/lib/puppet/provider/group/windows_adsi.rb +10 -10
- data/lib/puppet/provider/nameservice/directoryservice.rb +3 -4
- data/lib/puppet/provider/package/apt.rb +5 -1
- data/lib/puppet/provider/package/gem.rb +7 -3
- data/lib/puppet/provider/package/openbsd.rb +84 -7
- data/lib/puppet/provider/package/pacman.rb +29 -4
- data/lib/puppet/provider/package/rpm.rb +5 -7
- data/lib/puppet/provider/package/sun.rb +5 -1
- data/lib/puppet/provider/package/windows.rb +6 -1
- data/lib/puppet/provider/package/windows/exe_package.rb +1 -1
- data/lib/puppet/provider/package/windows/msi_package.rb +1 -1
- data/lib/puppet/provider/package/windows/package.rb +13 -1
- data/lib/puppet/provider/package/yum.rb +7 -3
- data/lib/puppet/provider/package/zypper.rb +5 -1
- data/lib/puppet/provider/parsedfile.rb +17 -1
- data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +6 -12
- data/lib/puppet/provider/service/freebsd.rb +12 -12
- data/lib/puppet/provider/service/init.rb +5 -0
- data/lib/puppet/provider/service/launchd.rb +0 -3
- data/lib/puppet/provider/service/openbsd.rb +8 -7
- data/lib/puppet/provider/ssh_authorized_key/parsed.rb +2 -2
- data/lib/puppet/provider/sshkey/parsed.rb +5 -0
- data/lib/puppet/provider/user/user_role_add.rb +5 -4
- data/lib/puppet/provider/user/windows_adsi.rb +8 -8
- data/lib/puppet/provider/zone/solaris.rb +1 -1
- data/lib/puppet/reference/metaparameter.rb +8 -6
- data/lib/puppet/reports/store.rb +4 -9
- data/lib/puppet/resource.rb +75 -11
- data/lib/puppet/resource/catalog.rb +9 -7
- data/lib/puppet/resource/type.rb +27 -0
- data/lib/puppet/settings.rb +61 -41
- data/lib/puppet/settings/base_setting.rb +9 -3
- data/lib/puppet/settings/environment_conf.rb +32 -4
- data/lib/puppet/settings/file_setting.rb +9 -1
- data/lib/puppet/settings/priority_setting.rb +5 -5
- data/lib/puppet/ssl.rb +1 -0
- data/lib/puppet/ssl/certificate_authority.rb +15 -6
- data/lib/puppet/ssl/certificate_authority/autosign_command.rb +2 -1
- data/lib/puppet/ssl/host.rb +3 -2
- data/lib/puppet/ssl/inventory.rb +11 -6
- data/lib/puppet/ssl/validator/default_validator.rb +1 -0
- data/lib/puppet/ssl/validator/no_validator.rb +3 -0
- data/lib/puppet/transaction.rb +29 -0
- data/lib/puppet/transaction/resource_harness.rb +16 -3
- data/lib/puppet/type.rb +71 -49
- data/lib/puppet/type/exec.rb +36 -8
- data/lib/puppet/type/file.rb +56 -16
- data/lib/puppet/type/file/content.rb +3 -3
- data/lib/puppet/type/file/mode.rb +12 -3
- data/lib/puppet/type/file/source.rb +4 -1
- data/lib/puppet/type/group.rb +1 -1
- data/lib/puppet/type/mount.rb +1 -3
- data/lib/puppet/type/resources.rb +59 -35
- data/lib/puppet/type/ssh_authorized_key.rb +54 -16
- data/lib/puppet/type/sshkey.rb +1 -1
- data/lib/puppet/type/user.rb +17 -11
- data/lib/puppet/type/yumrepo.rb +59 -8
- data/lib/puppet/type/zone.rb +3 -6
- data/lib/puppet/util.rb +64 -55
- data/lib/puppet/util/autoload.rb +2 -2
- data/lib/puppet/util/colors.rb +61 -19
- data/lib/puppet/util/command_line.rb +21 -4
- data/lib/puppet/util/execution.rb +41 -29
- data/lib/puppet/util/feature.rb +15 -4
- data/lib/puppet/util/filetype.rb +6 -2
- data/lib/puppet/util/http_proxy.rb +29 -2
- data/lib/puppet/util/lockfile.rb +1 -1
- data/lib/puppet/util/log/destinations.rb +7 -3
- data/lib/puppet/util/logging.rb +44 -14
- data/lib/puppet/util/pidlock.rb +11 -5
- data/lib/puppet/util/posix.rb +21 -31
- data/lib/puppet/util/profiler.rb +17 -9
- data/lib/puppet/util/profiler/aggregate.rb +85 -0
- data/lib/puppet/util/profiler/around_profiler.rb +67 -0
- data/lib/puppet/util/profiler/logging.rb +12 -11
- data/lib/puppet/util/profiler/wall_clock.rb +7 -6
- data/lib/puppet/util/rdoc.rb +8 -1
- data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +1 -1
- data/lib/puppet/util/suidmanager.rb +1 -8
- data/lib/puppet/util/windows.rb +14 -3
- data/lib/puppet/util/windows/access_control_list.rb +4 -4
- data/lib/puppet/util/{adsi.rb → windows/adsi.rb} +99 -37
- data/lib/puppet/util/windows/api_types.rb +255 -0
- data/lib/puppet/util/windows/com.rb +224 -0
- data/lib/puppet/util/windows/error.rb +72 -5
- data/lib/puppet/util/windows/file.rb +254 -132
- data/lib/puppet/util/windows/process.rb +293 -177
- data/lib/puppet/util/windows/registry.rb +12 -2
- data/lib/puppet/util/windows/root_certs.rb +16 -9
- data/lib/puppet/util/windows/security.rb +501 -232
- data/lib/puppet/util/windows/sid.rb +80 -36
- data/lib/puppet/util/windows/string.rb +2 -0
- data/lib/puppet/util/windows/taskscheduler.rb +1241 -0
- data/lib/puppet/util/windows/user.rb +241 -57
- data/lib/puppet/vendor.rb +3 -1
- data/lib/puppet/vendor/load_pathspec.rb +1 -0
- data/lib/puppet/vendor/load_rgen.rb +1 -0
- data/lib/puppet/vendor/pathspec/CHANGELOG.md +2 -0
- data/lib/puppet/vendor/pathspec/LICENSE +201 -0
- data/lib/puppet/vendor/pathspec/PUPPET_README.md +6 -0
- data/lib/puppet/vendor/pathspec/README.md +53 -0
- data/lib/puppet/vendor/pathspec/lib/pathspec.rb +121 -0
- data/lib/puppet/vendor/pathspec/lib/pathspec/gitignorespec.rb +275 -0
- data/lib/puppet/vendor/pathspec/lib/pathspec/regexspec.rb +17 -0
- data/lib/puppet/vendor/pathspec/lib/pathspec/spec.rb +14 -0
- data/lib/puppet/vendor/require_vendored.rb +2 -0
- data/lib/puppet/vendor/rgen/CHANGELOG +197 -0
- data/lib/puppet/vendor/rgen/MIT-LICENSE +20 -0
- data/lib/puppet/vendor/rgen/PUPPET_README.md +6 -0
- data/lib/puppet/vendor/rgen/README.rdoc +78 -0
- data/lib/puppet/vendor/rgen/Rakefile +41 -0
- data/lib/puppet/vendor/rgen/TODO +41 -0
- data/lib/puppet/vendor/rgen/anounce.txt +61 -0
- data/lib/puppet/vendor/rgen/design_rationale.txt +71 -0
- data/lib/puppet/vendor/rgen/lib/ea_support/ea_support.rb +54 -0
- data/lib/puppet/vendor/rgen/lib/ea_support/id_store.rb +32 -0
- data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel.rb +562 -0
- data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel_ext.rb +45 -0
- data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel_generator.rb +43 -0
- data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_to_uml13.rb +103 -0
- data/lib/puppet/vendor/rgen/lib/ea_support/uml13_to_uml13_ea.rb +89 -0
- data/lib/puppet/vendor/rgen/lib/metamodels/uml13_metamodel.rb +559 -0
- data/lib/puppet/vendor/rgen/lib/metamodels/uml13_metamodel_ext.rb +26 -0
- data/lib/puppet/vendor/rgen/lib/mmgen/metamodel_generator.rb +20 -0
- data/lib/puppet/vendor/rgen/lib/mmgen/mm_ext/ecore_mmgen_ext.rb +91 -0
- data/lib/puppet/vendor/rgen/lib/mmgen/mmgen.rb +28 -0
- data/lib/puppet/vendor/rgen/lib/mmgen/templates/annotations.tpl +37 -0
- data/lib/puppet/vendor/rgen/lib/mmgen/templates/metamodel_generator.tpl +172 -0
- data/lib/puppet/vendor/rgen/lib/rgen/array_extensions.rb +45 -0
- data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore.rb +218 -0
- data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_builder_methods.rb +81 -0
- data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_ext.rb +69 -0
- data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_interface.rb +47 -0
- data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_to_ruby.rb +167 -0
- data/lib/puppet/vendor/rgen/lib/rgen/ecore/ruby_to_ecore.rb +91 -0
- data/lib/puppet/vendor/rgen/lib/rgen/environment.rb +129 -0
- data/lib/puppet/vendor/rgen/lib/rgen/fragment/dump_file_cache.rb +63 -0
- data/lib/puppet/vendor/rgen/lib/rgen/fragment/fragmented_model.rb +140 -0
- data/lib/puppet/vendor/rgen/lib/rgen/fragment/model_fragment.rb +289 -0
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/abstract_instantiator.rb +66 -0
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/abstract_xml_instantiator.rb +66 -0
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/default_xml_instantiator.rb +117 -0
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/ecore_xml_instantiator.rb +169 -0
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_instantiator.rb +126 -0
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_parser.rb +331 -0
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_parser.y +94 -0
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/nodebased_xml_instantiator.rb +137 -0
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/qualified_name_resolver.rb +97 -0
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/reference_resolver.rb +128 -0
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/resolution_helper.rb +47 -0
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/xmi11_instantiator.rb +168 -0
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder.rb +224 -0
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/builder_extensions.rb +556 -0
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/builder_runtime.rb +174 -0
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/constant_order_helper.rb +89 -0
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/data_types.rb +77 -0
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/intermediate/annotation.rb +30 -0
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/intermediate/feature.rb +168 -0
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/mm_multiple.rb +23 -0
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/module_extension.rb +42 -0
- data/lib/puppet/vendor/rgen/lib/rgen/model_builder.rb +32 -0
- data/lib/puppet/vendor/rgen/lib/rgen/model_builder/builder_context.rb +334 -0
- data/lib/puppet/vendor/rgen/lib/rgen/model_builder/model_serializer.rb +225 -0
- data/lib/puppet/vendor/rgen/lib/rgen/model_builder/reference_resolver.rb +156 -0
- data/lib/puppet/vendor/rgen/lib/rgen/serializer/json_serializer.rb +121 -0
- data/lib/puppet/vendor/rgen/lib/rgen/serializer/opposite_reference_filter.rb +18 -0
- data/lib/puppet/vendor/rgen/lib/rgen/serializer/qualified_name_provider.rb +47 -0
- data/lib/puppet/vendor/rgen/lib/rgen/serializer/xmi11_serializer.rb +116 -0
- data/lib/puppet/vendor/rgen/lib/rgen/serializer/xmi20_serializer.rb +71 -0
- data/lib/puppet/vendor/rgen/lib/rgen/serializer/xml_serializer.rb +98 -0
- data/lib/puppet/vendor/rgen/lib/rgen/template_language.rb +297 -0
- data/lib/puppet/vendor/rgen/lib/rgen/template_language/directory_template_container.rb +83 -0
- data/lib/puppet/vendor/rgen/lib/rgen/template_language/output_handler.rb +87 -0
- data/lib/puppet/vendor/rgen/lib/rgen/template_language/template_container.rb +234 -0
- data/lib/puppet/vendor/rgen/lib/rgen/template_language/template_helper.rb +26 -0
- data/lib/puppet/vendor/rgen/lib/rgen/transformer.rb +475 -0
- data/lib/puppet/vendor/rgen/lib/rgen/util/auto_class_creator.rb +61 -0
- data/lib/puppet/vendor/rgen/lib/rgen/util/cached_glob.rb +67 -0
- data/lib/puppet/vendor/rgen/lib/rgen/util/file_cache_map.rb +124 -0
- data/lib/puppet/vendor/rgen/lib/rgen/util/file_change_detector.rb +84 -0
- data/lib/puppet/vendor/rgen/lib/rgen/util/method_delegation.rb +114 -0
- data/lib/puppet/vendor/rgen/lib/rgen/util/model_comparator.rb +68 -0
- data/lib/puppet/vendor/rgen/lib/rgen/util/model_comparator_base.rb +142 -0
- data/lib/puppet/vendor/rgen/lib/rgen/util/model_dumper.rb +29 -0
- data/lib/puppet/vendor/rgen/lib/rgen/util/name_helper.rb +42 -0
- data/lib/puppet/vendor/rgen/lib/rgen/util/pattern_matcher.rb +329 -0
- data/lib/puppet/vendor/rgen/lib/transformers/ecore_to_uml13.rb +79 -0
- data/lib/puppet/vendor/rgen/lib/transformers/uml13_to_ecore.rb +127 -0
- data/lib/puppet/vendor/rgen/test/array_extensions_test.rb +64 -0
- data/lib/puppet/vendor/rgen/test/ea_instantiator_test.rb +35 -0
- data/lib/puppet/vendor/rgen/test/ea_serializer_test.rb +23 -0
- data/lib/puppet/vendor/rgen/test/ecore_self_test.rb +54 -0
- data/lib/puppet/vendor/rgen/test/environment_test.rb +90 -0
- data/lib/puppet/vendor/rgen/test/json_test.rb +171 -0
- data/lib/puppet/vendor/rgen/test/metamodel_builder_test.rb +1482 -0
- data/lib/puppet/vendor/rgen/test/metamodel_from_ecore_test.rb +57 -0
- data/lib/puppet/vendor/rgen/test/metamodel_order_test.rb +131 -0
- data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test.rb +98 -0
- data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/TestModel.rb +70 -0
- data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/houseMetamodel.ecore +42 -0
- data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/houseMetamodel_from_ecore.rb +44 -0
- data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/using_builtin_types.ecore +9 -0
- data/lib/puppet/vendor/rgen/test/method_delegation_test.rb +178 -0
- data/lib/puppet/vendor/rgen/test/model_builder/builder_context_test.rb +59 -0
- data/lib/puppet/vendor/rgen/test/model_builder/builder_test.rb +242 -0
- data/lib/puppet/vendor/rgen/test/model_builder/ecore_original.rb +163 -0
- data/lib/puppet/vendor/rgen/test/model_builder/ecore_original_regenerated.rb +163 -0
- data/lib/puppet/vendor/rgen/test/model_builder/reference_resolver_test.rb +156 -0
- data/lib/puppet/vendor/rgen/test/model_builder/serializer_test.rb +94 -0
- data/lib/puppet/vendor/rgen/test/model_builder/statemachine_metamodel.rb +42 -0
- data/lib/puppet/vendor/rgen/test/model_builder/test_model/statemachine1.rb +23 -0
- data/lib/puppet/vendor/rgen/test/model_builder_test.rb +6 -0
- data/lib/puppet/vendor/rgen/test/model_fragment_test.rb +30 -0
- data/lib/puppet/vendor/rgen/test/output_handler_test.rb +58 -0
- data/lib/puppet/vendor/rgen/test/qualified_name_provider_test.rb +48 -0
- data/lib/puppet/vendor/rgen/test/qualified_name_resolver_test.rb +102 -0
- data/lib/puppet/vendor/rgen/test/reference_resolver_test.rb +117 -0
- data/lib/puppet/vendor/rgen/test/rgen_test.rb +26 -0
- data/lib/puppet/vendor/rgen/test/template_language_test.rb +163 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/expected_result1.txt +29 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/expected_result2.txt +9 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/expected_result3.txt +4 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/indentStringTestDefaultIndent.out +1 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/indentStringTestTabIndent.out +1 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/callback_indent_test/a.tpl +12 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/callback_indent_test/b.tpl +5 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/code/array.tpl +11 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/content/author.tpl +7 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/content/chapter.tpl +5 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/define_local_test/local.tpl +8 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/define_local_test/test.tpl +8 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/evaluate_test/test.tpl +7 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/indent_string_test.tpl +12 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/index/c/cmod.tpl +1 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/index/chapter.tpl +3 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_backslash_r_test.tpl +5 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/no_indent.tpl +3 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/sub1/no_indent.tpl +3 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test.tpl +24 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test2.tpl +13 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test3.tpl +10 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/null_context_test.tpl +17 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/root.tpl +31 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/sub1.tpl +9 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/sub1/sub1.tpl +3 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/test.tpl +4 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/testout.txt +29 -0
- data/lib/puppet/vendor/rgen/test/testmodel/class_model_checker.rb +119 -0
- data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel.eap +0 -0
- data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel.xml +1029 -0
- data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel_partial.xml +317 -0
- data/lib/puppet/vendor/rgen/test/testmodel/ecore_model_checker.rb +101 -0
- data/lib/puppet/vendor/rgen/test/testmodel/manual_testmodel.xml +22 -0
- data/lib/puppet/vendor/rgen/test/testmodel/object_model_checker.rb +67 -0
- data/lib/puppet/vendor/rgen/test/transformer_test.rb +254 -0
- data/lib/puppet/vendor/rgen/test/util/file_cache_map_test.rb +99 -0
- data/lib/puppet/vendor/rgen/test/util/pattern_matcher_test.rb +97 -0
- data/lib/puppet/vendor/rgen/test/util_test.rb +5 -0
- data/lib/puppet/vendor/rgen/test/xml_instantiator_test.rb +160 -0
- data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_ecore_model_checker.rb +94 -0
- data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_ecore_instantiator.rb +53 -0
- data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_metamodel.rb +49 -0
- data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_to_ecore.rb +75 -0
- data/lib/puppet/vendor/safe_yaml/PUPPET_README.md +6 -0
- data/lib/puppet/vendor/semantic/PUPPET_README.md +6 -0
- data/lib/puppet/version.rb +1 -1
- data/spec/fixtures/integration/node/environment/sitedir2/00_a.pp +2 -0
- data/spec/fixtures/integration/node/environment/sitedir2/02_folder/01_b.pp +6 -0
- data/spec/fixtures/integration/node/environment/sitedir2/03_c.pp +1 -0
- data/spec/fixtures/integration/node/environment/sitedir2/04_include.pp +2 -0
- data/spec/fixtures/releases/jamtur01-apache/manifests/vhost.pp +1 -1
- data/spec/fixtures/unit/indirector/hiera/global.yaml +10 -0
- data/spec/fixtures/unit/indirector/hiera/invalid.yaml +1 -0
- data/spec/fixtures/unit/parser/functions/create_resources/foo/manifests/init.pp +3 -0
- data/spec/fixtures/unit/parser/functions/create_resources/foo/manifests/wrongdefine.pp +3 -0
- data/spec/fixtures/unit/parser/lexer/argumentdefaults.pp +2 -2
- data/spec/fixtures/unit/parser/lexer/casestatement.pp +14 -14
- data/spec/fixtures/unit/parser/lexer/classheirarchy.pp +3 -3
- data/spec/fixtures/unit/parser/lexer/classincludes.pp +3 -3
- data/spec/fixtures/unit/parser/lexer/classpathtest.pp +1 -1
- data/spec/fixtures/unit/parser/lexer/collection_override.pp +1 -1
- data/spec/fixtures/unit/parser/lexer/componentrequire.pp +2 -2
- data/spec/fixtures/unit/parser/lexer/deepclassheirarchy.pp +5 -5
- data/spec/fixtures/unit/parser/lexer/defineoverrides.pp +2 -2
- data/spec/fixtures/unit/parser/lexer/filecreate.pp +2 -2
- data/spec/fixtures/unit/parser/lexer/ifexpression.pp +1 -1
- data/spec/fixtures/unit/parser/lexer/implicititeration.pp +4 -4
- data/spec/fixtures/unit/parser/lexer/multipleinstances.pp +3 -3
- data/spec/fixtures/unit/parser/lexer/multisubs.pp +2 -2
- data/spec/fixtures/unit/parser/lexer/namevartest.pp +2 -2
- data/spec/fixtures/unit/parser/lexer/simpledefaults.pp +1 -1
- data/spec/fixtures/unit/pops/parser/lexer/argumentdefaults.pp +1 -1
- data/spec/fixtures/unit/pops/parser/lexer/casestatement.pp +14 -14
- data/spec/fixtures/unit/pops/parser/lexer/classheirarchy.pp +3 -3
- data/spec/fixtures/unit/pops/parser/lexer/classincludes.pp +3 -3
- data/spec/fixtures/unit/pops/parser/lexer/classpathtest.pp +1 -1
- data/spec/fixtures/unit/pops/parser/lexer/collection_override.pp +1 -1
- data/spec/fixtures/unit/pops/parser/lexer/componentrequire.pp +2 -2
- data/spec/fixtures/unit/pops/parser/lexer/deepclassheirarchy.pp +5 -5
- data/spec/fixtures/unit/pops/parser/lexer/defineoverrides.pp +2 -2
- data/spec/fixtures/unit/pops/parser/lexer/filecreate.pp +2 -2
- data/spec/fixtures/unit/pops/parser/lexer/ifexpression.pp +1 -1
- data/spec/fixtures/unit/pops/parser/lexer/implicititeration.pp +4 -4
- data/spec/fixtures/unit/pops/parser/lexer/multipleinstances.pp +3 -3
- data/spec/fixtures/unit/pops/parser/lexer/multisubs.pp +2 -2
- data/spec/fixtures/unit/pops/parser/lexer/namevartest.pp +2 -2
- data/spec/fixtures/unit/pops/parser/lexer/simpledefaults.pp +1 -1
- data/spec/fixtures/unit/provider/package/gem/gem-list-single-package +4 -0
- data/spec/fixtures/unit/type/user/authorized_keys +1 -1
- data/spec/integration/agent/logging_spec.rb +4 -0
- data/spec/integration/application/doc_spec.rb +4 -3
- data/spec/integration/configurer_spec.rb +0 -14
- data/spec/integration/defaults_spec.rb +26 -0
- data/spec/integration/environments/default_manifest_spec.rb +274 -0
- data/spec/integration/faces/documentation_spec.rb +0 -4
- data/spec/integration/file_bucket/file_spec.rb +21 -0
- data/spec/integration/indirector/catalog/compiler_spec.rb +0 -2
- data/spec/integration/indirector/catalog/queue_spec.rb +0 -2
- data/spec/integration/indirector/facts/facter_spec.rb +1 -1
- data/spec/integration/indirector/file_content/file_server_spec.rb +2 -2
- data/spec/integration/node/environment_spec.rb +24 -8
- data/spec/integration/parser/catalog_spec.rb +10 -10
- data/spec/integration/parser/class_spec.rb +37 -0
- data/spec/integration/parser/collector_spec.rb +234 -75
- data/spec/integration/parser/compiler_spec.rb +385 -401
- data/spec/integration/parser/conditionals_spec.rb +117 -0
- data/spec/integration/parser/future_compiler_spec.rb +359 -8
- data/spec/integration/parser/node_spec.rb +185 -0
- data/spec/integration/parser/resource_expressions_spec.rb +286 -0
- data/spec/integration/parser/ruby_manifest_spec.rb +0 -4
- data/spec/integration/parser/scope_spec.rb +94 -151
- data/spec/integration/provider/cron/crontab_spec.rb +137 -148
- data/spec/integration/ssl/certificate_authority_spec.rb +26 -0
- data/spec/integration/ssl/certificate_request_spec.rb +0 -6
- data/spec/integration/ssl/certificate_revocation_list_spec.rb +0 -2
- data/spec/integration/ssl/host_spec.rb +0 -2
- data/spec/integration/transaction_spec.rb +16 -0
- data/spec/integration/type/file_spec.rb +14 -13
- data/spec/integration/type/nagios_spec.rb +6 -15
- data/spec/integration/type/sshkey_spec.rb +22 -0
- data/spec/integration/type/tidy_spec.rb +3 -0
- data/spec/integration/type/user_spec.rb +8 -3
- data/spec/integration/util/autoload_spec.rb +6 -6
- data/spec/integration/util/rdoc/parser_spec.rb +7 -0
- data/spec/integration/util/windows/process_spec.rb +12 -0
- data/spec/integration/util/windows/security_spec.rb +36 -35
- data/spec/integration/util/windows/user_spec.rb +75 -9
- data/spec/integration/util_spec.rb +2 -2
- data/spec/lib/matchers/resource.rb +1 -0
- data/spec/lib/puppet_spec/compiler.rb +15 -2
- data/spec/lib/puppet_spec/files.rb +10 -0
- data/spec/lib/puppet_spec/language.rb +74 -0
- data/spec/lib/puppet_spec/matchers.rb +59 -32
- data/spec/lib/puppet_spec/module_tool/stub_source.rb +3 -0
- data/spec/shared_behaviours/hiera_indirections.rb +99 -0
- data/spec/shared_behaviours/iterative_functions.rb +69 -0
- data/spec/unit/application/apply_spec.rb +4 -2
- data/spec/unit/application/doc_spec.rb +17 -13
- data/spec/unit/application/master_spec.rb +35 -27
- data/spec/unit/application/resource_spec.rb +0 -5
- data/spec/unit/configurer/downloader_factory_spec.rb +96 -0
- data/spec/unit/configurer/downloader_spec.rb +3 -24
- data/spec/unit/configurer/plugin_handler_spec.rb +22 -22
- data/spec/unit/configurer_spec.rb +0 -4
- data/spec/unit/defaults_spec.rb +30 -0
- data/spec/unit/face/config_spec.rb +2 -1
- data/spec/unit/face/module/build_spec.rb +2 -2
- data/spec/unit/face/module/install_spec.rb +8 -8
- data/spec/unit/face/parser_spec.rb +71 -33
- data/spec/unit/file_bucket/file_spec.rb +2 -2
- data/spec/unit/file_system/uniquefile_spec.rb +184 -0
- data/spec/unit/forge/errors_spec.rb +4 -6
- data/spec/unit/forge/module_release_spec.rb +178 -89
- data/spec/unit/forge/repository_spec.rb +110 -2
- data/spec/unit/forge_spec.rb +39 -3
- data/spec/unit/functions/assert_type_spec.rb +22 -3
- data/spec/unit/{parser/methods → functions}/each_spec.rb +21 -1
- data/spec/unit/{parser/functions → functions}/epp_spec.rb +61 -9
- data/spec/unit/{parser/methods → functions}/filter_spec.rb +34 -38
- data/spec/unit/{parser/functions → functions}/inline_epp_spec.rb +18 -3
- data/spec/unit/functions/map_spec.rb +169 -0
- data/spec/unit/functions/match_spec.rb +57 -0
- data/spec/unit/{parser/methods → functions}/reduce_spec.rb +23 -5
- data/spec/unit/{parser/methods → functions}/slice_spec.rb +34 -21
- data/spec/unit/functions/with_spec.rb +35 -0
- data/spec/unit/functions4_spec.rb +7 -8
- data/spec/unit/indirector/catalog/compiler_spec.rb +0 -2
- data/spec/unit/indirector/catalog/static_compiler_spec.rb +11 -0
- data/spec/unit/indirector/data_binding/hiera_spec.rb +1 -96
- data/spec/unit/indirector/facts/facter_spec.rb +69 -102
- data/spec/unit/indirector/hiera_spec.rb +17 -0
- data/spec/unit/indirector/request_spec.rb +2 -4
- data/spec/unit/indirector/resource/ral_spec.rb +5 -0
- data/spec/unit/indirector/resource_type/parser_spec.rb +17 -12
- data/spec/unit/indirector/rest_spec.rb +36 -6
- data/spec/unit/interface/face_collection_spec.rb +2 -2
- data/spec/unit/module_tool/applications/builder_spec.rb +364 -14
- data/spec/unit/module_tool/applications/uninstaller_spec.rb +22 -0
- data/spec/unit/module_tool/applications/unpacker_spec.rb +40 -0
- data/spec/unit/module_tool/applications/upgrader_spec.rb +22 -0
- data/spec/unit/module_tool/installed_modules_spec.rb +49 -0
- data/spec/unit/module_tool/metadata_spec.rb +72 -4
- data/spec/unit/module_tool/tar/mini_spec.rb +2 -1
- data/spec/unit/network/authentication_spec.rb +4 -0
- data/spec/unit/network/http/api/v2/environments_spec.rb +24 -3
- data/spec/unit/network/http/connection_spec.rb +127 -92
- data/spec/unit/network/http/factory_spec.rb +82 -0
- data/spec/unit/network/http/handler_spec.rb +23 -13
- data/spec/unit/network/http/nocache_pool_spec.rb +43 -0
- data/spec/unit/network/http/pool_spec.rb +269 -0
- data/spec/unit/network/http/rack/rest_spec.rb +1 -1
- data/spec/unit/network/http/session_spec.rb +43 -0
- data/spec/unit/network/http/site_spec.rb +90 -0
- data/spec/unit/network/http/webrick_spec.rb +1 -1
- data/spec/unit/network/http_pool_spec.rb +9 -6
- data/spec/unit/network/http_spec.rb +10 -0
- data/spec/unit/node/environment_spec.rb +54 -0
- data/spec/unit/node_spec.rb +3 -5
- data/spec/unit/parser/compiler_spec.rb +9 -2
- data/spec/unit/parser/files_spec.rb +19 -0
- data/spec/unit/parser/functions/contain_spec.rb +51 -0
- data/spec/unit/parser/functions/create_resources_spec.rb +8 -1
- data/spec/unit/parser/functions/digest_spec.rb +31 -0
- data/spec/unit/parser/functions/file_spec.rb +48 -5
- data/spec/unit/parser/functions/include_spec.rb +15 -1
- data/spec/unit/parser/functions/realize_spec.rb +43 -35
- data/spec/unit/parser/functions/require_spec.rb +19 -5
- data/spec/unit/parser/functions/search_spec.rb +5 -0
- data/spec/unit/parser/functions/shared.rb +82 -0
- data/spec/unit/parser/functions_spec.rb +1 -1
- data/spec/unit/parser/lexer_spec.rb +10 -1
- data/spec/unit/parser/type_loader_spec.rb +0 -1
- data/spec/unit/pops/benchmark_spec.rb +1 -1
- data/spec/unit/pops/binder/bindings_composer_spec.rb +24 -22
- data/spec/unit/pops/binder/injector_spec.rb +8 -6
- data/spec/unit/pops/evaluator/access_ops_spec.rb +3 -3
- data/spec/unit/pops/evaluator/comparison_ops_spec.rb +7 -4
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +250 -30
- data/spec/unit/pops/evaluator/logical_ops_spec.rb +2 -2
- data/spec/unit/pops/evaluator/variables_spec.rb +0 -105
- data/spec/unit/pops/issues_spec.rb +170 -0
- data/spec/unit/pops/loaders/dependency_loader_spec.rb +17 -0
- data/spec/unit/pops/loaders/loader_paths_spec.rb +4 -15
- data/spec/unit/pops/loaders/loaders_spec.rb +31 -11
- data/spec/unit/pops/loaders/module_loaders_spec.rb +0 -29
- data/spec/unit/pops/loaders/static_loader_spec.rb +6 -0
- data/spec/unit/pops/parser/epp_parser_spec.rb +38 -9
- data/spec/unit/pops/parser/evaluating_parser_spec.rb +0 -1
- data/spec/unit/pops/parser/lexer2_spec.rb +21 -4
- data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +5 -0
- data/spec/unit/pops/parser/parse_calls_spec.rb +6 -3
- data/spec/unit/pops/parser/parse_conditionals_spec.rb +12 -5
- data/spec/unit/pops/parser/parse_containers_spec.rb +62 -7
- data/spec/unit/pops/parser/parse_resource_spec.rb +155 -73
- data/spec/unit/pops/parser/parser_spec.rb +16 -0
- data/spec/unit/pops/parser/parsing_typed_parameters_spec.rb +72 -0
- data/spec/unit/pops/transformer/transform_calls_spec.rb +1 -1
- data/spec/unit/pops/types/type_calculator_spec.rb +254 -57
- data/spec/unit/pops/types/type_factory_spec.rb +8 -3
- data/spec/unit/pops/types/type_parser_spec.rb +26 -5
- data/spec/unit/pops/validator/validator_spec.rb +143 -27
- data/spec/unit/provider/exec/posix_spec.rb +22 -14
- data/spec/unit/provider/exec/shell_spec.rb +2 -2
- data/spec/unit/provider/file/windows_spec.rb +7 -7
- data/spec/unit/provider/group/windows_adsi_spec.rb +17 -17
- data/spec/unit/provider/package/gem_spec.rb +10 -0
- data/spec/unit/provider/package/openbsd_spec.rb +66 -9
- data/spec/unit/provider/package/pacman_spec.rb +90 -71
- data/spec/unit/provider/package/windows/package_spec.rb +21 -6
- data/spec/unit/provider/package/yum_spec.rb +1 -0
- data/spec/unit/provider/parsedfile_spec.rb +1 -1
- data/spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb +9 -9
- data/spec/unit/provider/service/openbsd_spec.rb +26 -2
- data/spec/unit/provider/service/upstart_spec.rb +12 -1
- data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +6 -0
- data/spec/unit/provider/user/user_role_add_spec.rb +23 -1
- data/spec/unit/provider/user/windows_adsi_spec.rb +17 -17
- data/spec/unit/reports/store_spec.rb +0 -16
- data/spec/unit/resource/catalog_spec.rb +0 -5
- data/spec/unit/resource_spec.rb +2 -2
- data/spec/unit/settings/autosign_setting_spec.rb +2 -2
- data/spec/unit/settings/environment_conf_spec.rb +77 -10
- data/spec/unit/settings/file_setting_spec.rb +5 -4
- data/spec/unit/settings/priority_setting_spec.rb +4 -4
- data/spec/unit/settings_spec.rb +41 -3
- data/spec/unit/ssl/certificate_authority_spec.rb +25 -2
- data/spec/unit/ssl/inventory_spec.rb +13 -0
- data/spec/unit/ssl/validator_spec.rb +0 -1
- data/spec/unit/transaction/resource_harness_spec.rb +64 -0
- data/spec/unit/transaction_spec.rb +98 -47
- data/spec/unit/type/cron_spec.rb +3 -3
- data/spec/unit/type/exec_spec.rb +9 -0
- data/spec/unit/type/file/content_spec.rb +54 -71
- data/spec/unit/type/file/mode_spec.rb +26 -1
- data/spec/unit/type/file/source_spec.rb +26 -4
- data/spec/unit/type/file_spec.rb +3 -3
- data/spec/unit/type/nagios_spec.rb +12 -3
- data/spec/unit/type/resources_spec.rb +64 -30
- data/spec/unit/type/user_spec.rb +1 -1
- data/spec/unit/type/yumrepo_spec.rb +136 -0
- data/spec/unit/type/zone_spec.rb +44 -1
- data/spec/unit/type_spec.rb +20 -0
- data/spec/unit/util/colors_spec.rb +14 -8
- data/spec/unit/util/command_line_spec.rb +11 -7
- data/spec/unit/util/execution_spec.rb +35 -42
- data/spec/unit/util/feature_spec.rb +12 -0
- data/spec/unit/util/http_proxy_spec.rb +43 -1
- data/spec/unit/util/log/destinations_spec.rb +45 -1
- data/spec/unit/util/logging_spec.rb +38 -0
- data/spec/unit/util/pidlock_spec.rb +37 -1
- data/spec/unit/util/profiler/aggregate_spec.rb +59 -0
- data/spec/unit/util/profiler/around_profiler_spec.rb +61 -0
- data/spec/unit/util/profiler/logging_spec.rb +18 -29
- data/spec/unit/util/profiler/wall_clock_spec.rb +1 -1
- data/spec/unit/util/profiler_spec.rb +55 -0
- data/spec/unit/util/queue_spec.rb +0 -1
- data/spec/unit/util/rdoc/parser_spec.rb +14 -6
- data/spec/unit/util/tagging_spec.rb +1 -1
- data/spec/unit/util/windows/access_control_entry_spec.rb +1 -1
- data/spec/unit/util/{adsi_spec.rb → windows/adsi_spec.rb} +111 -108
- data/spec/unit/util/windows/api_types_spec.rb +28 -0
- data/spec/unit/util/windows/registry_spec.rb +7 -6
- data/spec/unit/util/windows/sid_spec.rb +3 -6
- data/spec/unit/util/windows/string_spec.rb +4 -0
- data/spec/unit/util/zaml_spec.rb +5 -1
- data/tasks/benchmark.rake +40 -5
- data/tasks/parser.rake +16 -2
- data/tasks/yard.rake +1 -1
- metadata +296 -68
- data/lib/puppet/file_system/tempfile.rb +0 -20
- data/lib/puppet/parser/e_parser_adapter.rb +0 -119
- data/lib/puppet/parser/functions/collect.rb +0 -15
- data/lib/puppet/parser/functions/select.rb +0 -15
- data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +0 -109
- data/lib/puppet/pops/parser/lexer.rb +0 -753
- data/lib/puppet/pops/parser/makefile +0 -6
- data/lib/puppet/pops/validation/checker3_1.rb +0 -558
- data/lib/puppet/pops/validation/validator_factory_3_1.rb +0 -31
- data/lib/puppet/util/profiler/none.rb +0 -8
- data/spec/unit/face/certificate_request_spec.rb +0 -7
- data/spec/unit/face/certificate_revocation_list_spec.rb +0 -7
- data/spec/unit/face/key_spec.rb +0 -7
- data/spec/unit/face/report_spec.rb +0 -7
- data/spec/unit/face/resource_spec.rb +0 -7
- data/spec/unit/face/resource_type_spec.rb +0 -7
- data/spec/unit/file_system/tempfile_spec.rb +0 -48
- data/spec/unit/parser/eparser_adapter_spec.rb +0 -407
- data/spec/unit/parser/methods/map_spec.rb +0 -184
- data/spec/unit/parser/methods/shared.rb +0 -45
- data/spec/unit/pops/parser/lexer_spec.rb +0 -840
- data/spec/unit/pops/transformer/transform_resource_spec.rb +0 -185
- data/spec/unit/util/profiler/none_spec.rb +0 -12
@@ -67,16 +67,20 @@
|
|
67
67
|
# type by looking at the Ruby class of the types this is considered an implementation detail, and such checks should in general
|
68
68
|
# be performed by the type_calculator which implements the type system semantics.
|
69
69
|
#
|
70
|
-
# The
|
70
|
+
# The PRuntimeType
|
71
71
|
# -------------
|
72
|
-
# The
|
73
|
-
#
|
74
|
-
#
|
75
|
-
#
|
76
|
-
#
|
77
|
-
#
|
78
|
-
#
|
79
|
-
#
|
72
|
+
# The PRuntimeType corresponds to a type in the runtime system (currently only supported runtime is 'ruby'). The
|
73
|
+
# type has a runtime_type_name that corresponds to a Ruby Class name.
|
74
|
+
# A Runtime[ruby] type can be used to describe any ruby class except for the puppet types that are specialized
|
75
|
+
# (i.e. PRuntimeType should not be used for Integer, String, etc. since there are specialized types for those).
|
76
|
+
# When the type calculator deals with PRuntimeTypes and checks for assignability, it determines the
|
77
|
+
# "common ancestor class" of two classes.
|
78
|
+
# This check is made based on the superclasses of the two classes being compared. In order to perform this, the
|
79
|
+
# classes must be present (i.e. they are resolved from the string form in the PRuntimeType to a
|
80
|
+
# loaded, instantiated Ruby Class). In general this is not a problem, since the question to produce the common
|
81
|
+
# super type for two objects means that the classes must be present or there would have been
|
82
|
+
# no instances present in the first place. If however the classes are not present, the type
|
83
|
+
# calculator will fall back and state that the two types at least have Any in common.
|
80
84
|
#
|
81
85
|
# @see Puppet::Pops::Types::TypeFactory TypeFactory for how to create instances of types
|
82
86
|
# @see Puppet::Pops::Types::TypeParser TypeParser how to construct a type instance from a String
|
@@ -86,7 +90,7 @@
|
|
86
90
|
# -----
|
87
91
|
# The type calculator can be directly used via its class methods. If doing time critical work and doing many
|
88
92
|
# calls to the type calculator, it is more performant to create an instance and invoke the corresponding
|
89
|
-
# instance methods. Note that inference is an expensive operation, rather than
|
93
|
+
# instance methods. Note that inference is an expensive operation, rather than inferring the same thing
|
90
94
|
# several times, it is in general better to infer once and then copy the result if mutation to a more generic form is
|
91
95
|
# required.
|
92
96
|
#
|
@@ -113,7 +117,7 @@ class Puppet::Pops::Types::TypeCalculator
|
|
113
117
|
end
|
114
118
|
|
115
119
|
# Produces a String representation of the given type.
|
116
|
-
# @param t [Puppet::Pops::Types::
|
120
|
+
# @param t [Puppet::Pops::Types::PAnyType] the type to produce a string form
|
117
121
|
# @return [String] the type in string form
|
118
122
|
#
|
119
123
|
# @api public
|
@@ -178,7 +182,7 @@ class Puppet::Pops::Types::TypeCalculator
|
|
178
182
|
@data_t = Types::PDataType.new()
|
179
183
|
@scalar_t = Types::PScalarType.new()
|
180
184
|
@numeric_t = Types::PNumericType.new()
|
181
|
-
@t = Types::
|
185
|
+
@t = Types::PAnyType.new()
|
182
186
|
|
183
187
|
# Data accepts a Tuple that has 0-infinity Data compatible entries (e.g. a Tuple equivalent to Array).
|
184
188
|
data_tuple = Types::PTupleType.new()
|
@@ -233,18 +237,18 @@ class Puppet::Pops::Types::TypeCalculator
|
|
233
237
|
# A class is injectable if it has a special *assisted inject* class method called `inject` taking
|
234
238
|
# an injector and a scope as argument, or if it has a zero args `initialize` method.
|
235
239
|
#
|
236
|
-
# @param klazz [Class,
|
240
|
+
# @param klazz [Class, PRuntimeType] the class/type to check if it is injectable
|
237
241
|
# @return [Class, nil] the injectable Class, or nil if not injectable
|
238
242
|
# @api public
|
239
243
|
#
|
240
244
|
def injectable_class(klazz)
|
241
245
|
# Handle case when we get a PType instead of a class
|
242
|
-
if klazz.is_a?(Types::
|
246
|
+
if klazz.is_a?(Types::PRuntimeType)
|
243
247
|
klazz = Puppet::Pops::Types::ClassLoader.provide(klazz)
|
244
248
|
end
|
245
249
|
|
246
|
-
# data types can not be injected (check again, it is not safe to assume that given
|
247
|
-
return false unless type(klazz).is_a?(Types::
|
250
|
+
# data types can not be injected (check again, it is not safe to assume that given RubyRuntime klazz arg was ok)
|
251
|
+
return false unless type(klazz).is_a?(Types::PRuntimeType)
|
248
252
|
if (klazz.respond_to?(:inject) && klazz.method(:inject).arity() == -4) || klazz.instance_method(:initialize).arity() == 0
|
249
253
|
klazz
|
250
254
|
else
|
@@ -265,6 +269,8 @@ class Puppet::Pops::Types::TypeCalculator
|
|
265
269
|
if t2.is_a?(Class)
|
266
270
|
t2 = type(t2)
|
267
271
|
end
|
272
|
+
# Unit can be assigned to anything
|
273
|
+
return true if t2.class == Types::PUnitType
|
268
274
|
|
269
275
|
@@assignable_visitor.visit_this_1(self, t, t2)
|
270
276
|
end
|
@@ -277,18 +283,18 @@ class Puppet::Pops::Types::TypeCalculator
|
|
277
283
|
# Answers, does the given callable accept the arguments given in args (an array or a tuple)
|
278
284
|
#
|
279
285
|
def callable?(callable, args)
|
280
|
-
return false if !
|
286
|
+
return false if !self.class.is_kind_of_callable?(callable)
|
281
287
|
# Note that polymorphism is for the args type, the callable is always a callable
|
282
288
|
@@callable_visitor.visit_this_1(self, args, callable)
|
283
289
|
end
|
284
290
|
|
285
291
|
# Answers if the two given types describe the same type
|
286
292
|
def equals(left, right)
|
287
|
-
return false unless left.is_a?(Types::
|
293
|
+
return false unless left.is_a?(Types::PAnyType) && right.is_a?(Types::PAnyType)
|
288
294
|
# Types compare per class only - an extra test must be made if the are mutually assignable
|
289
295
|
# to find all types that represent the same type of instance
|
290
296
|
#
|
291
|
-
left
|
297
|
+
left == right || (assignable?(right, left) && assignable?(left, right))
|
292
298
|
end
|
293
299
|
|
294
300
|
# Answers 'what is the Puppet Type corresponding to the given Ruby class'
|
@@ -326,8 +332,7 @@ class Puppet::Pops::Types::TypeCalculator
|
|
326
332
|
type.key_type = Types::PScalarType.new()
|
327
333
|
type.element_type = Types::PDataType.new()
|
328
334
|
else
|
329
|
-
type = Types::
|
330
|
-
type.ruby_class = c.name
|
335
|
+
type = Types::PRuntimeType.new(:runtime => :ruby, :runtime_type_name => c.name)
|
331
336
|
end
|
332
337
|
type
|
333
338
|
end
|
@@ -391,17 +396,24 @@ class Puppet::Pops::Types::TypeCalculator
|
|
391
396
|
end
|
392
397
|
|
393
398
|
def instance_of_Object(t, o)
|
394
|
-
# Undef is Undef and
|
395
|
-
return false if (o.nil?
|
399
|
+
# Undef is Undef and Any, but nothing else when checking instance?
|
400
|
+
return false if (o.nil?) && t.class != Types::PAnyType
|
396
401
|
assignable?(t, infer(o))
|
397
402
|
end
|
398
403
|
|
404
|
+
# Anything is an instance of Unit
|
405
|
+
# @api private
|
406
|
+
def instance_of_PUnitType(t, o)
|
407
|
+
true
|
408
|
+
end
|
409
|
+
|
399
410
|
def instance_of_PArrayType(t, o)
|
400
411
|
return false unless o.is_a?(Array)
|
401
412
|
return false unless o.all? {|element| instance_of(t.element_type, element) }
|
402
413
|
size_t = t.size_type || @collection_default_size_t
|
403
414
|
size_t2 = size_as_type(o)
|
404
|
-
|
415
|
+
# optimize by calling directly
|
416
|
+
assignable_PIntegerType(size_t, size_t2)
|
405
417
|
end
|
406
418
|
|
407
419
|
def instance_of_PTupleType(t, o)
|
@@ -432,7 +444,8 @@ class Puppet::Pops::Types::TypeCalculator
|
|
432
444
|
return false unless o.keys.all? {|key| instance_of(key_t, key) } && o.values.all? {|value| instance_of(element_t, value) }
|
433
445
|
size_t = t.size_type || @collection_default_size_t
|
434
446
|
size_t2 = size_as_type(o)
|
435
|
-
|
447
|
+
# optimize by calling directly
|
448
|
+
assignable_PIntegerType(size_t, size_t2)
|
436
449
|
end
|
437
450
|
|
438
451
|
def instance_of_PDataType(t, o)
|
@@ -440,11 +453,11 @@ class Puppet::Pops::Types::TypeCalculator
|
|
440
453
|
end
|
441
454
|
|
442
455
|
def instance_of_PNilType(t, o)
|
443
|
-
return o.nil?
|
456
|
+
return o.nil?
|
444
457
|
end
|
445
458
|
|
446
459
|
def instance_of_POptionalType(t, o)
|
447
|
-
return true if (o.nil?
|
460
|
+
return true if (o.nil?)
|
448
461
|
instance_of(t.optional_type, o)
|
449
462
|
end
|
450
463
|
|
@@ -471,7 +484,7 @@ class Puppet::Pops::Types::TypeCalculator
|
|
471
484
|
# @api public
|
472
485
|
#
|
473
486
|
def is_ptype?(t)
|
474
|
-
return t.is_a?(Types::
|
487
|
+
return t.is_a?(Types::PAnyType)
|
475
488
|
end
|
476
489
|
|
477
490
|
# Answers if t represents the puppet type PNilType
|
@@ -490,6 +503,7 @@ class Puppet::Pops::Types::TypeCalculator
|
|
490
503
|
def common_type(t1, t2)
|
491
504
|
raise ArgumentError, 'two types expected' unless (is_ptype?(t1) || is_pnil?(t1)) && (is_ptype?(t2) || is_pnil?(t2))
|
492
505
|
|
506
|
+
# TODO: This is not right since Scalar U Undef is Any
|
493
507
|
# if either is nil, the common type is the other
|
494
508
|
if is_pnil?(t1)
|
495
509
|
return t2
|
@@ -497,6 +511,13 @@ class Puppet::Pops::Types::TypeCalculator
|
|
497
511
|
return t1
|
498
512
|
end
|
499
513
|
|
514
|
+
# If either side is Unit, it is the other type
|
515
|
+
if t1.is_a?(Types::PUnitType)
|
516
|
+
return t2
|
517
|
+
elsif t2.is_a?(Types::PUnitType)
|
518
|
+
return t1
|
519
|
+
end
|
520
|
+
|
500
521
|
# Simple case, one is assignable to the other
|
501
522
|
if assignable?(t1, t2)
|
502
523
|
return t1
|
@@ -566,7 +587,7 @@ class Puppet::Pops::Types::TypeCalculator
|
|
566
587
|
if t1.is_a?(Types::PPatternType) && t2.is_a?(Types::PPatternType)
|
567
588
|
t = Types::PPatternType.new()
|
568
589
|
# must make copies since patterns are contained types, not data-types
|
569
|
-
t.patterns = (t1.patterns | t2.patterns).map
|
590
|
+
t.patterns = (t1.patterns | t2.patterns).map(&:copy)
|
570
591
|
return t
|
571
592
|
end
|
572
593
|
|
@@ -580,7 +601,7 @@ class Puppet::Pops::Types::TypeCalculator
|
|
580
601
|
if t1.is_a?(Types::PVariantType) && t2.is_a?(Types::PVariantType)
|
581
602
|
# The common type is one that complies with either set
|
582
603
|
t = Types::PVariantType.new
|
583
|
-
t.types = (t1.types | t2.types).map
|
604
|
+
t.types = (t1.types | t2.types).map(&:copy)
|
584
605
|
return t
|
585
606
|
end
|
586
607
|
|
@@ -616,11 +637,13 @@ class Puppet::Pops::Types::TypeCalculator
|
|
616
637
|
return type
|
617
638
|
end
|
618
639
|
|
619
|
-
|
620
|
-
|
640
|
+
# If both are Runtime types
|
641
|
+
if t1.is_a?(Types::PRuntimeType) && t2.is_a?(Types::PRuntimeType)
|
642
|
+
if t1.runtime == t2.runtime && t1.runtime_type_name == t2.runtime_type_name
|
621
643
|
return t1
|
622
644
|
end
|
623
645
|
# finding the common super class requires that names are resolved to class
|
646
|
+
# NOTE: This only supports runtime type of :ruby
|
624
647
|
c1 = Types::ClassLoader.provide_from_type(t1)
|
625
648
|
c2 = Types::ClassLoader.provide_from_type(t2)
|
626
649
|
if c1 && c2
|
@@ -628,18 +651,16 @@ class Puppet::Pops::Types::TypeCalculator
|
|
628
651
|
superclasses(c1).each do|c1_super|
|
629
652
|
c2_superclasses.each do |c2_super|
|
630
653
|
if c1_super == c2_super
|
631
|
-
|
632
|
-
result.ruby_class = c1_super.name
|
633
|
-
return result
|
654
|
+
return Types::PRuntimeType.new(:runtime => :ruby, :runtime_type_name => c1_super.name)
|
634
655
|
end
|
635
656
|
end
|
636
657
|
end
|
637
658
|
end
|
638
659
|
end
|
639
|
-
# If both are RubyObjects
|
640
660
|
|
641
|
-
|
642
|
-
|
661
|
+
# They better both be Any type, or the wrong thing was asked and nil is returned
|
662
|
+
if t1.is_a?(Types::PAnyType) && t2.is_a?(Types::PAnyType)
|
663
|
+
return Types::PAnyType.new()
|
643
664
|
end
|
644
665
|
end
|
645
666
|
|
@@ -701,15 +722,13 @@ class Puppet::Pops::Types::TypeCalculator
|
|
701
722
|
|
702
723
|
# @api private
|
703
724
|
def infer_Object(o)
|
704
|
-
|
705
|
-
type.ruby_class = o.class.name
|
706
|
-
type
|
725
|
+
Types::PRuntimeType.new(:runtime => :ruby, :runtime_type_name => o.class.name)
|
707
726
|
end
|
708
727
|
|
709
728
|
# The type of all types is PType
|
710
729
|
# @api private
|
711
730
|
#
|
712
|
-
def
|
731
|
+
def infer_PAnyType(o)
|
713
732
|
type = Types::PType.new()
|
714
733
|
type.type = o.copy
|
715
734
|
type
|
@@ -761,10 +780,16 @@ class Puppet::Pops::Types::TypeCalculator
|
|
761
780
|
Types::PNilType.new()
|
762
781
|
end
|
763
782
|
|
764
|
-
# Inference of :
|
783
|
+
# Inference of :default as PDefaultType, and all other are Ruby[Symbol]
|
765
784
|
# @api private
|
766
785
|
def infer_Symbol(o)
|
767
|
-
|
786
|
+
case o
|
787
|
+
when :default
|
788
|
+
Types::PDefaultType.new()
|
789
|
+
|
790
|
+
else
|
791
|
+
infer_Object(o)
|
792
|
+
end
|
768
793
|
end
|
769
794
|
|
770
795
|
# @api private
|
@@ -782,12 +807,14 @@ class Puppet::Pops::Types::TypeCalculator
|
|
782
807
|
#
|
783
808
|
def infer_Resource(o)
|
784
809
|
t = Types::PResourceType.new()
|
785
|
-
t.type_name = o.type.to_s
|
810
|
+
t.type_name = o.type.to_s.downcase
|
786
811
|
# Only Puppet::Resource can have a title that is a symbol :undef, a PResource cannot.
|
787
812
|
# A mapping must be made to empty string. A nil value will result in an error later
|
788
813
|
title = o.title
|
789
|
-
t.title = (
|
790
|
-
|
814
|
+
t.title = (:undef == title ? '' : title)
|
815
|
+
type = Types::PType.new()
|
816
|
+
type.type = t
|
817
|
+
type
|
791
818
|
end
|
792
819
|
|
793
820
|
# @api private
|
@@ -848,7 +875,7 @@ class Puppet::Pops::Types::TypeCalculator
|
|
848
875
|
type = Types::PHashType.new()
|
849
876
|
if o.empty?
|
850
877
|
ktype = Types::PNilType.new()
|
851
|
-
|
878
|
+
vtype = Types::PNilType.new()
|
852
879
|
else
|
853
880
|
ktype = Types::PVariantType.new()
|
854
881
|
ktype.types = o.keys.map() {|k| infer_set(k) }
|
@@ -856,7 +883,7 @@ class Puppet::Pops::Types::TypeCalculator
|
|
856
883
|
etype.types = o.values.map() {|e| infer_set(e) }
|
857
884
|
end
|
858
885
|
type.key_type = unwrap_single_variant(ktype)
|
859
|
-
type.element_type = unwrap_single_variant(
|
886
|
+
type.element_type = unwrap_single_variant(etype)
|
860
887
|
type.size_type = size_as_type(o)
|
861
888
|
type
|
862
889
|
end
|
@@ -868,6 +895,7 @@ class Puppet::Pops::Types::TypeCalculator
|
|
868
895
|
possible_variant
|
869
896
|
end
|
870
897
|
end
|
898
|
+
|
871
899
|
# False in general type calculator
|
872
900
|
# @api private
|
873
901
|
def assignable_Object(t, t2)
|
@@ -875,8 +903,8 @@ class Puppet::Pops::Types::TypeCalculator
|
|
875
903
|
end
|
876
904
|
|
877
905
|
# @api private
|
878
|
-
def
|
879
|
-
t2.is_a?(Types::
|
906
|
+
def assignable_PAnyType(t, t2)
|
907
|
+
t2.is_a?(Types::PAnyType)
|
880
908
|
end
|
881
909
|
|
882
910
|
# @api private
|
@@ -885,6 +913,18 @@ class Puppet::Pops::Types::TypeCalculator
|
|
885
913
|
t2.is_a?(Types::PNilType)
|
886
914
|
end
|
887
915
|
|
916
|
+
# Anything is assignable to a Unit type
|
917
|
+
# @api private
|
918
|
+
def assignable_PUnitType(t, t2)
|
919
|
+
true
|
920
|
+
end
|
921
|
+
|
922
|
+
# @api private
|
923
|
+
def assignable_PDefaultType(t, t2)
|
924
|
+
# Only default is assignable to default type
|
925
|
+
t2.is_a?(Types::PDefaultType)
|
926
|
+
end
|
927
|
+
|
888
928
|
# @api private
|
889
929
|
def assignable_PScalarType(t, t2)
|
890
930
|
t2.is_a?(Types::PScalarType)
|
@@ -941,7 +981,7 @@ class Puppet::Pops::Types::TypeCalculator
|
|
941
981
|
# A variant is assignable if all of its options are assignable to one of this type's options
|
942
982
|
return true if t == t2
|
943
983
|
t2.types.all? do |other|
|
944
|
-
# if the other is a Variant, all
|
984
|
+
# if the other is a Variant, all of its options, but be assignable to one of this type's options
|
945
985
|
other = other.is_a?(Types::PDataType) ? @data_variant_t : other
|
946
986
|
if other.is_a?(Types::PVariantType)
|
947
987
|
assignable?(t, other)
|
@@ -966,7 +1006,7 @@ class Puppet::Pops::Types::TypeCalculator
|
|
966
1006
|
end
|
967
1007
|
# Assume no block was given - i.e. it is nil, and its type is PNilType
|
968
1008
|
block_t = @nil_t
|
969
|
-
if args_tuple.types.last
|
1009
|
+
if self.class.is_kind_of_callable?(args_tuple.types.last)
|
970
1010
|
# a split is needed to make it possible to use required, optional, and varargs semantics
|
971
1011
|
# of the tuple type.
|
972
1012
|
#
|
@@ -978,16 +1018,41 @@ class Puppet::Pops::Types::TypeCalculator
|
|
978
1018
|
end
|
979
1019
|
# unless argument types match parameter types
|
980
1020
|
return false unless assignable?(callable_t.param_types, args_tuple)
|
981
|
-
#
|
1021
|
+
# can the given block be *called* with a signature requirement specified by callable_t?
|
982
1022
|
assignable?(callable_t.block_type || @nil_t, block_t)
|
983
1023
|
end
|
984
1024
|
|
1025
|
+
# @api private
|
1026
|
+
def self.is_kind_of_callable?(t, optional = true)
|
1027
|
+
case t
|
1028
|
+
when Types::PCallableType
|
1029
|
+
true
|
1030
|
+
when Types::POptionalType
|
1031
|
+
optional && is_kind_of_callable?(t.optional_type, optional)
|
1032
|
+
when Types::PVariantType
|
1033
|
+
t.types.all? {|t2| is_kind_of_callable?(t2, optional) }
|
1034
|
+
else
|
1035
|
+
false
|
1036
|
+
end
|
1037
|
+
end
|
1038
|
+
|
1039
|
+
|
985
1040
|
def callable_PArrayType(args_array, callable_t)
|
986
1041
|
return false unless assignable?(callable_t.param_types, args_array)
|
987
|
-
# does not support calling with a block, but have to check that callable
|
1042
|
+
# does not support calling with a block, but have to check that callable is ok with missing block
|
988
1043
|
assignable?(callable_t.block_type || @nil_t, @nil_t)
|
989
1044
|
end
|
990
1045
|
|
1046
|
+
def callable_PNilType(nil_t, callable_t)
|
1047
|
+
# if callable_t is Optional (or indeed PNilType), this means that 'missing callable' is accepted
|
1048
|
+
assignable?(callable_t, nil_t)
|
1049
|
+
end
|
1050
|
+
|
1051
|
+
def callable_PCallableType(given_callable_t, required_callable_t)
|
1052
|
+
# If the required callable is euqal or more specific than the given, the given is callable
|
1053
|
+
assignable?(required_callable_t, given_callable_t)
|
1054
|
+
end
|
1055
|
+
|
991
1056
|
def max(a,b)
|
992
1057
|
a >=b ? a : b
|
993
1058
|
end
|
@@ -1004,12 +1069,14 @@ class Puppet::Pops::Types::TypeCalculator
|
|
1004
1069
|
size_t2 = t2.size_type || Puppet::Pops::Types::TypeFactory.range(*t2.size_range)
|
1005
1070
|
|
1006
1071
|
# not assignable if the number of types in t2 is outside number of types in t1
|
1007
|
-
|
1008
|
-
|
1009
|
-
|
1072
|
+
if assignable?(size_t, size_t2)
|
1073
|
+
t2.types.size.times do |index|
|
1074
|
+
return false unless assignable?((t.types[index] || t.types[-1]), t2.types[index])
|
1075
|
+
end
|
1076
|
+
return true
|
1077
|
+
else
|
1078
|
+
return false
|
1010
1079
|
end
|
1011
|
-
true
|
1012
|
-
|
1013
1080
|
elsif t2.is_a?(Types::PArrayType)
|
1014
1081
|
t2_entry = t2.element_type
|
1015
1082
|
|
@@ -1064,7 +1131,7 @@ class Puppet::Pops::Types::TypeCalculator
|
|
1064
1131
|
# hash key type must be string of min 1 size
|
1065
1132
|
# hash value t must be assignable to each key
|
1066
1133
|
element_type = t2.element_type
|
1067
|
-
|
1134
|
+
assignable_PIntegerType(size_t, size_t2) &&
|
1068
1135
|
assignable?(@non_empty_string_t, t2.key_type) &&
|
1069
1136
|
h.all? {|k,v| assignable?(v, element_type) }
|
1070
1137
|
else
|
@@ -1085,9 +1152,14 @@ class Puppet::Pops::Types::TypeCalculator
|
|
1085
1152
|
# @api private
|
1086
1153
|
def assignable_PEnumType(t, t2)
|
1087
1154
|
return true if t == t2 || (t.values.empty? && (t2.is_a?(Types::PStringType) || t2.is_a?(Types::PEnumType)))
|
1088
|
-
|
1155
|
+
case t2
|
1156
|
+
when Types::PStringType
|
1089
1157
|
# if the set of strings are all found in the set of enums
|
1090
1158
|
t2.values.all? { |s| t.values.any? { |e| e == s }}
|
1159
|
+
when Types::PVariantType
|
1160
|
+
t2.types.all? {|variant_t| assignable_PEnumType(t, variant_t) }
|
1161
|
+
when Types::PEnumType
|
1162
|
+
t2.values.all? { |s| t.values.any? {|e| e == s }}
|
1091
1163
|
else
|
1092
1164
|
false
|
1093
1165
|
end
|
@@ -1105,11 +1177,11 @@ class Puppet::Pops::Types::TypeCalculator
|
|
1105
1177
|
when Types::PStringType
|
1106
1178
|
# true if size compliant
|
1107
1179
|
size_t2 = t2.size_type || @collection_default_size_t
|
1108
|
-
|
1180
|
+
assignable_PIntegerType(size_t, size_t2)
|
1109
1181
|
|
1110
1182
|
when Types::PPatternType
|
1111
1183
|
# true if size constraint is at least 0 to +Infinity (which is the same as the default)
|
1112
|
-
|
1184
|
+
assignable_PIntegerType(size_t, @collection_default_size_t)
|
1113
1185
|
|
1114
1186
|
when Types::PEnumType
|
1115
1187
|
if t2.values
|
@@ -1140,7 +1212,14 @@ class Puppet::Pops::Types::TypeCalculator
|
|
1140
1212
|
# @api private
|
1141
1213
|
def assignable_PPatternType(t, t2)
|
1142
1214
|
return true if t == t2
|
1143
|
-
|
1215
|
+
case t2
|
1216
|
+
when Types::PStringType, Types::PEnumType
|
1217
|
+
values = t2.values
|
1218
|
+
when Types::PVariantType
|
1219
|
+
return t2.types.all? {|variant_t| assignable_PPatternType(t, variant_t) }
|
1220
|
+
else
|
1221
|
+
return false
|
1222
|
+
end
|
1144
1223
|
|
1145
1224
|
if t2.values.empty?
|
1146
1225
|
# Strings / Enums (unknown which ones) cannot all match a pattern, but if there is no pattern it is ok
|
@@ -1176,12 +1255,16 @@ class Puppet::Pops::Types::TypeCalculator
|
|
1176
1255
|
return false unless t2.is_a?(Types::PCallableType)
|
1177
1256
|
# nil param_types means, any other Callable is assignable
|
1178
1257
|
return true if t.param_types.nil?
|
1179
|
-
|
1258
|
+
|
1259
|
+
# NOTE: these tests are made in reverse as it is calling the callable that is constrained
|
1260
|
+
# (it's lower bound), not its upper bound
|
1261
|
+
return false unless assignable?(t2.param_types, t.param_types)
|
1180
1262
|
# names are ignored, they are just information
|
1181
1263
|
# Blocks must be compatible
|
1182
1264
|
this_block_t = t.block_type || @nil_t
|
1183
1265
|
that_block_t = t2.block_type || @nil_t
|
1184
|
-
assignable?(
|
1266
|
+
assignable?(that_block_t, this_block_t)
|
1267
|
+
|
1185
1268
|
end
|
1186
1269
|
|
1187
1270
|
# @api private
|
@@ -1190,20 +1273,20 @@ class Puppet::Pops::Types::TypeCalculator
|
|
1190
1273
|
case t2
|
1191
1274
|
when Types::PCollectionType
|
1192
1275
|
size_t2 = t2.size_type || @collection_default_size_t
|
1193
|
-
|
1276
|
+
assignable_PIntegerType(size_t, size_t2)
|
1194
1277
|
when Types::PTupleType
|
1195
1278
|
# compute the tuple's min/max size, and check if that size matches
|
1196
1279
|
from, to = size_range(t2.size_type)
|
1197
1280
|
t2s = Types::PIntegerType.new()
|
1198
1281
|
t2s.from = t2.types.size - 1 + from
|
1199
1282
|
t2s.to = t2.types.size - 1 + to
|
1200
|
-
|
1283
|
+
assignable_PIntegerType(size_t, t2s)
|
1201
1284
|
when Types::PStructType
|
1202
1285
|
from = to = t2.elements.size
|
1203
1286
|
t2s = Types::PIntegerType.new()
|
1204
1287
|
t2s.from = from
|
1205
1288
|
t2s.to = to
|
1206
|
-
|
1289
|
+
assignable_PIntegerType(size_t, t2s)
|
1207
1290
|
else
|
1208
1291
|
false
|
1209
1292
|
end
|
@@ -1310,14 +1393,18 @@ class Puppet::Pops::Types::TypeCalculator
|
|
1310
1393
|
t2.is_a?(Types::PDataType) || assignable?(@data_variant_t, t2)
|
1311
1394
|
end
|
1312
1395
|
|
1313
|
-
# Assignable if t2's
|
1396
|
+
# Assignable if t2's has the same runtime and the runtime name resolves to
|
1397
|
+
# a class that is the same or subclass of t1's resolved runtime type name
|
1314
1398
|
# @api private
|
1315
|
-
def
|
1316
|
-
return false unless t2.is_a?(Types::
|
1317
|
-
return
|
1318
|
-
return
|
1319
|
-
|
1320
|
-
|
1399
|
+
def assignable_PRuntimeType(t1, t2)
|
1400
|
+
return false unless t2.is_a?(Types::PRuntimeType)
|
1401
|
+
return false unless t1.runtime == t2.runtime
|
1402
|
+
return true if t1.runtime_type_name.nil? # t1 is wider
|
1403
|
+
return false if t2.runtime_type_name.nil? # t1 not nil, so t2 can not be wider
|
1404
|
+
|
1405
|
+
# NOTE: This only supports Ruby, must change when/if the set of runtimes is expanded
|
1406
|
+
c1 = class_from_string(t1.runtime_type_name)
|
1407
|
+
c2 = class_from_string(t2.runtime_type_name)
|
1321
1408
|
return false unless c1.is_a?(Class) && c2.is_a?(Class)
|
1322
1409
|
!!(c2 <= c1)
|
1323
1410
|
end
|
@@ -1343,16 +1430,21 @@ class Puppet::Pops::Types::TypeCalculator
|
|
1343
1430
|
def string_String(t) ; t ; end
|
1344
1431
|
|
1345
1432
|
# @api private
|
1346
|
-
def
|
1433
|
+
def string_Symbol(t) ; t.to_s ; end
|
1434
|
+
|
1435
|
+
def string_PAnyType(t) ; "Any" ; end
|
1347
1436
|
|
1348
1437
|
# @api private
|
1349
1438
|
def string_PNilType(t) ; 'Undef' ; end
|
1350
1439
|
|
1440
|
+
# @api private
|
1441
|
+
def string_PDefaultType(t) ; 'Default' ; end
|
1442
|
+
|
1351
1443
|
# @api private
|
1352
1444
|
def string_PBooleanType(t) ; "Boolean" ; end
|
1353
1445
|
|
1354
1446
|
# @api private
|
1355
|
-
def string_PScalarType(t)
|
1447
|
+
def string_PScalarType(t) ; "Scalar" ; end
|
1356
1448
|
|
1357
1449
|
# @api private
|
1358
1450
|
def string_PDataType(t) ; "Data" ; end
|
@@ -1444,7 +1536,8 @@ class Puppet::Pops::Types::TypeCalculator
|
|
1444
1536
|
else
|
1445
1537
|
range = range_array_part(t.param_types.size_type)
|
1446
1538
|
end
|
1447
|
-
|
1539
|
+
# translate to string, and skip Unit types
|
1540
|
+
types = t.param_types.types.map {|t2| string(t2) unless t2.class == Types::PUnitType }.compact
|
1448
1541
|
|
1449
1542
|
params_part= types.join(', ')
|
1450
1543
|
|
@@ -1490,7 +1583,12 @@ class Puppet::Pops::Types::TypeCalculator
|
|
1490
1583
|
end
|
1491
1584
|
|
1492
1585
|
# @api private
|
1493
|
-
def
|
1586
|
+
def string_PUnitType(t)
|
1587
|
+
"Unit"
|
1588
|
+
end
|
1589
|
+
|
1590
|
+
# @api private
|
1591
|
+
def string_PRuntimeType(t) ; "Runtime[#{string(t.runtime)}, #{string(t.runtime_type_name)}]" ; end
|
1494
1592
|
|
1495
1593
|
# @api private
|
1496
1594
|
def string_PArrayType(t)
|
@@ -1522,9 +1620,9 @@ class Puppet::Pops::Types::TypeCalculator
|
|
1522
1620
|
def string_PResourceType(t)
|
1523
1621
|
if t.type_name
|
1524
1622
|
if t.title
|
1525
|
-
"#{t.type_name
|
1623
|
+
"#{capitalize_segments(t.type_name)}['#{t.title}']"
|
1526
1624
|
else
|
1527
|
-
|
1625
|
+
capitalize_segments(t.type_name)
|
1528
1626
|
end
|
1529
1627
|
else
|
1530
1628
|
"Resource"
|
@@ -1569,9 +1667,15 @@ class Puppet::Pops::Types::TypeCalculator
|
|
1569
1667
|
|
1570
1668
|
private
|
1571
1669
|
|
1670
|
+
NAME_SEGMENT_SEPARATOR = '::'.freeze
|
1671
|
+
|
1672
|
+
def capitalize_segments(s)
|
1673
|
+
s.split(NAME_SEGMENT_SEPARATOR).map(&:capitalize).join(NAME_SEGMENT_SEPARATOR)
|
1674
|
+
end
|
1675
|
+
|
1572
1676
|
def class_from_string(str)
|
1573
1677
|
begin
|
1574
|
-
str.split(
|
1678
|
+
str.split(NAME_SEGMENT_SEPARATOR).inject(Object) do |memo, name_segment|
|
1575
1679
|
memo.const_get(name_segment)
|
1576
1680
|
end
|
1577
1681
|
rescue NameError
|
@@ -1591,7 +1695,4 @@ class Puppet::Pops::Types::TypeCalculator
|
|
1591
1695
|
assignable?(@numeric_t, t1) && assignable?(@numeric_t, t2)
|
1592
1696
|
end
|
1593
1697
|
|
1594
|
-
def common_pobject?(t1, t2)
|
1595
|
-
assignable?(@t, t1) && assignable?(@t, t2)
|
1596
|
-
end
|
1597
1698
|
end
|