puppet 4.10.12-universal-darwin → 5.0.0-universal-darwin
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.
- data/CONTRIBUTING.md +32 -15
- data/Gemfile +31 -14
- data/MAINTAINERS +0 -5
- data/README.md +11 -11
- data/Rakefile +2 -1
- data/conf/auth.conf +21 -0
- data/conf/fileserver.conf +7 -12
- data/conf/hiera.yaml +11 -0
- data/ext/debian/puppet-common.install +0 -1
- data/ext/debian/puppet-common.manpages +0 -2
- data/ext/hiera/hiera.yaml +15 -0
- data/ext/logcheck/puppet +1 -1
- data/ext/project_data.yaml +4 -9
- data/ext/puppet-test +0 -24
- data/ext/rack/config.ru +2 -2
- data/ext/redhat/puppet.spec.erb +0 -3
- data/ext/windows/service/daemon.rb +8 -14
- data/install.rb +1 -1
- data/lib/hiera/puppet_function.rb +1 -1
- data/lib/puppet.rb +7 -5
- data/lib/puppet/agent.rb +29 -38
- data/lib/puppet/agent/disabler.rb +3 -3
- data/lib/puppet/agent/locker.rb +3 -3
- data/lib/puppet/application.rb +12 -29
- data/lib/puppet/application/agent.rb +20 -18
- data/lib/puppet/application/apply.rb +22 -18
- data/lib/puppet/application/cert.rb +2 -7
- data/lib/puppet/application/config.rb +0 -1
- data/lib/puppet/application/describe.rb +1 -1
- data/lib/puppet/application/device.rb +94 -76
- data/lib/puppet/application/doc.rb +6 -6
- data/lib/puppet/application/face_base.rb +8 -13
- data/lib/puppet/application/filebucket.rb +12 -29
- data/lib/puppet/application/help.rb +0 -1
- data/lib/puppet/application/lookup.rb +106 -101
- data/lib/puppet/application/master.rb +14 -22
- data/lib/puppet/application/resource.rb +13 -10
- data/lib/puppet/application_support.rb +1 -6
- data/lib/puppet/configurer.rb +33 -45
- data/lib/puppet/configurer/downloader.rb +2 -2
- data/lib/puppet/configurer/fact_handler.rb +13 -4
- data/lib/puppet/context.rb +5 -5
- data/lib/puppet/context/trusted_information.rb +1 -1
- data/lib/puppet/defaults.rb +18 -131
- data/lib/puppet/environments.rb +1 -1
- data/lib/puppet/error.rb +1 -1
- data/lib/puppet/external/nagios/grammar.ry +1 -1
- data/lib/puppet/external/nagios/parser.rb +1 -1
- data/lib/puppet/external/pson/common.rb +4 -0
- data/lib/puppet/face/ca.rb +49 -42
- data/lib/puppet/face/catalog.rb +1 -1
- data/lib/puppet/face/catalog/select.rb +4 -4
- data/lib/puppet/face/certificate.rb +20 -20
- data/lib/puppet/face/config.rb +9 -22
- data/lib/puppet/face/epp.rb +59 -61
- data/lib/puppet/face/facts.rb +4 -4
- data/lib/puppet/face/generate.rb +8 -8
- data/lib/puppet/face/help.rb +7 -7
- data/lib/puppet/face/key.rb +2 -2
- data/lib/puppet/face/man.rb +5 -5
- data/lib/puppet/face/module.rb +2 -2
- data/lib/puppet/face/module/build.rb +7 -7
- data/lib/puppet/face/module/changes.rb +6 -6
- data/lib/puppet/face/module/generate.rb +24 -24
- data/lib/puppet/face/module/install.rb +13 -9
- data/lib/puppet/face/module/list.rb +16 -12
- data/lib/puppet/face/module/search.rb +4 -4
- data/lib/puppet/face/module/uninstall.rb +13 -10
- data/lib/puppet/face/module/upgrade.rb +11 -7
- data/lib/puppet/face/node.rb +5 -5
- data/lib/puppet/face/node/clean.rb +8 -8
- data/lib/puppet/face/parser.rb +16 -16
- data/lib/puppet/face/plugin.rb +6 -6
- data/lib/puppet/face/report.rb +9 -9
- data/lib/puppet/face/resource.rb +12 -12
- data/lib/puppet/face/status.rb +4 -4
- data/lib/puppet/feature/base.rb +3 -2
- data/lib/puppet/feature/eventlog.rb +1 -1
- data/lib/puppet/file_bucket/dipper.rb +9 -9
- data/lib/puppet/file_bucket/file.rb +4 -17
- data/lib/puppet/file_serving/base.rb +3 -3
- data/lib/puppet/file_serving/configuration.rb +3 -3
- data/lib/puppet/file_serving/configuration/parser.rb +12 -12
- data/lib/puppet/file_serving/content.rb +1 -1
- data/lib/puppet/file_serving/fileset.rb +7 -5
- data/lib/puppet/file_serving/http_metadata.rb +1 -1
- data/lib/puppet/file_serving/metadata.rb +7 -7
- data/lib/puppet/file_serving/mount.rb +1 -1
- data/lib/puppet/file_serving/mount/file.rb +6 -6
- data/lib/puppet/file_serving/mount/modules.rb +1 -1
- data/lib/puppet/file_serving/terminus_selector.rb +1 -1
- data/lib/puppet/file_system/file_impl.rb +2 -2
- data/lib/puppet/file_system/memory_impl.rb +1 -1
- data/lib/puppet/file_system/path_pattern.rb +6 -6
- data/lib/puppet/file_system/uniquefile.rb +2 -2
- data/lib/puppet/file_system/windows.rb +3 -3
- data/lib/puppet/forge.rb +8 -14
- data/lib/puppet/forge/errors.rb +12 -12
- data/lib/puppet/forge/repository.rb +1 -1
- data/lib/puppet/functions.rb +17 -45
- data/lib/puppet/functions/annotate.rb +108 -0
- data/lib/puppet/functions/binary_file.rb +1 -1
- data/lib/puppet/functions/call.rb +42 -0
- data/lib/puppet/functions/defined.rb +4 -4
- data/lib/puppet/functions/dig.rb +1 -1
- data/lib/puppet/functions/each.rb +4 -10
- data/lib/puppet/functions/epp.rb +0 -3
- data/lib/puppet/functions/hiera_include.rb +1 -1
- data/lib/puppet/functions/hocon_data.rb +2 -2
- data/lib/puppet/functions/json_data.rb +1 -1
- data/lib/puppet/functions/lookup.rb +2 -2
- data/lib/puppet/functions/map.rb +3 -13
- data/lib/puppet/functions/match.rb +2 -2
- data/lib/puppet/functions/reduce.rb +0 -31
- data/lib/puppet/functions/require.rb +1 -1
- data/lib/puppet/functions/slice.rb +3 -3
- data/lib/puppet/functions/strftime.rb +10 -2
- data/lib/puppet/functions/unique.rb +132 -0
- data/lib/puppet/generate/models/type/property.rb +1 -1
- data/lib/puppet/generate/type.rb +12 -12
- data/lib/puppet/graph/relationship_graph.rb +4 -7
- data/lib/puppet/graph/simple_graph.rb +45 -66
- data/lib/puppet/indirector.rb +2 -2
- data/lib/puppet/indirector/catalog/compiler.rb +58 -44
- data/lib/puppet/indirector/catalog/json.rb +18 -0
- data/lib/puppet/indirector/certificate/disabled_ca.rb +1 -1
- data/lib/puppet/indirector/certificate_request/ca.rb +3 -3
- data/lib/puppet/indirector/certificate_request/disabled_ca.rb +1 -1
- data/lib/puppet/indirector/certificate_revocation_list/disabled_ca.rb +1 -1
- data/lib/puppet/indirector/certificate_status/file.rb +6 -6
- data/lib/puppet/indirector/exec.rb +2 -2
- data/lib/puppet/indirector/face.rb +18 -18
- data/lib/puppet/indirector/file_bucket_file/file.rb +10 -9
- data/lib/puppet/indirector/file_metadata/http.rb +1 -1
- data/lib/puppet/indirector/file_server.rb +10 -2
- data/lib/puppet/indirector/hiera.rb +5 -3
- data/lib/puppet/indirector/indirection.rb +16 -18
- data/lib/puppet/indirector/json.rb +11 -12
- data/lib/puppet/indirector/key/disabled_ca.rb +1 -1
- data/lib/puppet/indirector/key/file.rb +2 -2
- data/lib/puppet/indirector/ldap.rb +6 -5
- data/lib/puppet/indirector/memory.rb +1 -1
- data/lib/puppet/indirector/msgpack.rb +8 -7
- data/lib/puppet/indirector/node/exec.rb +8 -6
- data/lib/puppet/indirector/node/ldap.rb +9 -7
- data/lib/puppet/indirector/node/plain.rb +2 -1
- data/lib/puppet/indirector/node/write_only_yaml.rb +6 -1
- data/lib/puppet/indirector/node/yaml.rb +0 -9
- data/lib/puppet/indirector/report/processor.rb +2 -2
- data/lib/puppet/indirector/report/rest.rb +13 -0
- data/lib/puppet/indirector/request.rb +11 -23
- data/lib/puppet/indirector/resource/ral.rb +1 -1
- data/lib/puppet/indirector/resource/validator.rb +1 -1
- data/lib/puppet/indirector/rest.rb +28 -10
- data/lib/puppet/indirector/ssl_file.rb +9 -9
- data/lib/puppet/indirector/terminus.rb +3 -3
- data/lib/puppet/indirector/yaml.rb +5 -5
- data/lib/puppet/info_service/class_information_service.rb +4 -5
- data/lib/puppet/interface.rb +2 -7
- data/lib/puppet/interface/face_collection.rb +6 -1
- data/lib/puppet/module.rb +10 -35
- data/lib/puppet/module_tool.rb +7 -3
- data/lib/puppet/module_tool/applications/application.rb +8 -9
- data/lib/puppet/module_tool/applications/builder.rb +5 -6
- data/lib/puppet/module_tool/applications/checksummer.rb +2 -2
- data/lib/puppet/module_tool/applications/installer.rb +11 -10
- data/lib/puppet/module_tool/applications/searcher.rb +1 -1
- data/lib/puppet/module_tool/applications/uninstaller.rb +2 -1
- data/lib/puppet/module_tool/applications/unpacker.rb +3 -3
- data/lib/puppet/module_tool/applications/upgrader.rb +10 -9
- data/lib/puppet/module_tool/contents_description.rb +1 -1
- data/lib/puppet/module_tool/dependency.rb +0 -1
- data/lib/puppet/module_tool/errors/installer.rb +22 -22
- data/lib/puppet/module_tool/errors/shared.rb +44 -42
- data/lib/puppet/module_tool/errors/uninstaller.rb +13 -9
- data/lib/puppet/module_tool/errors/upgrader.rb +11 -11
- data/lib/puppet/module_tool/install_directory.rb +1 -1
- data/lib/puppet/module_tool/installed_modules.rb +3 -3
- data/lib/puppet/module_tool/local_tarball.rb +4 -4
- data/lib/puppet/module_tool/metadata.rb +16 -13
- data/lib/puppet/module_tool/shared_behaviors.rb +6 -6
- data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +1 -1
- data/lib/puppet/module_tool/skeleton/templates/generator/README.md.erb +10 -4
- data/lib/puppet/module_tool/skeleton/templates/generator/Rakefile +2 -2
- data/lib/puppet/module_tool/tar.rb +2 -1
- data/lib/puppet/module_tool/tar/mini.rb +4 -57
- data/lib/puppet/network/auth_config_parser.rb +12 -11
- data/lib/puppet/network/authconfig.rb +2 -2
- data/lib/puppet/network/authstore.rb +2 -2
- data/lib/puppet/network/format.rb +7 -7
- data/lib/puppet/network/format_handler.rb +12 -9
- data/lib/puppet/network/format_support.rb +11 -5
- data/lib/puppet/network/formats.rb +38 -27
- data/lib/puppet/network/http/api/indirected_routes.rb +72 -33
- data/lib/puppet/network/http/api/master/v3/environment.rb +33 -14
- data/lib/puppet/network/http/compression.rb +10 -7
- data/lib/puppet/network/http/connection.rb +19 -23
- data/lib/puppet/network/http/error.rb +14 -10
- data/lib/puppet/network/http/factory.rb +0 -12
- data/lib/puppet/network/http/handler.rb +8 -4
- data/lib/puppet/network/http/issues.rb +1 -0
- data/lib/puppet/network/http/pool.rb +1 -1
- data/lib/puppet/network/http/rack.rb +2 -2
- data/lib/puppet/network/http/rack/rest.rb +1 -1
- data/lib/puppet/network/http/request.rb +34 -20
- data/lib/puppet/network/http/response.rb +13 -1
- data/lib/puppet/network/http/webrick.rb +8 -6
- data/lib/puppet/network/http/webrick/rest.rb +2 -2
- data/lib/puppet/network/rights.rb +6 -6
- data/lib/puppet/network/server.rb +2 -2
- data/lib/puppet/node.rb +25 -23
- data/lib/puppet/node/environment.rb +21 -4
- data/lib/puppet/node/facts.rb +0 -14
- data/lib/puppet/parameter.rb +3 -28
- data/lib/puppet/parameter/package_options.rb +1 -1
- data/lib/puppet/parameter/path.rb +3 -3
- data/lib/puppet/parameter/value_collection.rb +4 -4
- data/lib/puppet/parser/ast/leaf.rb +1 -1
- data/lib/puppet/parser/ast/node.rb +1 -1
- data/lib/puppet/parser/ast/pops_bridge.rb +3 -3
- data/lib/puppet/parser/ast/resource.rb +1 -1
- data/lib/puppet/parser/ast/resource_instance.rb +1 -1
- data/lib/puppet/parser/ast/resourceparam.rb +1 -1
- data/lib/puppet/parser/compiler.rb +44 -117
- data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +2 -2
- data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +6 -9
- data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +1 -1
- data/lib/puppet/parser/e4_parser_adapter.rb +1 -2
- data/lib/puppet/parser/environment_compiler.rb +13 -15
- data/lib/puppet/parser/functions.rb +6 -6
- data/lib/puppet/parser/functions/assert_type.rb +1 -1
- data/lib/puppet/parser/functions/binary_file.rb +1 -1
- data/lib/puppet/parser/functions/break.rb +1 -1
- data/lib/puppet/parser/functions/contain.rb +1 -1
- data/lib/puppet/parser/functions/create_resources.rb +3 -3
- data/lib/puppet/parser/functions/defined.rb +1 -1
- data/lib/puppet/parser/functions/dig.rb +1 -1
- data/lib/puppet/parser/functions/each.rb +1 -1
- data/lib/puppet/parser/functions/epp.rb +1 -4
- data/lib/puppet/parser/functions/file.rb +1 -1
- data/lib/puppet/parser/functions/filter.rb +1 -1
- data/lib/puppet/parser/functions/find_file.rb +1 -1
- data/lib/puppet/parser/functions/generate.rb +5 -4
- data/lib/puppet/parser/functions/hiera_include.rb +1 -1
- data/lib/puppet/parser/functions/include.rb +2 -1
- data/lib/puppet/parser/functions/inline_epp.rb +1 -1
- data/lib/puppet/parser/functions/inline_template.rb +1 -1
- data/lib/puppet/parser/functions/lest.rb +1 -1
- data/lib/puppet/parser/functions/map.rb +1 -1
- data/lib/puppet/parser/functions/match.rb +1 -1
- data/lib/puppet/parser/functions/new.rb +45 -30
- data/lib/puppet/parser/functions/next.rb +1 -1
- data/lib/puppet/parser/functions/reduce.rb +1 -1
- data/lib/puppet/parser/functions/require.rb +1 -1
- data/lib/puppet/parser/functions/return.rb +2 -23
- data/lib/puppet/parser/functions/reverse_each.rb +1 -1
- data/lib/puppet/parser/functions/slice.rb +1 -1
- data/lib/puppet/parser/functions/sprintf.rb +3 -17
- data/lib/puppet/parser/functions/step.rb +1 -1
- data/lib/puppet/parser/functions/strftime.rb +1 -1
- data/lib/puppet/parser/functions/then.rb +1 -1
- data/lib/puppet/parser/functions/type.rb +1 -1
- data/lib/puppet/parser/functions/with.rb +1 -1
- data/lib/puppet/parser/parser_factory.rb +0 -30
- data/lib/puppet/parser/relationship.rb +49 -20
- data/lib/puppet/parser/resource.rb +31 -30
- data/lib/puppet/parser/resource/param.rb +0 -3
- data/lib/puppet/parser/scope.rb +122 -168
- data/lib/puppet/parser/templatewrapper.rb +2 -2
- data/lib/puppet/parser/type_loader.rb +1 -1
- data/lib/puppet/plugins/configuration.rb +15 -67
- data/lib/puppet/plugins/syntax_checkers.rb +6 -11
- data/lib/puppet/pops.rb +7 -37
- data/lib/puppet/pops/adaptable.rb +8 -3
- data/lib/puppet/pops/adapters.rb +23 -83
- data/lib/puppet/pops/evaluator/access_operator.rb +10 -39
- data/lib/puppet/pops/evaluator/collector_transformer.rb +7 -12
- data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +1 -1
- data/lib/puppet/pops/evaluator/compare_operator.rb +7 -7
- data/lib/puppet/pops/evaluator/epp_evaluator.rb +1 -1
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +46 -38
- data/lib/puppet/pops/evaluator/external_syntax_support.rb +2 -9
- data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +0 -2
- data/lib/puppet/pops/evaluator/puppet_proc.rb +1 -1
- data/lib/puppet/pops/evaluator/relationship_operator.rb +26 -9
- data/lib/puppet/pops/evaluator/runtime3_converter.rb +17 -1
- data/lib/puppet/pops/evaluator/runtime3_support.rb +13 -30
- data/lib/puppet/pops/functions/dispatch.rb +1 -6
- data/lib/puppet/pops/issues.rb +182 -162
- data/lib/puppet/pops/loader/base_loader.rb +2 -2
- data/lib/puppet/pops/loader/gem_support.rb +2 -2
- data/lib/puppet/pops/loader/module_loaders.rb +59 -8
- data/lib/puppet/pops/loader/predefined_loader.rb +1 -6
- data/lib/puppet/pops/loader/puppet_function_instantiator.rb +8 -8
- data/lib/puppet/pops/loader/puppet_resource_type_impl_instantiator.rb +9 -10
- data/lib/puppet/pops/loader/ruby_function_instantiator.rb +3 -3
- data/lib/puppet/pops/loader/static_loader.rb +33 -64
- data/lib/puppet/pops/loader/type_definition_instantiator.rb +7 -7
- data/lib/puppet/pops/loader/typed_name.rb +5 -0
- data/lib/puppet/pops/loaders.rb +15 -5
- data/lib/puppet/pops/lookup.rb +4 -2
- data/lib/puppet/pops/lookup/context.rb +1 -1
- data/lib/puppet/pops/lookup/data_provider.rb +3 -18
- data/lib/puppet/pops/lookup/global_data_provider.rb +1 -1
- data/lib/puppet/pops/lookup/hiera_config.rb +12 -35
- data/lib/puppet/pops/lookup/interpolation.rb +1 -0
- data/lib/puppet/pops/lookup/invocation.rb +1 -1
- data/lib/puppet/pops/lookup/lookup_adapter.rb +20 -64
- data/lib/puppet/pops/lookup/lookup_key.rb +1 -1
- data/lib/puppet/pops/lookup/module_data_provider.rb +1 -1
- data/lib/puppet/pops/lookup/sub_lookup.rb +2 -1
- data/lib/puppet/pops/merge_strategy.rb +1 -1
- data/lib/puppet/pops/model/ast.pp +692 -0
- data/lib/puppet/pops/model/ast.rb +4833 -0
- data/lib/puppet/pops/model/ast_transformer.rb +9 -10
- data/lib/puppet/pops/model/factory.rb +454 -527
- data/lib/puppet/pops/model/model_label_provider.rb +3 -2
- data/lib/puppet/pops/model/model_tree_dumper.rb +9 -8
- data/lib/puppet/pops/parser/egrammar.ra +66 -60
- data/lib/puppet/pops/parser/eparser.rb +1483 -1578
- data/lib/puppet/pops/parser/evaluating_parser.rb +5 -5
- data/lib/puppet/pops/parser/heredoc_support.rb +1 -1
- data/lib/puppet/pops/parser/interpolation_support.rb +4 -4
- data/lib/puppet/pops/parser/lexer2.rb +7 -33
- data/lib/puppet/pops/parser/locator.rb +39 -16
- data/lib/puppet/pops/parser/parser_support.rb +25 -29
- data/lib/puppet/pops/patterns.rb +1 -2
- data/lib/puppet/pops/pcore.rb +26 -19
- data/lib/puppet/pops/resource/param.rb +1 -1
- data/lib/puppet/pops/resource/resource_type_impl.rb +2 -2
- data/lib/puppet/pops/serialization.rb +25 -1
- data/lib/puppet/pops/serialization/abstract_writer.rb +9 -1
- data/lib/puppet/pops/serialization/deserializer.rb +1 -1
- data/lib/puppet/pops/serialization/from_data_converter.rb +181 -0
- data/lib/puppet/pops/serialization/json.rb +4 -4
- data/lib/puppet/pops/serialization/json_path.rb +126 -0
- data/lib/puppet/pops/serialization/object.rb +5 -5
- data/lib/puppet/pops/serialization/serializer.rb +23 -9
- data/lib/puppet/pops/serialization/to_data_converter.rb +292 -0
- data/lib/puppet/pops/time/timespan.rb +11 -11
- data/lib/puppet/pops/time/timestamp.rb +8 -8
- data/lib/puppet/pops/types/annotatable.rb +7 -7
- data/lib/puppet/pops/types/annotation.rb +71 -0
- data/lib/puppet/pops/types/class_loader.rb +4 -6
- data/lib/puppet/pops/types/enumeration.rb +2 -2
- data/lib/puppet/pops/types/iterable.rb +2 -4
- data/lib/puppet/pops/types/p_binary_type.rb +7 -1
- data/lib/puppet/pops/types/p_meta_type.rb +16 -12
- data/lib/puppet/pops/types/p_object_type.rb +135 -96
- data/lib/puppet/pops/types/p_runtime_type.rb +1 -1
- data/lib/puppet/pops/types/p_sem_ver_range_type.rb +6 -2
- data/lib/puppet/pops/types/p_timespan_type.rb +55 -4
- data/lib/puppet/pops/types/p_type_set_type.rb +42 -34
- data/lib/puppet/pops/types/puppet_object.rb +13 -3
- data/lib/puppet/pops/types/ruby_generator.rb +291 -127
- data/lib/puppet/pops/types/ruby_method.rb +31 -0
- data/lib/puppet/pops/types/string_converter.rb +107 -30
- data/lib/puppet/pops/types/type_calculator.rb +56 -94
- data/lib/puppet/pops/types/type_factory.rb +34 -6
- data/lib/puppet/pops/types/type_formatter.rb +64 -16
- data/lib/puppet/pops/types/type_mismatch_describer.rb +13 -22
- data/lib/puppet/pops/types/type_parser.rb +28 -13
- data/lib/puppet/pops/types/type_set_reference.rb +6 -6
- data/lib/puppet/pops/types/types.rb +169 -245
- data/lib/puppet/pops/utils.rb +0 -24
- data/lib/puppet/pops/validation.rb +3 -9
- data/lib/puppet/pops/validation/checker4_0.rb +86 -76
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +0 -1
- data/lib/puppet/pops/visitor.rb +21 -0
- data/lib/puppet/property.rb +17 -14
- data/lib/puppet/property/ensure.rb +3 -3
- data/lib/puppet/property/list.rb +1 -10
- data/lib/puppet/provider.rb +2 -0
- data/lib/puppet/provider/aixobject.rb +7 -7
- data/lib/puppet/provider/augeas/augeas.rb +37 -37
- data/lib/puppet/provider/command.rb +1 -1
- data/lib/puppet/provider/cron/crontab.rb +2 -2
- data/lib/puppet/provider/exec.rb +4 -4
- data/lib/puppet/provider/exec/posix.rb +4 -4
- data/lib/puppet/provider/exec/windows.rb +3 -3
- data/lib/puppet/provider/file/posix.rb +5 -5
- data/lib/puppet/provider/file/windows.rb +4 -4
- data/lib/puppet/provider/group/aix.rb +2 -2
- data/lib/puppet/provider/group/groupadd.rb +2 -2
- data/lib/puppet/provider/group/pw.rb +1 -1
- data/lib/puppet/provider/group/windows_adsi.rb +7 -4
- data/lib/puppet/provider/host/parsed.rb +1 -1
- data/lib/puppet/provider/macauthorization/macauthorization.rb +9 -9
- data/lib/puppet/provider/maillist/mailman.rb +2 -2
- data/lib/puppet/provider/mcx/mcxcontent.rb +3 -3
- data/lib/puppet/provider/mount.rb +2 -1
- data/lib/puppet/provider/mount/parsed.rb +10 -8
- data/lib/puppet/provider/naginator.rb +1 -1
- data/lib/puppet/provider/nameservice.rb +8 -10
- data/lib/puppet/provider/nameservice/directoryservice.rb +11 -11
- data/lib/puppet/provider/network_device.rb +2 -1
- data/lib/puppet/provider/package/aix.rb +6 -6
- data/lib/puppet/provider/package/appdmg.rb +2 -2
- data/lib/puppet/provider/package/apple.rb +1 -1
- data/lib/puppet/provider/package/apt.rb +4 -4
- data/lib/puppet/provider/package/aptitude.rb +1 -1
- data/lib/puppet/provider/package/aptrpm.rb +2 -2
- data/lib/puppet/provider/package/blastwave.rb +4 -4
- data/lib/puppet/provider/package/dnf.rb +1 -1
- data/lib/puppet/provider/package/dpkg.rb +3 -3
- data/lib/puppet/provider/package/fink.rb +3 -3
- data/lib/puppet/provider/package/freebsd.rb +1 -1
- data/lib/puppet/provider/package/gem.rb +6 -6
- data/lib/puppet/provider/package/hpux.rb +1 -1
- data/lib/puppet/provider/package/nim.rb +15 -12
- data/lib/puppet/provider/package/openbsd.rb +4 -4
- data/lib/puppet/provider/package/opkg.rb +1 -1
- data/lib/puppet/provider/package/pacman.rb +9 -9
- data/lib/puppet/provider/package/pkg.rb +9 -9
- data/lib/puppet/provider/package/pkgdmg.rb +4 -4
- data/lib/puppet/provider/package/pkgin.rb +3 -3
- data/lib/puppet/provider/package/pkgng.rb +1 -1
- data/lib/puppet/provider/package/pkgutil.rb +6 -6
- data/lib/puppet/provider/package/portage.rb +167 -59
- data/lib/puppet/provider/package/ports.rb +3 -3
- data/lib/puppet/provider/package/portupgrade.rb +4 -4
- data/lib/puppet/provider/package/rpm.rb +7 -4
- data/lib/puppet/provider/package/rug.rb +1 -1
- data/lib/puppet/provider/package/sun.rb +3 -2
- data/lib/puppet/provider/package/up2date.rb +1 -1
- data/lib/puppet/provider/package/urpmi.rb +1 -1
- data/lib/puppet/provider/package/windows.rb +4 -4
- data/lib/puppet/provider/package/windows/package.rb +3 -3
- data/lib/puppet/provider/package/yum.rb +5 -6
- data/lib/puppet/provider/package/zypper.rb +1 -1
- data/lib/puppet/provider/parsedfile.rb +1 -1
- data/lib/puppet/provider/service/base.rb +8 -21
- data/lib/puppet/provider/service/smf.rb +2 -2
- data/lib/puppet/provider/service/systemd.rb +1 -2
- data/lib/puppet/provider/service/upstart.rb +1 -3
- data/lib/puppet/provider/user/aix.rb +2 -2
- data/lib/puppet/provider/user/ldap.rb +1 -1
- data/lib/puppet/provider/user/windows_adsi.rb +1 -1
- data/lib/puppet/provider/yumrepo/inifile.rb +3 -3
- data/lib/puppet/provider/zfs/zfs.rb +1 -5
- data/lib/puppet/reference/configuration.rb +0 -2
- data/lib/puppet/reference/indirection.rb +1 -1
- data/lib/puppet/reference/metaparameter.rb +1 -1
- data/lib/puppet/reference/providers.rb +6 -6
- data/lib/puppet/reference/type.rb +2 -2
- data/lib/puppet/relationship.rb +7 -9
- data/lib/puppet/reports/http.rb +8 -6
- data/lib/puppet/resource.rb +75 -134
- data/lib/puppet/resource/capability_finder.rb +1 -1
- data/lib/puppet/resource/catalog.rb +26 -34
- data/lib/puppet/resource/status.rb +13 -24
- data/lib/puppet/resource/type.rb +13 -61
- data/lib/puppet/resource/type_collection.rb +29 -23
- data/lib/puppet/settings.rb +1 -1
- data/lib/puppet/settings/array_setting.rb +1 -1
- data/lib/puppet/settings/autosign_setting.rb +1 -1
- data/lib/puppet/settings/boolean_setting.rb +1 -1
- data/lib/puppet/settings/config_file.rb +2 -2
- data/lib/puppet/settings/duration_setting.rb +1 -1
- data/lib/puppet/settings/enum_setting.rb +1 -1
- data/lib/puppet/settings/environment_conf.rb +2 -10
- data/lib/puppet/settings/file_setting.rb +2 -2
- data/lib/puppet/settings/priority_setting.rb +1 -1
- data/lib/puppet/settings/server_list_setting.rb +1 -1
- data/lib/puppet/settings/symbolic_enum_setting.rb +1 -1
- data/lib/puppet/settings/terminus_setting.rb +1 -1
- data/lib/puppet/settings/ttl_setting.rb +2 -2
- data/lib/puppet/ssl/base.rb +2 -2
- data/lib/puppet/ssl/certificate_authority.rb +21 -21
- data/lib/puppet/ssl/certificate_authority/interface.rb +13 -13
- data/lib/puppet/ssl/certificate_factory.rb +2 -2
- data/lib/puppet/ssl/certificate_request.rb +14 -14
- data/lib/puppet/ssl/certificate_request_attributes.rb +3 -3
- data/lib/puppet/ssl/certificate_revocation_list.rb +3 -3
- data/lib/puppet/ssl/host.rb +29 -29
- data/lib/puppet/ssl/inventory.rb +1 -1
- data/lib/puppet/ssl/key.rb +1 -1
- data/lib/puppet/ssl/oids.rb +5 -5
- data/lib/puppet/ssl/validator/default_validator.rb +3 -4
- data/lib/puppet/syntax_checkers/base64.rb +7 -7
- data/lib/puppet/syntax_checkers/json.rb +5 -5
- data/lib/puppet/test/test_helper.rb +0 -4
- data/lib/puppet/transaction.rb +38 -23
- data/lib/puppet/transaction/additional_resource_generator.rb +4 -3
- data/lib/puppet/transaction/event.rb +19 -8
- data/lib/puppet/transaction/event_manager.rb +6 -6
- data/lib/puppet/transaction/persistence.rb +6 -6
- data/lib/puppet/transaction/report.rb +34 -47
- data/lib/puppet/transaction/resource_harness.rb +14 -12
- data/lib/puppet/type.rb +9 -7
- data/lib/puppet/type/augeas.rb +2 -2
- data/lib/puppet/type/cron.rb +14 -31
- data/lib/puppet/type/exec.rb +16 -16
- data/lib/puppet/type/file.rb +21 -22
- data/lib/puppet/type/file/content.rb +1 -1
- data/lib/puppet/type/file/group.rb +3 -3
- data/lib/puppet/type/file/mode.rb +6 -6
- data/lib/puppet/type/file/owner.rb +3 -3
- data/lib/puppet/type/file/selcontext.rb +18 -1
- data/lib/puppet/type/file/source.rb +5 -1
- data/lib/puppet/type/filebucket.rb +3 -8
- data/lib/puppet/type/group.rb +2 -2
- data/lib/puppet/type/host.rb +6 -6
- data/lib/puppet/type/interface.rb +1 -1
- data/lib/puppet/type/k5login.rb +1 -1
- data/lib/puppet/type/macauthorization.rb +1 -1
- data/lib/puppet/type/mailalias.rb +2 -18
- data/lib/puppet/type/maillist.rb +1 -1
- data/lib/puppet/type/mount.rb +8 -8
- data/lib/puppet/type/notify.rb +2 -0
- data/lib/puppet/type/package.rb +5 -5
- data/lib/puppet/type/resources.rb +6 -6
- data/lib/puppet/type/schedule.rb +9 -9
- data/lib/puppet/type/scheduled_task.rb +9 -8
- data/lib/puppet/type/service.rb +1 -1
- data/lib/puppet/type/ssh_authorized_key.rb +3 -19
- data/lib/puppet/type/sshkey.rb +4 -4
- data/lib/puppet/type/tidy.rb +16 -19
- data/lib/puppet/type/user.rb +35 -70
- data/lib/puppet/type/yumrepo.rb +8 -8
- data/lib/puppet/type/zone.rb +7 -7
- data/lib/puppet/type/zpool.rb +3 -3
- data/lib/puppet/util.rb +16 -12
- data/lib/puppet/util/at_fork.rb +35 -0
- data/lib/puppet/util/at_fork/noop.rb +18 -0
- data/lib/puppet/util/at_fork/solaris.rb +158 -0
- data/lib/puppet/util/autoload.rb +2 -2
- data/lib/puppet/util/backups.rb +6 -6
- data/lib/puppet/util/classgen.rb +4 -4
- data/lib/puppet/util/command_line.rb +4 -4
- data/lib/puppet/util/command_line/puppet_option_parser.rb +3 -3
- data/lib/puppet/util/command_line/trollop.rb +31 -31
- data/lib/puppet/util/diff.rb +1 -1
- data/lib/puppet/util/errors.rb +4 -4
- data/lib/puppet/util/execution.rb +9 -9
- data/lib/puppet/util/feature.rb +5 -5
- data/lib/puppet/util/fileparsing.rb +8 -8
- data/lib/puppet/util/filetype.rb +15 -15
- data/lib/puppet/util/http_proxy.rb +7 -15
- data/lib/puppet/util/inifile.rb +4 -4
- data/lib/puppet/util/instance_loader.rb +1 -1
- data/lib/puppet/util/json_lockfile.rb +4 -4
- data/lib/puppet/util/ldap/connection.rb +2 -2
- data/lib/puppet/util/ldap/manager.rb +2 -2
- data/lib/puppet/util/limits.rb +1 -1
- data/lib/puppet/util/log.rb +23 -16
- data/lib/puppet/util/log/destinations.rb +10 -16
- data/lib/puppet/util/logging.rb +11 -8
- data/lib/puppet/util/metric.rb +9 -6
- data/lib/puppet/util/monkey_patches.rb +27 -66
- data/lib/puppet/util/network_device.rb +1 -1
- data/lib/puppet/util/network_device/cisco/device.rb +7 -7
- data/lib/puppet/util/network_device/cisco/interface.rb +1 -1
- data/lib/puppet/util/network_device/config.rb +6 -6
- data/lib/puppet/util/network_device/transport/ssh.rb +6 -6
- data/lib/puppet/util/plist.rb +4 -2
- data/lib/puppet/util/posix.rb +5 -5
- data/lib/puppet/util/profiler/wall_clock.rb +1 -1
- data/lib/puppet/util/provider_features.rb +1 -1
- data/lib/puppet/util/psych_support.rb +3 -11
- data/lib/puppet/util/rdoc.rb +4 -4
- data/lib/puppet/util/reference.rb +14 -7
- data/lib/puppet/util/resource_template.rb +1 -1
- data/lib/puppet/util/retry_action.rb +2 -2
- data/lib/puppet/util/selinux.rb +54 -12
- data/lib/puppet/util/splayer.rb +1 -1
- data/lib/puppet/util/storage.rb +5 -5
- data/lib/puppet/util/suidmanager.rb +4 -4
- data/lib/puppet/util/symbolic_file_mode.rb +9 -9
- data/lib/puppet/util/tag_set.rb +1 -4
- data/lib/puppet/util/tagging.rb +2 -2
- data/lib/puppet/util/windows.rb +2 -0
- data/lib/puppet/util/windows/adsi.rb +19 -16
- data/lib/puppet/util/windows/api_types.rb +7 -11
- data/lib/puppet/util/windows/com.rb +4 -4
- data/lib/puppet/util/windows/error.rb +2 -2
- data/lib/puppet/util/windows/eventlog.rb +192 -0
- data/lib/puppet/util/windows/file.rb +13 -96
- data/lib/puppet/util/windows/principal.rb +6 -7
- data/lib/puppet/util/windows/process.rb +6 -14
- data/lib/puppet/util/windows/registry.rb +11 -11
- data/lib/puppet/util/windows/root_certs.rb +1 -1
- data/lib/puppet/util/windows/security.rb +14 -14
- data/lib/puppet/util/windows/sid.rb +13 -66
- data/lib/puppet/util/windows/taskscheduler.rb +62 -62
- data/lib/puppet/util/windows/user.rb +6 -6
- data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet.rb +2 -10
- data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/gem_version.rb +1 -1
- data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/version.rb +122 -114
- data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/version_range.rb +678 -342
- data/lib/puppet/vendor/semantic_puppet/{lib/semantic_puppet/locales → locales}/config.yaml +0 -0
- data/lib/puppet/version.rb +1 -1
- data/locales/config.yaml +1 -1
- data/locales/puppet.pot +7847 -112
- data/man/man5/puppet.conf.5 +55 -296
- data/man/man8/puppet-agent.8 +10 -32
- data/man/man8/puppet-apply.8 +6 -21
- data/man/man8/puppet-ca.8 +34 -48
- data/man/man8/puppet-catalog.8 +4 -4
- data/man/man8/puppet-cert.8 +6 -23
- data/man/man8/puppet-certificate.8 +28 -44
- data/man/man8/puppet-certificate_request.8 +4 -4
- data/man/man8/puppet-certificate_revocation_list.8 +4 -4
- data/man/man8/puppet-config.8 +5 -5
- data/man/man8/puppet-describe.8 +3 -3
- data/man/man8/puppet-device.8 +13 -23
- data/man/man8/puppet-doc.8 +5 -5
- data/man/man8/puppet-epp.8 +10 -16
- data/man/man8/puppet-facts.8 +4 -4
- data/man/man8/puppet-filebucket.8 +6 -63
- data/man/man8/puppet-help.8 +4 -4
- data/man/man8/puppet-inspect.8 +5 -8
- data/man/man8/puppet-key.8 +4 -4
- data/man/man8/puppet-man.8 +5 -5
- data/man/man8/puppet-master.8 +5 -5
- data/man/man8/puppet-module.8 +13 -22
- data/man/man8/puppet-node.8 +4 -4
- data/man/man8/puppet-parser.8 +4 -4
- data/man/man8/puppet-plugin.8 +4 -4
- data/man/man8/puppet-report.8 +4 -4
- data/man/man8/puppet-resource.8 +8 -4
- data/man/man8/puppet-status.8 +5 -5
- data/man/man8/puppet.8 +3 -12
- data/spec/fixtures/unit/application/environments/production/data/common.yaml +0 -2
- data/spec/fixtures/unit/data_providers/environments/production/modules/abc/metadata.json +9 -0
- data/spec/fixtures/unit/data_providers/environments/production/modules/xyz/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/abc/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/bad_data/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/bca/metadata.json +9 -0
- data/spec/integration/agent/logging_spec.rb +0 -2
- data/spec/integration/application/apply_spec.rb +19 -23
- data/spec/integration/application/lookup_spec.rb +0 -21
- data/spec/integration/configurer_spec.rb +1 -1
- data/spec/integration/defaults_spec.rb +2 -2
- data/spec/integration/file_bucket/file_spec.rb +5 -20
- data/spec/integration/indirector/file_content/file_server_spec.rb +1 -0
- data/spec/integration/indirector/file_metadata/file_server_spec.rb +1 -0
- data/spec/integration/parser/catalog_spec.rb +1 -1
- data/spec/integration/parser/class_spec.rb +6 -6
- data/spec/integration/parser/compiler_spec.rb +184 -142
- data/spec/integration/parser/dynamic_scoping_spec.rb +0 -1
- data/spec/integration/parser/pcore_resource_spec.rb +1 -1
- data/spec/integration/parser/scope_spec.rb +53 -4
- data/spec/integration/provider/cron/crontab_spec.rb +0 -1
- data/spec/integration/resource/catalog_spec.rb +0 -4
- data/spec/integration/transaction/report_spec.rb +2 -2
- data/spec/integration/transaction_spec.rb +4 -37
- data/spec/integration/type/package_spec.rb +7 -1
- data/spec/integration/util/execution_spec.rb +0 -8
- data/spec/integration/util/windows/adsi_spec.rb +1 -86
- data/spec/integration/util/windows/principal_spec.rb +1 -10
- data/spec/integration/util/windows/process_spec.rb +0 -45
- data/spec/lib/matchers/json.rb +3 -3
- data/spec/lib/puppet/indirector_testing.rb +4 -0
- data/spec/lib/puppet_spec/compiler.rb +1 -1
- data/spec/lib/puppet_spec/modules.rb +2 -2
- data/spec/lib/puppet_spec/network.rb +10 -6
- data/spec/shared_contexts/types_setup.rb +28 -9
- data/spec/spec_helper.rb +0 -11
- data/spec/unit/agent_spec.rb +12 -34
- data/spec/unit/application/agent_spec.rb +16 -0
- data/spec/unit/application/apply_spec.rb +37 -13
- data/spec/unit/application/cert_spec.rb +1 -40
- data/spec/unit/application/config_spec.rb +0 -4
- data/spec/unit/application/describe_spec.rb +19 -0
- data/spec/unit/application/device_spec.rb +41 -2
- data/spec/unit/application/face_base_spec.rb +6 -6
- data/spec/unit/application/lookup_spec.rb +1 -31
- data/spec/unit/application/master_spec.rb +22 -6
- data/spec/unit/application/resource_spec.rb +17 -0
- data/spec/unit/application_spec.rb +0 -24
- data/spec/unit/capability_spec.rb +2 -6
- data/spec/unit/configurer/fact_handler_spec.rb +74 -41
- data/spec/unit/configurer/plugin_handler_spec.rb +13 -19
- data/spec/unit/configurer_spec.rb +36 -33
- data/spec/unit/defaults_spec.rb +0 -44
- data/spec/unit/environments_spec.rb +0 -15
- data/spec/unit/face/config_spec.rb +2 -1
- data/spec/unit/face/epp_face_spec.rb +0 -9
- data/spec/unit/face/module/list_spec.rb +60 -0
- data/spec/unit/file_bucket/file_spec.rb +3 -3
- data/spec/unit/file_serving/http_metadata_spec.rb +1 -1
- data/spec/unit/file_serving/metadata_spec.rb +14 -9
- data/spec/unit/forge/forge_spec.rb +2 -2
- data/spec/unit/forge_spec.rb +0 -105
- data/spec/unit/functions/annotate_spec.rb +175 -0
- data/spec/unit/functions/break_spec.rb +52 -83
- data/spec/unit/functions/call_spec.rb +77 -0
- data/spec/unit/functions/contain_spec.rb +1 -1
- data/spec/unit/functions/defined_spec.rb +2 -2
- data/spec/unit/functions/epp_spec.rb +0 -10
- data/spec/unit/functions/hiera_spec.rb +0 -5
- data/spec/unit/functions/lookup_fixture_spec.rb +1 -6
- data/spec/unit/functions/lookup_spec.rb +4 -97
- data/spec/unit/functions/new_spec.rb +1 -1
- data/spec/unit/functions/unique_spec.rb +111 -0
- data/spec/unit/functions4_spec.rb +2 -43
- data/spec/unit/graph/relationship_graph_spec.rb +0 -15
- data/spec/unit/graph/simple_graph_spec.rb +58 -55
- data/spec/unit/indirector/catalog/compiler_spec.rb +206 -174
- data/spec/unit/indirector/catalog/json_spec.rb +50 -1
- data/spec/unit/indirector/facts/facter_spec.rb +1 -2
- data/spec/unit/indirector/file_bucket_file/file_spec.rb +4 -4
- data/spec/unit/indirector/file_server_spec.rb +17 -2
- data/spec/unit/indirector/indirection_spec.rb +3 -60
- data/spec/unit/indirector/json_spec.rb +27 -6
- data/spec/unit/indirector/node/exec_spec.rb +12 -12
- data/spec/unit/indirector/node/ldap_spec.rb +29 -8
- data/spec/unit/indirector/node/plain_spec.rb +16 -6
- data/spec/unit/indirector/node/write_only_yaml_spec.rb +12 -0
- data/spec/unit/indirector/report/processor_spec.rb +2 -2
- data/spec/unit/indirector/report/rest_spec.rb +29 -3
- data/spec/unit/indirector/request_spec.rb +0 -45
- data/spec/unit/indirector/rest_spec.rb +57 -15
- data/spec/unit/interface/face_collection_spec.rb +7 -7
- data/spec/unit/interface_spec.rb +0 -12
- data/spec/unit/module_spec.rb +10 -31
- data/spec/unit/module_tool/applications/installer_spec.rb +0 -1
- data/spec/unit/module_tool/applications/upgrader_spec.rb +0 -1
- data/spec/unit/module_tool/tar/mini_spec.rb +5 -34
- data/spec/unit/network/format_handler_spec.rb +11 -11
- data/spec/unit/network/format_spec.rb +9 -0
- data/spec/unit/network/formats_spec.rb +322 -138
- data/spec/unit/network/http/api/indirected_routes_spec.rb +62 -52
- data/spec/unit/network/http/api/master/v3/environment_spec.rb +128 -2
- data/spec/unit/network/http/api/master/v3_spec.rb +1 -1
- data/spec/unit/network/http/api_spec.rb +1 -1
- data/spec/unit/network/http/compression_spec.rb +105 -88
- data/spec/unit/network/http/error_spec.rb +1 -2
- data/spec/unit/network/http/factory_spec.rb +9 -38
- data/spec/unit/network/http/handler_spec.rb +8 -12
- data/spec/unit/network/http/request_spec.rb +110 -0
- data/spec/unit/network/http/response_spec.rb +108 -0
- data/spec/unit/network/http/webrick_spec.rb +29 -30
- data/spec/unit/node/facts_spec.rb +13 -13
- data/spec/unit/node_spec.rb +33 -10
- data/spec/unit/parameter_spec.rb +73 -5
- data/spec/unit/parser/ast/leaf_spec.rb +4 -3
- data/spec/unit/parser/compiler_spec.rb +1 -1
- data/spec/unit/parser/environment_compiler_spec.rb +0 -2
- data/spec/unit/parser/functions/sprintf_spec.rb +0 -26
- data/spec/unit/parser/resource_spec.rb +86 -24
- data/spec/unit/parser/scope_spec.rb +4 -81
- data/spec/unit/pops/benchmark_spec.rb +8 -26
- data/spec/unit/pops/containment_spec.rb +0 -26
- data/spec/unit/pops/evaluator/access_ops_spec.rb +103 -103
- data/spec/unit/pops/evaluator/arithmetic_ops_spec.rb +59 -6
- data/spec/unit/pops/evaluator/basic_expressions_spec.rb +5 -5
- data/spec/unit/pops/evaluator/comparison_ops_spec.rb +26 -26
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +19 -7
- data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +7 -7
- data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +36 -1
- data/spec/unit/pops/evaluator/string_interpolation_spec.rb +10 -10
- data/spec/unit/pops/evaluator/variables_spec.rb +1 -1
- data/spec/unit/pops/factory_rspec_helper.rb +0 -4
- data/spec/unit/pops/factory_spec.rb +83 -83
- data/spec/unit/pops/loaders/loaders_spec.rb +69 -1
- data/spec/unit/pops/loaders/static_loader_spec.rb +3 -7
- data/spec/unit/pops/model/model_spec.rb +10 -10
- data/spec/unit/pops/parser/epp_parser_spec.rb +1 -1
- data/spec/unit/pops/parser/lexer2_spec.rb +4 -59
- data/spec/unit/pops/parser/{source_pos_adapter_spec.rb → locator_spec.rb} +9 -11
- data/spec/unit/pops/parser/parse_application_spec.rb +0 -3
- data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +4 -4
- data/spec/unit/pops/parser/parse_capabilities_spec.rb +0 -3
- data/spec/unit/pops/parser/parse_containers_spec.rb +17 -19
- data/spec/unit/pops/parser/parse_site_spec.rb +0 -3
- data/spec/unit/pops/parser/parser_spec.rb +8 -10
- data/spec/unit/pops/resource/resource_type_impl_spec.rb +1 -3
- data/spec/unit/pops/serialization/serialization_spec.rb +87 -1
- data/spec/unit/pops/serialization/to_from_hr_spec.rb +494 -0
- data/spec/unit/pops/time/timestamp_spec.rb +13 -0
- data/spec/unit/pops/types/iterable_spec.rb +1 -1
- data/spec/unit/pops/types/p_object_type_spec.rb +99 -13
- data/spec/unit/pops/types/p_timestamp_type_spec.rb +8 -8
- data/spec/unit/pops/types/p_type_set_type_spec.rb +1 -9
- data/spec/unit/pops/types/ruby_generator_spec.rb +57 -20
- data/spec/unit/pops/types/string_converter_spec.rb +78 -30
- data/spec/unit/pops/types/type_acceptor_spec.rb +2 -2
- data/spec/unit/pops/types/type_calculator_spec.rb +207 -123
- data/spec/unit/pops/types/type_factory_spec.rb +9 -9
- data/spec/unit/pops/types/type_formatter_spec.rb +32 -19
- data/spec/unit/pops/types/type_mismatch_describer_spec.rb +0 -9
- data/spec/unit/pops/types/type_parser_spec.rb +6 -6
- data/spec/unit/pops/types/types_spec.rb +42 -2
- data/spec/unit/pops/validator/validator_spec.rb +25 -86
- data/spec/unit/pops/visitor_spec.rb +1 -1
- data/spec/unit/property/list_spec.rb +2 -2
- data/spec/unit/provider/augeas/augeas_spec.rb +1 -1
- data/spec/unit/provider/group/windows_adsi_spec.rb +22 -79
- data/spec/unit/provider/package/aix_spec.rb +0 -8
- data/spec/unit/provider/package/portage_spec.rb +103 -17
- data/spec/unit/provider/package/rpm_spec.rb +14 -1
- data/spec/unit/provider/package/yum_spec.rb +0 -10
- data/spec/unit/provider/service/base_spec.rb +0 -20
- data/spec/unit/provider/service/smf_spec.rb +4 -2
- data/spec/unit/provider/service/systemd_spec.rb +1 -15
- data/spec/unit/provider/user/directoryservice_spec.rb +7 -7
- data/spec/unit/provider/user/windows_adsi_spec.rb +4 -4
- data/spec/unit/provider/zfs/zfs_spec.rb +1 -7
- data/spec/unit/puppet_spec.rb +2 -3
- data/spec/unit/relationship_spec.rb +15 -36
- data/spec/unit/reports/http_spec.rb +11 -8
- data/spec/unit/resource/catalog_spec.rb +47 -49
- data/spec/unit/resource/status_spec.rb +114 -103
- data/spec/unit/resource/type_collection_spec.rb +5 -5
- data/spec/unit/resource/type_spec.rb +4 -71
- data/spec/unit/resource_spec.rb +30 -34
- data/spec/unit/settings_spec.rb +4 -2
- data/spec/unit/ssl/host_spec.rb +34 -34
- data/spec/unit/status_spec.rb +7 -7
- data/spec/unit/transaction/event_spec.rb +18 -15
- data/spec/unit/transaction/report_spec.rb +100 -81
- data/spec/unit/transaction/resource_harness_spec.rb +3 -3
- data/spec/unit/transaction_spec.rb +53 -8
- data/spec/unit/type/file/group_spec.rb +2 -2
- data/spec/unit/type/file/mode_spec.rb +9 -9
- data/spec/unit/type/file/owner_spec.rb +2 -2
- data/spec/unit/type/file/selinux_spec.rb +2 -0
- data/spec/unit/type/file/source_spec.rb +13 -0
- data/spec/unit/type/nagios_spec.rb +1 -21
- data/spec/unit/type/ssh_authorized_key_spec.rb +2 -2
- data/spec/unit/type/tidy_spec.rb +0 -14
- data/spec/unit/type/user_spec.rb +2 -4
- data/spec/unit/util/at_fork_spec.rb +150 -0
- data/spec/unit/util/execution_spec.rb +31 -2
- data/spec/unit/util/http_proxy_spec.rb +0 -37
- data/spec/unit/util/log/destinations_spec.rb +5 -6
- data/spec/unit/util/log_spec.rb +62 -17
- data/spec/unit/util/metric_spec.rb +9 -2
- data/spec/unit/util/monkey_patches_spec.rb +6 -188
- data/spec/unit/util/run_mode_spec.rb +17 -10
- data/spec/unit/util/tag_set_spec.rb +2 -2
- data/spec/unit/util/tagging_spec.rb +55 -0
- data/spec/unit/util/windows/adsi_spec.rb +27 -31
- data/spec/unit/util/windows/api_types_spec.rb +0 -51
- data/spec/unit/util/windows/eventlog_spec.rb +123 -0
- data/spec/unit/util/windows/sid_spec.rb +15 -86
- data/spec/unit/util_spec.rb +7 -1
- data/tasks/benchmark.rake +3 -3
- data/tasks/cfpropertylist.rake +1 -1
- data/tasks/generate_ast_model.rake +78 -0
- data/tasks/manpages.rake +1 -1
- data/tasks/parallel.rake +7 -12
- metadata +3442 -3699
- checksums.yaml +0 -7
- data/bin/extlookup2hiera +0 -56
- data/ext/emacs/puppet-mode-init.el +0 -6
- data/ext/emacs/puppet-mode.el +0 -433
- data/ext/vim/README +0 -3
- data/ext/vim/ftdetect/puppet.vim +0 -2
- data/ext/vim/ftplugin/puppet.vim +0 -94
- data/ext/vim/indent/puppet.vim +0 -76
- data/ext/vim/syntax/puppet.vim +0 -115
- data/lib/puppet/application/file.rb +0 -4
- data/lib/puppet/application/inspect.rb +0 -184
- data/lib/puppet/application/resource_type.rb +0 -7
- data/lib/puppet/data_providers.rb +0 -34
- data/lib/puppet/data_providers/data_adapter.rb +0 -37
- data/lib/puppet/data_providers/data_function_support.rb +0 -32
- data/lib/puppet/data_providers/function_env_data_provider.rb +0 -26
- data/lib/puppet/data_providers/function_module_data_provider.rb +0 -24
- data/lib/puppet/data_providers/hiera_config.rb +0 -151
- data/lib/puppet/data_providers/hiera_env_data_provider.rb +0 -25
- data/lib/puppet/data_providers/hiera_interpolate.rb +0 -21
- data/lib/puppet/data_providers/hiera_module_data_provider.rb +0 -30
- data/lib/puppet/data_providers/hiera_support.rb +0 -42
- data/lib/puppet/data_providers/json_data_provider_factory.rb +0 -38
- data/lib/puppet/data_providers/yaml_data_provider_factory.rb +0 -40
- data/lib/puppet/face/file.rb +0 -50
- data/lib/puppet/face/file/download.rb +0 -56
- data/lib/puppet/face/file/store.rb +0 -21
- data/lib/puppet/face/resource_type.rb +0 -84
- data/lib/puppet/feature/cfacter.rb +0 -15
- data/lib/puppet/feature/external_facts.rb +0 -5
- data/lib/puppet/indirector/catalog/static_compiler.rb +0 -232
- data/lib/puppet/indirector/resource_type.rb +0 -5
- data/lib/puppet/indirector/resource_type/parser.rb +0 -108
- data/lib/puppet/indirector/resource_type/rest.rb +0 -7
- data/lib/puppet/parser/yaml_trimmer.rb +0 -7
- data/lib/puppet/plugins/binding_schemes.rb +0 -140
- data/lib/puppet/plugins/data_providers.rb +0 -45
- data/lib/puppet/plugins/data_providers/data_provider.rb +0 -406
- data/lib/puppet/plugins/data_providers/registry.rb +0 -51
- data/lib/puppet/pops/binder/binder.rb +0 -398
- data/lib/puppet/pops/binder/binder_issues.rb +0 -124
- data/lib/puppet/pops/binder/bindings_checker.rb +0 -201
- data/lib/puppet/pops/binder/bindings_composer.rb +0 -181
- data/lib/puppet/pops/binder/bindings_factory.rb +0 -813
- data/lib/puppet/pops/binder/bindings_label_provider.rb +0 -45
- data/lib/puppet/pops/binder/bindings_loader.rb +0 -87
- data/lib/puppet/pops/binder/bindings_model.rb +0 -70
- data/lib/puppet/pops/binder/bindings_model_dumper.rb +0 -215
- data/lib/puppet/pops/binder/bindings_model_meta.rb +0 -215
- data/lib/puppet/pops/binder/bindings_validator_factory.rb +0 -28
- data/lib/puppet/pops/binder/config/binder_config.rb +0 -107
- data/lib/puppet/pops/binder/config/binder_config_checker.rb +0 -142
- data/lib/puppet/pops/binder/config/diagnostic_producer.rb +0 -36
- data/lib/puppet/pops/binder/config/issues.rb +0 -90
- data/lib/puppet/pops/binder/injector.rb +0 -771
- data/lib/puppet/pops/binder/injector_entry.rb +0 -57
- data/lib/puppet/pops/binder/key_factory.rb +0 -65
- data/lib/puppet/pops/binder/producers.rb +0 -831
- data/lib/puppet/pops/binder/scheme_handler/confdir_scheme.rb +0 -34
- data/lib/puppet/pops/binder/scheme_handler/module_scheme.rb +0 -143
- data/lib/puppet/pops/binder/scheme_handler/symbolic_scheme.rb +0 -53
- data/lib/puppet/pops/binder/system_bindings.rb +0 -60
- data/lib/puppet/pops/containment.rb +0 -104
- data/lib/puppet/pops/model/model.rb +0 -131
- data/lib/puppet/pops/model/model_meta.rb +0 -629
- data/lib/puppet/pops/serialization/rgen.rb +0 -152
- data/lib/puppet/vendor/load_rgen.rb +0 -2
- data/lib/puppet/vendor/rgen/CHANGELOG +0 -197
- data/lib/puppet/vendor/rgen/MIT-LICENSE +0 -20
- data/lib/puppet/vendor/rgen/PUPPET_README.md +0 -6
- data/lib/puppet/vendor/rgen/README.rdoc +0 -78
- data/lib/puppet/vendor/rgen/Rakefile +0 -41
- data/lib/puppet/vendor/rgen/TODO +0 -41
- data/lib/puppet/vendor/rgen/anounce.txt +0 -61
- data/lib/puppet/vendor/rgen/design_rationale.txt +0 -71
- data/lib/puppet/vendor/rgen/lib/ea_support/ea_support.rb +0 -54
- data/lib/puppet/vendor/rgen/lib/ea_support/id_store.rb +0 -32
- data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel.rb +0 -562
- data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel_ext.rb +0 -45
- data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel_generator.rb +0 -43
- data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_to_uml13.rb +0 -103
- data/lib/puppet/vendor/rgen/lib/ea_support/uml13_to_uml13_ea.rb +0 -89
- data/lib/puppet/vendor/rgen/lib/metamodels/uml13_metamodel.rb +0 -559
- data/lib/puppet/vendor/rgen/lib/metamodels/uml13_metamodel_ext.rb +0 -26
- data/lib/puppet/vendor/rgen/lib/mmgen/metamodel_generator.rb +0 -20
- data/lib/puppet/vendor/rgen/lib/mmgen/mm_ext/ecore_mmgen_ext.rb +0 -91
- data/lib/puppet/vendor/rgen/lib/mmgen/mmgen.rb +0 -28
- data/lib/puppet/vendor/rgen/lib/mmgen/templates/annotations.tpl +0 -37
- data/lib/puppet/vendor/rgen/lib/mmgen/templates/metamodel_generator.tpl +0 -172
- data/lib/puppet/vendor/rgen/lib/rgen/array_extensions.rb +0 -45
- data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore.rb +0 -218
- data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_builder_methods.rb +0 -81
- data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_ext.rb +0 -69
- data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_interface.rb +0 -47
- data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_to_ruby.rb +0 -167
- data/lib/puppet/vendor/rgen/lib/rgen/ecore/ruby_to_ecore.rb +0 -91
- data/lib/puppet/vendor/rgen/lib/rgen/environment.rb +0 -129
- data/lib/puppet/vendor/rgen/lib/rgen/fragment/dump_file_cache.rb +0 -63
- data/lib/puppet/vendor/rgen/lib/rgen/fragment/fragmented_model.rb +0 -140
- data/lib/puppet/vendor/rgen/lib/rgen/fragment/model_fragment.rb +0 -289
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/abstract_instantiator.rb +0 -66
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/abstract_xml_instantiator.rb +0 -66
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/default_xml_instantiator.rb +0 -117
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/ecore_xml_instantiator.rb +0 -169
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_instantiator.rb +0 -126
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_parser.rb +0 -331
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_parser.y +0 -94
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/nodebased_xml_instantiator.rb +0 -137
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/qualified_name_resolver.rb +0 -97
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/reference_resolver.rb +0 -128
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/resolution_helper.rb +0 -47
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/xmi11_instantiator.rb +0 -168
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder.rb +0 -224
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/builder_extensions.rb +0 -556
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/builder_runtime.rb +0 -174
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/constant_order_helper.rb +0 -89
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/data_types.rb +0 -77
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/intermediate/annotation.rb +0 -30
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/intermediate/feature.rb +0 -168
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/mm_multiple.rb +0 -23
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/module_extension.rb +0 -42
- data/lib/puppet/vendor/rgen/lib/rgen/model_builder.rb +0 -32
- data/lib/puppet/vendor/rgen/lib/rgen/model_builder/builder_context.rb +0 -334
- data/lib/puppet/vendor/rgen/lib/rgen/model_builder/model_serializer.rb +0 -225
- data/lib/puppet/vendor/rgen/lib/rgen/model_builder/reference_resolver.rb +0 -156
- data/lib/puppet/vendor/rgen/lib/rgen/serializer/json_serializer.rb +0 -121
- data/lib/puppet/vendor/rgen/lib/rgen/serializer/opposite_reference_filter.rb +0 -18
- data/lib/puppet/vendor/rgen/lib/rgen/serializer/qualified_name_provider.rb +0 -47
- data/lib/puppet/vendor/rgen/lib/rgen/serializer/xmi11_serializer.rb +0 -116
- data/lib/puppet/vendor/rgen/lib/rgen/serializer/xmi20_serializer.rb +0 -71
- data/lib/puppet/vendor/rgen/lib/rgen/serializer/xml_serializer.rb +0 -98
- data/lib/puppet/vendor/rgen/lib/rgen/template_language.rb +0 -297
- data/lib/puppet/vendor/rgen/lib/rgen/template_language/directory_template_container.rb +0 -83
- data/lib/puppet/vendor/rgen/lib/rgen/template_language/output_handler.rb +0 -87
- data/lib/puppet/vendor/rgen/lib/rgen/template_language/template_container.rb +0 -234
- data/lib/puppet/vendor/rgen/lib/rgen/template_language/template_helper.rb +0 -26
- data/lib/puppet/vendor/rgen/lib/rgen/transformer.rb +0 -475
- data/lib/puppet/vendor/rgen/lib/rgen/util/auto_class_creator.rb +0 -61
- data/lib/puppet/vendor/rgen/lib/rgen/util/cached_glob.rb +0 -67
- data/lib/puppet/vendor/rgen/lib/rgen/util/file_cache_map.rb +0 -124
- data/lib/puppet/vendor/rgen/lib/rgen/util/file_change_detector.rb +0 -84
- data/lib/puppet/vendor/rgen/lib/rgen/util/method_delegation.rb +0 -114
- data/lib/puppet/vendor/rgen/lib/rgen/util/model_comparator.rb +0 -68
- data/lib/puppet/vendor/rgen/lib/rgen/util/model_comparator_base.rb +0 -142
- data/lib/puppet/vendor/rgen/lib/rgen/util/model_dumper.rb +0 -29
- data/lib/puppet/vendor/rgen/lib/rgen/util/name_helper.rb +0 -42
- data/lib/puppet/vendor/rgen/lib/rgen/util/pattern_matcher.rb +0 -329
- data/lib/puppet/vendor/rgen/lib/transformers/ecore_to_uml13.rb +0 -79
- data/lib/puppet/vendor/rgen/lib/transformers/uml13_to_ecore.rb +0 -127
- data/lib/puppet/vendor/rgen/test/array_extensions_test.rb +0 -64
- data/lib/puppet/vendor/rgen/test/ea_instantiator_test.rb +0 -35
- data/lib/puppet/vendor/rgen/test/ea_serializer_test.rb +0 -23
- data/lib/puppet/vendor/rgen/test/ecore_self_test.rb +0 -54
- data/lib/puppet/vendor/rgen/test/environment_test.rb +0 -90
- data/lib/puppet/vendor/rgen/test/json_test.rb +0 -171
- data/lib/puppet/vendor/rgen/test/metamodel_builder_test.rb +0 -1482
- data/lib/puppet/vendor/rgen/test/metamodel_from_ecore_test.rb +0 -57
- data/lib/puppet/vendor/rgen/test/metamodel_order_test.rb +0 -131
- data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test.rb +0 -98
- data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/TestModel.rb +0 -70
- data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/houseMetamodel.ecore +0 -42
- data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/houseMetamodel_from_ecore.rb +0 -44
- data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/using_builtin_types.ecore +0 -9
- data/lib/puppet/vendor/rgen/test/method_delegation_test.rb +0 -178
- data/lib/puppet/vendor/rgen/test/model_builder/builder_context_test.rb +0 -59
- data/lib/puppet/vendor/rgen/test/model_builder/builder_test.rb +0 -242
- data/lib/puppet/vendor/rgen/test/model_builder/ecore_original.rb +0 -163
- data/lib/puppet/vendor/rgen/test/model_builder/ecore_original_regenerated.rb +0 -163
- data/lib/puppet/vendor/rgen/test/model_builder/reference_resolver_test.rb +0 -156
- data/lib/puppet/vendor/rgen/test/model_builder/serializer_test.rb +0 -94
- data/lib/puppet/vendor/rgen/test/model_builder/statemachine_metamodel.rb +0 -42
- data/lib/puppet/vendor/rgen/test/model_builder/test_model/statemachine1.rb +0 -23
- data/lib/puppet/vendor/rgen/test/model_builder_test.rb +0 -6
- data/lib/puppet/vendor/rgen/test/model_fragment_test.rb +0 -30
- data/lib/puppet/vendor/rgen/test/output_handler_test.rb +0 -58
- data/lib/puppet/vendor/rgen/test/qualified_name_provider_test.rb +0 -48
- data/lib/puppet/vendor/rgen/test/qualified_name_resolver_test.rb +0 -102
- data/lib/puppet/vendor/rgen/test/reference_resolver_test.rb +0 -117
- data/lib/puppet/vendor/rgen/test/rgen_test.rb +0 -26
- data/lib/puppet/vendor/rgen/test/template_language_test.rb +0 -163
- data/lib/puppet/vendor/rgen/test/template_language_test/expected_result1.txt +0 -29
- data/lib/puppet/vendor/rgen/test/template_language_test/expected_result2.txt +0 -9
- data/lib/puppet/vendor/rgen/test/template_language_test/expected_result3.txt +0 -4
- data/lib/puppet/vendor/rgen/test/template_language_test/indentStringTestDefaultIndent.out +0 -1
- data/lib/puppet/vendor/rgen/test/template_language_test/indentStringTestTabIndent.out +0 -1
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/callback_indent_test/a.tpl +0 -12
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/callback_indent_test/b.tpl +0 -5
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/code/array.tpl +0 -11
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/content/author.tpl +0 -7
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/content/chapter.tpl +0 -5
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/define_local_test/local.tpl +0 -8
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/define_local_test/test.tpl +0 -8
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/evaluate_test/test.tpl +0 -7
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/indent_string_test.tpl +0 -12
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/index/c/cmod.tpl +0 -1
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/index/chapter.tpl +0 -3
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_backslash_r_test.tpl +0 -5
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/no_indent.tpl +0 -3
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/sub1/no_indent.tpl +0 -3
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test.tpl +0 -24
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test2.tpl +0 -13
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test3.tpl +0 -10
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/null_context_test.tpl +0 -17
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/root.tpl +0 -31
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/sub1.tpl +0 -9
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/sub1/sub1.tpl +0 -3
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/test.tpl +0 -4
- data/lib/puppet/vendor/rgen/test/template_language_test/testout.txt +0 -29
- data/lib/puppet/vendor/rgen/test/testmodel/class_model_checker.rb +0 -119
- data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel.eap +0 -0
- data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel.xml +0 -1029
- data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel_partial.xml +0 -317
- data/lib/puppet/vendor/rgen/test/testmodel/ecore_model_checker.rb +0 -101
- data/lib/puppet/vendor/rgen/test/testmodel/manual_testmodel.xml +0 -22
- data/lib/puppet/vendor/rgen/test/testmodel/object_model_checker.rb +0 -67
- data/lib/puppet/vendor/rgen/test/transformer_test.rb +0 -254
- data/lib/puppet/vendor/rgen/test/util/file_cache_map_test.rb +0 -99
- data/lib/puppet/vendor/rgen/test/util/pattern_matcher_test.rb +0 -97
- data/lib/puppet/vendor/rgen/test/util_test.rb +0 -5
- data/lib/puppet/vendor/rgen/test/xml_instantiator_test.rb +0 -160
- data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_ecore_model_checker.rb +0 -94
- data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_ecore_instantiator.rb +0 -53
- data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_metamodel.rb +0 -49
- data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_to_ecore.rb +0 -75
- data/lib/puppet/vendor/rgen_patch.rb +0 -132
- data/lib/semver.rb +0 -146
- data/man/man8/extlookup2hiera.8 +0 -10
- data/man/man8/puppet-file.8 +0 -189
- data/man/man8/puppet-generate.8 +0 -84
- data/man/man8/puppet-lookup.8 +0 -87
- data/man/man8/puppet-resource_type.8 +0 -188
- data/spec/fixtures/unit/data_providers/environments/production/modules/abc/lib/puppet/bindings/abc/default.rb +0 -9
- data/spec/fixtures/unit/data_providers/environments/production/modules/xyz/lib/puppet/bindings/xyz/default.rb +0 -9
- data/spec/fixtures/unit/data_providers/environments/sample/environment.conf +0 -2
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/hiera.yaml +0 -5
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/lib/puppet/bindings/backend/default.rb +0 -9
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/lib/puppet_x/backend/special_data_provider_factory.rb +0 -23
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/manifests/init.pp +0 -5
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/metadata.json +0 -9
- data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet/bindings/dataprovider/default.rb +0 -54
- data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_env_data.rb +0 -33
- data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_module_data.rb +0 -33
- data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/manifests/init.pp +0 -5
- data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/abc/lib/puppet/bindings/abc/default.rb +0 -9
- data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/bad_data/lib/puppet/bindings/bad_data/default.rb +0 -9
- data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/bca/lib/puppet/bindings/bca/default.rb +0 -9
- data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/metawcp/lib/puppet/bindings/metawcp/default.rb +0 -10
- data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/metawcp/lib/puppet_x/thallgren/sample_module_data.rb +0 -23
- data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/metawcp/manifests/init.pp +0 -3
- data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/metawcp/metadata.json +0 -9
- data/spec/fixtures/unit/provider/package/yum/yum-check-update-plugin-output.txt +0 -36
- data/spec/fixtures/unit/provider/service/base/ps_ef.mixed_encoding +0 -3
- data/spec/unit/application/inspect_spec.rb +0 -316
- data/spec/unit/data_providers/custom_data_provider_spec.rb +0 -50
- data/spec/unit/face/file_spec.rb +0 -14
- data/spec/unit/indirector/catalog/static_compiler_spec.rb +0 -255
- data/spec/unit/indirector/resource_type/parser_spec.rb +0 -259
- data/spec/unit/indirector/resource_type/rest_spec.rb +0 -14
- data/spec/unit/pops/binder/binder_spec.rb +0 -43
- data/spec/unit/pops/binder/bindings_checker_spec.rb +0 -155
- data/spec/unit/pops/binder/bindings_composer_spec.rb +0 -64
- data/spec/unit/pops/binder/bindings_validator_factory_spec.rb +0 -18
- data/spec/unit/pops/binder/config/binder_config_spec.rb +0 -42
- data/spec/unit/pops/binder/injector_spec.rb +0 -768
- data/spec/unit/pops/parser/rgen_sanitycheck_spec.rb +0 -23
- data/spec/unit/pops/serialization/rgen_spec.rb +0 -88
- data/spec/unit/semver_spec.rb +0 -546
@@ -1,28 +0,0 @@
|
|
1
|
-
# Configures validation suitable for the bindings model
|
2
|
-
# @api public
|
3
|
-
#
|
4
|
-
class Puppet::Pops::Binder::BindingsValidatorFactory < Puppet::Pops::Validation::Factory
|
5
|
-
Issues = Puppet::Pops::Binder::BinderIssues
|
6
|
-
|
7
|
-
# Produces the checker to use
|
8
|
-
def checker diagnostic_producer
|
9
|
-
Puppet::Pops::Binder::BindingsChecker.new(diagnostic_producer)
|
10
|
-
end
|
11
|
-
|
12
|
-
# Produces the label provider to use
|
13
|
-
def label_provider
|
14
|
-
Puppet::Pops::Binder::BindingsLabelProvider.new()
|
15
|
-
end
|
16
|
-
|
17
|
-
# Produces the severity producer to use
|
18
|
-
def severity_producer
|
19
|
-
p = super
|
20
|
-
|
21
|
-
# Configure each issue that should **not** be an error
|
22
|
-
#
|
23
|
-
p[Issues::MISSING_BINDINGS] = :warning
|
24
|
-
p[Issues::MISSING_LAYERS] = :warning
|
25
|
-
|
26
|
-
p
|
27
|
-
end
|
28
|
-
end
|
@@ -1,107 +0,0 @@
|
|
1
|
-
module Puppet::Pops::Binder::Config
|
2
|
-
# Class holding the Binder Configuration
|
3
|
-
# The configuration is obtained from the file 'binder_config.yaml'
|
4
|
-
# that must reside in the root directory of the site
|
5
|
-
# @api public
|
6
|
-
#
|
7
|
-
class BinderConfig
|
8
|
-
|
9
|
-
# The layering configuration is an array of layers from most to least significant.
|
10
|
-
# Each layer is represented by a Hash containing :name and :include and optionally :exclude
|
11
|
-
#
|
12
|
-
# @return [Array<Hash<String, String>, Hash<String, Array<String>>]
|
13
|
-
# @api public
|
14
|
-
#
|
15
|
-
attr_reader :layering_config
|
16
|
-
|
17
|
-
# @return <Hash<String, String>] ({}) optional mapping of bindings-scheme to handler class name
|
18
|
-
attr_reader :scheme_extensions
|
19
|
-
|
20
|
-
|
21
|
-
# @return [String] the loaded config file
|
22
|
-
attr_accessor :config_file
|
23
|
-
|
24
|
-
DEFAULT_LAYERS = [
|
25
|
-
{ 'name' => 'site', 'include' => [ 'confdir:/default?optional'] },
|
26
|
-
{ 'name' => 'modules', 'include' => [ 'module:/*::default', 'module:/*::metadata'] },
|
27
|
-
]
|
28
|
-
|
29
|
-
DEFAULT_SCHEME_EXTENSIONS = {}
|
30
|
-
|
31
|
-
def default_config()
|
32
|
-
# This is hardcoded now, but may be a user supplied default configuration later
|
33
|
-
{'version' => 1, 'layers' => default_layers }
|
34
|
-
end
|
35
|
-
|
36
|
-
def confdir()
|
37
|
-
Puppet.settings[:confdir]
|
38
|
-
end
|
39
|
-
|
40
|
-
# Creates a new Config. The configuration is loaded from the file 'binder_config.yaml' which
|
41
|
-
# is expected to be found in confdir.
|
42
|
-
#
|
43
|
-
# @param diagnostics [DiagnosticProducer] collector of diagnostics
|
44
|
-
# @api public
|
45
|
-
#
|
46
|
-
def initialize(diagnostics)
|
47
|
-
@config_file = Puppet.settings[:binder_config]
|
48
|
-
# if file is stated, it must exist
|
49
|
-
# otherwise it is optional $confdir/binder_conf.yaml
|
50
|
-
# and if that fails, the default
|
51
|
-
case @config_file
|
52
|
-
when NilClass
|
53
|
-
# use the config file if it exists
|
54
|
-
rootdir = confdir
|
55
|
-
if rootdir.is_a?(String)
|
56
|
-
expanded_config_file = File.expand_path(File.join(rootdir, '/binder_config.yaml'))
|
57
|
-
if Puppet::FileSystem.exist?(expanded_config_file)
|
58
|
-
@config_file = expanded_config_file
|
59
|
-
end
|
60
|
-
else
|
61
|
-
raise ArgumentError, "No Puppet settings 'confdir', or it is not a String"
|
62
|
-
end
|
63
|
-
when String
|
64
|
-
unless Puppet::FileSystem.exist?(@config_file)
|
65
|
-
raise ArgumentError, "Cannot find the given binder configuration file '#{@config_file}'"
|
66
|
-
end
|
67
|
-
else
|
68
|
-
raise ArgumentError, "The setting binder_config is expected to be a String, got: #{@config_file.class.name}."
|
69
|
-
end
|
70
|
-
unless @config_file.is_a?(String) && Puppet::FileSystem.exist?(@config_file)
|
71
|
-
@config_file = nil # use defaults
|
72
|
-
end
|
73
|
-
|
74
|
-
validator = BinderConfigChecker.new(diagnostics)
|
75
|
-
begin
|
76
|
-
data = @config_file ? YAML.load_file(@config_file) : default_config()
|
77
|
-
validator.validate(data, @config_file)
|
78
|
-
rescue Errno::ENOENT
|
79
|
-
diagnostics.accept(Issues::CONFIG_FILE_NOT_FOUND, @config_file)
|
80
|
-
rescue Errno::ENOTDIR
|
81
|
-
diagnostics.accept(Issues::CONFIG_FILE_NOT_FOUND, @config_file)
|
82
|
-
rescue ::SyntaxError => e
|
83
|
-
diagnostics.accept(Issues::CONFIG_FILE_SYNTAX_ERROR, @config_file, :detail => e.message)
|
84
|
-
end
|
85
|
-
|
86
|
-
unless diagnostics.errors?
|
87
|
-
@layering_config = data['layers'] || default_layers
|
88
|
-
@scheme_extensions = (data['extensions'] && data['extensions']['scheme_handlers'] || default_scheme_extensions)
|
89
|
-
else
|
90
|
-
@layering_config = []
|
91
|
-
@scheme_extensions = {}
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
# The default_xxx methods exists to make it easier to do mocking in tests.
|
96
|
-
|
97
|
-
# @api private
|
98
|
-
def default_layers
|
99
|
-
DEFAULT_LAYERS
|
100
|
-
end
|
101
|
-
|
102
|
-
# @api private
|
103
|
-
def default_scheme_extensions
|
104
|
-
DEFAULT_SCHEME_EXTENSIONS
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|
@@ -1,142 +0,0 @@
|
|
1
|
-
module Puppet::Pops::Binder::Config
|
2
|
-
# Validates the consistency of a Binder::BinderConfig
|
3
|
-
class BinderConfigChecker
|
4
|
-
# Create an instance with a diagnostic producer that will receive the result during validation
|
5
|
-
# @param diagnostics [DiagnosticProducer] The producer that will receive the diagnostic
|
6
|
-
# @api public
|
7
|
-
#
|
8
|
-
def initialize(diagnostics)
|
9
|
-
@diagnostics = diagnostics
|
10
|
-
t = Puppet::Pops::Types
|
11
|
-
@type_calculator = t::TypeCalculator.new()
|
12
|
-
@array_of_string_type = t::TypeFactory.array_of(t::TypeFactory.string())
|
13
|
-
end
|
14
|
-
|
15
|
-
# Validate the consistency of the given data. Diagnostics will be emitted to the DiagnosticProducer
|
16
|
-
# that was set when this checker was created
|
17
|
-
#
|
18
|
-
# @param data [Object] The data read from the config file
|
19
|
-
# @param config_file [String] The full path of the file. Used in error messages
|
20
|
-
# @api public
|
21
|
-
#
|
22
|
-
def validate(data, config_file)
|
23
|
-
@unique_layer_names = Set.new()
|
24
|
-
|
25
|
-
if data.is_a?(Hash)
|
26
|
-
check_top_level(data, config_file)
|
27
|
-
else
|
28
|
-
accept(Issues::CONFIG_IS_NOT_HASH, config_file)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
private
|
33
|
-
|
34
|
-
def accept(issue, semantic, options = {})
|
35
|
-
@diagnostics.accept(issue, semantic, options)
|
36
|
-
end
|
37
|
-
|
38
|
-
def check_top_level(data, config_file)
|
39
|
-
if layers = (data['layers'] || data[:layers])
|
40
|
-
check_layers(layers, config_file)
|
41
|
-
else
|
42
|
-
accept(Issues::CONFIG_LAYERS_MISSING, config_file)
|
43
|
-
end
|
44
|
-
|
45
|
-
if version = (data['version'] || data[:version])
|
46
|
-
accept(Issues::CONFIG_WRONG_VERSION, config_file, {:expected => 1, :actual => version}) unless version == 1
|
47
|
-
else
|
48
|
-
accept(Issues::CONFIG_VERSION_MISSING, config_file)
|
49
|
-
end
|
50
|
-
if extensions = data['extensions']
|
51
|
-
check_extensions(extensions, config_file)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
def check_layers(layers, config_file)
|
56
|
-
unless layers.is_a?(Array)
|
57
|
-
accept(Issues::LAYERS_IS_NOT_ARRAY, config_file, :klass => data.class)
|
58
|
-
else
|
59
|
-
layers.each {|layer| check_layer(layer, config_file) }
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
def check_layer(layer, config_file)
|
64
|
-
unless layer.is_a?(Hash)
|
65
|
-
accept(Issues::LAYER_IS_NOT_HASH, config_file, :klass => layer.class)
|
66
|
-
return
|
67
|
-
end
|
68
|
-
layer.each_pair do |k, v|
|
69
|
-
case k
|
70
|
-
when 'name'
|
71
|
-
unless v.is_a?(String)
|
72
|
-
accept(Issues::LAYER_NAME_NOT_STRING, config_file, :class_name => v.class.name)
|
73
|
-
end
|
74
|
-
|
75
|
-
unless @unique_layer_names.add?(v)
|
76
|
-
accept(Issues::DUPLICATE_LAYER_NAME, config_file, :name => v.to_s )
|
77
|
-
end
|
78
|
-
|
79
|
-
when 'include'
|
80
|
-
check_bindings_references('include', v, config_file)
|
81
|
-
|
82
|
-
when 'exclude'
|
83
|
-
check_bindings_references('exclude', v, config_file)
|
84
|
-
|
85
|
-
when Symbol
|
86
|
-
accept(Issues::LAYER_ATTRIBUTE_IS_SYMBOL, config_file, :name => k.to_s)
|
87
|
-
|
88
|
-
else
|
89
|
-
accept(Issues::UNKNOWN_LAYER_ATTRIBUTE, config_file, :name => k.to_s )
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
# references to bindings is a single String URI, or an array of String URI
|
95
|
-
# @param kind [String] 'include' or 'exclude' (used in issue messages)
|
96
|
-
# @param value [String, Array<String>] one or more String URI binding references
|
97
|
-
# @param config_file [String] reference to the loaded config file
|
98
|
-
#
|
99
|
-
def check_bindings_references(kind, value, config_file)
|
100
|
-
return check_reference(value, kind, config_file) if value.is_a?(String)
|
101
|
-
accept(Issues::BINDINGS_REF_NOT_STRING_OR_ARRAY, config_file, :kind => kind ) unless value.is_a?(Array)
|
102
|
-
value.each {|ref| check_reference(ref, kind, config_file) }
|
103
|
-
end
|
104
|
-
|
105
|
-
# A reference is a URI in string form having a scheme and a path (at least '/')
|
106
|
-
#
|
107
|
-
def check_reference(value, kind, config_file)
|
108
|
-
begin
|
109
|
-
uri = URI.parse(value)
|
110
|
-
|
111
|
-
unless uri.scheme
|
112
|
-
accept(Issues::MISSING_SCHEME, config_file, :uri => uri)
|
113
|
-
end
|
114
|
-
unless uri.path
|
115
|
-
accept(Issues::REF_WITHOUT_PATH, config_file, :uri => uri, :kind => kind)
|
116
|
-
end
|
117
|
-
|
118
|
-
rescue InvalidURIError => e
|
119
|
-
accept(Issues::BINDINGS_REF_INVALID_URI, config_file, :msg => e.message)
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
def check_extensions(extensions, config_file)
|
124
|
-
unless extensions.is_a?(Hash)
|
125
|
-
accept(Issues::EXTENSIONS_NOT_HASH, config_file, :actual => extensions.class.name)
|
126
|
-
return
|
127
|
-
end
|
128
|
-
# check known extensions
|
129
|
-
extensions.each_key do |key|
|
130
|
-
unless ['scheme_handlers'].include? key
|
131
|
-
accept(Issues::UNKNOWN_EXTENSION, config_file, :extension => key)
|
132
|
-
end
|
133
|
-
end
|
134
|
-
|
135
|
-
if binding_schemes = extensions['scheme_handlers']
|
136
|
-
unless binding_schemes.is_a?(Hash)
|
137
|
-
accept(Issues::EXTENSION_BINDING_NOT_HASH, config_file, :extension => 'scheme_handlers', :actual => binding_schemes.class.name)
|
138
|
-
end
|
139
|
-
end
|
140
|
-
end
|
141
|
-
end
|
142
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
module Puppet::Pops
|
2
|
-
module Binder
|
3
|
-
module Config
|
4
|
-
# Generates validation diagnostics
|
5
|
-
class DiagnosticProducer
|
6
|
-
def initialize(acceptor)
|
7
|
-
@acceptor = acceptor
|
8
|
-
@severity_producer = Validation::SeverityProducer.new
|
9
|
-
end
|
10
|
-
|
11
|
-
def accept(issue, semantic, arguments={})
|
12
|
-
arguments[:semantic] ||= semantic
|
13
|
-
severity = severity_producer.severity(issue)
|
14
|
-
@acceptor.accept(Validation::Diagnostic.new(severity, issue, nil, nil, arguments))
|
15
|
-
end
|
16
|
-
|
17
|
-
def errors?()
|
18
|
-
@acceptor.errors?
|
19
|
-
end
|
20
|
-
|
21
|
-
def severity_producer
|
22
|
-
p = @severity_producer
|
23
|
-
# All are errors, if there is need to mark some as warnings...
|
24
|
-
# p[Issues::XXX] = :warning
|
25
|
-
|
26
|
-
# ignored because there is a default
|
27
|
-
p[Issues::CONFIG_LAYERS_MISSING] = :ignore
|
28
|
-
|
29
|
-
# ignored because there is a default
|
30
|
-
p[Issues::CONFIG_CATEGORIES_MISSING] = :ignore
|
31
|
-
p
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
@@ -1,90 +0,0 @@
|
|
1
|
-
module Puppet::Pops::Binder::Config::Issues
|
2
|
-
# (see Puppet::Pops::Issues#issue)
|
3
|
-
def self.issue (issue_code, *args, &block)
|
4
|
-
Puppet::Pops::Issues.issue(issue_code, *args, &block)
|
5
|
-
end
|
6
|
-
|
7
|
-
CONFIG_FILE_NOT_FOUND = issue :CONFIG_FILE_NOT_FOUND do
|
8
|
-
"The binder configuration file: #{semantic} can not be found."
|
9
|
-
end
|
10
|
-
|
11
|
-
CONFIG_FILE_SYNTAX_ERROR = issue :CONFIG_FILE_SYNTAX_ERROR, :detail do
|
12
|
-
"Syntax error in configuration file: #{detail}"
|
13
|
-
end
|
14
|
-
|
15
|
-
CONFIG_IS_NOT_HASH = issue :CONFIG_IS_NOT_HASH do
|
16
|
-
"The configuration file '#{semantic}' has no hash at the top level"
|
17
|
-
end
|
18
|
-
|
19
|
-
CONFIG_LAYERS_MISSING = issue :CONFIG_LAYERS_MISSING do
|
20
|
-
"The configuration file '#{semantic}' has no 'layers' entry in the top level hash"
|
21
|
-
end
|
22
|
-
|
23
|
-
CONFIG_CATEGORIES_MISSING = issue :CONFIG_CATEGORIES_MISSING do
|
24
|
-
"The configuration file '#{semantic}' has no 'categories' entry in the top level hash"
|
25
|
-
end
|
26
|
-
|
27
|
-
CONFIG_VERSION_MISSING = issue :CONFIG_VERSION_MISSING do
|
28
|
-
"The configuration file '#{semantic}' has no 'version' entry in the top level hash"
|
29
|
-
end
|
30
|
-
|
31
|
-
LAYERS_IS_NOT_ARRAY = issue :LAYERS_IS_NOT_ARRAY, :klass do
|
32
|
-
"The configuration file '#{semantic}' should contain a 'layers' key with an Array value, got: #{klass.name}"
|
33
|
-
end
|
34
|
-
|
35
|
-
LAYER_IS_NOT_HASH = issue :LAYER_IS_NOT_HASH, :klass do
|
36
|
-
"The configuration file '#{semantic}' should contain one hash per layer, got #{klass.name} instead of Hash"
|
37
|
-
end
|
38
|
-
|
39
|
-
DUPLICATE_LAYER_NAME = issue :DUPLICATE_LAYER_NAME, :name do
|
40
|
-
"Duplicate layer '#{name}' in configuration file #{semantic}"
|
41
|
-
end
|
42
|
-
|
43
|
-
UNKNOWN_LAYER_ATTRIBUTE = issue :UNKNOWN_LAYER_ATTRIBUTE, :name do
|
44
|
-
"Unknown layer attribute '#{name}' in configuration file #{semantic}"
|
45
|
-
end
|
46
|
-
|
47
|
-
BINDINGS_REF_NOT_STRING_OR_ARRAY = issue :BINDINGS_REF_NOT_STRING_OR_ARRAY, :kind do
|
48
|
-
"Configuration file #{semantic} has bindings reference in '#{kind}' that is neither a String nor an Array."
|
49
|
-
end
|
50
|
-
|
51
|
-
MISSING_SCHEME = issue :MISSING_SCHEME, :uri do
|
52
|
-
"Configuration file #{semantic} contains a bindings reference: '#{uri}' without scheme."
|
53
|
-
end
|
54
|
-
|
55
|
-
UNKNOWN_REF_SCHEME = issue :UNKNOWN_REF_SCHEME, :uri, :kind do
|
56
|
-
"Configuration file #{semantic} contains a bindings reference: '#{kind}' => '#{uri}' with unknown scheme"
|
57
|
-
end
|
58
|
-
|
59
|
-
REF_WITHOUT_PATH = issue :REF_WITHOUT_PATH, :uri, :kind do
|
60
|
-
"Configuration file #{semantic} contains a bindings reference: '#{kind}' => '#{uri}' without path"
|
61
|
-
end
|
62
|
-
|
63
|
-
BINDINGS_REF_INVALID_URI = issue :BINDINGS_REF_INVALID_URI, :msg do
|
64
|
-
"Configuration file #{semantic} contains a bindings reference: '#{kind}' => invalid uri, msg: '#{msg}'"
|
65
|
-
end
|
66
|
-
|
67
|
-
LAYER_ATTRIBUTE_IS_SYMBOL = issue :LAYER_ATTRIBUTE_IS_SYMBOL, :name do
|
68
|
-
"Configuration file #{semantic} contains a layer attribute '#{name}' that is a Symbol (should be String)"
|
69
|
-
end
|
70
|
-
|
71
|
-
LAYER_NAME_NOT_STRING = issue :LAYER_NAME_NOT_STRING, :class_name do
|
72
|
-
"Configuration file #{semantic} contains a layer name that is not a String, got a: '#{class_name}'"
|
73
|
-
end
|
74
|
-
|
75
|
-
CONFIG_WRONG_VERSION = issue :CONFIG_WRONG_VERSION, :expected, :actual do
|
76
|
-
"The configuration file '#{semantic}' has unsupported 'version', expected: #{expected}, but got: #{actual}."
|
77
|
-
end
|
78
|
-
|
79
|
-
EXTENSIONS_NOT_HASH = issue :EXTENSIONS_NOT_HASH, :actual do
|
80
|
-
"The configuration file '#{semantic}' contains 'extensions', expected: Hash, but got: #{actual}."
|
81
|
-
end
|
82
|
-
|
83
|
-
EXTENSION_BINDING_NOT_HASH = issue :EXTENSION_BINDING_NOT_HASH, :extension, :actual do
|
84
|
-
"The configuration file '#{semantic}' contains '#{extension}', expected: Hash, but got: #{actual}."
|
85
|
-
end
|
86
|
-
|
87
|
-
UNKNOWN_EXTENSION = issue :UNKNOWN_EXTENSION, :extension do
|
88
|
-
"The configuration file '#{semantic}' contains the unknown extension: #{extension}."
|
89
|
-
end
|
90
|
-
end
|
@@ -1,771 +0,0 @@
|
|
1
|
-
module Puppet::Pops
|
2
|
-
module Binder
|
3
|
-
# The injector is the "lookup service" class
|
4
|
-
#
|
5
|
-
# Initialization
|
6
|
-
# --------------
|
7
|
-
# The injector is initialized with a configured {Binder Binder}. The Binder instance contains a resolved set of
|
8
|
-
# `key => "binding information"` that is used to setup the injector.
|
9
|
-
#
|
10
|
-
# Lookup
|
11
|
-
# ------
|
12
|
-
# It is possible to lookup either the value, or a producer of the value. The {#lookup} method looks up a value, and the
|
13
|
-
# {#lookup_producer} looks up a producer.
|
14
|
-
# Both of these methods can be called with three different signatures; `lookup(key)`, `lookup(type, name)`, and `lookup(name)`,
|
15
|
-
# with the corresponding calls to obtain a producer; `lookup_producer(key)`, `lookup_producer(type, name)`, and `lookup_producer(name)`.
|
16
|
-
#
|
17
|
-
# It is possible to pass a block to {#lookup} and {#lookup_producer}, the block is passed the result of the lookup
|
18
|
-
# and the result of the block is returned as the value of the lookup. This is useful in order to provide a default value.
|
19
|
-
#
|
20
|
-
# @example Lookup with default value
|
21
|
-
# injector.lookup('favourite_food') {|x| x.nil? ? 'bacon' : x }
|
22
|
-
#
|
23
|
-
# Singleton or Not
|
24
|
-
# ----------------
|
25
|
-
# The lookup of a value is always based on the lookup of a producer. For *singleton producers* this means that the value is
|
26
|
-
# determined by the first value lookup. Subsequent lookups via `lookup` or `lookup_producer` will produce the same instance.
|
27
|
-
#
|
28
|
-
# *Non singleton producers* will produce a new instance on each request for a value. For constant value producers this
|
29
|
-
# means that a new deep-clone is produced for mutable objects (but not for immutable objects as this is not needed).
|
30
|
-
# Custom producers should have non singleton behavior, or if this is not possible ensure that the produced result is
|
31
|
-
# immutable. (The behavior if a custom producer hands out a mutable value and this is mutated is undefined).
|
32
|
-
#
|
33
|
-
# Custom bound producers capable of producing a series of objects when bound as a singleton means that the producer
|
34
|
-
# is a singleton, not the value it produces. If such a producer is bound as non singleton, each `lookup` will get a new
|
35
|
-
# producer (hence, typically, restarting the series). However, the producer returned from `lookup_producer` will not
|
36
|
-
# recreate the producer on each call to `produce`; i.e. each `lookup_producer` returns a producer capable of returning
|
37
|
-
# a series of objects.
|
38
|
-
#
|
39
|
-
# @see Binder Binder, for details about how to bind keys to producers
|
40
|
-
# @see BindingsFactory BindingsFactory, for a convenient way to create a Binder and bindings
|
41
|
-
#
|
42
|
-
# Assisted Inject
|
43
|
-
# ---------------
|
44
|
-
# The injector supports lookup of instances of classes *even if the requested class is not explicitly bound*.
|
45
|
-
# This is possible for classes that have a zero argument `initialize` method, or that has a class method called
|
46
|
-
# `inject` that takes two arguments; `injector`, and `scope`.
|
47
|
-
# This is useful in ruby logic as a class can then use the given injector to inject details.
|
48
|
-
# An `inject` class method wins over a zero argument `initialize` in all cases.
|
49
|
-
#
|
50
|
-
# @example Using assisted inject
|
51
|
-
# # Class with assisted inject support
|
52
|
-
# class Duck
|
53
|
-
# attr_reader :name, :year_of_birth
|
54
|
-
#
|
55
|
-
# def self.inject(injector, scope, binding, *args)
|
56
|
-
# # lookup default name and year of birth, and use defaults if not present
|
57
|
-
# name = injector.lookup(scope,'default-duck-name') {|x| x ? x : 'Donald Duck' }
|
58
|
-
# year_of_birth = injector.lookup(scope,'default-duck-year_of_birth') {|x| x ? x : 1934 }
|
59
|
-
# self.new(name, year_of_birth)
|
60
|
-
# end
|
61
|
-
#
|
62
|
-
# def initialize(name, year_of_birth)
|
63
|
-
# @name = name
|
64
|
-
# @year_of_birth = year_of_birth
|
65
|
-
# end
|
66
|
-
# end
|
67
|
-
#
|
68
|
-
# injector.lookup(scope, Duck)
|
69
|
-
# # Produces a Duck named 'Donald Duck' or named after the binding 'default-duck-name' (and with similar treatment of
|
70
|
-
# # year_of_birth).
|
71
|
-
# @see Producers::AssistedInjectProducer AssistedInjectProducer, for more details on assisted injection
|
72
|
-
#
|
73
|
-
# Access to key factory and type calculator
|
74
|
-
# -----------------------------------------
|
75
|
-
# It is important to use the same key factory, and type calculator as the binder. It is therefor possible to obtain
|
76
|
-
# these with the methods {#key_factory}, and {#type_calculator}.
|
77
|
-
#
|
78
|
-
# Special support for producers
|
79
|
-
# -----------------------------
|
80
|
-
# There is one method specially designed for producers. The {#get_contributions} method returns an array of all contributions
|
81
|
-
# to a given *contributions key*. This key is obtained from the {#key_factory} for a given multibinding. The returned set of
|
82
|
-
# contributed bindings is sorted in descending precedence order. Any conflicts, merges, etc. is performed by the multibinding
|
83
|
-
# producer configured for a multibinding.
|
84
|
-
#
|
85
|
-
# @api public
|
86
|
-
#
|
87
|
-
class Injector
|
88
|
-
|
89
|
-
Producers = Producers
|
90
|
-
|
91
|
-
def self.create_from_model(layered_bindings_model)
|
92
|
-
self.new(Binder.new(layered_bindings_model))
|
93
|
-
end
|
94
|
-
|
95
|
-
def self.create_from_hash(name, key_value_hash)
|
96
|
-
factory = BindingsFactory
|
97
|
-
named_bindings = factory.named_bindings(name) { key_value_hash.each {|k,v| bind.name(k).to(v) }}
|
98
|
-
layered_bindings = factory.layered_bindings(factory.named_layer(name+'-layer',named_bindings.model))
|
99
|
-
self.new(Binder.new(layered_bindings))
|
100
|
-
end
|
101
|
-
|
102
|
-
# Creates an injector with a single bindings layer created with the given name, and the bindings
|
103
|
-
# produced by the given block. The block is evaluated with self bound to a BindingsContainerBuilder.
|
104
|
-
#
|
105
|
-
# @example
|
106
|
-
# Injector.create('mysettings') do
|
107
|
-
# bind('name').to(42)
|
108
|
-
# end
|
109
|
-
#
|
110
|
-
# @api public
|
111
|
-
#
|
112
|
-
def self.create(name, &block)
|
113
|
-
factory = BindingsFactory
|
114
|
-
layered_bindings = factory.layered_bindings(factory.named_layer(name+'-layer',factory.named_bindings(name, &block).model))
|
115
|
-
self.new(Binder.new(layered_bindings))
|
116
|
-
end
|
117
|
-
|
118
|
-
# Creates an overriding injector with a single bindings layer
|
119
|
-
# created with the given name, and the bindings produced by the given block.
|
120
|
-
# The block is evaluated with self bound to a BindingsContainerBuilder.
|
121
|
-
#
|
122
|
-
# @example
|
123
|
-
# an_injector.override('myoverrides') do
|
124
|
-
# bind('name').to(43)
|
125
|
-
# end
|
126
|
-
#
|
127
|
-
# @api public
|
128
|
-
#
|
129
|
-
def override(name, &block)
|
130
|
-
factory = BindingsFactory
|
131
|
-
layered_bindings = factory.layered_bindings(factory.named_layer(name+'-layer',factory.named_bindings(name, &block).model))
|
132
|
-
self.class.new(Binder.new(layered_bindings, @impl.binder))
|
133
|
-
end
|
134
|
-
|
135
|
-
# Creates an overriding injector with bindings from a bindings model (a LayeredBindings) which
|
136
|
-
# may consists of multiple layers of bindings.
|
137
|
-
#
|
138
|
-
# @api public
|
139
|
-
#
|
140
|
-
def override_with_model(layered_bindings)
|
141
|
-
unless layered_bindings.is_a?(Bindings::LayeredBindings)
|
142
|
-
raise ArgumentError, "Expected a LayeredBindings model, got '#{bindings_model.class}'"
|
143
|
-
end
|
144
|
-
self.class.new(Binder.new(layered_bindings, @impl.binder))
|
145
|
-
end
|
146
|
-
|
147
|
-
# Creates an overriding injector with a single bindings layer
|
148
|
-
# created with the given name, and the bindings given in the key_value_hash
|
149
|
-
# @api public
|
150
|
-
#
|
151
|
-
def override_with_hash(name, key_value_hash)
|
152
|
-
factory = BindingsFactory
|
153
|
-
named_bindings = factory.named_bindings(name) { key_value_hash.each {|k,v| bind.name(k).to(v) }}
|
154
|
-
layered_bindings = factory.layered_bindings(factory.named_layer(name+'-layer',named_bindings.model))
|
155
|
-
self.class.new(Binder.new(layered_bindings, @impl.binder))
|
156
|
-
end
|
157
|
-
|
158
|
-
# An Injector is initialized with a configured {Binder Binder}.
|
159
|
-
#
|
160
|
-
# @param configured_binder [Binder,nil] The configured binder containing effective bindings. A given value
|
161
|
-
# of nil creates an injector that returns or yields nil on all lookup requests.
|
162
|
-
# @raise ArgumentError if the given binder is not fully configured
|
163
|
-
#
|
164
|
-
# @api public
|
165
|
-
#
|
166
|
-
def initialize(configured_binder, parent_injector = nil)
|
167
|
-
if configured_binder.nil?
|
168
|
-
@impl = Private::NullInjectorImpl.new()
|
169
|
-
else
|
170
|
-
@impl = Private::InjectorImpl.new(configured_binder, parent_injector)
|
171
|
-
end
|
172
|
-
end
|
173
|
-
|
174
|
-
# The KeyFactory used to produce keys in this injector.
|
175
|
-
# The factory is shared with the Binder to ensure consistent translation to keys.
|
176
|
-
# A compatible type calculator can also be obtained from the key factory.
|
177
|
-
# @return [KeyFactory] the key factory in use
|
178
|
-
#
|
179
|
-
# @api public
|
180
|
-
#
|
181
|
-
def key_factory()
|
182
|
-
@impl.key_factory
|
183
|
-
end
|
184
|
-
|
185
|
-
# Returns the TypeCalculator in use for keys. The same calculator (as used for keys) should be used if there is a need
|
186
|
-
# to check type conformance, or infer the type of Ruby objects.
|
187
|
-
#
|
188
|
-
# @return [Types::TypeCalculator] the type calculator that is in use for keys
|
189
|
-
# @api public
|
190
|
-
#
|
191
|
-
def type_calculator()
|
192
|
-
@impl.type_calculator()
|
193
|
-
end
|
194
|
-
|
195
|
-
# Lookup (a.k.a "inject") of a value given a key.
|
196
|
-
# The lookup may be called with different parameters. This method is a convenience method that
|
197
|
-
# dispatches to one of #lookup_key or #lookup_type depending on the arguments. It also provides
|
198
|
-
# the ability to use an optional block that is called with the looked up value, or scope and value if the
|
199
|
-
# block takes two parameters. This is useful to provide a default value or other transformations, calculations
|
200
|
-
# based on the result of the lookup.
|
201
|
-
#
|
202
|
-
# @overload lookup(scope, key)
|
203
|
-
# (see #lookup_key)
|
204
|
-
# @param scope [Puppet::Parser::Scope] the scope to use for evaluation
|
205
|
-
# @param key [Object] an opaque object being the full key
|
206
|
-
#
|
207
|
-
# @overload lookup(scope, type, name = '')
|
208
|
-
# (see #lookup_type)
|
209
|
-
# @param scope [Puppet::Parser::Scope] the scope to use for evaluation
|
210
|
-
# @param type [Types::PAnyType] the type of what to lookup
|
211
|
-
# @param name [String] the name to use, defaults to empty string (for unnamed)
|
212
|
-
#
|
213
|
-
# @overload lookup(scope, name)
|
214
|
-
# Lookup of Data type with given name.
|
215
|
-
# @see #lookup_type
|
216
|
-
# @param scope [Puppet::Parser::Scope] the scope to use for evaluation
|
217
|
-
# @param name [String] the Data/name to lookup
|
218
|
-
#
|
219
|
-
# @yield [value] passes the looked up value to an optional block and returns what this block returns
|
220
|
-
# @yield [scope, value] passes scope and value to the block and returns what this block returns
|
221
|
-
# @yieldparam scope [Puppet::Parser::Scope] the scope given to lookup
|
222
|
-
# @yieldparam value [Object, nil] the looked up value or nil if nothing was found
|
223
|
-
#
|
224
|
-
# @raise [ArgumentError] if the block has an arity that is not 1 or 2
|
225
|
-
#
|
226
|
-
# @api public
|
227
|
-
#
|
228
|
-
def lookup(scope, *args, &block)
|
229
|
-
@impl.lookup(scope, *args, &block)
|
230
|
-
end
|
231
|
-
|
232
|
-
# Looks up a (typesafe) value based on a type/name combination.
|
233
|
-
# Creates a key for the type/name combination using a KeyFactory. Specialization of the Data type are transformed
|
234
|
-
# to a Data key, and the result is type checked to conform with the given key.
|
235
|
-
#
|
236
|
-
# @param type [Types::PAnyType] the type to lookup as defined by Types::TypeFactory
|
237
|
-
# @param name [String] the (optional for non `Data` types) name of the entry to lookup.
|
238
|
-
# The name may be an empty String (the default), but not nil. The name is required for lookup for subtypes of
|
239
|
-
# `Data`.
|
240
|
-
# @return [Object, nil] the looked up bound object, or nil if not found (type conformance with given type is guaranteed)
|
241
|
-
# @raise [ArgumentError] if the produced value does not conform with the given type
|
242
|
-
#
|
243
|
-
# @api public
|
244
|
-
#
|
245
|
-
def lookup_type(scope, type, name='')
|
246
|
-
@impl.lookup_type(scope, type, name)
|
247
|
-
end
|
248
|
-
|
249
|
-
# Looks up the key and returns the entry, or nil if no entry is found.
|
250
|
-
# Produced type is checked for type conformance with its binding, but not with the lookup key.
|
251
|
-
# (This since all subtypes of PDataType are looked up using a key based on PDataType).
|
252
|
-
# Use the Types::TypeCalculator#instance? method to check for conformance of the result
|
253
|
-
# if this is wanted, or use #lookup_type.
|
254
|
-
#
|
255
|
-
# @param key [Object] lookup of key as produced by the key factory
|
256
|
-
# @return [Object, nil] produced value of type that conforms with bound type (type conformance with key not guaranteed).
|
257
|
-
# @raise [ArgumentError] if the produced value does not conform with the bound type
|
258
|
-
#
|
259
|
-
# @api public
|
260
|
-
#
|
261
|
-
def lookup_key(scope, key)
|
262
|
-
@impl.lookup_key(scope, key)
|
263
|
-
end
|
264
|
-
|
265
|
-
# Lookup (a.k.a "inject") producer of a value given a key.
|
266
|
-
# The producer lookup may be called with different parameters. This method is a convenience method that
|
267
|
-
# dispatches to one of #lookup_producer_key or #lookup_producer_type depending on the arguments. It also provides
|
268
|
-
# the ability to use an optional block that is called with the looked up producer, or scope and producer if the
|
269
|
-
# block takes two parameters. This is useful to provide a default value, call a custom producer method,
|
270
|
-
# or other transformations, calculations based on the result of the lookup.
|
271
|
-
#
|
272
|
-
# @overload lookup_producer(scope, key)
|
273
|
-
# (see #lookup_proudcer_key)
|
274
|
-
# @param scope [Puppet::Parser::Scope] the scope to use for evaluation
|
275
|
-
# @param key [Object] an opaque object being the full key
|
276
|
-
#
|
277
|
-
# @overload lookup_producer(scope, type, name = '')
|
278
|
-
# (see #lookup_type)
|
279
|
-
# @param scope [Puppet::Parser::Scope] the scope to use for evaluation
|
280
|
-
# @param type [Types::PAnyType], the type of what to lookup
|
281
|
-
# @param name [String], the name to use, defaults to empty string (for unnamed)
|
282
|
-
#
|
283
|
-
# @overload lookup_producer(scope, name)
|
284
|
-
# Lookup of Data type with given name.
|
285
|
-
# @see #lookup_type
|
286
|
-
# @param scope [Puppet::Parser::Scope] the scope to use for evaluation
|
287
|
-
# @param name [String], the Data/name to lookup
|
288
|
-
#
|
289
|
-
# @return [Producers::Producer, Object, nil] a producer, or what the optional block returns
|
290
|
-
#
|
291
|
-
# @yield [producer] passes the looked up producer to an optional block and returns what this block returns
|
292
|
-
# @yield [scope, producer] passes scope and producer to the block and returns what this block returns
|
293
|
-
# @yieldparam producer [Producers::Producer, nil] the looked up producer or nil if nothing was bound
|
294
|
-
# @yieldparam scope [Puppet::Parser::Scope] the scope given to lookup
|
295
|
-
#
|
296
|
-
# @raise [ArgumentError] if the block has an arity that is not 1 or 2
|
297
|
-
#
|
298
|
-
# @api public
|
299
|
-
#
|
300
|
-
def lookup_producer(scope, *args, &block)
|
301
|
-
@impl.lookup_producer(scope, *args, &block)
|
302
|
-
end
|
303
|
-
|
304
|
-
# Looks up a Producer given an opaque binder key.
|
305
|
-
# @return [Producers::Producer, nil] the bound producer, or nil if no such producer was found.
|
306
|
-
#
|
307
|
-
# @api public
|
308
|
-
#
|
309
|
-
def lookup_producer_key(scope, key)
|
310
|
-
@impl.lookup_producer_key(scope, key)
|
311
|
-
end
|
312
|
-
|
313
|
-
# Looks up a Producer given a type/name key.
|
314
|
-
# @note The result is not type checked (it cannot be until the producer has produced an instance).
|
315
|
-
# @return [Producers::Producer, nil] the bound producer, or nil if no such producer was found
|
316
|
-
#
|
317
|
-
# @api public
|
318
|
-
#
|
319
|
-
def lookup_producer_type(scope, type, name='')
|
320
|
-
@impl.lookup_producer_type(scope, type, name)
|
321
|
-
end
|
322
|
-
|
323
|
-
# Returns the contributions to a multibind given its contribution key (as produced by the KeyFactory).
|
324
|
-
# This method is typically used by multibind value producers, but may be used for introspection of the injector's state.
|
325
|
-
#
|
326
|
-
# @param scope [Puppet::Parser::Scope] the scope to use
|
327
|
-
# @param contributions_key [Object] Opaque key as produced by KeyFactory as the contributions key for a multibinding
|
328
|
-
# @return [Array<InjectorEntry>] the contributions sorted in deecending order of precedence
|
329
|
-
#
|
330
|
-
# @api public
|
331
|
-
#
|
332
|
-
def get_contributions(scope, contributions_key)
|
333
|
-
@impl.get_contributions(scope, contributions_key)
|
334
|
-
end
|
335
|
-
|
336
|
-
# Returns an Injector that returns (or yields) nil on all lookups, and produces an empty structure for contributions
|
337
|
-
# This method is intended for testing purposes.
|
338
|
-
#
|
339
|
-
def self.null_injector
|
340
|
-
self.new(nil)
|
341
|
-
end
|
342
|
-
|
343
|
-
# The implementation of the Injector is private.
|
344
|
-
# @see Injector The public API this module implements.
|
345
|
-
# @api private
|
346
|
-
#
|
347
|
-
module Private
|
348
|
-
|
349
|
-
# This is a mocking "Null" implementation of Injector. It never finds anything
|
350
|
-
# @api private
|
351
|
-
class NullInjectorImpl
|
352
|
-
attr_reader :entries
|
353
|
-
attr_reader :key_factory
|
354
|
-
attr_reader :type_calculator
|
355
|
-
|
356
|
-
def initialize
|
357
|
-
@entries = []
|
358
|
-
@key_factory = KeyFactory.new()
|
359
|
-
@type_calculator = Types::TypeCalculator.singleton
|
360
|
-
end
|
361
|
-
|
362
|
-
def lookup(scope, *args, &block)
|
363
|
-
raise ArgumentError, "lookup should be called with two or three arguments, got: #{args.size()+1}" unless args.size.between?(1,2)
|
364
|
-
# call block with result if given
|
365
|
-
if block
|
366
|
-
case block.arity
|
367
|
-
when 1
|
368
|
-
block.call(nil)
|
369
|
-
when 2
|
370
|
-
block.call(scope, nil)
|
371
|
-
else
|
372
|
-
raise ArgumentError, "The block should have arity 1 or 2"
|
373
|
-
end
|
374
|
-
else
|
375
|
-
val
|
376
|
-
end
|
377
|
-
end
|
378
|
-
|
379
|
-
# @api private
|
380
|
-
def binder
|
381
|
-
nil
|
382
|
-
end
|
383
|
-
|
384
|
-
# @api private
|
385
|
-
def lookup_key(scope, key)
|
386
|
-
nil
|
387
|
-
end
|
388
|
-
|
389
|
-
# @api private
|
390
|
-
def lookup_producer(scope, *args, &block)
|
391
|
-
lookup(scope, *args, &block)
|
392
|
-
end
|
393
|
-
|
394
|
-
# @api private
|
395
|
-
def lookup_producer_key(scope, key)
|
396
|
-
nil
|
397
|
-
end
|
398
|
-
|
399
|
-
# @api private
|
400
|
-
def lookup_producer_type(scope, type, name='')
|
401
|
-
nil
|
402
|
-
end
|
403
|
-
|
404
|
-
def get_contributions()
|
405
|
-
[]
|
406
|
-
end
|
407
|
-
end
|
408
|
-
|
409
|
-
# @api private
|
410
|
-
#
|
411
|
-
class InjectorImpl
|
412
|
-
# Hash of key => InjectorEntry
|
413
|
-
# @api private
|
414
|
-
#
|
415
|
-
attr_reader :entries
|
416
|
-
|
417
|
-
attr_reader :key_factory
|
418
|
-
|
419
|
-
attr_reader :type_calculator
|
420
|
-
|
421
|
-
attr_reader :binder
|
422
|
-
|
423
|
-
def initialize(configured_binder, parent_injector = nil)
|
424
|
-
@binder = configured_binder
|
425
|
-
@parent = parent_injector
|
426
|
-
|
427
|
-
# TODO: Different error message
|
428
|
-
raise ArgumentError, "Given Binder is not configured" unless configured_binder #&& configured_binder.configured?()
|
429
|
-
@entries = configured_binder.injector_entries()
|
430
|
-
|
431
|
-
# It is essential that the injector uses the same key factory as the binder since keys must be
|
432
|
-
# represented the same (but still opaque) way.
|
433
|
-
#
|
434
|
-
@key_factory = configured_binder.key_factory()
|
435
|
-
@type_calculator = Types::TypeCalculator.singleton
|
436
|
-
@@transform_visitor ||= Visitor.new(nil,"transform", 2, 2)
|
437
|
-
@recursion_lock = [ ]
|
438
|
-
end
|
439
|
-
|
440
|
-
# @api private
|
441
|
-
def lookup(scope, *args, &block)
|
442
|
-
raise ArgumentError, "lookup should be called with two or three arguments, got: #{args.size()+1}" unless args.size.between?(1,2)
|
443
|
-
|
444
|
-
val = case args[ 0 ]
|
445
|
-
|
446
|
-
when Types::PAnyType
|
447
|
-
lookup_type(scope, *args)
|
448
|
-
|
449
|
-
when String
|
450
|
-
raise ArgumentError, "lookup of name should only pass the name" unless args.size == 1
|
451
|
-
lookup_key(scope, key_factory.data_key(args[ 0 ]))
|
452
|
-
|
453
|
-
else
|
454
|
-
raise ArgumentError, 'lookup using a key should only pass a single key' unless args.size == 1
|
455
|
-
lookup_key(scope, args[ 0 ])
|
456
|
-
end
|
457
|
-
|
458
|
-
# call block with result if given
|
459
|
-
if block
|
460
|
-
case block.arity
|
461
|
-
when 1
|
462
|
-
block.call(val)
|
463
|
-
when 2
|
464
|
-
block.call(scope, val)
|
465
|
-
else
|
466
|
-
raise ArgumentError, "The block should have arity 1 or 2"
|
467
|
-
end
|
468
|
-
else
|
469
|
-
val
|
470
|
-
end
|
471
|
-
end
|
472
|
-
|
473
|
-
# Produces a key for a type/name combination.
|
474
|
-
# @api private
|
475
|
-
def named_key(type, name)
|
476
|
-
key_factory.named_key(type, name)
|
477
|
-
end
|
478
|
-
|
479
|
-
# Produces a key for a PDataType/name combination
|
480
|
-
# @api private
|
481
|
-
def data_key(name)
|
482
|
-
key_factory.data_key(name)
|
483
|
-
end
|
484
|
-
|
485
|
-
# @api private
|
486
|
-
def lookup_type(scope, type, name='')
|
487
|
-
val = lookup_key(scope, named_key(type, name))
|
488
|
-
return nil if val.nil?
|
489
|
-
unless type_calculator.instance?(type, val)
|
490
|
-
raise ArgumentError, "Type error: incompatible type, #{type_error_detail(type, val)}"
|
491
|
-
end
|
492
|
-
val
|
493
|
-
end
|
494
|
-
|
495
|
-
# @api private
|
496
|
-
def type_error_detail(expected, actual)
|
497
|
-
actual_t = type_calculator.infer(actual)
|
498
|
-
"expected: #{expected}, got: #{actual_t}"
|
499
|
-
end
|
500
|
-
|
501
|
-
# @api private
|
502
|
-
def lookup_key(scope, key)
|
503
|
-
if @recursion_lock.include?(key)
|
504
|
-
raise ArgumentError, "Lookup loop detected for key: #{key}"
|
505
|
-
end
|
506
|
-
begin
|
507
|
-
@recursion_lock.push(key)
|
508
|
-
case entry = get_entry(key)
|
509
|
-
when NilClass
|
510
|
-
@parent ? @parent.lookup_key(scope, key) : nil
|
511
|
-
|
512
|
-
when InjectorEntry
|
513
|
-
val = produce(scope, entry)
|
514
|
-
return nil if val.nil?
|
515
|
-
unless type_calculator.instance?(entry.binding.type, val)
|
516
|
-
raise "Type error: incompatible type returned by producer, #{type_error_detail(entry.binding.type, val)}"
|
517
|
-
end
|
518
|
-
val
|
519
|
-
when Producers::AssistedInjectProducer
|
520
|
-
entry.produce(scope)
|
521
|
-
else
|
522
|
-
# internal, direct entries
|
523
|
-
entry
|
524
|
-
end
|
525
|
-
ensure
|
526
|
-
@recursion_lock.pop()
|
527
|
-
end
|
528
|
-
end
|
529
|
-
|
530
|
-
# Should be used to get entries as it converts missing entries to NotFound entries or AssistedInject entries
|
531
|
-
#
|
532
|
-
# @api private
|
533
|
-
def get_entry(key)
|
534
|
-
case entry = entries[ key ]
|
535
|
-
when NilClass
|
536
|
-
# not found, is this an assisted inject?
|
537
|
-
if clazz = assistable_injected_class(key)
|
538
|
-
entry = Producers::AssistedInjectProducer.new(self, clazz)
|
539
|
-
entries[ key ] = entry
|
540
|
-
else
|
541
|
-
entries[ key ] = NotFound.new()
|
542
|
-
entry = nil
|
543
|
-
end
|
544
|
-
when NotFound
|
545
|
-
entry = nil
|
546
|
-
end
|
547
|
-
entry
|
548
|
-
end
|
549
|
-
|
550
|
-
# Returns contributions to a multibind in precedence order; highest first.
|
551
|
-
# Returns an Array on the form [ [key, entry], [key, entry]] where the key is intended to be used to lookup the value
|
552
|
-
# (or a producer) for that entry.
|
553
|
-
# @api private
|
554
|
-
def get_contributions(scope, contributions_key)
|
555
|
-
result = {}
|
556
|
-
return [] unless contributions = lookup_key(scope, contributions_key)
|
557
|
-
contributions.each { |k| result[k] = get_entry(k) }
|
558
|
-
result.sort {|a, b| a[0] <=> b[0] }
|
559
|
-
end
|
560
|
-
|
561
|
-
# Produces an injectable class given a key, or nil if key does not represent an injectable class
|
562
|
-
# @api private
|
563
|
-
#
|
564
|
-
def assistable_injected_class(key)
|
565
|
-
kt = key_factory.get_type(key)
|
566
|
-
return nil unless kt.is_a?(Types::PRuntimeType) && kt.runtime == :ruby && !key_factory.is_named?(key)
|
567
|
-
type_calculator.injectable_class(kt)
|
568
|
-
end
|
569
|
-
|
570
|
-
def lookup_producer(scope, *args, &block)
|
571
|
-
raise ArgumentError, "lookup_producer should be called with two or three arguments, got: #{args.size()+1}" unless args.size <= 2
|
572
|
-
|
573
|
-
p = case args[ 0 ]
|
574
|
-
when Types::PAnyType
|
575
|
-
lookup_producer_type(scope, *args)
|
576
|
-
|
577
|
-
when String
|
578
|
-
raise ArgumentError, "lookup_producer of name should only pass the name" unless args.size == 1
|
579
|
-
lookup_producer_key(scope, key_factory.data_key(args[ 0 ]))
|
580
|
-
|
581
|
-
else
|
582
|
-
raise ArgumentError, "lookup_producer using a key should only pass a single key" unless args.size == 1
|
583
|
-
lookup_producer_key(scope, args[ 0 ])
|
584
|
-
end
|
585
|
-
|
586
|
-
# call block with result if given
|
587
|
-
if block
|
588
|
-
case block.arity
|
589
|
-
when 1
|
590
|
-
block.call(p)
|
591
|
-
when 2
|
592
|
-
block.call(scope, p)
|
593
|
-
else
|
594
|
-
raise ArgumentError, "The block should have arity 1 or 2"
|
595
|
-
end
|
596
|
-
else
|
597
|
-
p
|
598
|
-
end
|
599
|
-
end
|
600
|
-
|
601
|
-
# @api private
|
602
|
-
def lookup_producer_key(scope, key)
|
603
|
-
if @recursion_lock.include?(key)
|
604
|
-
raise ArgumentError, "Lookup loop detected for key: #{key}"
|
605
|
-
end
|
606
|
-
begin
|
607
|
-
@recursion_lock.push(key)
|
608
|
-
producer(scope, get_entry(key), :multiple_use)
|
609
|
-
ensure
|
610
|
-
@recursion_lock.pop()
|
611
|
-
end
|
612
|
-
end
|
613
|
-
|
614
|
-
# @api private
|
615
|
-
def lookup_producer_type(scope, type, name='')
|
616
|
-
lookup_producer_key(scope, named_key(type, name))
|
617
|
-
end
|
618
|
-
|
619
|
-
# Returns the producer for the entry
|
620
|
-
# @return [Producers::Producer] the entry's producer.
|
621
|
-
#
|
622
|
-
# @api private
|
623
|
-
#
|
624
|
-
def producer(scope, entry, use)
|
625
|
-
return nil unless entry # not found
|
626
|
-
return entry.producer(scope) if entry.is_a?(Producers::AssistedInjectProducer)
|
627
|
-
unless entry.cached_producer
|
628
|
-
entry.cached_producer = transform(entry.binding.producer, scope, entry)
|
629
|
-
end
|
630
|
-
unless entry.cached_producer
|
631
|
-
raise ArgumentError, "Injector entry without a producer #{format_binding(entry.binding)}"
|
632
|
-
end
|
633
|
-
entry.cached_producer.producer(scope)
|
634
|
-
end
|
635
|
-
|
636
|
-
# @api private
|
637
|
-
def transform(producer_descriptor, scope, entry)
|
638
|
-
@@transform_visitor.visit_this_2(self, producer_descriptor, scope, entry)
|
639
|
-
end
|
640
|
-
|
641
|
-
# Returns the produced instance
|
642
|
-
# @return [Object] the produced instance
|
643
|
-
# @api private
|
644
|
-
#
|
645
|
-
def produce(scope, entry)
|
646
|
-
return nil unless entry # not found
|
647
|
-
producer(scope, entry, :single_use).produce(scope)
|
648
|
-
end
|
649
|
-
|
650
|
-
# @api private
|
651
|
-
def named_arguments_to_hash(named_args)
|
652
|
-
nb = named_args.nil? ? [] : named_args
|
653
|
-
result = {}
|
654
|
-
nb.each {|arg| result[ :"#{arg.name}" ] = arg.value }
|
655
|
-
result
|
656
|
-
end
|
657
|
-
|
658
|
-
# @api private
|
659
|
-
def merge_producer_options(binding, options)
|
660
|
-
named_arguments_to_hash(binding.producer_args).merge(options)
|
661
|
-
end
|
662
|
-
|
663
|
-
# @api private
|
664
|
-
def format_binding(b)
|
665
|
-
Binder.format_binding(b)
|
666
|
-
end
|
667
|
-
|
668
|
-
# Handles a missing producer (which is valid for a Multibinding where one is selected automatically)
|
669
|
-
# @api private
|
670
|
-
#
|
671
|
-
def transform_NilClass(descriptor, scope, entry)
|
672
|
-
unless entry.binding.is_a?(Bindings::Multibinding)
|
673
|
-
raise ArgumentError, "Binding without producer detected, #{format_binding(entry.binding)}"
|
674
|
-
end
|
675
|
-
case entry.binding.type
|
676
|
-
when Types::PArrayType
|
677
|
-
transform(Bindings::ArrayMultibindProducerDescriptor.new(), scope, entry)
|
678
|
-
when Types::PHashType
|
679
|
-
transform(Bindings::HashMultibindProducerDescriptor.new(), scope, entry)
|
680
|
-
else
|
681
|
-
raise ArgumentError, "Unsupported multibind type, must be an array or hash type, #{format_binding(entry.binding)}"
|
682
|
-
end
|
683
|
-
end
|
684
|
-
|
685
|
-
# @api private
|
686
|
-
def transform_ArrayMultibindProducerDescriptor(descriptor, scope, entry)
|
687
|
-
make_producer(Producers::ArrayMultibindProducer, descriptor, scope, entry, named_arguments_to_hash(entry.binding.producer_args))
|
688
|
-
end
|
689
|
-
|
690
|
-
# @api private
|
691
|
-
def transform_HashMultibindProducerDescriptor(descriptor, scope, entry)
|
692
|
-
make_producer(Producers::HashMultibindProducer, descriptor, scope, entry, named_arguments_to_hash(entry.binding.producer_args))
|
693
|
-
end
|
694
|
-
|
695
|
-
# @api private
|
696
|
-
def transform_ConstantProducerDescriptor(descriptor, scope, entry)
|
697
|
-
producer_class = singleton?(descriptor) ? Producers::SingletonProducer : Producers::DeepCloningProducer
|
698
|
-
producer_class.new(self, entry.binding, scope, merge_producer_options(entry.binding, {:value => descriptor.value}))
|
699
|
-
end
|
700
|
-
|
701
|
-
# @api private
|
702
|
-
def transform_InstanceProducerDescriptor(descriptor, scope, entry)
|
703
|
-
make_producer(Producers::InstantiatingProducer, descriptor, scope, entry,
|
704
|
-
merge_producer_options(entry.binding, {:class_name => descriptor.class_name, :init_args => descriptor.arguments}))
|
705
|
-
end
|
706
|
-
|
707
|
-
# @api private
|
708
|
-
def transform_EvaluatingProducerDescriptor(descriptor, scope, entry)
|
709
|
-
make_producer(Producers::EvaluatingProducer, descriptor, scope, entry,
|
710
|
-
merge_producer_options(entry.binding, {:expression => descriptor.expression}))
|
711
|
-
end
|
712
|
-
|
713
|
-
# @api private
|
714
|
-
def make_producer(clazz, descriptor, scope, entry, options)
|
715
|
-
singleton_wrapped(descriptor, scope, entry, clazz.new(self, entry.binding, scope, options))
|
716
|
-
end
|
717
|
-
|
718
|
-
# @api private
|
719
|
-
def singleton_wrapped(descriptor, scope, entry, producer)
|
720
|
-
return producer unless singleton?(descriptor)
|
721
|
-
Producers::SingletonProducer.new(self, entry.binding, scope,
|
722
|
-
merge_producer_options(entry.binding, {:value => producer.produce(scope)}))
|
723
|
-
end
|
724
|
-
|
725
|
-
# @api private
|
726
|
-
def transform_ProducerProducerDescriptor(descriptor, scope, entry)
|
727
|
-
p = transform(descriptor.producer, scope, entry)
|
728
|
-
clazz = singleton?(descriptor) ? Producers::SingletonProducerProducer : Producers::ProducerProducer
|
729
|
-
clazz.new(self, entry.binding, scope, merge_producer_options(entry.binding,
|
730
|
-
merge_producer_options(entry.binding, { :producer_producer => p })))
|
731
|
-
end
|
732
|
-
|
733
|
-
# @api private
|
734
|
-
def transform_LookupProducerDescriptor(descriptor, scope, entry)
|
735
|
-
make_producer(Producers::LookupProducer, descriptor, scope, entry,
|
736
|
-
merge_producer_options(entry.binding, {:type => descriptor.type, :name => descriptor.name}))
|
737
|
-
end
|
738
|
-
|
739
|
-
# @api private
|
740
|
-
def transform_HashLookupProducerDescriptor(descriptor, scope, entry)
|
741
|
-
make_producer(Producers::LookupKeyProducer, descriptor, scope, entry,
|
742
|
-
merge_producer_options(entry.binding, {:type => descriptor.type, :name => descriptor.name, :key => descriptor.key}))
|
743
|
-
end
|
744
|
-
|
745
|
-
# @api private
|
746
|
-
def transform_NonCachingProducerDescriptor(descriptor, scope, entry)
|
747
|
-
# simply delegates to the wrapped producer
|
748
|
-
transform(descriptor.producer, scope, entry)
|
749
|
-
end
|
750
|
-
|
751
|
-
# @api private
|
752
|
-
def transform_FirstFoundProducerDescriptor(descriptor, scope, entry)
|
753
|
-
make_producer(Producers::FirstFoundProducer, descriptor, scope, entry,
|
754
|
-
merge_producer_options(entry.binding, {:producers => descriptor.producers.collect {|p| transform(p, scope, entry) }}))
|
755
|
-
end
|
756
|
-
|
757
|
-
# @api private
|
758
|
-
def singleton?(descriptor)
|
759
|
-
! descriptor.eContainer().is_a?(Bindings::NonCachingProducerDescriptor)
|
760
|
-
end
|
761
|
-
|
762
|
-
# Special marker class used in entries
|
763
|
-
# @api private
|
764
|
-
class NotFound
|
765
|
-
end
|
766
|
-
end
|
767
|
-
end
|
768
|
-
end
|
769
|
-
end
|
770
|
-
end
|
771
|
-
|