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,129 @@
|
|
1
|
+
module RGen
|
2
|
+
|
3
|
+
# An Environment is used to hold model elements.
|
4
|
+
#
|
5
|
+
class Environment
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@elements = {}
|
9
|
+
@subClasses = {}
|
10
|
+
@subClassesUpdated = {}
|
11
|
+
@deleted = {}
|
12
|
+
@deletedClasses = {}
|
13
|
+
end
|
14
|
+
|
15
|
+
# Add a model element. Returns the environment so <code><<</code> can be chained.
|
16
|
+
#
|
17
|
+
def <<(el)
|
18
|
+
clazz = el.class
|
19
|
+
@elements[clazz] ||= []
|
20
|
+
@elements[clazz] << el
|
21
|
+
updateSubClasses(clazz)
|
22
|
+
self
|
23
|
+
end
|
24
|
+
|
25
|
+
# Removes model element from environment.
|
26
|
+
def delete(el)
|
27
|
+
@deleted[el] = true
|
28
|
+
@deletedClasses[el.class] = true
|
29
|
+
end
|
30
|
+
|
31
|
+
# Iterates each element
|
32
|
+
#
|
33
|
+
def each(&b)
|
34
|
+
removeDeleted
|
35
|
+
@elements.values.flatten.each(&b)
|
36
|
+
end
|
37
|
+
|
38
|
+
# Return the elements of the environment as an array
|
39
|
+
#
|
40
|
+
def elements
|
41
|
+
removeDeleted
|
42
|
+
@elements.values.flatten
|
43
|
+
end
|
44
|
+
|
45
|
+
# This method can be used to instantiate a class and automatically put it into
|
46
|
+
# the environment. The new instance is returned.
|
47
|
+
#
|
48
|
+
def new(clazz, *args)
|
49
|
+
obj = clazz.new(*args)
|
50
|
+
self << obj
|
51
|
+
obj
|
52
|
+
end
|
53
|
+
|
54
|
+
# Finds and returns model elements in the environment.
|
55
|
+
#
|
56
|
+
# The search description argument must be a hash specifying attribute/value pairs.
|
57
|
+
# Only model elements are returned which respond to the specified attribute methods
|
58
|
+
# and return the specified values as result of these attribute methods.
|
59
|
+
#
|
60
|
+
# As a special hash key :class can be used to look for model elements of a specific
|
61
|
+
# class. In this case an array of possible classes can optionally be given.
|
62
|
+
#
|
63
|
+
def find(desc)
|
64
|
+
removeDeleted
|
65
|
+
result = []
|
66
|
+
classes = desc[:class] if desc[:class] and desc[:class].is_a?(Array)
|
67
|
+
classes = [ desc[:class] ] if !classes and desc[:class]
|
68
|
+
if classes
|
69
|
+
hashKeys = classesWithSubClasses(classes)
|
70
|
+
else
|
71
|
+
hashKeys = @elements.keys
|
72
|
+
end
|
73
|
+
hashKeys.each do |clazz|
|
74
|
+
next unless @elements[clazz]
|
75
|
+
@elements[clazz].each do |e|
|
76
|
+
failed = false
|
77
|
+
desc.each_pair { |k,v|
|
78
|
+
failed = true if k != :class and ( !e.respond_to?(k) or e.send(k) != v )
|
79
|
+
}
|
80
|
+
result << e unless failed
|
81
|
+
end
|
82
|
+
end
|
83
|
+
result
|
84
|
+
end
|
85
|
+
|
86
|
+
private
|
87
|
+
|
88
|
+
def removeDeleted
|
89
|
+
@deletedClasses.keys.each do |c|
|
90
|
+
@elements[c].reject!{|e| @deleted[e]}
|
91
|
+
end
|
92
|
+
@deletedClasses.clear
|
93
|
+
@deleted.clear
|
94
|
+
end
|
95
|
+
|
96
|
+
def updateSubClasses(clazz)
|
97
|
+
return if @subClassesUpdated[clazz]
|
98
|
+
if clazz.respond_to?( :ecore )
|
99
|
+
superClasses = clazz.ecore.eAllSuperTypes.collect{|c| c.instanceClass}
|
100
|
+
else
|
101
|
+
superClasses = superclasses(clazz)
|
102
|
+
end
|
103
|
+
superClasses.each do |c|
|
104
|
+
next if c == Object
|
105
|
+
@subClasses[c] ||= []
|
106
|
+
@subClasses[c] << clazz
|
107
|
+
end
|
108
|
+
@subClassesUpdated[clazz] = true
|
109
|
+
end
|
110
|
+
|
111
|
+
def classesWithSubClasses(classes)
|
112
|
+
result = classes
|
113
|
+
classes.each do |c|
|
114
|
+
result += @subClasses[c] if @subClasses[c]
|
115
|
+
end
|
116
|
+
result.uniq
|
117
|
+
end
|
118
|
+
|
119
|
+
def superclasses(clazz)
|
120
|
+
if clazz == Object
|
121
|
+
[]
|
122
|
+
else
|
123
|
+
superclasses(clazz.superclass) << clazz.superclass
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
end
|
128
|
+
|
129
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module RGen
|
2
|
+
|
3
|
+
module Fragment
|
4
|
+
|
5
|
+
# Caches model fragments in Ruby dump files.
|
6
|
+
#
|
7
|
+
# Dump files are created per each fragment file.
|
8
|
+
#
|
9
|
+
# The main goal is to support fast loading and joining of fragments. Therefore the cache
|
10
|
+
# stores additional information which makes the joining process faster (adding to
|
11
|
+
# environment, resolving references)
|
12
|
+
#
|
13
|
+
class DumpFileCache
|
14
|
+
|
15
|
+
# +cache_map+ must be an object responding to +load_data+ and +store_data+
|
16
|
+
# for loading or storing data associated with a file;
|
17
|
+
# this can be an instance of Util::FileCacheMap
|
18
|
+
def initialize(cache_map)
|
19
|
+
@cache_map = cache_map
|
20
|
+
end
|
21
|
+
|
22
|
+
# Note that the fragment must not be connected to other fragments by resolved references
|
23
|
+
# unresolve the fragment if necessary
|
24
|
+
def store(fragment)
|
25
|
+
fref = fragment.fragment_ref
|
26
|
+
# temporarily remove the reference to the fragment to avoid dumping the fragment
|
27
|
+
fref.fragment = nil
|
28
|
+
@cache_map.store_data(fragment.location,
|
29
|
+
Marshal.dump({
|
30
|
+
:root_elements => fragment.root_elements,
|
31
|
+
:elements => fragment.elements,
|
32
|
+
:index => fragment.index,
|
33
|
+
:unresolved_refs => fragment.unresolved_refs,
|
34
|
+
:fragment_ref => fref,
|
35
|
+
:data => fragment.data
|
36
|
+
}))
|
37
|
+
fref.fragment = fragment
|
38
|
+
end
|
39
|
+
|
40
|
+
def load(fragment)
|
41
|
+
dump = @cache_map.load_data(fragment.location)
|
42
|
+
return :invalid if dump == :invalid
|
43
|
+
header = Marshal.load(dump)
|
44
|
+
fragment.set_root_elements(header[:root_elements],
|
45
|
+
:elements => header[:elements],
|
46
|
+
:index => header[:index],
|
47
|
+
:unresolved_refs => header[:unresolved_refs])
|
48
|
+
fragment.data = header[:data]
|
49
|
+
if header[:fragment_ref]
|
50
|
+
fragment.fragment_ref = header[:fragment_ref]
|
51
|
+
fragment.fragment_ref.fragment = fragment
|
52
|
+
else
|
53
|
+
raise "no fragment_ref in fragment loaded from cache"
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
|
@@ -0,0 +1,140 @@
|
|
1
|
+
require 'rgen/instantiator/reference_resolver'
|
2
|
+
|
3
|
+
module RGen
|
4
|
+
|
5
|
+
module Fragment
|
6
|
+
|
7
|
+
# A FragmentedModel represents a model which consists of fragments (ModelFragment).
|
8
|
+
#
|
9
|
+
# The main purpose of this class is to resolve references across fragments and
|
10
|
+
# to keep the references consistent while fragments are added or removed.
|
11
|
+
# This way it also plays an important role in keeping the model fragments consistent
|
12
|
+
# and thus ModelFragment objects should only be accessed via this interface.
|
13
|
+
# Overall unresolved references after the resolution step are also maintained.
|
14
|
+
#
|
15
|
+
# A FragmentedModel can also keep an RGen::Environment object up to date while fragments
|
16
|
+
# are added or removed. The environment must be registered with the constructor.
|
17
|
+
#
|
18
|
+
# Reference resolution is based on arbitrary identifiers. The identifiers must be
|
19
|
+
# provided in the fragments' indices. The FragmentedModel takes care to maintain
|
20
|
+
# the overall index.
|
21
|
+
#
|
22
|
+
class FragmentedModel
|
23
|
+
attr_reader :fragments
|
24
|
+
attr_reader :environment
|
25
|
+
|
26
|
+
# Creates a fragmented model. Options:
|
27
|
+
#
|
28
|
+
# :env
|
29
|
+
# environment which will be updated as model elements are added and removed
|
30
|
+
#
|
31
|
+
def initialize(options={})
|
32
|
+
@environment = options[:env]
|
33
|
+
@fragments = []
|
34
|
+
@index = nil
|
35
|
+
@fragment_change_listeners = []
|
36
|
+
@fragment_index = {}
|
37
|
+
end
|
38
|
+
|
39
|
+
# Adds a proc which is called when a fragment is added or removed
|
40
|
+
# The proc receives the fragment and one of :added, :removed
|
41
|
+
#
|
42
|
+
def add_fragment_change_listener(listener)
|
43
|
+
@fragment_change_listeners << listener
|
44
|
+
end
|
45
|
+
|
46
|
+
def remove_fragment_change_listener(listener)
|
47
|
+
@fragment_change_listeners.delete(listener)
|
48
|
+
end
|
49
|
+
|
50
|
+
# Add a fragment.
|
51
|
+
#
|
52
|
+
def add_fragment(fragment)
|
53
|
+
invalidate_cache
|
54
|
+
@fragments << fragment
|
55
|
+
fragment.elements.each{|e| @environment << e} if @environment
|
56
|
+
@fragment_change_listeners.each{|l| l.call(fragment, :added)}
|
57
|
+
end
|
58
|
+
|
59
|
+
# Removes the fragment. The fragment will be unresolved using unresolve_fragment.
|
60
|
+
#
|
61
|
+
def remove_fragment(fragment)
|
62
|
+
raise "fragment not part of model" unless @fragments.include?(fragment)
|
63
|
+
invalidate_cache
|
64
|
+
@fragments.delete(fragment)
|
65
|
+
@fragment_index.delete(fragment)
|
66
|
+
unresolve_fragment(fragment)
|
67
|
+
fragment.elements.each{|e| @environment.delete(e)} if @environment
|
68
|
+
@fragment_change_listeners.each{|l| l.call(fragment, :removed)}
|
69
|
+
end
|
70
|
+
|
71
|
+
# Resolve references between fragments.
|
72
|
+
# It is assumed that references within fragments have already been resolved.
|
73
|
+
# This method can be called several times. It will update the overall unresolved references.
|
74
|
+
#
|
75
|
+
# Options:
|
76
|
+
#
|
77
|
+
# :fragment_provider:
|
78
|
+
# Only if a +fragment_provider+ is given, the resolve step can be reverted later on
|
79
|
+
# by a call to unresolve_fragment. The fragment provider is a proc which receives a model
|
80
|
+
# element and must return the fragment in which the element is contained.
|
81
|
+
#
|
82
|
+
# :use_target_type:
|
83
|
+
# reference resolver uses the expected target type to narrow the set of possible targets
|
84
|
+
#
|
85
|
+
def resolve(options={})
|
86
|
+
local_index = index
|
87
|
+
@fragments.each do |f|
|
88
|
+
f.resolve_external(local_index, options)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
# Remove all references between this fragment and all other fragments.
|
93
|
+
# The references will be replaced with unresolved references (MMProxy objects).
|
94
|
+
#
|
95
|
+
def unresolve_fragment(fragment)
|
96
|
+
fragment.unresolve_external
|
97
|
+
@fragments.each do |f|
|
98
|
+
if f != fragment
|
99
|
+
f.unresolve_external_fragment(fragment)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
# Returns the overall unresolved references.
|
105
|
+
#
|
106
|
+
def unresolved_refs
|
107
|
+
@fragments.collect{|f| f.unresolved_refs}.flatten
|
108
|
+
end
|
109
|
+
|
110
|
+
# Returns the overall index.
|
111
|
+
# This is a Hash mapping identifiers to model elements accessible via the identifier.
|
112
|
+
#
|
113
|
+
def index
|
114
|
+
fragments.each do |f|
|
115
|
+
if !@fragment_index[f] || (@fragment_index[f].object_id != f.index.object_id)
|
116
|
+
@fragment_index[f] = f.index
|
117
|
+
invalidate_cache
|
118
|
+
end
|
119
|
+
end
|
120
|
+
return @index if @index
|
121
|
+
@index = {}
|
122
|
+
fragments.each do |f|
|
123
|
+
f.index.each do |i|
|
124
|
+
(@index[i[0]] ||= []) << i[1]
|
125
|
+
end
|
126
|
+
end
|
127
|
+
@index
|
128
|
+
end
|
129
|
+
|
130
|
+
private
|
131
|
+
|
132
|
+
def invalidate_cache
|
133
|
+
@index = nil
|
134
|
+
end
|
135
|
+
|
136
|
+
end
|
137
|
+
|
138
|
+
end
|
139
|
+
|
140
|
+
end
|
@@ -0,0 +1,289 @@
|
|
1
|
+
require 'rgen/instantiator/reference_resolver'
|
2
|
+
|
3
|
+
module RGen
|
4
|
+
|
5
|
+
module Fragment
|
6
|
+
|
7
|
+
# A model fragment is a list of root model elements associated with a location (e.g. a file).
|
8
|
+
# It also stores a list of unresolved references as well as a list of unresolved references
|
9
|
+
# which have been resolved. Using the latter, a fragment can undo reference resolution.
|
10
|
+
#
|
11
|
+
# Optionally, an arbitrary data object may be associated with the fragment. The data object
|
12
|
+
# will also be stored in the cache.
|
13
|
+
#
|
14
|
+
# If an element within the fragment changes this must be indicated to the fragment by calling
|
15
|
+
# +mark_changed+.
|
16
|
+
#
|
17
|
+
# Note: the fragment knows how to resolve references (+resolve_local+, +resolve_external+).
|
18
|
+
# However considering a fragment a data structure, this functionality might be removed in the
|
19
|
+
# future. Instead the fragment should be told about each resolution taking place. Use
|
20
|
+
# method +mark_resolved+ for this purpose.
|
21
|
+
#
|
22
|
+
class ModelFragment
|
23
|
+
attr_reader :root_elements
|
24
|
+
attr_accessor :location, :fragment_ref, :data
|
25
|
+
|
26
|
+
# A FragmentRef serves as a single target object for elements which need to reference the
|
27
|
+
# fragment they are contained in. The FragmentRef references the fragment it is contained in.
|
28
|
+
# The FragmentRef is separate from the fragment itself to allow storing it in a marshal dump
|
29
|
+
# independently of the fragment.
|
30
|
+
#
|
31
|
+
class FragmentRef
|
32
|
+
attr_accessor :fragment
|
33
|
+
end
|
34
|
+
|
35
|
+
# A ResolvedReference wraps an unresolved reference after it has been resolved.
|
36
|
+
# It also holds the target element to which it has been resolved, i.e. with which the proxy
|
37
|
+
# object has been replaced.
|
38
|
+
#
|
39
|
+
class ResolvedReference
|
40
|
+
attr_reader :uref, :target
|
41
|
+
def initialize(uref, target)
|
42
|
+
@uref, @target = uref, target
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# Create a model fragment
|
47
|
+
#
|
48
|
+
# :data
|
49
|
+
# data object associated with this fragment
|
50
|
+
#
|
51
|
+
# :identifier_provider
|
52
|
+
# identifier provider to be used when resolving references
|
53
|
+
# it must be a proc which receives a model element and must return
|
54
|
+
# that element's identifier or nil if the element has no identifier
|
55
|
+
#
|
56
|
+
def initialize(location, options={})
|
57
|
+
@location = location
|
58
|
+
@fragment_ref = FragmentRef.new
|
59
|
+
@fragment_ref.fragment = self
|
60
|
+
@data = options[:data]
|
61
|
+
@resolved_refs = nil
|
62
|
+
@changed = false
|
63
|
+
@identifier_provider = options[:identifier_provider]
|
64
|
+
end
|
65
|
+
|
66
|
+
# Set the root elements, normally done by an instantiator.
|
67
|
+
#
|
68
|
+
# For optimization reasons the instantiator of the fragment may provide data explicitly which
|
69
|
+
# is normally derived by the fragment itself. In this case it is essential that this
|
70
|
+
# data is consistent with the fragment.
|
71
|
+
#
|
72
|
+
def set_root_elements(root_elements, options={})
|
73
|
+
@root_elements = root_elements
|
74
|
+
@elements = options[:elements]
|
75
|
+
@index = options[:index]
|
76
|
+
@unresolved_refs = options[:unresolved_refs]
|
77
|
+
@resolved_refs = nil
|
78
|
+
# new unresolved refs, reset removed_urefs
|
79
|
+
@removed_urefs = nil
|
80
|
+
@changed = false
|
81
|
+
end
|
82
|
+
|
83
|
+
# Must be called when any of the elements in this fragment has been changed
|
84
|
+
#
|
85
|
+
def mark_changed
|
86
|
+
@changed = true
|
87
|
+
@elements = nil
|
88
|
+
@index = nil
|
89
|
+
@unresolved_refs = nil
|
90
|
+
# unresolved refs will be recalculated, no need to keep removed_urefs
|
91
|
+
@removed_urefs = nil
|
92
|
+
@resolved_refs = :dirty
|
93
|
+
end
|
94
|
+
|
95
|
+
# Can be used to reset the change status to unchanged.
|
96
|
+
#
|
97
|
+
def mark_unchanged
|
98
|
+
@changed = false
|
99
|
+
end
|
100
|
+
|
101
|
+
# Indicates whether the fragment has been changed or not
|
102
|
+
#
|
103
|
+
def changed?
|
104
|
+
@changed
|
105
|
+
end
|
106
|
+
|
107
|
+
# Returns all elements within this fragment
|
108
|
+
#
|
109
|
+
def elements
|
110
|
+
return @elements if @elements
|
111
|
+
@elements = []
|
112
|
+
@root_elements.each do |e|
|
113
|
+
@elements << e
|
114
|
+
@elements.concat(e.eAllContents)
|
115
|
+
end
|
116
|
+
@elements
|
117
|
+
end
|
118
|
+
|
119
|
+
# Returns the index of the element contained in this fragment.
|
120
|
+
#
|
121
|
+
def index
|
122
|
+
build_index unless @index
|
123
|
+
@index
|
124
|
+
end
|
125
|
+
|
126
|
+
# Returns all unresolved references within this fragment, i.e. references to MMProxy objects
|
127
|
+
#
|
128
|
+
def unresolved_refs
|
129
|
+
@unresolved_refs ||= collect_unresolved_refs
|
130
|
+
if @removed_urefs
|
131
|
+
@unresolved_refs -= @removed_urefs
|
132
|
+
@removed_urefs = nil
|
133
|
+
end
|
134
|
+
@unresolved_refs
|
135
|
+
end
|
136
|
+
|
137
|
+
# Builds the index of all elements within this fragment having an identifier
|
138
|
+
# the index is an array of 2-element arrays holding the identifier and the element
|
139
|
+
#
|
140
|
+
def build_index
|
141
|
+
raise "cannot build index without an identifier provider" unless @identifier_provider
|
142
|
+
@index = elements.collect { |e|
|
143
|
+
ident = @identifier_provider.call(e, nil)
|
144
|
+
ident && !ident.empty? ? [ident, e] : nil
|
145
|
+
}.compact
|
146
|
+
end
|
147
|
+
|
148
|
+
# Resolves local references (within this fragment) as far as possible
|
149
|
+
#
|
150
|
+
# Options:
|
151
|
+
#
|
152
|
+
# :use_target_type:
|
153
|
+
# reference resolver uses the expected target type to narrow the set of possible targets
|
154
|
+
#
|
155
|
+
def resolve_local(options={})
|
156
|
+
resolver = RGen::Instantiator::ReferenceResolver.new
|
157
|
+
index.each do |i|
|
158
|
+
resolver.add_identifier(i[0], i[1])
|
159
|
+
end
|
160
|
+
@unresolved_refs = resolver.resolve(unresolved_refs, :use_target_type => options[:use_target_type])
|
161
|
+
end
|
162
|
+
|
163
|
+
# Resolves references to external fragments using the external_index provided.
|
164
|
+
# The external index must be a Hash mapping identifiers uniquely to model elements.
|
165
|
+
#
|
166
|
+
# Options:
|
167
|
+
#
|
168
|
+
# :fragment_provider:
|
169
|
+
# If a +fragment_provider+ is given, the resolve step can be reverted later on
|
170
|
+
# by a call to unresolve_external or unresolve_external_fragment. The fragment provider
|
171
|
+
# is a proc which receives a model element and must return the fragment in which it is
|
172
|
+
# contained.
|
173
|
+
#
|
174
|
+
# :use_target_type:
|
175
|
+
# reference resolver uses the expected target type to narrow the set of possible targets
|
176
|
+
#
|
177
|
+
#
|
178
|
+
def resolve_external(external_index, options)
|
179
|
+
fragment_provider = options[:fragment_provider]
|
180
|
+
resolver = RGen::Instantiator::ReferenceResolver.new(
|
181
|
+
:identifier_resolver => proc {|ident| external_index[ident] })
|
182
|
+
if fragment_provider
|
183
|
+
@resolved_refs = {} if @resolved_refs.nil? || @resolved_refs == :dirty
|
184
|
+
on_resolve = proc { |ur, target|
|
185
|
+
target_fragment = fragment_provider.call(target)
|
186
|
+
target_fragment ||= :unknown
|
187
|
+
raise "can not resolve local reference in resolve_external, call resolve_local first" \
|
188
|
+
if target_fragment == self
|
189
|
+
@resolved_refs[target_fragment] ||= []
|
190
|
+
@resolved_refs[target_fragment] << ResolvedReference.new(ur, target)
|
191
|
+
}
|
192
|
+
@unresolved_refs = resolver.resolve(unresolved_refs, :on_resolve => on_resolve, :use_target_type => options[:use_target_type])
|
193
|
+
else
|
194
|
+
@unresolved_refs = resolver.resolve(unresolved_refs, :use_target_type => options[:use_target_type])
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
# Marks a particular unresolved reference +uref+ as resolved to +target+ in +target_fragment+.
|
199
|
+
#
|
200
|
+
def mark_resolved(uref, target_fragment, target)
|
201
|
+
@resolved_refs = {} if @resolved_refs.nil? || @resolved_refs == :dirty
|
202
|
+
target_fragment ||= :unknown
|
203
|
+
if target_fragment != self
|
204
|
+
@resolved_refs[target_fragment] ||= []
|
205
|
+
@resolved_refs[target_fragment] << ResolvedReference.new(uref, target)
|
206
|
+
end
|
207
|
+
@removed_urefs ||= []
|
208
|
+
@removed_urefs << uref
|
209
|
+
end
|
210
|
+
|
211
|
+
# Unresolve outgoing references to all external fragments, i.e. references which used to
|
212
|
+
# be represented by an unresolved reference from within this fragment.
|
213
|
+
# Note, that there may be more references to external fragments due to references which
|
214
|
+
# were represented by unresolved references from within other fragments.
|
215
|
+
#
|
216
|
+
def unresolve_external
|
217
|
+
return if @resolved_refs.nil?
|
218
|
+
raise "can not unresolve, missing fragment information" if @resolved_refs == :dirty || @resolved_refs[:unknown]
|
219
|
+
rrefs = @resolved_refs.values.flatten
|
220
|
+
@resolved_refs = {}
|
221
|
+
unresolve_refs(rrefs)
|
222
|
+
end
|
223
|
+
|
224
|
+
# Like unresolve_external but only unresolve references to external fragment +fragment+
|
225
|
+
#
|
226
|
+
def unresolve_external_fragment(fragment)
|
227
|
+
return if @resolved_refs.nil?
|
228
|
+
raise "can not unresolve, missing fragment information" if @resolved_refs == :dirty || @resolved_refs[:unknown]
|
229
|
+
rrefs = @resolved_refs[fragment]
|
230
|
+
@resolved_refs.delete(fragment)
|
231
|
+
unresolve_refs(rrefs) if rrefs
|
232
|
+
end
|
233
|
+
|
234
|
+
private
|
235
|
+
|
236
|
+
# Turns resolved references +rrefs+ back into unresolved references
|
237
|
+
#
|
238
|
+
def unresolve_refs(rrefs)
|
239
|
+
# make sure any removed_urefs have been removed,
|
240
|
+
# otherwise they will be removed later even if this method actually re-added them
|
241
|
+
unresolved_refs
|
242
|
+
rrefs.each do |rr|
|
243
|
+
ur = rr.uref
|
244
|
+
refs = ur.element.getGeneric(ur.feature_name)
|
245
|
+
if refs.is_a?(Array)
|
246
|
+
index = refs.index(rr.target)
|
247
|
+
ur.element.removeGeneric(ur.feature_name, rr.target)
|
248
|
+
ur.element.addGeneric(ur.feature_name, ur.proxy, index)
|
249
|
+
else
|
250
|
+
ur.element.setGeneric(ur.feature_name, ur.proxy)
|
251
|
+
end
|
252
|
+
@unresolved_refs << ur
|
253
|
+
end
|
254
|
+
end
|
255
|
+
|
256
|
+
def collect_unresolved_refs
|
257
|
+
unresolved_refs = []
|
258
|
+
elements.each do |e|
|
259
|
+
each_reference_target(e) do |r, t|
|
260
|
+
if t.is_a?(RGen::MetamodelBuilder::MMProxy)
|
261
|
+
unresolved_refs <<
|
262
|
+
RGen::Instantiator::ReferenceResolver::UnresolvedReference.new(e, r.name, t)
|
263
|
+
end
|
264
|
+
end
|
265
|
+
end
|
266
|
+
unresolved_refs
|
267
|
+
end
|
268
|
+
|
269
|
+
def each_reference_target(element)
|
270
|
+
non_containment_references(element.class).each do |r|
|
271
|
+
element.getGenericAsArray(r.name).each do |t|
|
272
|
+
yield(r, t)
|
273
|
+
end
|
274
|
+
end
|
275
|
+
end
|
276
|
+
|
277
|
+
def non_containment_references(clazz)
|
278
|
+
@@non_containment_references_cache ||= {}
|
279
|
+
@@non_containment_references_cache[clazz] ||=
|
280
|
+
clazz.ecore.eAllReferences.select{|r| !r.containment}
|
281
|
+
end
|
282
|
+
|
283
|
+
end
|
284
|
+
|
285
|
+
end
|
286
|
+
|
287
|
+
end
|
288
|
+
|
289
|
+
|