puppet 3.6.2 → 3.7.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CONTRIBUTING.md +2 -3
- data/Gemfile +14 -10
- data/README.md +1 -1
- data/ext/build_defaults.yaml +16 -1
- data/ext/debian/control +3 -2
- data/ext/debian/puppet-common.dirs +1 -0
- data/ext/debian/puppet-common.postinst +8 -8
- data/ext/debian/puppet-common.postrm +2 -1
- data/ext/project_data.yaml +16 -12
- data/ext/rack/example-passenger-vhost.conf +2 -2
- data/ext/redhat/puppet.spec.erb +6 -3
- data/ext/windows/service/daemon.rb +47 -41
- data/install.rb +1 -1
- data/lib/puppet.rb +34 -24
- data/lib/puppet/application.rb +34 -1
- data/lib/puppet/application/agent.rb +9 -8
- data/lib/puppet/application/apply.rb +14 -5
- data/lib/puppet/application/doc.rb +4 -11
- data/lib/puppet/application/master.rb +19 -17
- data/lib/puppet/application/queue.rb +1 -1
- data/lib/puppet/application/resource.rb +0 -1
- data/lib/puppet/configurer.rb +39 -2
- data/lib/puppet/configurer/downloader.rb +5 -10
- data/lib/puppet/configurer/downloader_factory.rb +34 -0
- data/lib/puppet/configurer/plugin_handler.rb +11 -17
- data/lib/puppet/defaults.rb +244 -119
- data/lib/puppet/environments.rb +8 -0
- data/lib/puppet/external/nagios/base.rb +1 -1
- data/lib/puppet/external/pson/pure/generator.rb +1 -8
- data/lib/puppet/face/ca.rb +7 -0
- data/lib/puppet/face/file/download.rb +5 -2
- data/lib/puppet/face/file/store.rb +1 -1
- data/lib/puppet/face/instrumentation_data.rb +2 -1
- data/lib/puppet/face/instrumentation_listener.rb +2 -1
- data/lib/puppet/face/instrumentation_probe.rb +2 -1
- data/lib/puppet/face/module/build.rb +2 -2
- data/lib/puppet/face/module/generate.rb +20 -12
- data/lib/puppet/face/module/install.rb +4 -3
- data/lib/puppet/face/module/uninstall.rb +7 -0
- data/lib/puppet/face/module/upgrade.rb +11 -3
- data/lib/puppet/face/node/clean.rb +1 -1
- data/lib/puppet/face/parser.rb +99 -7
- data/lib/puppet/feature/base.rb +18 -12
- data/lib/puppet/feature/cfacter.rb +14 -0
- data/lib/puppet/feature/pe_license.rb +4 -0
- data/lib/puppet/file_bucket/dipper.rb +19 -12
- data/lib/puppet/file_bucket/file.rb +73 -10
- data/lib/puppet/file_serving/configuration/parser.rb +3 -3
- data/lib/puppet/file_system.rb +1 -1
- data/lib/puppet/file_system/file19.rb +41 -0
- data/lib/puppet/file_system/file19windows.rb +0 -1
- data/lib/puppet/file_system/uniquefile.rb +190 -0
- data/lib/puppet/forge.rb +34 -7
- data/lib/puppet/forge/errors.rb +5 -6
- data/lib/puppet/forge/repository.rb +14 -2
- data/lib/puppet/functions.rb +19 -12
- data/lib/puppet/functions/assert_type.rb +27 -10
- data/lib/puppet/functions/each.rb +111 -0
- data/lib/puppet/functions/epp.rb +54 -0
- data/lib/puppet/functions/filter.rb +113 -0
- data/lib/puppet/functions/inline_epp.rb +88 -0
- data/lib/puppet/functions/map.rb +97 -0
- data/lib/puppet/functions/match.rb +102 -0
- data/lib/puppet/functions/reduce.rb +94 -0
- data/lib/puppet/functions/slice.rb +126 -0
- data/lib/puppet/functions/with.rb +23 -0
- data/lib/puppet/indirector/catalog/compiler.rb +4 -4
- data/lib/puppet/indirector/data_binding/hiera.rb +2 -45
- data/lib/puppet/indirector/facts/couch.rb +3 -1
- data/lib/puppet/indirector/facts/facter.rb +52 -65
- data/lib/puppet/indirector/file_bucket_file/file.rb +6 -3
- data/lib/puppet/indirector/hiera.rb +48 -0
- data/lib/puppet/indirector/indirection.rb +1 -1
- data/lib/puppet/indirector/request.rb +9 -3
- data/lib/puppet/indirector/resource/ral.rb +1 -1
- data/lib/puppet/indirector/rest.rb +7 -3
- data/lib/puppet/loaders.rb +0 -1
- data/lib/puppet/module.rb +2 -1
- data/lib/puppet/module_tool.rb +2 -0
- data/lib/puppet/module_tool/applications/application.rb +4 -5
- data/lib/puppet/module_tool/applications/builder.rb +64 -5
- data/lib/puppet/module_tool/applications/uninstaller.rb +3 -2
- data/lib/puppet/module_tool/applications/unpacker.rb +14 -0
- data/lib/puppet/module_tool/applications/upgrader.rb +23 -13
- data/lib/puppet/module_tool/dependency.rb +12 -0
- data/lib/puppet/module_tool/errors/shared.rb +1 -1
- data/lib/puppet/module_tool/errors/upgrader.rb +20 -0
- data/lib/puppet/module_tool/installed_modules.rb +6 -1
- data/lib/puppet/module_tool/metadata.rb +53 -3
- data/lib/puppet/module_tool/modulefile.rb +1 -1
- data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +7 -0
- data/lib/puppet/module_tool/skeleton/templates/generator/manifests/init.pp.erb +1 -1
- data/lib/puppet/module_tool/skeleton/templates/generator/spec/spec_helper.rb +1 -17
- data/lib/puppet/module_tool/tar/mini.rb +20 -2
- data/lib/puppet/network/http.rb +5 -0
- data/lib/puppet/network/http/api/v1.rb +2 -2
- data/lib/puppet/network/http/api/v2/environments.rb +15 -1
- data/lib/puppet/network/http/connection.rb +54 -68
- data/lib/puppet/network/http/factory.rb +44 -0
- data/lib/puppet/network/http/handler.rb +12 -6
- data/lib/puppet/network/http/nocache_pool.rb +21 -0
- data/lib/puppet/network/http/pool.rb +120 -0
- data/lib/puppet/network/http/rack/rest.rb +3 -1
- data/lib/puppet/network/http/session.rb +17 -0
- data/lib/puppet/network/http/site.rb +39 -0
- data/lib/puppet/network/http/webrick/rest.rb +3 -1
- data/lib/puppet/network/http_pool.rb +3 -4
- data/lib/puppet/node.rb +19 -6
- data/lib/puppet/node/environment.rb +34 -8
- data/lib/puppet/parser/ast/collection.rb +4 -0
- data/lib/puppet/parser/ast/collexpr.rb +1 -1
- data/lib/puppet/parser/ast/node.rb +5 -0
- data/lib/puppet/parser/ast/pops_bridge.rb +49 -6
- data/lib/puppet/parser/compiler.rb +66 -38
- data/lib/puppet/parser/e4_parser_adapter.rb +2 -2
- data/lib/puppet/parser/files.rb +76 -33
- data/lib/puppet/parser/functions.rb +1 -7
- data/lib/puppet/parser/functions/assert_type.rb +31 -0
- data/lib/puppet/parser/functions/contain.rb +15 -5
- data/lib/puppet/parser/functions/create_resources.rb +5 -1
- data/lib/puppet/parser/functions/digest.rb +5 -0
- data/lib/puppet/parser/functions/each.rb +46 -107
- data/lib/puppet/parser/functions/epp.rb +13 -9
- data/lib/puppet/parser/functions/file.rb +20 -12
- data/lib/puppet/parser/functions/filter.rb +32 -88
- data/lib/puppet/parser/functions/include.rb +12 -24
- data/lib/puppet/parser/functions/inline_epp.rb +9 -12
- data/lib/puppet/parser/functions/lookup.rb +1 -1
- data/lib/puppet/parser/functions/map.rb +30 -83
- data/lib/puppet/parser/functions/match.rb +28 -0
- data/lib/puppet/parser/functions/reduce.rb +69 -98
- data/lib/puppet/parser/functions/require.rb +13 -5
- data/lib/puppet/parser/functions/search.rb +6 -1
- data/lib/puppet/parser/functions/slice.rb +35 -103
- data/lib/puppet/parser/functions/template.rb +12 -5
- data/lib/puppet/parser/functions/with.rb +21 -0
- data/lib/puppet/parser/lexer.rb +1 -1
- data/lib/puppet/parser/parser_factory.rb +21 -33
- data/lib/puppet/parser/resource.rb +2 -3
- data/lib/puppet/parser/scope.rb +85 -15
- data/lib/puppet/pops.rb +9 -11
- data/lib/puppet/pops/adapters.rb +2 -1
- data/lib/puppet/pops/binder/bindings_checker.rb +4 -4
- data/lib/puppet/pops/binder/bindings_factory.rb +6 -6
- data/lib/puppet/pops/binder/bindings_label_provider.rb +1 -1
- data/lib/puppet/pops/binder/bindings_loader.rb +2 -2
- data/lib/puppet/pops/binder/bindings_model.rb +58 -191
- data/lib/puppet/pops/binder/bindings_model_dumper.rb +1 -1
- data/lib/puppet/pops/binder/bindings_model_meta.rb +215 -0
- data/lib/puppet/pops/binder/injector.rb +9 -9
- data/lib/puppet/pops/binder/key_factory.rb +2 -2
- data/lib/puppet/pops/binder/lookup.rb +14 -6
- data/lib/puppet/pops/binder/producers.rb +9 -12
- data/lib/puppet/pops/evaluator/access_operator.rb +35 -29
- data/lib/puppet/pops/evaluator/callable_mismatch_describer.rb +175 -0
- data/lib/puppet/pops/evaluator/callable_signature.rb +1 -2
- data/lib/puppet/pops/evaluator/closure.rb +151 -35
- data/lib/puppet/pops/evaluator/compare_operator.rb +26 -22
- data/lib/puppet/pops/evaluator/epp_evaluator.rb +16 -15
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +277 -229
- data/lib/puppet/pops/evaluator/relationship_operator.rb +3 -2
- data/lib/puppet/pops/evaluator/runtime3_support.rb +86 -53
- data/lib/puppet/pops/functions/dispatch.rb +9 -4
- data/lib/puppet/pops/functions/dispatcher.rb +2 -169
- data/lib/puppet/pops/issue_reporter.rb +14 -6
- data/lib/puppet/pops/issues.rb +96 -21
- data/lib/puppet/pops/loader/base_loader.rb +3 -3
- data/lib/puppet/pops/loader/loader.rb +1 -1
- data/lib/puppet/pops/loader/loader_paths.rb +2 -21
- data/lib/puppet/pops/loader/ruby_function_instantiator.rb +1 -1
- data/lib/puppet/pops/loader/static_loader.rb +12 -2
- data/lib/puppet/pops/model/ast_transformer.rb +4 -24
- data/lib/puppet/pops/model/factory.rb +72 -10
- data/lib/puppet/pops/model/model.rb +82 -574
- data/lib/puppet/pops/model/model_label_provider.rb +4 -2
- data/lib/puppet/pops/model/model_meta.rb +576 -0
- data/lib/puppet/pops/model/model_tree_dumper.rb +27 -5
- data/lib/puppet/pops/parser/egrammar.ra +209 -221
- data/lib/puppet/pops/parser/eparser.rb +1459 -1431
- data/lib/puppet/pops/parser/evaluating_parser.rb +15 -75
- data/lib/puppet/pops/parser/lexer2.rb +14 -10
- data/lib/puppet/pops/parser/lexer_support.rb +6 -0
- data/lib/puppet/pops/parser/locator.rb +1 -1
- data/lib/puppet/pops/parser/parser_support.rb +31 -49
- data/lib/puppet/pops/patterns.rb +10 -10
- data/lib/puppet/pops/semantic_error.rb +1 -1
- data/lib/puppet/pops/types/class_loader.rb +24 -13
- data/lib/puppet/pops/types/type_calculator.rb +188 -87
- data/lib/puppet/pops/types/type_factory.rb +79 -53
- data/lib/puppet/pops/types/type_parser.rb +22 -16
- data/lib/puppet/pops/types/types.rb +283 -392
- data/lib/puppet/pops/types/types_meta.rb +223 -0
- data/lib/puppet/pops/utils.rb +16 -14
- data/lib/puppet/pops/validation/checker4_0.rb +264 -18
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +0 -1
- data/lib/puppet/pops/visitor.rb +0 -103
- data/lib/puppet/provider/exec.rb +10 -1
- data/lib/puppet/provider/file/windows.rb +3 -4
- data/lib/puppet/provider/group/windows_adsi.rb +10 -10
- data/lib/puppet/provider/nameservice/directoryservice.rb +3 -4
- data/lib/puppet/provider/package/apt.rb +5 -1
- data/lib/puppet/provider/package/gem.rb +7 -3
- data/lib/puppet/provider/package/openbsd.rb +84 -7
- data/lib/puppet/provider/package/pacman.rb +29 -4
- data/lib/puppet/provider/package/rpm.rb +5 -7
- data/lib/puppet/provider/package/sun.rb +5 -1
- data/lib/puppet/provider/package/windows.rb +6 -1
- data/lib/puppet/provider/package/windows/exe_package.rb +1 -1
- data/lib/puppet/provider/package/windows/msi_package.rb +1 -1
- data/lib/puppet/provider/package/windows/package.rb +13 -1
- data/lib/puppet/provider/package/yum.rb +7 -3
- data/lib/puppet/provider/package/zypper.rb +5 -1
- data/lib/puppet/provider/parsedfile.rb +17 -1
- data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +6 -12
- data/lib/puppet/provider/service/freebsd.rb +12 -12
- data/lib/puppet/provider/service/init.rb +5 -0
- data/lib/puppet/provider/service/launchd.rb +0 -3
- data/lib/puppet/provider/service/openbsd.rb +8 -7
- data/lib/puppet/provider/ssh_authorized_key/parsed.rb +2 -2
- data/lib/puppet/provider/sshkey/parsed.rb +5 -0
- data/lib/puppet/provider/user/user_role_add.rb +5 -4
- data/lib/puppet/provider/user/windows_adsi.rb +8 -8
- data/lib/puppet/provider/zone/solaris.rb +1 -1
- data/lib/puppet/reference/metaparameter.rb +8 -6
- data/lib/puppet/reports/store.rb +4 -9
- data/lib/puppet/resource.rb +75 -11
- data/lib/puppet/resource/catalog.rb +9 -7
- data/lib/puppet/resource/type.rb +27 -0
- data/lib/puppet/settings.rb +61 -41
- data/lib/puppet/settings/base_setting.rb +9 -3
- data/lib/puppet/settings/environment_conf.rb +32 -4
- data/lib/puppet/settings/file_setting.rb +9 -1
- data/lib/puppet/settings/priority_setting.rb +5 -5
- data/lib/puppet/ssl.rb +1 -0
- data/lib/puppet/ssl/certificate_authority.rb +15 -6
- data/lib/puppet/ssl/certificate_authority/autosign_command.rb +2 -1
- data/lib/puppet/ssl/host.rb +3 -2
- data/lib/puppet/ssl/inventory.rb +11 -6
- data/lib/puppet/ssl/validator/default_validator.rb +1 -0
- data/lib/puppet/ssl/validator/no_validator.rb +3 -0
- data/lib/puppet/transaction.rb +29 -0
- data/lib/puppet/transaction/resource_harness.rb +16 -3
- data/lib/puppet/type.rb +71 -49
- data/lib/puppet/type/exec.rb +36 -8
- data/lib/puppet/type/file.rb +56 -16
- data/lib/puppet/type/file/content.rb +3 -3
- data/lib/puppet/type/file/mode.rb +12 -3
- data/lib/puppet/type/file/source.rb +4 -1
- data/lib/puppet/type/group.rb +1 -1
- data/lib/puppet/type/mount.rb +1 -3
- data/lib/puppet/type/resources.rb +59 -35
- data/lib/puppet/type/ssh_authorized_key.rb +54 -16
- data/lib/puppet/type/sshkey.rb +1 -1
- data/lib/puppet/type/user.rb +17 -11
- data/lib/puppet/type/yumrepo.rb +59 -8
- data/lib/puppet/type/zone.rb +3 -6
- data/lib/puppet/util.rb +64 -55
- data/lib/puppet/util/autoload.rb +2 -2
- data/lib/puppet/util/colors.rb +61 -19
- data/lib/puppet/util/command_line.rb +21 -4
- data/lib/puppet/util/execution.rb +41 -29
- data/lib/puppet/util/feature.rb +15 -4
- data/lib/puppet/util/filetype.rb +6 -2
- data/lib/puppet/util/http_proxy.rb +29 -2
- data/lib/puppet/util/lockfile.rb +1 -1
- data/lib/puppet/util/log/destinations.rb +7 -3
- data/lib/puppet/util/logging.rb +44 -14
- data/lib/puppet/util/pidlock.rb +11 -5
- data/lib/puppet/util/posix.rb +21 -31
- data/lib/puppet/util/profiler.rb +17 -9
- data/lib/puppet/util/profiler/aggregate.rb +85 -0
- data/lib/puppet/util/profiler/around_profiler.rb +67 -0
- data/lib/puppet/util/profiler/logging.rb +12 -11
- data/lib/puppet/util/profiler/wall_clock.rb +7 -6
- data/lib/puppet/util/rdoc.rb +8 -1
- data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +1 -1
- data/lib/puppet/util/suidmanager.rb +1 -8
- data/lib/puppet/util/windows.rb +14 -3
- data/lib/puppet/util/windows/access_control_list.rb +4 -4
- data/lib/puppet/util/{adsi.rb → windows/adsi.rb} +99 -37
- data/lib/puppet/util/windows/api_types.rb +255 -0
- data/lib/puppet/util/windows/com.rb +224 -0
- data/lib/puppet/util/windows/error.rb +72 -5
- data/lib/puppet/util/windows/file.rb +254 -132
- data/lib/puppet/util/windows/process.rb +293 -177
- data/lib/puppet/util/windows/registry.rb +12 -2
- data/lib/puppet/util/windows/root_certs.rb +16 -9
- data/lib/puppet/util/windows/security.rb +501 -232
- data/lib/puppet/util/windows/sid.rb +80 -36
- data/lib/puppet/util/windows/string.rb +2 -0
- data/lib/puppet/util/windows/taskscheduler.rb +1241 -0
- data/lib/puppet/util/windows/user.rb +241 -57
- data/lib/puppet/vendor.rb +3 -1
- data/lib/puppet/vendor/load_pathspec.rb +1 -0
- data/lib/puppet/vendor/load_rgen.rb +1 -0
- data/lib/puppet/vendor/pathspec/CHANGELOG.md +2 -0
- data/lib/puppet/vendor/pathspec/LICENSE +201 -0
- data/lib/puppet/vendor/pathspec/PUPPET_README.md +6 -0
- data/lib/puppet/vendor/pathspec/README.md +53 -0
- data/lib/puppet/vendor/pathspec/lib/pathspec.rb +121 -0
- data/lib/puppet/vendor/pathspec/lib/pathspec/gitignorespec.rb +275 -0
- data/lib/puppet/vendor/pathspec/lib/pathspec/regexspec.rb +17 -0
- data/lib/puppet/vendor/pathspec/lib/pathspec/spec.rb +14 -0
- data/lib/puppet/vendor/require_vendored.rb +2 -0
- data/lib/puppet/vendor/rgen/CHANGELOG +197 -0
- data/lib/puppet/vendor/rgen/MIT-LICENSE +20 -0
- data/lib/puppet/vendor/rgen/PUPPET_README.md +6 -0
- data/lib/puppet/vendor/rgen/README.rdoc +78 -0
- data/lib/puppet/vendor/rgen/Rakefile +41 -0
- data/lib/puppet/vendor/rgen/TODO +41 -0
- data/lib/puppet/vendor/rgen/anounce.txt +61 -0
- data/lib/puppet/vendor/rgen/design_rationale.txt +71 -0
- data/lib/puppet/vendor/rgen/lib/ea_support/ea_support.rb +54 -0
- data/lib/puppet/vendor/rgen/lib/ea_support/id_store.rb +32 -0
- data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel.rb +562 -0
- data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel_ext.rb +45 -0
- data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel_generator.rb +43 -0
- data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_to_uml13.rb +103 -0
- data/lib/puppet/vendor/rgen/lib/ea_support/uml13_to_uml13_ea.rb +89 -0
- data/lib/puppet/vendor/rgen/lib/metamodels/uml13_metamodel.rb +559 -0
- data/lib/puppet/vendor/rgen/lib/metamodels/uml13_metamodel_ext.rb +26 -0
- data/lib/puppet/vendor/rgen/lib/mmgen/metamodel_generator.rb +20 -0
- data/lib/puppet/vendor/rgen/lib/mmgen/mm_ext/ecore_mmgen_ext.rb +91 -0
- data/lib/puppet/vendor/rgen/lib/mmgen/mmgen.rb +28 -0
- data/lib/puppet/vendor/rgen/lib/mmgen/templates/annotations.tpl +37 -0
- data/lib/puppet/vendor/rgen/lib/mmgen/templates/metamodel_generator.tpl +172 -0
- data/lib/puppet/vendor/rgen/lib/rgen/array_extensions.rb +45 -0
- data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore.rb +218 -0
- data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_builder_methods.rb +81 -0
- data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_ext.rb +69 -0
- data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_interface.rb +47 -0
- data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_to_ruby.rb +167 -0
- data/lib/puppet/vendor/rgen/lib/rgen/ecore/ruby_to_ecore.rb +91 -0
- data/lib/puppet/vendor/rgen/lib/rgen/environment.rb +129 -0
- data/lib/puppet/vendor/rgen/lib/rgen/fragment/dump_file_cache.rb +63 -0
- data/lib/puppet/vendor/rgen/lib/rgen/fragment/fragmented_model.rb +140 -0
- data/lib/puppet/vendor/rgen/lib/rgen/fragment/model_fragment.rb +289 -0
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/abstract_instantiator.rb +66 -0
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/abstract_xml_instantiator.rb +66 -0
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/default_xml_instantiator.rb +117 -0
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/ecore_xml_instantiator.rb +169 -0
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_instantiator.rb +126 -0
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_parser.rb +331 -0
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_parser.y +94 -0
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/nodebased_xml_instantiator.rb +137 -0
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/qualified_name_resolver.rb +97 -0
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/reference_resolver.rb +128 -0
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/resolution_helper.rb +47 -0
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/xmi11_instantiator.rb +168 -0
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder.rb +224 -0
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/builder_extensions.rb +556 -0
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/builder_runtime.rb +174 -0
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/constant_order_helper.rb +89 -0
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/data_types.rb +77 -0
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/intermediate/annotation.rb +30 -0
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/intermediate/feature.rb +168 -0
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/mm_multiple.rb +23 -0
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/module_extension.rb +42 -0
- data/lib/puppet/vendor/rgen/lib/rgen/model_builder.rb +32 -0
- data/lib/puppet/vendor/rgen/lib/rgen/model_builder/builder_context.rb +334 -0
- data/lib/puppet/vendor/rgen/lib/rgen/model_builder/model_serializer.rb +225 -0
- data/lib/puppet/vendor/rgen/lib/rgen/model_builder/reference_resolver.rb +156 -0
- data/lib/puppet/vendor/rgen/lib/rgen/serializer/json_serializer.rb +121 -0
- data/lib/puppet/vendor/rgen/lib/rgen/serializer/opposite_reference_filter.rb +18 -0
- data/lib/puppet/vendor/rgen/lib/rgen/serializer/qualified_name_provider.rb +47 -0
- data/lib/puppet/vendor/rgen/lib/rgen/serializer/xmi11_serializer.rb +116 -0
- data/lib/puppet/vendor/rgen/lib/rgen/serializer/xmi20_serializer.rb +71 -0
- data/lib/puppet/vendor/rgen/lib/rgen/serializer/xml_serializer.rb +98 -0
- data/lib/puppet/vendor/rgen/lib/rgen/template_language.rb +297 -0
- data/lib/puppet/vendor/rgen/lib/rgen/template_language/directory_template_container.rb +83 -0
- data/lib/puppet/vendor/rgen/lib/rgen/template_language/output_handler.rb +87 -0
- data/lib/puppet/vendor/rgen/lib/rgen/template_language/template_container.rb +234 -0
- data/lib/puppet/vendor/rgen/lib/rgen/template_language/template_helper.rb +26 -0
- data/lib/puppet/vendor/rgen/lib/rgen/transformer.rb +475 -0
- data/lib/puppet/vendor/rgen/lib/rgen/util/auto_class_creator.rb +61 -0
- data/lib/puppet/vendor/rgen/lib/rgen/util/cached_glob.rb +67 -0
- data/lib/puppet/vendor/rgen/lib/rgen/util/file_cache_map.rb +124 -0
- data/lib/puppet/vendor/rgen/lib/rgen/util/file_change_detector.rb +84 -0
- data/lib/puppet/vendor/rgen/lib/rgen/util/method_delegation.rb +114 -0
- data/lib/puppet/vendor/rgen/lib/rgen/util/model_comparator.rb +68 -0
- data/lib/puppet/vendor/rgen/lib/rgen/util/model_comparator_base.rb +142 -0
- data/lib/puppet/vendor/rgen/lib/rgen/util/model_dumper.rb +29 -0
- data/lib/puppet/vendor/rgen/lib/rgen/util/name_helper.rb +42 -0
- data/lib/puppet/vendor/rgen/lib/rgen/util/pattern_matcher.rb +329 -0
- data/lib/puppet/vendor/rgen/lib/transformers/ecore_to_uml13.rb +79 -0
- data/lib/puppet/vendor/rgen/lib/transformers/uml13_to_ecore.rb +127 -0
- data/lib/puppet/vendor/rgen/test/array_extensions_test.rb +64 -0
- data/lib/puppet/vendor/rgen/test/ea_instantiator_test.rb +35 -0
- data/lib/puppet/vendor/rgen/test/ea_serializer_test.rb +23 -0
- data/lib/puppet/vendor/rgen/test/ecore_self_test.rb +54 -0
- data/lib/puppet/vendor/rgen/test/environment_test.rb +90 -0
- data/lib/puppet/vendor/rgen/test/json_test.rb +171 -0
- data/lib/puppet/vendor/rgen/test/metamodel_builder_test.rb +1482 -0
- data/lib/puppet/vendor/rgen/test/metamodel_from_ecore_test.rb +57 -0
- data/lib/puppet/vendor/rgen/test/metamodel_order_test.rb +131 -0
- data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test.rb +98 -0
- data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/TestModel.rb +70 -0
- data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/houseMetamodel.ecore +42 -0
- data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/houseMetamodel_from_ecore.rb +44 -0
- data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/using_builtin_types.ecore +9 -0
- data/lib/puppet/vendor/rgen/test/method_delegation_test.rb +178 -0
- data/lib/puppet/vendor/rgen/test/model_builder/builder_context_test.rb +59 -0
- data/lib/puppet/vendor/rgen/test/model_builder/builder_test.rb +242 -0
- data/lib/puppet/vendor/rgen/test/model_builder/ecore_original.rb +163 -0
- data/lib/puppet/vendor/rgen/test/model_builder/ecore_original_regenerated.rb +163 -0
- data/lib/puppet/vendor/rgen/test/model_builder/reference_resolver_test.rb +156 -0
- data/lib/puppet/vendor/rgen/test/model_builder/serializer_test.rb +94 -0
- data/lib/puppet/vendor/rgen/test/model_builder/statemachine_metamodel.rb +42 -0
- data/lib/puppet/vendor/rgen/test/model_builder/test_model/statemachine1.rb +23 -0
- data/lib/puppet/vendor/rgen/test/model_builder_test.rb +6 -0
- data/lib/puppet/vendor/rgen/test/model_fragment_test.rb +30 -0
- data/lib/puppet/vendor/rgen/test/output_handler_test.rb +58 -0
- data/lib/puppet/vendor/rgen/test/qualified_name_provider_test.rb +48 -0
- data/lib/puppet/vendor/rgen/test/qualified_name_resolver_test.rb +102 -0
- data/lib/puppet/vendor/rgen/test/reference_resolver_test.rb +117 -0
- data/lib/puppet/vendor/rgen/test/rgen_test.rb +26 -0
- data/lib/puppet/vendor/rgen/test/template_language_test.rb +163 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/expected_result1.txt +29 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/expected_result2.txt +9 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/expected_result3.txt +4 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/indentStringTestDefaultIndent.out +1 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/indentStringTestTabIndent.out +1 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/callback_indent_test/a.tpl +12 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/callback_indent_test/b.tpl +5 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/code/array.tpl +11 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/content/author.tpl +7 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/content/chapter.tpl +5 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/define_local_test/local.tpl +8 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/define_local_test/test.tpl +8 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/evaluate_test/test.tpl +7 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/indent_string_test.tpl +12 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/index/c/cmod.tpl +1 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/index/chapter.tpl +3 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_backslash_r_test.tpl +5 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/no_indent.tpl +3 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/sub1/no_indent.tpl +3 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test.tpl +24 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test2.tpl +13 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test3.tpl +10 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/null_context_test.tpl +17 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/root.tpl +31 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/sub1.tpl +9 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/sub1/sub1.tpl +3 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/test.tpl +4 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/testout.txt +29 -0
- data/lib/puppet/vendor/rgen/test/testmodel/class_model_checker.rb +119 -0
- data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel.eap +0 -0
- data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel.xml +1029 -0
- data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel_partial.xml +317 -0
- data/lib/puppet/vendor/rgen/test/testmodel/ecore_model_checker.rb +101 -0
- data/lib/puppet/vendor/rgen/test/testmodel/manual_testmodel.xml +22 -0
- data/lib/puppet/vendor/rgen/test/testmodel/object_model_checker.rb +67 -0
- data/lib/puppet/vendor/rgen/test/transformer_test.rb +254 -0
- data/lib/puppet/vendor/rgen/test/util/file_cache_map_test.rb +99 -0
- data/lib/puppet/vendor/rgen/test/util/pattern_matcher_test.rb +97 -0
- data/lib/puppet/vendor/rgen/test/util_test.rb +5 -0
- data/lib/puppet/vendor/rgen/test/xml_instantiator_test.rb +160 -0
- data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_ecore_model_checker.rb +94 -0
- data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_ecore_instantiator.rb +53 -0
- data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_metamodel.rb +49 -0
- data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_to_ecore.rb +75 -0
- data/lib/puppet/vendor/safe_yaml/PUPPET_README.md +6 -0
- data/lib/puppet/vendor/semantic/PUPPET_README.md +6 -0
- data/lib/puppet/version.rb +1 -1
- data/spec/fixtures/integration/node/environment/sitedir2/00_a.pp +2 -0
- data/spec/fixtures/integration/node/environment/sitedir2/02_folder/01_b.pp +6 -0
- data/spec/fixtures/integration/node/environment/sitedir2/03_c.pp +1 -0
- data/spec/fixtures/integration/node/environment/sitedir2/04_include.pp +2 -0
- data/spec/fixtures/releases/jamtur01-apache/manifests/vhost.pp +1 -1
- data/spec/fixtures/unit/indirector/hiera/global.yaml +10 -0
- data/spec/fixtures/unit/indirector/hiera/invalid.yaml +1 -0
- data/spec/fixtures/unit/parser/functions/create_resources/foo/manifests/init.pp +3 -0
- data/spec/fixtures/unit/parser/functions/create_resources/foo/manifests/wrongdefine.pp +3 -0
- data/spec/fixtures/unit/parser/lexer/argumentdefaults.pp +2 -2
- data/spec/fixtures/unit/parser/lexer/casestatement.pp +14 -14
- data/spec/fixtures/unit/parser/lexer/classheirarchy.pp +3 -3
- data/spec/fixtures/unit/parser/lexer/classincludes.pp +3 -3
- data/spec/fixtures/unit/parser/lexer/classpathtest.pp +1 -1
- data/spec/fixtures/unit/parser/lexer/collection_override.pp +1 -1
- data/spec/fixtures/unit/parser/lexer/componentrequire.pp +2 -2
- data/spec/fixtures/unit/parser/lexer/deepclassheirarchy.pp +5 -5
- data/spec/fixtures/unit/parser/lexer/defineoverrides.pp +2 -2
- data/spec/fixtures/unit/parser/lexer/filecreate.pp +2 -2
- data/spec/fixtures/unit/parser/lexer/ifexpression.pp +1 -1
- data/spec/fixtures/unit/parser/lexer/implicititeration.pp +4 -4
- data/spec/fixtures/unit/parser/lexer/multipleinstances.pp +3 -3
- data/spec/fixtures/unit/parser/lexer/multisubs.pp +2 -2
- data/spec/fixtures/unit/parser/lexer/namevartest.pp +2 -2
- data/spec/fixtures/unit/parser/lexer/simpledefaults.pp +1 -1
- data/spec/fixtures/unit/pops/parser/lexer/argumentdefaults.pp +1 -1
- data/spec/fixtures/unit/pops/parser/lexer/casestatement.pp +14 -14
- data/spec/fixtures/unit/pops/parser/lexer/classheirarchy.pp +3 -3
- data/spec/fixtures/unit/pops/parser/lexer/classincludes.pp +3 -3
- data/spec/fixtures/unit/pops/parser/lexer/classpathtest.pp +1 -1
- data/spec/fixtures/unit/pops/parser/lexer/collection_override.pp +1 -1
- data/spec/fixtures/unit/pops/parser/lexer/componentrequire.pp +2 -2
- data/spec/fixtures/unit/pops/parser/lexer/deepclassheirarchy.pp +5 -5
- data/spec/fixtures/unit/pops/parser/lexer/defineoverrides.pp +2 -2
- data/spec/fixtures/unit/pops/parser/lexer/filecreate.pp +2 -2
- data/spec/fixtures/unit/pops/parser/lexer/ifexpression.pp +1 -1
- data/spec/fixtures/unit/pops/parser/lexer/implicititeration.pp +4 -4
- data/spec/fixtures/unit/pops/parser/lexer/multipleinstances.pp +3 -3
- data/spec/fixtures/unit/pops/parser/lexer/multisubs.pp +2 -2
- data/spec/fixtures/unit/pops/parser/lexer/namevartest.pp +2 -2
- data/spec/fixtures/unit/pops/parser/lexer/simpledefaults.pp +1 -1
- data/spec/fixtures/unit/provider/package/gem/gem-list-single-package +4 -0
- data/spec/fixtures/unit/type/user/authorized_keys +1 -1
- data/spec/integration/agent/logging_spec.rb +4 -0
- data/spec/integration/application/doc_spec.rb +4 -3
- data/spec/integration/configurer_spec.rb +0 -14
- data/spec/integration/defaults_spec.rb +26 -0
- data/spec/integration/environments/default_manifest_spec.rb +274 -0
- data/spec/integration/faces/documentation_spec.rb +0 -4
- data/spec/integration/file_bucket/file_spec.rb +21 -0
- data/spec/integration/indirector/catalog/compiler_spec.rb +0 -2
- data/spec/integration/indirector/catalog/queue_spec.rb +0 -2
- data/spec/integration/indirector/facts/facter_spec.rb +1 -1
- data/spec/integration/indirector/file_content/file_server_spec.rb +2 -2
- data/spec/integration/node/environment_spec.rb +24 -8
- data/spec/integration/parser/catalog_spec.rb +10 -10
- data/spec/integration/parser/class_spec.rb +37 -0
- data/spec/integration/parser/collector_spec.rb +234 -75
- data/spec/integration/parser/compiler_spec.rb +385 -401
- data/spec/integration/parser/conditionals_spec.rb +117 -0
- data/spec/integration/parser/future_compiler_spec.rb +359 -8
- data/spec/integration/parser/node_spec.rb +185 -0
- data/spec/integration/parser/resource_expressions_spec.rb +286 -0
- data/spec/integration/parser/ruby_manifest_spec.rb +0 -4
- data/spec/integration/parser/scope_spec.rb +94 -151
- data/spec/integration/provider/cron/crontab_spec.rb +137 -148
- data/spec/integration/ssl/certificate_authority_spec.rb +26 -0
- data/spec/integration/ssl/certificate_request_spec.rb +0 -6
- data/spec/integration/ssl/certificate_revocation_list_spec.rb +0 -2
- data/spec/integration/ssl/host_spec.rb +0 -2
- data/spec/integration/transaction_spec.rb +16 -0
- data/spec/integration/type/file_spec.rb +14 -13
- data/spec/integration/type/nagios_spec.rb +6 -15
- data/spec/integration/type/sshkey_spec.rb +22 -0
- data/spec/integration/type/tidy_spec.rb +3 -0
- data/spec/integration/type/user_spec.rb +8 -3
- data/spec/integration/util/autoload_spec.rb +6 -6
- data/spec/integration/util/rdoc/parser_spec.rb +7 -0
- data/spec/integration/util/windows/process_spec.rb +12 -0
- data/spec/integration/util/windows/security_spec.rb +36 -35
- data/spec/integration/util/windows/user_spec.rb +75 -9
- data/spec/integration/util_spec.rb +2 -2
- data/spec/lib/matchers/resource.rb +1 -0
- data/spec/lib/puppet_spec/compiler.rb +15 -2
- data/spec/lib/puppet_spec/files.rb +10 -0
- data/spec/lib/puppet_spec/language.rb +74 -0
- data/spec/lib/puppet_spec/matchers.rb +59 -32
- data/spec/lib/puppet_spec/module_tool/stub_source.rb +3 -0
- data/spec/shared_behaviours/hiera_indirections.rb +99 -0
- data/spec/shared_behaviours/iterative_functions.rb +69 -0
- data/spec/unit/application/apply_spec.rb +4 -2
- data/spec/unit/application/doc_spec.rb +17 -13
- data/spec/unit/application/master_spec.rb +35 -27
- data/spec/unit/application/resource_spec.rb +0 -5
- data/spec/unit/configurer/downloader_factory_spec.rb +96 -0
- data/spec/unit/configurer/downloader_spec.rb +3 -24
- data/spec/unit/configurer/plugin_handler_spec.rb +22 -22
- data/spec/unit/configurer_spec.rb +0 -4
- data/spec/unit/defaults_spec.rb +30 -0
- data/spec/unit/face/config_spec.rb +2 -1
- data/spec/unit/face/module/build_spec.rb +2 -2
- data/spec/unit/face/module/install_spec.rb +8 -8
- data/spec/unit/face/parser_spec.rb +71 -33
- data/spec/unit/file_bucket/file_spec.rb +2 -2
- data/spec/unit/file_system/uniquefile_spec.rb +184 -0
- data/spec/unit/forge/errors_spec.rb +4 -6
- data/spec/unit/forge/module_release_spec.rb +178 -89
- data/spec/unit/forge/repository_spec.rb +110 -2
- data/spec/unit/forge_spec.rb +39 -3
- data/spec/unit/functions/assert_type_spec.rb +22 -3
- data/spec/unit/{parser/methods → functions}/each_spec.rb +21 -1
- data/spec/unit/{parser/functions → functions}/epp_spec.rb +61 -9
- data/spec/unit/{parser/methods → functions}/filter_spec.rb +34 -38
- data/spec/unit/{parser/functions → functions}/inline_epp_spec.rb +18 -3
- data/spec/unit/functions/map_spec.rb +169 -0
- data/spec/unit/functions/match_spec.rb +57 -0
- data/spec/unit/{parser/methods → functions}/reduce_spec.rb +23 -5
- data/spec/unit/{parser/methods → functions}/slice_spec.rb +34 -21
- data/spec/unit/functions/with_spec.rb +35 -0
- data/spec/unit/functions4_spec.rb +7 -8
- data/spec/unit/indirector/catalog/compiler_spec.rb +0 -2
- data/spec/unit/indirector/catalog/static_compiler_spec.rb +11 -0
- data/spec/unit/indirector/data_binding/hiera_spec.rb +1 -96
- data/spec/unit/indirector/facts/facter_spec.rb +69 -102
- data/spec/unit/indirector/hiera_spec.rb +17 -0
- data/spec/unit/indirector/request_spec.rb +2 -4
- data/spec/unit/indirector/resource/ral_spec.rb +5 -0
- data/spec/unit/indirector/resource_type/parser_spec.rb +17 -12
- data/spec/unit/indirector/rest_spec.rb +36 -6
- data/spec/unit/interface/face_collection_spec.rb +2 -2
- data/spec/unit/module_tool/applications/builder_spec.rb +364 -14
- data/spec/unit/module_tool/applications/uninstaller_spec.rb +22 -0
- data/spec/unit/module_tool/applications/unpacker_spec.rb +40 -0
- data/spec/unit/module_tool/applications/upgrader_spec.rb +22 -0
- data/spec/unit/module_tool/installed_modules_spec.rb +49 -0
- data/spec/unit/module_tool/metadata_spec.rb +72 -4
- data/spec/unit/module_tool/tar/mini_spec.rb +2 -1
- data/spec/unit/network/authentication_spec.rb +4 -0
- data/spec/unit/network/http/api/v2/environments_spec.rb +24 -3
- data/spec/unit/network/http/connection_spec.rb +127 -92
- data/spec/unit/network/http/factory_spec.rb +82 -0
- data/spec/unit/network/http/handler_spec.rb +23 -13
- data/spec/unit/network/http/nocache_pool_spec.rb +43 -0
- data/spec/unit/network/http/pool_spec.rb +269 -0
- data/spec/unit/network/http/rack/rest_spec.rb +1 -1
- data/spec/unit/network/http/session_spec.rb +43 -0
- data/spec/unit/network/http/site_spec.rb +90 -0
- data/spec/unit/network/http/webrick_spec.rb +1 -1
- data/spec/unit/network/http_pool_spec.rb +9 -6
- data/spec/unit/network/http_spec.rb +10 -0
- data/spec/unit/node/environment_spec.rb +54 -0
- data/spec/unit/node_spec.rb +3 -5
- data/spec/unit/parser/compiler_spec.rb +9 -2
- data/spec/unit/parser/files_spec.rb +19 -0
- data/spec/unit/parser/functions/contain_spec.rb +51 -0
- data/spec/unit/parser/functions/create_resources_spec.rb +8 -1
- data/spec/unit/parser/functions/digest_spec.rb +31 -0
- data/spec/unit/parser/functions/file_spec.rb +48 -5
- data/spec/unit/parser/functions/include_spec.rb +15 -1
- data/spec/unit/parser/functions/realize_spec.rb +43 -35
- data/spec/unit/parser/functions/require_spec.rb +19 -5
- data/spec/unit/parser/functions/search_spec.rb +5 -0
- data/spec/unit/parser/functions/shared.rb +82 -0
- data/spec/unit/parser/functions_spec.rb +1 -1
- data/spec/unit/parser/lexer_spec.rb +10 -1
- data/spec/unit/parser/type_loader_spec.rb +0 -1
- data/spec/unit/pops/benchmark_spec.rb +1 -1
- data/spec/unit/pops/binder/bindings_composer_spec.rb +24 -22
- data/spec/unit/pops/binder/injector_spec.rb +8 -6
- data/spec/unit/pops/evaluator/access_ops_spec.rb +3 -3
- data/spec/unit/pops/evaluator/comparison_ops_spec.rb +7 -4
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +250 -30
- data/spec/unit/pops/evaluator/logical_ops_spec.rb +2 -2
- data/spec/unit/pops/evaluator/variables_spec.rb +0 -105
- data/spec/unit/pops/issues_spec.rb +170 -0
- data/spec/unit/pops/loaders/dependency_loader_spec.rb +17 -0
- data/spec/unit/pops/loaders/loader_paths_spec.rb +4 -15
- data/spec/unit/pops/loaders/loaders_spec.rb +31 -11
- data/spec/unit/pops/loaders/module_loaders_spec.rb +0 -29
- data/spec/unit/pops/loaders/static_loader_spec.rb +6 -0
- data/spec/unit/pops/parser/epp_parser_spec.rb +38 -9
- data/spec/unit/pops/parser/evaluating_parser_spec.rb +0 -1
- data/spec/unit/pops/parser/lexer2_spec.rb +21 -4
- data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +5 -0
- data/spec/unit/pops/parser/parse_calls_spec.rb +6 -3
- data/spec/unit/pops/parser/parse_conditionals_spec.rb +12 -5
- data/spec/unit/pops/parser/parse_containers_spec.rb +62 -7
- data/spec/unit/pops/parser/parse_resource_spec.rb +155 -73
- data/spec/unit/pops/parser/parser_spec.rb +16 -0
- data/spec/unit/pops/parser/parsing_typed_parameters_spec.rb +72 -0
- data/spec/unit/pops/transformer/transform_calls_spec.rb +1 -1
- data/spec/unit/pops/types/type_calculator_spec.rb +254 -57
- data/spec/unit/pops/types/type_factory_spec.rb +8 -3
- data/spec/unit/pops/types/type_parser_spec.rb +26 -5
- data/spec/unit/pops/validator/validator_spec.rb +143 -27
- data/spec/unit/provider/exec/posix_spec.rb +22 -14
- data/spec/unit/provider/exec/shell_spec.rb +2 -2
- data/spec/unit/provider/file/windows_spec.rb +7 -7
- data/spec/unit/provider/group/windows_adsi_spec.rb +17 -17
- data/spec/unit/provider/package/gem_spec.rb +10 -0
- data/spec/unit/provider/package/openbsd_spec.rb +66 -9
- data/spec/unit/provider/package/pacman_spec.rb +90 -71
- data/spec/unit/provider/package/windows/package_spec.rb +21 -6
- data/spec/unit/provider/package/yum_spec.rb +1 -0
- data/spec/unit/provider/parsedfile_spec.rb +1 -1
- data/spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb +9 -9
- data/spec/unit/provider/service/openbsd_spec.rb +26 -2
- data/spec/unit/provider/service/upstart_spec.rb +12 -1
- data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +6 -0
- data/spec/unit/provider/user/user_role_add_spec.rb +23 -1
- data/spec/unit/provider/user/windows_adsi_spec.rb +17 -17
- data/spec/unit/reports/store_spec.rb +0 -16
- data/spec/unit/resource/catalog_spec.rb +0 -5
- data/spec/unit/resource_spec.rb +2 -2
- data/spec/unit/settings/autosign_setting_spec.rb +2 -2
- data/spec/unit/settings/environment_conf_spec.rb +77 -10
- data/spec/unit/settings/file_setting_spec.rb +5 -4
- data/spec/unit/settings/priority_setting_spec.rb +4 -4
- data/spec/unit/settings_spec.rb +41 -3
- data/spec/unit/ssl/certificate_authority_spec.rb +25 -2
- data/spec/unit/ssl/inventory_spec.rb +13 -0
- data/spec/unit/ssl/validator_spec.rb +0 -1
- data/spec/unit/transaction/resource_harness_spec.rb +64 -0
- data/spec/unit/transaction_spec.rb +98 -47
- data/spec/unit/type/cron_spec.rb +3 -3
- data/spec/unit/type/exec_spec.rb +9 -0
- data/spec/unit/type/file/content_spec.rb +54 -71
- data/spec/unit/type/file/mode_spec.rb +26 -1
- data/spec/unit/type/file/source_spec.rb +26 -4
- data/spec/unit/type/file_spec.rb +3 -3
- data/spec/unit/type/nagios_spec.rb +12 -3
- data/spec/unit/type/resources_spec.rb +64 -30
- data/spec/unit/type/user_spec.rb +1 -1
- data/spec/unit/type/yumrepo_spec.rb +136 -0
- data/spec/unit/type/zone_spec.rb +44 -1
- data/spec/unit/type_spec.rb +20 -0
- data/spec/unit/util/colors_spec.rb +14 -8
- data/spec/unit/util/command_line_spec.rb +11 -7
- data/spec/unit/util/execution_spec.rb +35 -42
- data/spec/unit/util/feature_spec.rb +12 -0
- data/spec/unit/util/http_proxy_spec.rb +43 -1
- data/spec/unit/util/log/destinations_spec.rb +45 -1
- data/spec/unit/util/logging_spec.rb +38 -0
- data/spec/unit/util/pidlock_spec.rb +37 -1
- data/spec/unit/util/profiler/aggregate_spec.rb +59 -0
- data/spec/unit/util/profiler/around_profiler_spec.rb +61 -0
- data/spec/unit/util/profiler/logging_spec.rb +18 -29
- data/spec/unit/util/profiler/wall_clock_spec.rb +1 -1
- data/spec/unit/util/profiler_spec.rb +55 -0
- data/spec/unit/util/queue_spec.rb +0 -1
- data/spec/unit/util/rdoc/parser_spec.rb +14 -6
- data/spec/unit/util/tagging_spec.rb +1 -1
- data/spec/unit/util/windows/access_control_entry_spec.rb +1 -1
- data/spec/unit/util/{adsi_spec.rb → windows/adsi_spec.rb} +111 -108
- data/spec/unit/util/windows/api_types_spec.rb +28 -0
- data/spec/unit/util/windows/registry_spec.rb +7 -6
- data/spec/unit/util/windows/sid_spec.rb +3 -6
- data/spec/unit/util/windows/string_spec.rb +4 -0
- data/spec/unit/util/zaml_spec.rb +5 -1
- data/tasks/benchmark.rake +40 -5
- data/tasks/parser.rake +16 -2
- data/tasks/yard.rake +1 -1
- metadata +296 -68
- data/lib/puppet/file_system/tempfile.rb +0 -20
- data/lib/puppet/parser/e_parser_adapter.rb +0 -119
- data/lib/puppet/parser/functions/collect.rb +0 -15
- data/lib/puppet/parser/functions/select.rb +0 -15
- data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +0 -109
- data/lib/puppet/pops/parser/lexer.rb +0 -753
- data/lib/puppet/pops/parser/makefile +0 -6
- data/lib/puppet/pops/validation/checker3_1.rb +0 -558
- data/lib/puppet/pops/validation/validator_factory_3_1.rb +0 -31
- data/lib/puppet/util/profiler/none.rb +0 -8
- data/spec/unit/face/certificate_request_spec.rb +0 -7
- data/spec/unit/face/certificate_revocation_list_spec.rb +0 -7
- data/spec/unit/face/key_spec.rb +0 -7
- data/spec/unit/face/report_spec.rb +0 -7
- data/spec/unit/face/resource_spec.rb +0 -7
- data/spec/unit/face/resource_type_spec.rb +0 -7
- data/spec/unit/file_system/tempfile_spec.rb +0 -48
- data/spec/unit/parser/eparser_adapter_spec.rb +0 -407
- data/spec/unit/parser/methods/map_spec.rb +0 -184
- data/spec/unit/parser/methods/shared.rb +0 -45
- data/spec/unit/pops/parser/lexer_spec.rb +0 -840
- data/spec/unit/pops/transformer/transform_resource_spec.rb +0 -185
- data/spec/unit/util/profiler/none_spec.rb +0 -12
@@ -0,0 +1,97 @@
|
|
1
|
+
require 'rgen/instantiator/reference_resolver'
|
2
|
+
|
3
|
+
module RGen
|
4
|
+
|
5
|
+
module Instantiator
|
6
|
+
|
7
|
+
# This is a resolver resolving element identifiers which are qualified names.
|
8
|
+
class QualifiedNameResolver
|
9
|
+
|
10
|
+
attr_reader :nameAttribute
|
11
|
+
attr_reader :separator
|
12
|
+
attr_reader :leadingSeparator
|
13
|
+
|
14
|
+
def initialize(rootElements, options={})
|
15
|
+
@rootElements = rootElements
|
16
|
+
@nameAttribute = options[:nameAttribute] || "name"
|
17
|
+
@separator = options[:separator] || "/"
|
18
|
+
@leadingSeparator = options.has_key?(:leadingSeparator) ? options[:leadingSeparator] : true
|
19
|
+
@elementByQName = {}
|
20
|
+
@visitedQName = {}
|
21
|
+
@childReferences = {}
|
22
|
+
@resolverDelegate = ReferenceResolver.new(:identifier_resolver => method(:resolveIdentifier))
|
23
|
+
end
|
24
|
+
|
25
|
+
def resolveIdentifier(qualifiedName)
|
26
|
+
return @elementByQName[qualifiedName] if @elementByQName.has_key?(qualifiedName)
|
27
|
+
path = qualifiedName.split(separator).reject{|s| s == ""}
|
28
|
+
if path.size > 1
|
29
|
+
parentQName = (leadingSeparator ? separator : "") + path[0..-2].join(separator)
|
30
|
+
parents = resolveIdentifier(parentQName)
|
31
|
+
parents = [parents].compact unless parents.is_a?(Array)
|
32
|
+
children = parents.collect{|p| allNamedChildren(p)}.flatten
|
33
|
+
elsif path.size == 1
|
34
|
+
parentQName = ""
|
35
|
+
children = allRootNamedChildren
|
36
|
+
else
|
37
|
+
return @elementByQName[qualifiedName] = nil
|
38
|
+
end
|
39
|
+
# if the parent was already visited all matching elements are the hash
|
40
|
+
if !@visitedQName[parentQName]
|
41
|
+
children.each do |c|
|
42
|
+
name = c.send(nameAttribute)
|
43
|
+
if name
|
44
|
+
qname = parentQName + ((parentQName != "" || leadingSeparator) ? separator : "") + name
|
45
|
+
existing = @elementByQName[qname]
|
46
|
+
if existing
|
47
|
+
@elementByQName[qname] = [existing] unless existing.is_a?(Array)
|
48
|
+
@elementByQName[qname] << c
|
49
|
+
else
|
50
|
+
@elementByQName[qname] = c
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
# all named children of praent have been checked and hashed
|
55
|
+
@visitedQName[parentQName] = true
|
56
|
+
end
|
57
|
+
@elementByQName[qualifiedName] ||= nil
|
58
|
+
end
|
59
|
+
|
60
|
+
def resolveReferences(unresolvedReferences, problems=[])
|
61
|
+
@resolverDelegate.resolve(unresolvedReferences, :problems => problems)
|
62
|
+
end
|
63
|
+
|
64
|
+
private
|
65
|
+
|
66
|
+
def allNamedChildren(element)
|
67
|
+
childReferences(element.class).collect do |r|
|
68
|
+
element.getGenericAsArray(r.name).collect do |c|
|
69
|
+
if c.respond_to?(nameAttribute)
|
70
|
+
c
|
71
|
+
else
|
72
|
+
allNamedChildren(c)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end.flatten
|
76
|
+
end
|
77
|
+
|
78
|
+
def allRootNamedChildren
|
79
|
+
@rootElements.collect do |e|
|
80
|
+
if e.respond_to?(nameAttribute)
|
81
|
+
e
|
82
|
+
else
|
83
|
+
allNamedChildren(e)
|
84
|
+
end
|
85
|
+
end.flatten
|
86
|
+
end
|
87
|
+
|
88
|
+
def childReferences(clazz)
|
89
|
+
@childReferences[clazz] ||= clazz.ecore.eAllReferences.select{|r| r.containment}
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
95
|
+
|
96
|
+
end
|
97
|
+
|
@@ -0,0 +1,128 @@
|
|
1
|
+
require 'rgen/instantiator/resolution_helper'
|
2
|
+
|
3
|
+
module RGen
|
4
|
+
|
5
|
+
module Instantiator
|
6
|
+
|
7
|
+
# The ReferenceResolver can be used to resolve unresolved references, i.e. instances
|
8
|
+
# of class UnresolvedReference
|
9
|
+
#
|
10
|
+
# There are two ways how this can be used:
|
11
|
+
# 1. the identifiers and associated model elements are added upfront using +add_identifier+
|
12
|
+
# 2. register an :identifier_resolver with the constructor, which will be invoked
|
13
|
+
# for every unresolved identifier
|
14
|
+
#
|
15
|
+
class ReferenceResolver
|
16
|
+
|
17
|
+
# Instances of this class represent information about not yet resolved references.
|
18
|
+
# This consists of the +element+ and metamodel +feature_name+ which hold/is to hold the
|
19
|
+
# reference and the +proxy+ object which is the placeholder for the reference.
|
20
|
+
# If the reference could not be resolved because the target type does not match the
|
21
|
+
# feature type, the flag +target_type_error+ will be set.
|
22
|
+
#
|
23
|
+
class UnresolvedReference
|
24
|
+
attr_reader :feature_name, :proxy
|
25
|
+
attr_accessor :element, :target_type_error
|
26
|
+
def initialize(element, feature_name, proxy)
|
27
|
+
@element = element
|
28
|
+
@feature_name = feature_name
|
29
|
+
@proxy = proxy
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# Create a reference resolver, options:
|
34
|
+
#
|
35
|
+
# :identifier_resolver:
|
36
|
+
# a proc which is called with an identifier and which should return the associated element
|
37
|
+
# in case the identifier is not uniq, the proc may return multiple values
|
38
|
+
# default: lookup element in internal map
|
39
|
+
#
|
40
|
+
def initialize(options={})
|
41
|
+
@identifier_resolver = options[:identifier_resolver]
|
42
|
+
@identifier_map = {}
|
43
|
+
end
|
44
|
+
|
45
|
+
# Add an +identifer+ / +element+ pair which will be used for looking up unresolved identifers
|
46
|
+
def add_identifier(ident, element)
|
47
|
+
map_entry = @identifier_map[ident]
|
48
|
+
if map_entry
|
49
|
+
if map_entry.is_a?(Array)
|
50
|
+
map_entry << element
|
51
|
+
else
|
52
|
+
@identifier_map[ident] = [map_entry, element]
|
53
|
+
end
|
54
|
+
else
|
55
|
+
@identifier_map[ident] = element
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
# Tries to resolve the given +unresolved_refs+. If resolution is successful, the proxy object
|
60
|
+
# will be removed, otherwise there will be an error description in the problems array.
|
61
|
+
# In case the resolved target element's type is not valid for the given feature, the
|
62
|
+
# +target_type_error+ flag will be set on the unresolved reference.
|
63
|
+
# Returns an array of the references which are still unresolved. Options:
|
64
|
+
#
|
65
|
+
# :problems
|
66
|
+
# an array to which problems will be appended
|
67
|
+
#
|
68
|
+
# :on_resolve
|
69
|
+
# a proc which will be called for every sucessful resolution, receives the unresolved
|
70
|
+
# reference as well as to new target element
|
71
|
+
#
|
72
|
+
# :use_target_type
|
73
|
+
# use the expected target type to narrow the set of possible targets
|
74
|
+
# (i.e. ignore targets with wrong type)
|
75
|
+
#
|
76
|
+
# :failed_resolutions
|
77
|
+
# a Hash which will receive an entry for each failed resolution for which at least one
|
78
|
+
# target element was found (wrong target type, or target not unique).
|
79
|
+
# hash key is the uref, hash value is the target element or the Array of target elements
|
80
|
+
#
|
81
|
+
def resolve(unresolved_refs, options={})
|
82
|
+
problems = options[:problems] || []
|
83
|
+
still_unresolved_refs = []
|
84
|
+
failed_resolutions = options[:failed_resolutions] || {}
|
85
|
+
unresolved_refs.each do |ur|
|
86
|
+
if @identifier_resolver
|
87
|
+
target = @identifier_resolver.call(ur.proxy.targetIdentifier)
|
88
|
+
else
|
89
|
+
target = @identifier_map[ur.proxy.targetIdentifier]
|
90
|
+
end
|
91
|
+
target = [target].compact unless target.is_a?(Array)
|
92
|
+
if options[:use_target_type]
|
93
|
+
feature = ur.element.class.ecore.eAllReferences.find{|r| r.name == ur.feature_name}
|
94
|
+
target = target.select{|e| e.is_a?(feature.eType.instanceClass)}
|
95
|
+
end
|
96
|
+
if target.size == 1
|
97
|
+
status = ResolutionHelper.set_uref_target(ur, target[0])
|
98
|
+
if status == :success
|
99
|
+
options[:on_resolve] && options[:on_resolve].call(ur, target[0])
|
100
|
+
elsif status == :type_error
|
101
|
+
ur.target_type_error = true
|
102
|
+
problems << type_error_message(target[0])
|
103
|
+
still_unresolved_refs << ur
|
104
|
+
failed_resolutions[ur] = target[0]
|
105
|
+
end
|
106
|
+
elsif target.size > 1
|
107
|
+
problems << "identifier #{ur.proxy.targetIdentifier} not uniq"
|
108
|
+
still_unresolved_refs << ur
|
109
|
+
failed_resolutions[ur] = target
|
110
|
+
else
|
111
|
+
problems << "identifier #{ur.proxy.targetIdentifier} not found"
|
112
|
+
still_unresolved_refs << ur
|
113
|
+
end
|
114
|
+
end
|
115
|
+
still_unresolved_refs
|
116
|
+
end
|
117
|
+
|
118
|
+
private
|
119
|
+
|
120
|
+
def type_error_message(target)
|
121
|
+
"invalid target type #{target.class}"
|
122
|
+
end
|
123
|
+
|
124
|
+
end
|
125
|
+
|
126
|
+
end
|
127
|
+
|
128
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module RGen
|
2
|
+
module Instantiator
|
3
|
+
|
4
|
+
module ResolutionHelper
|
5
|
+
|
6
|
+
# sets the target of an unresolved reference in the model
|
7
|
+
# returns :type_error if the target is of wrong type, otherwise :success
|
8
|
+
#
|
9
|
+
def self.set_uref_target(uref, target)
|
10
|
+
refs = uref.element.getGeneric(uref.feature_name)
|
11
|
+
if refs.is_a?(Array)
|
12
|
+
index = refs.index(uref.proxy)
|
13
|
+
uref.element.removeGeneric(uref.feature_name, uref.proxy)
|
14
|
+
begin
|
15
|
+
uref.element.addGeneric(uref.feature_name, target, index)
|
16
|
+
rescue StandardError => e
|
17
|
+
if is_type_error?(e)
|
18
|
+
uref.element.addGeneric(uref.feature_name, uref.proxy, index)
|
19
|
+
return :type_error
|
20
|
+
else
|
21
|
+
raise
|
22
|
+
end
|
23
|
+
end
|
24
|
+
else
|
25
|
+
begin
|
26
|
+
# this will replace the proxy
|
27
|
+
uref.element.setGeneric(uref.feature_name, target)
|
28
|
+
rescue StandardError => e
|
29
|
+
if is_type_error?(e)
|
30
|
+
return :type_error
|
31
|
+
else
|
32
|
+
raise
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
:success
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.is_type_error?(e)
|
40
|
+
e.message =~ /Can not use a .* where a .* is expected/
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
@@ -0,0 +1,168 @@
|
|
1
|
+
require 'rgen/ecore/ecore'
|
2
|
+
require 'rgen/instantiator/abstract_xml_instantiator'
|
3
|
+
require 'rgen/array_extensions'
|
4
|
+
|
5
|
+
class XMI11Instantiator < AbstractXMLInstantiator
|
6
|
+
|
7
|
+
include RGen::ECore
|
8
|
+
|
9
|
+
ResolverDescription = Struct.new(:object, :attribute, :value, :many)
|
10
|
+
|
11
|
+
INFO = 0
|
12
|
+
WARN = 1
|
13
|
+
ERROR = 2
|
14
|
+
|
15
|
+
def initialize(env, fix_map={}, loglevel=ERROR)
|
16
|
+
@env = env
|
17
|
+
@fix_map = fix_map
|
18
|
+
@loglevel = loglevel
|
19
|
+
@rolestack = []
|
20
|
+
@elementstack = []
|
21
|
+
end
|
22
|
+
|
23
|
+
def add_metamodel(ns, mod)
|
24
|
+
@ns_module_map ||={}
|
25
|
+
@ns_module_map[ns] = mod
|
26
|
+
end
|
27
|
+
|
28
|
+
def instantiate(str)
|
29
|
+
@resolver_descs = []
|
30
|
+
@element_by_id = {}
|
31
|
+
super(str, 1000)
|
32
|
+
@resolver_descs.each do |rd|
|
33
|
+
if rd.many
|
34
|
+
newval = rd.value.split(" ").collect{|v| @element_by_id[v]}
|
35
|
+
else
|
36
|
+
newval = @element_by_id[rd.value]
|
37
|
+
end
|
38
|
+
log WARN, "Could not resolve reference #{rd.attribute} on #{rd.object}" unless newval
|
39
|
+
begin
|
40
|
+
rd.object.setGeneric(rd.attribute,newval)
|
41
|
+
rescue Exception
|
42
|
+
log WARN, "Could not set reference #{rd.attribute} on #{rd.object}"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def start_tag(prefix, tag, namespaces, attributes)
|
48
|
+
if tag =~ /\w+\.(\w+)/
|
49
|
+
# XMI role
|
50
|
+
role_name = map_feature_name($1) || $1
|
51
|
+
eRef = @elementstack.last && eAllReferences(@elementstack.last).find{|r|r.name == role_name}
|
52
|
+
log WARN, "No reference found for #{role_name} on #{@elementstack.last}" unless eRef
|
53
|
+
@rolestack.push eRef
|
54
|
+
elsif attributes["xmi.idref"]
|
55
|
+
# reference
|
56
|
+
rd = ResolverDescription.new
|
57
|
+
rd.object = @elementstack.last
|
58
|
+
rd.attribute = @rolestack.last.name
|
59
|
+
rd.value = attributes["xmi.idref"]
|
60
|
+
rd.many = @rolestack.last.many
|
61
|
+
@resolver_descs << rd
|
62
|
+
@elementstack.push nil
|
63
|
+
else
|
64
|
+
# model element
|
65
|
+
value = map_tag(tag, attributes) || tag
|
66
|
+
if value.is_a?(String)
|
67
|
+
mod = @ns_module_map[namespaces[prefix]]
|
68
|
+
unless mod
|
69
|
+
log WARN, "Ignoring tag #{tag}"
|
70
|
+
return
|
71
|
+
end
|
72
|
+
value = mod.const_get(value).new
|
73
|
+
end
|
74
|
+
@env << value
|
75
|
+
eRef = @rolestack.last
|
76
|
+
if eRef && eRef.many
|
77
|
+
@elementstack.last.addGeneric(eRef.name, value)
|
78
|
+
elsif eRef
|
79
|
+
@elementstack.last.setGeneric(eRef.name, value)
|
80
|
+
end
|
81
|
+
@elementstack.push value
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def end_tag(prefix, tag)
|
86
|
+
if tag =~ /\w+\.(\w+)/
|
87
|
+
@rolestack.pop
|
88
|
+
else
|
89
|
+
@elementstack.pop
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def set_attribute(attr, value)
|
94
|
+
return unless @elementstack.last
|
95
|
+
if attr == "xmi.id"
|
96
|
+
@element_by_id[value] = @elementstack.last
|
97
|
+
else
|
98
|
+
attr_name = map_feature_name(attr) || attr
|
99
|
+
eFeat = eAllStructuralFeatures(@elementstack.last).find{|a| a.name == attr_name}
|
100
|
+
unless eFeat
|
101
|
+
log WARN, "No structural feature found for #{attr_name} on #{@elementstack.last}"
|
102
|
+
return
|
103
|
+
end
|
104
|
+
if eFeat.is_a?(RGen::ECore::EReference)
|
105
|
+
if map_feature_value(attr_name, value).is_a?(eFeat.eType.instanceClass)
|
106
|
+
@elementstack.last.setGeneric(attr_name, map_feature_value(attr_name, value))
|
107
|
+
else
|
108
|
+
rd = ResolverDescription.new
|
109
|
+
rd.object = @elementstack.last
|
110
|
+
rd.attribute = attr_name
|
111
|
+
rd.value = value
|
112
|
+
rd.many = eFeat.many
|
113
|
+
@resolver_descs << rd
|
114
|
+
end
|
115
|
+
else
|
116
|
+
value = map_feature_value(attr_name, value) || value
|
117
|
+
value = true if value == "true" && eFeat.eType == EBoolean
|
118
|
+
value = false if value == "false" && eFeat.eType == EBoolean
|
119
|
+
value = value.to_i if eFeat.eType == EInt || eFeat.eType == ELong
|
120
|
+
value = value.to_f if eFeat.eType == EFloat
|
121
|
+
value = value.to_sym if eFeat.eType.is_a?(EEnum)
|
122
|
+
@elementstack.last.setGeneric(attr_name, value)
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
private
|
128
|
+
|
129
|
+
def map_tag(tag, attributes)
|
130
|
+
tag_map = @fix_map[:tags] || {}
|
131
|
+
value = tag_map[tag]
|
132
|
+
if value.is_a?(Proc)
|
133
|
+
value.call(tag, attributes)
|
134
|
+
else
|
135
|
+
value
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
def map_feature_name(name)
|
140
|
+
name_map = @fix_map[:feature_names] || {}
|
141
|
+
name_map[name]
|
142
|
+
end
|
143
|
+
|
144
|
+
def map_feature_value(attr_name, value)
|
145
|
+
value_map = @fix_map[:feature_values] || {}
|
146
|
+
map = value_map[attr_name]
|
147
|
+
if map.is_a?(Hash)
|
148
|
+
map[value]
|
149
|
+
elsif map.is_a?(Proc)
|
150
|
+
map.call(value)
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
def log(level, msg)
|
155
|
+
puts %w(INFO WARN ERROR)[level] + ": " + msg if level >= @loglevel
|
156
|
+
end
|
157
|
+
|
158
|
+
def eAllReferences(element)
|
159
|
+
@eAllReferences ||= {}
|
160
|
+
@eAllReferences[element.class] ||= element.class.ecore.eAllReferences
|
161
|
+
end
|
162
|
+
|
163
|
+
def eAllStructuralFeatures(element)
|
164
|
+
@eAllStructuralFeatures ||= {}
|
165
|
+
@eAllStructuralFeatures[element.class] ||= element.class.ecore.eAllStructuralFeatures
|
166
|
+
end
|
167
|
+
|
168
|
+
end
|
@@ -0,0 +1,224 @@
|
|
1
|
+
# RGen Framework
|
2
|
+
# (c) Martin Thiede, 2006
|
3
|
+
|
4
|
+
require 'rgen/metamodel_builder/constant_order_helper'
|
5
|
+
require 'rgen/metamodel_builder/builder_runtime'
|
6
|
+
require 'rgen/metamodel_builder/builder_extensions'
|
7
|
+
require 'rgen/metamodel_builder/module_extension'
|
8
|
+
require 'rgen/metamodel_builder/data_types'
|
9
|
+
require 'rgen/metamodel_builder/mm_multiple'
|
10
|
+
require 'rgen/ecore/ecore_interface'
|
11
|
+
|
12
|
+
module RGen
|
13
|
+
|
14
|
+
# MetamodelBuilder can be used to create a metamodel, i.e. Ruby classes which
|
15
|
+
# act as metamodel elements.
|
16
|
+
#
|
17
|
+
# To create a new metamodel element, create a Ruby class which inherits from
|
18
|
+
# MetamodelBuilder::MMBase
|
19
|
+
#
|
20
|
+
# class Person < RGen::MetamodelBuilder::MMBase
|
21
|
+
# end
|
22
|
+
#
|
23
|
+
# This way a couple of class methods are made available to the new class.
|
24
|
+
# These methods can be used to:
|
25
|
+
# * add attributes to the class
|
26
|
+
# * add associations with other classes
|
27
|
+
#
|
28
|
+
# Here is an example:
|
29
|
+
#
|
30
|
+
# class Person < RGen::MetamodelBuilder::MMBase
|
31
|
+
# has_attr 'name', String
|
32
|
+
# has_attr 'age', Integer
|
33
|
+
# end
|
34
|
+
#
|
35
|
+
# class House < RGen::MetamodelBuilder::MMBase
|
36
|
+
# has_attr 'address' # String is default
|
37
|
+
# end
|
38
|
+
#
|
39
|
+
# Person.many_to_many 'homes', House, 'inhabitants'
|
40
|
+
#
|
41
|
+
# See BuilderExtensions for details about the available class methods.
|
42
|
+
#
|
43
|
+
# =Attributes
|
44
|
+
#
|
45
|
+
# The example above creates two classes 'Person' and 'House'. Person has the attributes
|
46
|
+
# 'name' and 'age', House has the attribute 'address'. The attributes can be
|
47
|
+
# accessed on instances of the classes in the following way:
|
48
|
+
#
|
49
|
+
# p = Person.new
|
50
|
+
# p.name = "MyName"
|
51
|
+
# p.age = 22
|
52
|
+
# p.name # => "MyName"
|
53
|
+
# p.age # => 22
|
54
|
+
#
|
55
|
+
# Note that the class Person takes care of the type of its attributes. As
|
56
|
+
# declared above, a 'name' can only be a String, an 'age' must be an Integer.
|
57
|
+
# So the following would return an exception:
|
58
|
+
#
|
59
|
+
# p.name = :myName # => exception: can not put a Symbol where a String is expected
|
60
|
+
#
|
61
|
+
# If the type of an attribute should be left undefined, use Object as type.
|
62
|
+
#
|
63
|
+
# =Associations
|
64
|
+
#
|
65
|
+
# As well as attributes show up as instance methods, associations bring their own
|
66
|
+
# accessor methods. For the Person-to-House association this would be:
|
67
|
+
#
|
68
|
+
# h1 = House.new
|
69
|
+
# h1.address = "Street1"
|
70
|
+
# h2 = House.new
|
71
|
+
# h2.address = "Street2"
|
72
|
+
# p.addHomes(h1)
|
73
|
+
# p.addHomes(h2)
|
74
|
+
# p.removeHomes(h1)
|
75
|
+
# p.homes # => [ h2 ]
|
76
|
+
#
|
77
|
+
# The Person-to-House association is _bidirectional_. This means that with the
|
78
|
+
# addition of a House to a Person, the Person is also added to the House. Thus:
|
79
|
+
#
|
80
|
+
# h1.inhabitants # => []
|
81
|
+
# h2.inhabitants # => [ p ]
|
82
|
+
#
|
83
|
+
# Note that the association is defined between two specific classes, instances of
|
84
|
+
# different classes can not be added. Thus, the following would result in an
|
85
|
+
# exception:
|
86
|
+
#
|
87
|
+
# p.addHomes(:justASymbol) # => exception: can not put a Symbol where a House is expected
|
88
|
+
#
|
89
|
+
# =ECore Metamodel description
|
90
|
+
#
|
91
|
+
# The class methods described above are used to create a Ruby representation of the metamodel
|
92
|
+
# we have in mind in a very simple and easy way. We don't have to care about all the details
|
93
|
+
# of a metamodel at this point (e.g. multiplicities, changeability, etc).
|
94
|
+
#
|
95
|
+
# At the same time however, an instance of the ECore metametamodel (i.e. a ECore based
|
96
|
+
# description of our metamodel) is provided for all the Ruby classes and modules we create.
|
97
|
+
# Since we did not provide the nitty-gritty details of the metamodel, defaults are used to
|
98
|
+
# fully complete the ECore metamodel description.
|
99
|
+
#
|
100
|
+
# In order to access the ECore metamodel description, just call the +ecore+ method on a
|
101
|
+
# Ruby class or module object belonging to your metamodel.
|
102
|
+
#
|
103
|
+
# Here is the example continued from above:
|
104
|
+
#
|
105
|
+
# Person.ecore.eAttributes.name # => ["name", "age"]
|
106
|
+
# h2pRef = House.ecore.eReferences.first
|
107
|
+
# h2pRef.eType # => Person
|
108
|
+
# h2pRef.eOpposite.eType # => House
|
109
|
+
# h2pRef.lowerBound # => 0
|
110
|
+
# h2pRef.upperBound # => -1
|
111
|
+
# h2pRef.many # => true
|
112
|
+
# h2pRef.containment # => false
|
113
|
+
#
|
114
|
+
# Note that the use of array_extensions.rb is assumed here to make model navigation convenient.
|
115
|
+
#
|
116
|
+
# The following metamodel builder methods are supported, see individual method description
|
117
|
+
# for details:
|
118
|
+
#
|
119
|
+
# Attributes:
|
120
|
+
# * BuilderExtensions#has_attr
|
121
|
+
#
|
122
|
+
# Unidirectional references:
|
123
|
+
# * BuilderExtensions#has_one
|
124
|
+
# * BuilderExtensions#has_many
|
125
|
+
# * BuilderExtensions#contains_one_uni
|
126
|
+
# * BuilderExtensions#contains_many_uni
|
127
|
+
#
|
128
|
+
# Bidirectional references:
|
129
|
+
# * BuilderExtensions#one_to_one
|
130
|
+
# * BuilderExtensions#one_to_many
|
131
|
+
# * BuilderExtensions#many_to_one
|
132
|
+
# * BuilderExtensions#many_to_many
|
133
|
+
# * BuilderExtensions#contains_one
|
134
|
+
# * BuilderExtensions#contains_many
|
135
|
+
#
|
136
|
+
# Every builder command can optionally take a specification of further ECore properties.
|
137
|
+
# Additional properties for Attributes and References are (with defaults in brackets):
|
138
|
+
# * :ordered (true),
|
139
|
+
# * :unique (true),
|
140
|
+
# * :changeable (true),
|
141
|
+
# * :volatile (false),
|
142
|
+
# * :transient (false),
|
143
|
+
# * :unsettable (false),
|
144
|
+
# * :derived (false),
|
145
|
+
# * :lowerBound (0),
|
146
|
+
# * :resolveProxies (true) <i>references only</i>,
|
147
|
+
#
|
148
|
+
# Using these additional properties, the above example can be refined as follows:
|
149
|
+
#
|
150
|
+
# class Person < RGen::MetamodelBuilder::MMBase
|
151
|
+
# has_attr 'name', String, :lowerBound => 1
|
152
|
+
# has_attr 'yearOfBirth', Integer,
|
153
|
+
# has_attr 'age', Integer, :derived => true
|
154
|
+
# def age_derived
|
155
|
+
# Time.now.year - yearOfBirth
|
156
|
+
# end
|
157
|
+
# end
|
158
|
+
#
|
159
|
+
# Person.many_to_many 'homes', House, 'inhabitants', :upperBound => 5
|
160
|
+
#
|
161
|
+
# Person.ecore.eReferences.find{|r| r.name == 'homes'}.upperBound # => 5
|
162
|
+
#
|
163
|
+
# This way we state that there must be a name for each person, we introduce a new attribute
|
164
|
+
# 'yearOfBirth' and make 'age' a derived attribute. We also say that a person can
|
165
|
+
# have at most 5 houses in our metamodel.
|
166
|
+
#
|
167
|
+
# ==Derived attributes and references
|
168
|
+
#
|
169
|
+
# If the attribute 'derived' of an attribute or reference is set to true, a method +attributeName_derived+
|
170
|
+
# has to be provided. This method is called whenever the original attribute is accessed. The
|
171
|
+
# original attribute can not be written if it is derived.
|
172
|
+
#
|
173
|
+
#
|
174
|
+
module MetamodelBuilder
|
175
|
+
|
176
|
+
# Use this class as a start for new metamodel elements (i.e. Ruby classes)
|
177
|
+
# by inheriting for it.
|
178
|
+
#
|
179
|
+
# See MetamodelBuilder for an example.
|
180
|
+
class MMBase
|
181
|
+
include BuilderRuntime
|
182
|
+
include DataTypes
|
183
|
+
extend BuilderExtensions
|
184
|
+
extend ModuleExtension
|
185
|
+
extend RGen::ECore::ECoreInterface
|
186
|
+
|
187
|
+
def initialize(arg=nil)
|
188
|
+
raise StandardError.new("Class #{self.class} is abstract") if self.class._abstract_class
|
189
|
+
arg.each_pair { |k,v| setGeneric(k, v) } if arg.is_a?(Hash)
|
190
|
+
end
|
191
|
+
|
192
|
+
# Object#inspect causes problems on most models
|
193
|
+
def inspect
|
194
|
+
self.class.name
|
195
|
+
end
|
196
|
+
|
197
|
+
def self.method_added(m)
|
198
|
+
raise "Do not add methods to model classes directly, add them to the ClassModule instead"
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
# Instances of MMGeneric can be used as values of any attribute are reference
|
203
|
+
class MMGeneric
|
204
|
+
# empty implementation so we don't have to check if a value is a MMGeneriv before setting the container
|
205
|
+
def _set_container(container, containing_feature_name)
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
# MMProxy objects can be used instead of real target elements in case references should be resolved later on
|
210
|
+
class MMProxy < MMGeneric
|
211
|
+
# The +targetIdentifer+ is an object identifying the element the proxy represents
|
212
|
+
attr_accessor :targetIdentifier
|
213
|
+
# +data+ is optional additional information to be associated with the proxy
|
214
|
+
attr_accessor :data
|
215
|
+
|
216
|
+
def initialize(ident=nil, data=nil)
|
217
|
+
@targetIdentifier = ident
|
218
|
+
@data = data
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
end
|
223
|
+
|
224
|
+
end
|