puppet 3.6.2-x86-mingw32 → 3.7.0-x86-mingw32
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/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 +308 -150
- 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
@@ -0,0 +1,113 @@
|
|
1
|
+
# Applies a parameterized block to each element in a sequence of entries from the first
|
2
|
+
# argument and returns an array or hash (same type as left operand for array/hash, and array for
|
3
|
+
# other enumerable types) with the entries for which the block evaluates to `true`.
|
4
|
+
#
|
5
|
+
# This function takes two mandatory arguments: the first should be an Array, a Hash, or an
|
6
|
+
# Enumerable object (integer, Integer range, or String),
|
7
|
+
# and the second a parameterized block as produced by the puppet syntax:
|
8
|
+
#
|
9
|
+
# $a.filter |$x| { ... }
|
10
|
+
# filter($a) |$x| { ... }
|
11
|
+
#
|
12
|
+
# When the first argument is something other than a Hash, the block is called with each entry in turn.
|
13
|
+
# When the first argument is a Hash the entry is an array with `[key, value]`.
|
14
|
+
#
|
15
|
+
# @example Using filter with one parameter
|
16
|
+
#
|
17
|
+
# # selects all that end with berry
|
18
|
+
# $a = ["raspberry", "blueberry", "orange"]
|
19
|
+
# $a.filter |$x| { $x =~ /berry$/ } # rasberry, blueberry
|
20
|
+
#
|
21
|
+
# If the block defines two parameters, they will be set to `index, value` (with index starting at 0) for all
|
22
|
+
# enumerables except Hash, and to `key, value` for a Hash.
|
23
|
+
#
|
24
|
+
# @example Using filter with two parameters
|
25
|
+
#
|
26
|
+
# # selects all that end with 'berry' at an even numbered index
|
27
|
+
# $a = ["raspberry", "blueberry", "orange"]
|
28
|
+
# $a.filter |$index, $x| { $index % 2 == 0 and $x =~ /berry$/ } # raspberry
|
29
|
+
#
|
30
|
+
# # selects all that end with 'berry' and value >= 1
|
31
|
+
# $a = {"raspberry"=>0, "blueberry"=>1, "orange"=>1}
|
32
|
+
# $a.filter |$key, $x| { $x =~ /berry$/ and $x >= 1 } # blueberry
|
33
|
+
#
|
34
|
+
# @since 3.4 for Array and Hash
|
35
|
+
# @since 3.5 for other enumerables
|
36
|
+
# @note requires `parser = future`
|
37
|
+
#
|
38
|
+
Puppet::Functions.create_function(:filter) do
|
39
|
+
dispatch :filter_Hash_2 do
|
40
|
+
param 'Hash[Any, Any]', :hash
|
41
|
+
required_block_param 'Callable[2,2]', :block
|
42
|
+
end
|
43
|
+
|
44
|
+
dispatch :filter_Hash_1 do
|
45
|
+
param 'Hash[Any, Any]', :hash
|
46
|
+
required_block_param 'Callable[1,1]', :block
|
47
|
+
end
|
48
|
+
|
49
|
+
dispatch :filter_Enumerable_2 do
|
50
|
+
param 'Any', :enumerable
|
51
|
+
required_block_param 'Callable[2,2]', :block
|
52
|
+
end
|
53
|
+
|
54
|
+
dispatch :filter_Enumerable_1 do
|
55
|
+
param 'Any', :enumerable
|
56
|
+
required_block_param 'Callable[1,1]', :block
|
57
|
+
end
|
58
|
+
|
59
|
+
def filter_Hash_1(hash, pblock)
|
60
|
+
result = hash.select {|x, y| pblock.call(self, [x, y]) }
|
61
|
+
# Ruby 1.8.7 returns Array
|
62
|
+
result = Hash[result] unless result.is_a? Hash
|
63
|
+
result
|
64
|
+
end
|
65
|
+
|
66
|
+
def filter_Hash_2(hash, pblock)
|
67
|
+
result = hash.select {|x, y| pblock.call(self, x, y) }
|
68
|
+
# Ruby 1.8.7 returns Array
|
69
|
+
result = Hash[result] unless result.is_a? Hash
|
70
|
+
result
|
71
|
+
end
|
72
|
+
|
73
|
+
def filter_Enumerable_1(enumerable, pblock)
|
74
|
+
result = []
|
75
|
+
index = 0
|
76
|
+
enum = asserted_enumerable(enumerable)
|
77
|
+
begin
|
78
|
+
loop do
|
79
|
+
it = enum.next
|
80
|
+
if pblock.call(nil, it) == true
|
81
|
+
result << it
|
82
|
+
end
|
83
|
+
end
|
84
|
+
rescue StopIteration
|
85
|
+
end
|
86
|
+
result
|
87
|
+
end
|
88
|
+
|
89
|
+
def filter_Enumerable_2(enumerable, pblock)
|
90
|
+
result = []
|
91
|
+
index = 0
|
92
|
+
enum = asserted_enumerable(enumerable)
|
93
|
+
begin
|
94
|
+
loop do
|
95
|
+
it = enum.next
|
96
|
+
if pblock.call(nil, index, it) == true
|
97
|
+
result << it
|
98
|
+
end
|
99
|
+
index += 1
|
100
|
+
end
|
101
|
+
rescue StopIteration
|
102
|
+
end
|
103
|
+
result
|
104
|
+
end
|
105
|
+
|
106
|
+
def asserted_enumerable(obj)
|
107
|
+
unless enum = Puppet::Pops::Types::Enumeration.enumerator(obj)
|
108
|
+
raise ArgumentError, ("#{self.class.name}(): wrong argument type (#{obj.class}; must be something enumerable.")
|
109
|
+
end
|
110
|
+
enum
|
111
|
+
end
|
112
|
+
|
113
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
# Evaluates an Embedded Puppet Template (EPP) string and returns the rendered text result as a String.
|
2
|
+
#
|
3
|
+
# EPP support the following tags:
|
4
|
+
#
|
5
|
+
# * `<%= puppet expression %>` - This tag renders the value of the expression it contains.
|
6
|
+
# * `<% puppet expression(s) %>` - This tag will execute the expression(s) it contains, but renders nothing.
|
7
|
+
# * `<%# comment %>` - The tag and its content renders nothing.
|
8
|
+
# * `<%%` or `%%>` - Renders a literal `<%` or `%>` respectively.
|
9
|
+
# * `<%-` - Same as `<%` but suppresses any leading whitespace.
|
10
|
+
# * `-%>` - Same as `%>` but suppresses any trailing whitespace on the same line (including line break).
|
11
|
+
# * `<%- |parameters| -%>` - When placed as the first tag declares the template's parameters.
|
12
|
+
#
|
13
|
+
# Inline EPP supports the following visibilities of variables in scope which depends on how EPP parameters
|
14
|
+
# are used - see further below:
|
15
|
+
#
|
16
|
+
# * Global scope (i.e. top + node scopes) - global scope is always visible
|
17
|
+
# * Global + Enclosing scope - if the EPP template does not declare parameters, and no arguments are given
|
18
|
+
# * Global + all given arguments - if the EPP template does not declare parameters, and arguments are given
|
19
|
+
# * Global + declared parameters - if the EPP declares parameters, given argument names must match
|
20
|
+
#
|
21
|
+
# EPP supports parameters by placing an optional parameter list as the very first element in the EPP. As an example,
|
22
|
+
# `<%- |$x, $y, $z='unicorn'| -%>` when placed first in the EPP text declares that the parameters `x` and `y` must be
|
23
|
+
# given as template arguments when calling `inline_epp`, and that `z` if not given as a template argument
|
24
|
+
# defaults to `'unicorn'`. Template parameters are available as variables, e.g.arguments `$x`, `$y` and `$z` in the example.
|
25
|
+
# Note that `<%-` must be used or any leading whitespace will be interpreted as text
|
26
|
+
#
|
27
|
+
# Arguments are passed to the template by calling `inline_epp` with a Hash as the last argument, where parameters
|
28
|
+
# are bound to values, e.g. `inline_epp('...', {'x'=>10, 'y'=>20})`. Excess arguments may be given
|
29
|
+
# (i.e. undeclared parameters) only if the EPP templates does not declare any parameters at all.
|
30
|
+
# Template parameters shadow variables in outer scopes.
|
31
|
+
#
|
32
|
+
# Note: An inline template is best stated using a single-quoted string, or a heredoc since a double-quoted string
|
33
|
+
# is subject to expression interpolation before the string is parsed as an EPP template. Here are examples
|
34
|
+
# (using heredoc to define the EPP text):
|
35
|
+
#
|
36
|
+
# @example Various Examples using `inline_epp`
|
37
|
+
#
|
38
|
+
# # produces 'Hello local variable world!'
|
39
|
+
# $x ='local variable'
|
40
|
+
# inline_epptemplate(@(END:epp))
|
41
|
+
# <%- |$x| -%>
|
42
|
+
# Hello <%= $x %> world!
|
43
|
+
# END
|
44
|
+
#
|
45
|
+
# # produces 'Hello given argument world!'
|
46
|
+
# $x ='local variable world'
|
47
|
+
# inline_epptemplate(@(END:epp), { x =>'given argument'})
|
48
|
+
# <%- |$x| -%>
|
49
|
+
# Hello <%= $x %> world!
|
50
|
+
# END
|
51
|
+
#
|
52
|
+
# # produces 'Hello given argument world!'
|
53
|
+
# $x ='local variable world'
|
54
|
+
# inline_epptemplate(@(END:epp), { x =>'given argument'})
|
55
|
+
# <%- |$x| -%>
|
56
|
+
# Hello <%= $x %>!
|
57
|
+
# END
|
58
|
+
#
|
59
|
+
# # results in error, missing value for y
|
60
|
+
# $x ='local variable world'
|
61
|
+
# inline_epptemplate(@(END:epp), { x =>'given argument'})
|
62
|
+
# <%- |$x, $y| -%>
|
63
|
+
# Hello <%= $x %>!
|
64
|
+
# END
|
65
|
+
#
|
66
|
+
# # Produces 'Hello given argument planet'
|
67
|
+
# $x ='local variable world'
|
68
|
+
# inline_epptemplate(@(END:epp), { x =>'given argument'})
|
69
|
+
# <%- |$x, $y=planet| -%>
|
70
|
+
# Hello <%= $x %> <%= $y %>!
|
71
|
+
# END
|
72
|
+
#
|
73
|
+
# @since 3.5
|
74
|
+
# @note Requires Future Parser
|
75
|
+
#
|
76
|
+
Puppet::Functions.create_function(:inline_epp, Puppet::Functions::InternalFunction) do
|
77
|
+
|
78
|
+
dispatch :inline_epp do
|
79
|
+
scope_param()
|
80
|
+
param 'String', 'template'
|
81
|
+
param 'Hash[Pattern[/^\w+$/], Any]', 'parameters'
|
82
|
+
arg_count(1, 2)
|
83
|
+
end
|
84
|
+
|
85
|
+
def inline_epp(scope, template, parameters = nil)
|
86
|
+
Puppet::Pops::Evaluator::EppEvaluator.inline_epp(scope, template, parameters)
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
# Applies a parameterized block to each element in a sequence of entries from the first
|
2
|
+
# argument and returns an array with the result of each invocation of the parameterized block.
|
3
|
+
#
|
4
|
+
# This function takes two mandatory arguments: the first should be an Array, Hash, or of Enumerable type
|
5
|
+
# (integer, Integer range, or String), and the second a parameterized block as produced by the puppet syntax:
|
6
|
+
#
|
7
|
+
# $a.map |$x| { ... }
|
8
|
+
# map($a) |$x| { ... }
|
9
|
+
#
|
10
|
+
# When the first argument `$a` is an Array or of enumerable type, the block is called with each entry in turn.
|
11
|
+
# When the first argument is a hash the entry is an array with `[key, value]`.
|
12
|
+
#
|
13
|
+
# @example Using map with two arguments
|
14
|
+
#
|
15
|
+
# # Turns hash into array of values
|
16
|
+
# $a.map |$x|{ $x[1] }
|
17
|
+
#
|
18
|
+
# # Turns hash into array of keys
|
19
|
+
# $a.map |$x| { $x[0] }
|
20
|
+
#
|
21
|
+
# When using a block with 2 parameters, the element's index (starting from 0) for an array, and the key for a hash
|
22
|
+
# is given to the block's first parameter, and the value is given to the block's second parameter.args.
|
23
|
+
#
|
24
|
+
# @example Using map with two arguments
|
25
|
+
#
|
26
|
+
# # Turns hash into array of values
|
27
|
+
# $a.map |$key,$val|{ $val }
|
28
|
+
#
|
29
|
+
# # Turns hash into array of keys
|
30
|
+
# $a.map |$key,$val|{ $key }
|
31
|
+
#
|
32
|
+
# @since 3.4 for Array and Hash
|
33
|
+
# @since 3.5 for other enumerables, and support for blocks with 2 parameters
|
34
|
+
# @note requires `parser = future`
|
35
|
+
#
|
36
|
+
Puppet::Functions.create_function(:map) do
|
37
|
+
dispatch :map_Hash_2 do
|
38
|
+
param 'Hash[Any, Any]', :hash
|
39
|
+
required_block_param 'Callable[2,2]', :block
|
40
|
+
end
|
41
|
+
|
42
|
+
dispatch :map_Hash_1 do
|
43
|
+
param 'Hash[Any, Any]', :hash
|
44
|
+
required_block_param 'Callable[1,1]', :block
|
45
|
+
end
|
46
|
+
|
47
|
+
dispatch :map_Enumerable_2 do
|
48
|
+
param 'Any', :enumerable
|
49
|
+
required_block_param 'Callable[2,2]', :block
|
50
|
+
end
|
51
|
+
|
52
|
+
dispatch :map_Enumerable_1 do
|
53
|
+
param 'Any', :enumerable
|
54
|
+
required_block_param 'Callable[1,1]', :block
|
55
|
+
end
|
56
|
+
|
57
|
+
def map_Hash_1(hash, pblock)
|
58
|
+
hash.map {|x, y| pblock.call(nil, [x, y]) }
|
59
|
+
end
|
60
|
+
|
61
|
+
def map_Hash_2(hash, pblock)
|
62
|
+
hash.map {|x, y| pblock.call(nil, x, y) }
|
63
|
+
end
|
64
|
+
|
65
|
+
def map_Enumerable_1(enumerable, pblock)
|
66
|
+
result = []
|
67
|
+
index = 0
|
68
|
+
enum = asserted_enumerable(enumerable)
|
69
|
+
begin
|
70
|
+
loop { result << pblock.call(nil, enum.next) }
|
71
|
+
rescue StopIteration
|
72
|
+
end
|
73
|
+
result
|
74
|
+
end
|
75
|
+
|
76
|
+
def map_Enumerable_2(enumerable, pblock)
|
77
|
+
result = []
|
78
|
+
index = 0
|
79
|
+
enum = asserted_enumerable(enumerable)
|
80
|
+
begin
|
81
|
+
loop do
|
82
|
+
result << pblock.call(nil, index, enum.next)
|
83
|
+
index = index +1
|
84
|
+
end
|
85
|
+
rescue StopIteration
|
86
|
+
end
|
87
|
+
result
|
88
|
+
end
|
89
|
+
|
90
|
+
def asserted_enumerable(obj)
|
91
|
+
unless enum = Puppet::Pops::Types::Enumeration.enumerator(obj)
|
92
|
+
raise ArgumentError, ("#{self.class.name}(): wrong argument type (#{obj.class}; must be something enumerable.")
|
93
|
+
end
|
94
|
+
enum
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
# Returns the match result of matching a String or Array[String] with one of:
|
2
|
+
#
|
3
|
+
# * Regexp
|
4
|
+
# * String - transformed to a Regexp
|
5
|
+
# * Pattern type
|
6
|
+
# * Regexp type
|
7
|
+
#
|
8
|
+
# Returns An Array with the entire match at index 0, and each subsequent submatch at index 1-n.
|
9
|
+
# If there was no match, nil (ie. undef) is returned. If the value to match is an Array, a array
|
10
|
+
# with mapped match results is returned.
|
11
|
+
#
|
12
|
+
# @example matching
|
13
|
+
# "abc123".match(/([a-z]+)[1-9]+/) # => ["abc"]
|
14
|
+
# "abc123".match(/([a-z]+)([1-9]+)/) # => ["abc", "123"]
|
15
|
+
#
|
16
|
+
# See the documentation for "The Puppet Type System" for more information about types.
|
17
|
+
# @since 3.7.0
|
18
|
+
#
|
19
|
+
Puppet::Functions.create_function(:match) do
|
20
|
+
dispatch :match do
|
21
|
+
param 'String', 'string'
|
22
|
+
param 'Variant[Any, Type]', 'pattern'
|
23
|
+
end
|
24
|
+
|
25
|
+
dispatch :enumerable_match do
|
26
|
+
param 'Array[String]', 'string'
|
27
|
+
param 'Variant[Any, Type]', 'pattern'
|
28
|
+
end
|
29
|
+
|
30
|
+
def initialize(closure_scope, loader)
|
31
|
+
super
|
32
|
+
|
33
|
+
# Make this visitor shared among all instantiations of this function since it is faster.
|
34
|
+
# This can be used because it is not possible to replace
|
35
|
+
# a puppet runtime (where this function is) without a reboot. If you model a function in a module after
|
36
|
+
# this class, use a regular instance variable instead to enable reloading of the module without reboot
|
37
|
+
#
|
38
|
+
@@match_visitor ||= Puppet::Pops::Visitor.new(self, "match", 1, 1)
|
39
|
+
end
|
40
|
+
|
41
|
+
# Matches given string against given pattern and returns an Array with matches.
|
42
|
+
# @param string [String] the string to match
|
43
|
+
# @param pattern [String, Regexp, Puppet::Pops::Types::PPatternType, Puppet::Pops::PRegexpType, Array] the pattern
|
44
|
+
# @return [Array<String>] matches where first match is the entire match, and index 1-n are captures from left to right
|
45
|
+
#
|
46
|
+
def match(string, pattern)
|
47
|
+
@@match_visitor.visit_this_1(self, pattern, string)
|
48
|
+
end
|
49
|
+
|
50
|
+
# Matches given Array[String] against given pattern and returns an Array with mapped match results.
|
51
|
+
#
|
52
|
+
# @param array [Array<String>] the array of strings to match
|
53
|
+
# @param pattern [String, Regexp, Puppet::Pops::Types::PPatternType, Puppet::Pops::PRegexpType, Array] the pattern
|
54
|
+
# @return [Array<Array<String, nil>>] Array with matches (see {#match}), non matching entries produce a nil entry
|
55
|
+
#
|
56
|
+
def enumerable_match(array, pattern)
|
57
|
+
array.map {|s| match(s, pattern) }
|
58
|
+
end
|
59
|
+
|
60
|
+
protected
|
61
|
+
|
62
|
+
def match_Object(obj, s)
|
63
|
+
msg = "match() expects pattern of T, where T is String, Regexp, Regexp[r], Pattern[p], or Array[T]. Got #{obj.class}"
|
64
|
+
raise ArgumentError, msg
|
65
|
+
end
|
66
|
+
|
67
|
+
def match_String(pattern_string, s)
|
68
|
+
do_match(s, Regexp.new(pattern_string))
|
69
|
+
end
|
70
|
+
|
71
|
+
def match_Regexp(regexp, s)
|
72
|
+
do_match(s, regexp)
|
73
|
+
end
|
74
|
+
|
75
|
+
def match_PRegexpType(regexp_t, s)
|
76
|
+
raise ArgumentError, "Given Regexp Type has no regular expression" unless regexp_t.pattern
|
77
|
+
do_match(s, regexp_t.regexp)
|
78
|
+
end
|
79
|
+
|
80
|
+
def match_PPatternType(pattern_t, s)
|
81
|
+
# Since we want the actual match result (not just a boolean), an iteration over
|
82
|
+
# Pattern's regular expressions is needed. (They are of PRegexpType)
|
83
|
+
result = nil
|
84
|
+
pattern_t.patterns.find {|pattern| result = match(s, pattern) }
|
85
|
+
result
|
86
|
+
end
|
87
|
+
|
88
|
+
# Returns the first matching entry
|
89
|
+
def match_Array(array, s)
|
90
|
+
result = nil
|
91
|
+
array.flatten.find {|entry| result = match(s, entry) }
|
92
|
+
result
|
93
|
+
end
|
94
|
+
|
95
|
+
private
|
96
|
+
|
97
|
+
def do_match(s, regexp)
|
98
|
+
if result = regexp.match(s)
|
99
|
+
result.to_a
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
# Applies a parameterized block to each element in a sequence of entries from the first
|
2
|
+
# argument (_the enumerable_) and returns the last result of the invocation of the parameterized block.
|
3
|
+
#
|
4
|
+
# This function takes two mandatory arguments: the first should be an Array, Hash, or something of
|
5
|
+
# enumerable type, and the last a parameterized block as produced by the puppet syntax:
|
6
|
+
#
|
7
|
+
# $a.reduce |$memo, $x| { ... }
|
8
|
+
# reduce($a) |$memo, $x| { ... }
|
9
|
+
#
|
10
|
+
# When the first argument is an Array or someting of an enumerable type, the block is called with each entry in turn.
|
11
|
+
# When the first argument is a hash each entry is converted to an array with `[key, value]` before being
|
12
|
+
# fed to the block. An optional 'start memo' value may be supplied as an argument between the array/hash
|
13
|
+
# and mandatory block.
|
14
|
+
#
|
15
|
+
# $a.reduce(start) |$memo, $x| { ... }
|
16
|
+
# reduce($a, start) |$memo, $x| { ... }
|
17
|
+
#
|
18
|
+
# If no 'start memo' is given, the first invocation of the parameterized block will be given the first and second
|
19
|
+
# elements of the enumeration, and if the enumerable has fewer than 2 elements, the first
|
20
|
+
# element is produced as the result of the reduction without invocation of the block.
|
21
|
+
#
|
22
|
+
# On each subsequent invocation, the produced value of the invoked parameterized block is given as the memo in the
|
23
|
+
# next invocation.
|
24
|
+
#
|
25
|
+
# @example Using reduce
|
26
|
+
#
|
27
|
+
# # Reduce an array
|
28
|
+
# $a = [1,2,3]
|
29
|
+
# $a.reduce |$memo, $entry| { $memo + $entry }
|
30
|
+
# #=> 6
|
31
|
+
#
|
32
|
+
# # Reduce hash values
|
33
|
+
# $a = {a => 1, b => 2, c => 3}
|
34
|
+
# $a.reduce |$memo, $entry| { [sum, $memo[1]+$entry[1]] }
|
35
|
+
# #=> [sum, 6]
|
36
|
+
#
|
37
|
+
# # reverse a string
|
38
|
+
# "abc".reduce |$memo, $char| { "$char$memo" }
|
39
|
+
# #=>"cbe"
|
40
|
+
#
|
41
|
+
# It is possible to provide a starting 'memo' as an argument.
|
42
|
+
#
|
43
|
+
# @example Using reduce with given start 'memo'
|
44
|
+
#
|
45
|
+
# # Reduce an array
|
46
|
+
# $a = [1,2,3]
|
47
|
+
# $a.reduce(4) |$memo, $entry| { $memo + $entry }
|
48
|
+
# #=> 10
|
49
|
+
#
|
50
|
+
# # Reduce hash values
|
51
|
+
# $a = {a => 1, b => 2, c => 3}
|
52
|
+
# $a.reduce([na, 4]) |$memo, $entry| { [sum, $memo[1]+$entry[1]] }
|
53
|
+
# #=> [sum, 10]
|
54
|
+
#
|
55
|
+
# @example Using reduce with an Integer range
|
56
|
+
#
|
57
|
+
# Integer[1,4].reduce |$memo, $x| { $memo + $x }
|
58
|
+
# #=> 10
|
59
|
+
#
|
60
|
+
# @since 3.2 for Array and Hash
|
61
|
+
# @since 3.5 for additional enumerable types
|
62
|
+
# @note requires `parser = future`.
|
63
|
+
#
|
64
|
+
Puppet::Functions.create_function(:reduce) do
|
65
|
+
|
66
|
+
dispatch :reduce_without_memo do
|
67
|
+
param 'Any', :enumerable
|
68
|
+
required_block_param 'Callable[2,2]', :block
|
69
|
+
end
|
70
|
+
|
71
|
+
dispatch :reduce_with_memo do
|
72
|
+
param 'Any', :enumerable
|
73
|
+
param 'Any', :memo
|
74
|
+
required_block_param 'Callable[2,2]', :block
|
75
|
+
end
|
76
|
+
|
77
|
+
def reduce_without_memo(enumerable, pblock)
|
78
|
+
enum = asserted_enumerable(enumerable)
|
79
|
+
enum.reduce {|memo, x| pblock.call(nil, memo, x) }
|
80
|
+
end
|
81
|
+
|
82
|
+
def reduce_with_memo(enumerable, given_memo, pblock)
|
83
|
+
enum = asserted_enumerable(enumerable)
|
84
|
+
enum.reduce(given_memo) {|memo, x| pblock.call(nil, memo, x) }
|
85
|
+
end
|
86
|
+
|
87
|
+
def asserted_enumerable(obj)
|
88
|
+
unless enum = Puppet::Pops::Types::Enumeration.enumerator(obj)
|
89
|
+
raise ArgumentError, ("#{self.class.name}(): wrong argument type (#{obj.class}; must be something enumerable.")
|
90
|
+
end
|
91
|
+
enum
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|