puppet 4.8.2-x64-mingw32 → 4.9.0-x64-mingw32
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- checksums.yaml +15 -0
- data/CONTRIBUTING.md +25 -1
- data/Gemfile +6 -0
- data/Rakefile +1 -0
- data/ext/project_data.yaml +5 -1
- data/ext/windows/service/daemon.rb +2 -1
- data/install.rb +43 -6
- data/lib/hiera/puppet_function.rb +15 -17
- data/lib/hiera/scope.rb +12 -14
- data/lib/puppet.rb +52 -0
- data/lib/puppet/application/face_base.rb +4 -0
- data/lib/puppet/application/lookup.rb +4 -2
- data/lib/puppet/application/resource.rb +1 -1
- data/lib/puppet/data_providers.rb +6 -3
- data/lib/puppet/data_providers/data_adapter.rb +6 -0
- data/lib/puppet/data_providers/data_function_support.rb +7 -0
- data/lib/puppet/data_providers/function_env_data_provider.rb +7 -0
- data/lib/puppet/data_providers/function_module_data_provider.rb +6 -0
- data/lib/puppet/data_providers/hiera_config.rb +31 -10
- data/lib/puppet/data_providers/hiera_env_data_provider.rb +6 -0
- data/lib/puppet/data_providers/hiera_interpolate.rb +2 -1
- data/lib/puppet/data_providers/hiera_module_data_provider.rb +6 -0
- data/lib/puppet/data_providers/hiera_support.rb +6 -0
- data/lib/puppet/data_providers/json_data_provider_factory.rb +12 -0
- data/lib/puppet/data_providers/yaml_data_provider_factory.rb +12 -0
- data/lib/puppet/defaults.rb +25 -4
- data/lib/puppet/face/ca.rb +2 -0
- data/lib/puppet/face/certificate_request.rb +2 -0
- data/lib/puppet/face/certificate_revocation_list.rb +2 -0
- data/lib/puppet/face/file.rb +3 -0
- data/lib/puppet/face/help.rb +19 -17
- data/lib/puppet/face/help/face.erb +3 -0
- data/lib/puppet/face/key.rb +1 -0
- data/lib/puppet/face/man.rb +4 -2
- data/lib/puppet/face/module/generate.rb +1 -1
- data/lib/puppet/face/status.rb +2 -0
- data/lib/puppet/feature/base.rb +9 -2
- data/lib/puppet/feature/hocon.rb +3 -0
- data/lib/puppet/file_system.rb +15 -3
- data/lib/puppet/file_system/windows.rb +8 -0
- data/lib/puppet/forge.rb +6 -6
- data/lib/puppet/forge/repository.rb +1 -2
- data/lib/puppet/functions/binary_file.rb +4 -10
- data/lib/puppet/functions/hiera_array.rb +1 -1
- data/lib/puppet/functions/hiera_include.rb +1 -1
- data/lib/puppet/functions/hocon_data.rb +24 -0
- data/lib/puppet/functions/json_data.rb +18 -0
- data/lib/puppet/functions/yaml_data.rb +21 -0
- data/lib/puppet/generate/type.rb +1 -1
- data/lib/puppet/graph/simple_graph.rb +4 -2
- data/lib/puppet/indirector/file_bucket_file/file.rb +10 -2
- data/lib/puppet/indirector/request.rb +5 -1
- data/lib/puppet/interface.rb +14 -2
- data/lib/puppet/interface/face_collection.rb +1 -1
- data/lib/puppet/module.rb +14 -2
- data/lib/puppet/module_tool.rb +4 -4
- data/lib/puppet/module_tool/applications/builder.rb +3 -2
- data/lib/puppet/module_tool/applications/installer.rb +14 -14
- data/lib/puppet/module_tool/applications/upgrader.rb +13 -13
- data/lib/puppet/module_tool/installed_modules.rb +7 -7
- data/lib/puppet/module_tool/local_tarball.rb +3 -3
- data/lib/puppet/module_tool/metadata.rb +1 -1
- data/lib/puppet/network/http/connection.rb +2 -0
- data/lib/puppet/network/http/webrick.rb +2 -1
- data/lib/puppet/parser/functions/hiera.rb +14 -0
- data/lib/puppet/parser/functions/hiera_array.rb +14 -0
- data/lib/puppet/parser/functions/hiera_hash.rb +14 -0
- data/lib/puppet/parser/functions/hiera_include.rb +14 -0
- data/lib/puppet/parser/scope.rb +14 -20
- data/lib/puppet/plugins/data_providers.rb +2 -0
- data/lib/puppet/plugins/data_providers/data_provider.rb +108 -17
- data/lib/puppet/plugins/data_providers/registry.rb +2 -36
- data/lib/puppet/pops.rb +6 -9
- data/lib/puppet/pops/adaptable.rb +0 -3
- data/lib/puppet/pops/binder/producers.rb +3 -3
- data/lib/puppet/pops/evaluator/access_operator.rb +4 -4
- data/lib/puppet/pops/evaluator/closure.rb +1 -1
- data/lib/puppet/pops/evaluator/compare_operator.rb +4 -4
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +1 -1
- data/lib/puppet/pops/issues.rb +4 -0
- data/lib/puppet/pops/label_provider.rb +14 -0
- data/lib/puppet/pops/loader/loader_paths.rb +3 -1
- data/lib/puppet/pops/loader/module_loaders.rb +21 -7
- data/lib/puppet/pops/loader/typed_name.rb +0 -2
- data/lib/puppet/pops/loaders.rb +31 -12
- data/lib/puppet/pops/lookup.rb +4 -3
- data/lib/puppet/pops/lookup/configured_data_provider.rb +87 -0
- data/lib/puppet/pops/lookup/context.rb +121 -71
- data/lib/puppet/pops/lookup/data_adapter.rb +27 -0
- data/lib/puppet/pops/lookup/data_dig_function_provider.rb +55 -0
- data/lib/puppet/pops/lookup/data_hash_function_provider.rb +111 -0
- data/lib/puppet/pops/lookup/data_provider.rb +102 -0
- data/lib/puppet/pops/lookup/environment_data_provider.rb +27 -0
- data/lib/puppet/pops/lookup/explainer.rb +122 -82
- data/lib/puppet/pops/lookup/function_provider.rb +82 -0
- data/lib/puppet/pops/lookup/global_data_provider.rb +49 -0
- data/lib/puppet/pops/lookup/hiera_config.rb +601 -0
- data/lib/puppet/pops/lookup/interpolation.rb +56 -35
- data/lib/puppet/pops/lookup/invocation.rb +179 -101
- data/lib/puppet/pops/lookup/location_resolver.rb +72 -0
- data/lib/puppet/pops/lookup/lookup_adapter.rb +451 -0
- data/lib/puppet/pops/lookup/lookup_key.rb +99 -0
- data/lib/puppet/pops/lookup/lookup_key_function_provider.rb +119 -0
- data/lib/puppet/pops/lookup/module_data_provider.rb +58 -0
- data/lib/puppet/pops/lookup/sub_lookup.rb +8 -4
- data/lib/puppet/pops/merge_strategy.rb +120 -39
- data/lib/puppet/pops/parser/egrammar.ra +2 -0
- data/lib/puppet/pops/parser/eparser.rb +816 -808
- data/lib/puppet/pops/parser/locator.rb +3 -3
- data/lib/puppet/pops/parser/slurp_support.rb +4 -3
- data/lib/puppet/pops/pcore.rb +21 -12
- data/lib/puppet/pops/serialization/abstract_reader.rb +17 -7
- data/lib/puppet/pops/serialization/abstract_writer.rb +27 -12
- data/lib/puppet/pops/serialization/deserializer.rb +17 -4
- data/lib/puppet/pops/serialization/extension.rb +37 -8
- data/lib/puppet/pops/serialization/object.rb +14 -6
- data/lib/puppet/pops/serialization/rgen.rb +2 -1
- data/lib/puppet/pops/serialization/serializer.rb +30 -7
- data/lib/puppet/pops/types/implementation_registry.rb +1 -1
- data/lib/puppet/pops/types/p_object_type.rb +55 -12
- data/lib/puppet/pops/types/p_sem_ver_range_type.rb +27 -27
- data/lib/puppet/pops/types/p_sem_ver_type.rb +12 -12
- data/lib/puppet/pops/types/p_timespan_type.rb +6 -6
- data/lib/puppet/pops/types/p_timestamp_type.rb +2 -2
- data/lib/puppet/pops/types/p_type_set_type.rb +7 -16
- data/lib/puppet/pops/types/recursion_guard.rb +64 -20
- data/lib/puppet/pops/types/ruby_generator.rb +10 -0
- data/lib/puppet/pops/types/type_calculator.rb +23 -13
- data/lib/puppet/pops/types/type_factory.rb +20 -9
- data/lib/puppet/pops/types/type_formatter.rb +37 -17
- data/lib/puppet/pops/types/type_mismatch_describer.rb +7 -6
- data/lib/puppet/pops/types/type_parser.rb +6 -0
- data/lib/puppet/pops/types/types.rb +225 -132
- data/lib/puppet/pops/validation.rb +1 -1
- data/lib/puppet/pops/validation/checker4_0.rb +12 -2
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
- data/lib/puppet/pops/visitor.rb +4 -3
- data/lib/puppet/provider/mcx/mcxcontent.rb +2 -1
- data/lib/puppet/provider/nameservice.rb +15 -0
- data/lib/puppet/provider/package/appdmg.rb +1 -1
- data/lib/puppet/provider/package/dnf.rb +1 -1
- data/lib/puppet/provider/package/pkg.rb +1 -1
- data/lib/puppet/provider/package/pkgdmg.rb +1 -1
- data/lib/puppet/provider/package/pkgng.rb +1 -1
- data/lib/puppet/provider/package/rpm.rb +2 -2
- data/lib/puppet/provider/service/smf.rb +3 -3
- data/lib/puppet/provider/service/systemd.rb +5 -1
- data/lib/puppet/provider/user/directoryservice.rb +1 -0
- data/lib/puppet/provider/user/user_role_add.rb +15 -0
- data/lib/puppet/provider/yumrepo/inifile.rb +2 -2
- data/lib/puppet/provider/zone/solaris.rb +4 -1
- data/lib/puppet/reference/indirection.rb +1 -1
- data/lib/puppet/resource.rb +2 -3
- data/lib/puppet/resource/catalog.rb +12 -4
- data/lib/puppet/resource/type.rb +3 -3
- data/lib/puppet/settings.rb +1 -1
- data/lib/puppet/settings/config_file.rb +2 -1
- data/lib/puppet/settings/directory_setting.rb +6 -0
- data/lib/puppet/settings/environment_conf.rb +6 -2
- data/lib/puppet/settings/file_or_directory_setting.rb +6 -0
- data/lib/puppet/settings/file_setting.rb +10 -0
- data/lib/puppet/ssl/certificate_authority.rb +13 -2
- data/lib/puppet/ssl/host.rb +23 -1
- data/lib/puppet/transaction/additional_resource_generator.rb +7 -0
- data/lib/puppet/type/user.rb +16 -3
- data/lib/puppet/util.rb +1 -0
- data/lib/puppet/util/execution.rb +3 -3
- data/lib/puppet/util/filetype.rb +11 -5
- data/lib/puppet/util/logging.rb +2 -1
- data/lib/puppet/util/network_device/config.rb +1 -1
- data/lib/puppet/util/plist.rb +6 -0
- data/lib/puppet/util/profiler/aggregate.rb +1 -1
- data/lib/puppet/util/rdoc/generators/puppet_generator.rb +2 -2
- data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +2 -1
- data/lib/puppet/util/windows/adsi.rb +15 -12
- data/lib/puppet/vendor/load_semantic_puppet.rb +1 -0
- data/lib/puppet/vendor/pathspec/lib/pathspec.rb +2 -1
- data/lib/puppet/vendor/require_vendored.rb +0 -1
- data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet.rb +17 -0
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency.rb +7 -7
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/graph.rb +2 -2
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/graph_node.rb +2 -2
- data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/module_release.rb +58 -0
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/source.rb +2 -2
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/unsatisfiable_graph.rb +2 -2
- data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/gem_version.rb +3 -0
- data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/locales/config.yaml +21 -0
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/version.rb +48 -21
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/version_range.rb +15 -17
- data/lib/puppet/version.rb +1 -1
- data/lib/semver.rb +19 -12
- data/locales/config.yaml +29 -0
- data/locales/puppet.pot +79 -0
- data/man/man5/puppet.conf.5 +1 -1
- data/spec/fixtures/unit/application/environments/puppet_func_provider/functions/{data.pp → environment/data.pp} +0 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_misc/data/common.yaml +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/data/common.yaml +1 -1
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/hiera.yaml +5 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/lib/puppet/bindings/backend/default.rb +9 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/lib/puppet_x/backend/special_data_provider_factory.rb +23 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/manifests/init.pp +5 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/metadata.json +9 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_env_data.rb +1 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/manifests/init.pp +1 -1
- data/spec/fixtures/unit/functions/lookup/data/common.yaml +19 -0
- data/spec/fixtures/unit/functions/lookup_fixture/data/common.yaml +19 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/environment.conf +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/lib/puppet/functions/environment/data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/lib/puppet/bindings/abc/default.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/lib/puppet/functions/abc/data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/lib/puppet/bindings/bad_data/default.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/lib/puppet/bindings/bca/default.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/lib/puppet/functions/bca/data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/data/empty.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/hiera.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/data/empty_key.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/hiera.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/data/empty_key.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/hiera.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/data/empty.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/hiera.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/data/first.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/hiera.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/meta/lib/puppet/functions/meta/data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/meta/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/meta/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/lib/puppet/bindings/metawcp/default.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/lib/puppet_x/thallgren/sample_module_data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/no_provider/manifests/init.pp +0 -0
- data/spec/integration/application/apply_spec.rb +88 -2
- data/spec/integration/application/lookup_spec.rb +155 -0
- data/spec/integration/data_binding_spec.rb +5 -5
- data/spec/integration/defaults_spec.rb +13 -0
- data/spec/integration/environments/default_manifest_spec.rb +16 -16
- data/spec/integration/environments/setting_hooks_spec.rb +1 -1
- data/spec/integration/test/test_helper_spec.rb +6 -2
- data/spec/integration/transaction_spec.rb +74 -0
- data/spec/integration/util/execution_spec.rb +8 -0
- data/spec/lib/puppet_spec/module_tool/shared_functions.rb +2 -2
- data/spec/lib/puppet_spec/module_tool/stub_source.rb +1 -1
- data/spec/lib/puppet_spec/unindent.rb +2 -2
- data/spec/unit/application/face_base_spec.rb +16 -0
- data/spec/unit/application/lookup_spec.rb +262 -227
- data/spec/unit/data_providers/{sample_data_provider_spec.rb → custom_data_provider_spec.rb} +14 -16
- data/spec/unit/data_providers/function_data_provider_spec.rb +2 -2
- data/spec/unit/data_providers/hiera_data_provider_spec.rb +60 -97
- data/spec/unit/defaults_spec.rb +1 -1
- data/spec/unit/face/ca_spec.rb +10 -0
- data/spec/unit/face/certificate_request_spec.rb +10 -0
- data/spec/unit/face/certificate_revocation_list_spec.rb +10 -0
- data/spec/unit/face/file_spec.rb +4 -0
- data/spec/unit/face/help_spec.rb +17 -0
- data/spec/unit/face/key_spec.rb +10 -0
- data/spec/unit/face/status_spec.rb +10 -0
- data/spec/unit/file_system_spec.rb +143 -6
- data/spec/unit/functions/binary_file_spec.rb +1 -1
- data/spec/unit/functions/hiera_spec.rb +257 -47
- data/spec/unit/functions/lookup_fixture_spec.rb +693 -0
- data/spec/unit/functions/lookup_spec.rb +1319 -608
- data/spec/unit/functions/new_spec.rb +3 -3
- data/spec/unit/graph/rb_tree_map_spec.rb +1 -1
- data/spec/unit/graph/simple_graph_spec.rb +1 -1
- data/spec/unit/hiera/scope_spec.rb +4 -4
- data/spec/unit/indirector/request_spec.rb +9 -0
- data/spec/unit/interface_spec.rb +27 -0
- data/spec/unit/man_spec.rb +1 -1
- data/spec/unit/module_spec.rb +1 -1
- data/spec/unit/module_tool/applications/builder_spec.rb +16 -1
- data/spec/unit/module_tool/applications/installer_spec.rb +1 -1
- data/spec/unit/module_tool/applications/upgrader_spec.rb +1 -1
- data/spec/unit/module_tool/installed_modules_spec.rb +6 -6
- data/spec/unit/module_tool_spec.rb +3 -3
- data/spec/unit/network/http/connection_spec.rb +10 -0
- data/spec/unit/network/http/webrick_spec.rb +1 -1
- data/spec/unit/pops/evaluator/access_ops_spec.rb +2 -2
- data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +9 -9
- data/spec/unit/pops/loaders/environment_loader_spec.rb +172 -0
- data/spec/unit/pops/lookup/context_spec.rb +45 -16
- data/spec/unit/pops/lookup/interpolation_spec.rb +28 -20
- data/spec/unit/pops/lookup/lookup_spec.rb +197 -0
- data/spec/unit/pops/merge_strategy_spec.rb +18 -0
- data/spec/unit/pops/parser/lexer2_spec.rb +16 -1
- data/spec/unit/pops/parser/parse_site_spec.rb +4 -0
- data/spec/unit/pops/serialization/packer_spec.rb +4 -23
- data/spec/unit/pops/serialization/serialization_spec.rb +32 -8
- data/spec/unit/pops/types/p_object_type_spec.rb +68 -3
- data/spec/unit/pops/types/p_sem_ver_type_spec.rb +4 -4
- data/spec/unit/pops/types/p_type_set_type_spec.rb +31 -2
- data/spec/unit/pops/types/type_acceptor_spec.rb +18 -17
- data/spec/unit/pops/types/type_calculator_spec.rb +39 -40
- data/spec/unit/pops/types/type_factory_spec.rb +3 -3
- data/spec/unit/pops/types/type_formatter_spec.rb +7 -3
- data/spec/unit/pops/types/type_mismatch_describer_spec.rb +13 -2
- data/spec/unit/pops/types/types_spec.rb +25 -2
- data/spec/unit/pops/validator/validator_spec.rb +60 -4
- data/spec/unit/provider/nameservice_spec.rb +42 -0
- data/spec/unit/provider/package/aptrpm_spec.rb +1 -1
- data/spec/unit/provider/package/pkg_spec.rb +22 -0
- data/spec/unit/provider/package/pkgng_spec.rb +12 -0
- data/spec/unit/provider/package/rpm_spec.rb +8 -8
- data/spec/unit/provider/service/smf_spec.rb +13 -11
- data/spec/unit/provider/service/systemd_spec.rb +8 -1
- data/spec/unit/provider/user/useradd_spec.rb +1 -0
- data/spec/unit/puppet_spec.rb +14 -0
- data/spec/unit/resource/catalog_spec.rb +15 -9
- data/spec/unit/resource_spec.rb +20 -17
- data/spec/unit/semver_spec.rb +14 -0
- data/spec/unit/ssl/certificate_authority_spec.rb +12 -1
- data/spec/unit/transaction/additional_resource_generator_spec.rb +11 -0
- data/spec/unit/type/user_spec.rb +32 -6
- data/spec/unit/util/filetype_spec.rb +3 -3
- data/spec/unit/util/yaml_spec.rb +1 -1
- data/spec/unit/util_spec.rb +10 -2
- data/tasks/i18n.rake +20 -0
- metadata +2661 -2607
- data/lib/puppet/data_providers/lookup_adapter.rb +0 -254
- data/lib/puppet/vendor/load_semantic.rb +0 -1
- data/lib/puppet/vendor/semantic/Gemfile +0 -20
- data/lib/puppet/vendor/semantic/PUPPET_README.md +0 -6
- data/lib/puppet/vendor/semantic/Rakefile +0 -69
- data/lib/puppet/vendor/semantic/lib/semantic.rb +0 -7
- data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +0 -60
- data/lib/puppet/vendor/semantic/spec/spec_helper.rb +0 -24
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/graph_node_spec.rb +0 -141
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/graph_spec.rb +0 -162
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/module_release_spec.rb +0 -143
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/source_spec.rb +0 -5
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/unsatisfiable_graph_spec.rb +0 -44
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency_spec.rb +0 -383
- data/lib/puppet/vendor/semantic/spec/unit/semantic/version_range_spec.rb +0 -307
- data/lib/puppet/vendor/semantic/spec/unit/semantic/version_spec.rb +0 -608
- data/spec/fixtures/unit/data_providers/environments/sample/manifests/site.pp +0 -6
@@ -59,7 +59,7 @@ module Types
|
|
59
59
|
loader)
|
60
60
|
end
|
61
61
|
|
62
|
-
# Register a
|
62
|
+
# Register a bidirectional regexp mapping
|
63
63
|
#
|
64
64
|
# @param type_name_subst [Array(Regexp,String)] regexp and replacement mapping type names to runtime names
|
65
65
|
# @param impl_name_subst [Array(Regexp,String)] regexp and replacement mapping runtime names to type names
|
@@ -358,14 +358,14 @@ class PObjectType < PMetaType
|
|
358
358
|
# @param i12n_hash [Hash{String=>Object}] The hash describing the Object features
|
359
359
|
#
|
360
360
|
# @api private
|
361
|
-
def initialize(
|
361
|
+
def initialize(i12n_hash, i12n_hash_expression = nil)
|
362
362
|
@attributes = EMPTY_HASH
|
363
363
|
@functions = EMPTY_HASH
|
364
364
|
|
365
|
-
if
|
366
|
-
initialize_from_hash(
|
365
|
+
if i12n_hash.is_a?(Hash)
|
366
|
+
initialize_from_hash(i12n_hash)
|
367
367
|
else
|
368
|
-
@name = TypeAsserter.assert_instance_of('object name', TYPE_OBJECT_NAME,
|
368
|
+
@name = TypeAsserter.assert_instance_of('object name', TYPE_OBJECT_NAME, i12n_hash)
|
369
369
|
@i12n_hash_expression = i12n_hash_expression
|
370
370
|
end
|
371
371
|
end
|
@@ -411,7 +411,7 @@ class PObjectType < PMetaType
|
|
411
411
|
impl_class = implementation_class
|
412
412
|
class_name = impl_class.name || "Anonymous Ruby class for #{name}"
|
413
413
|
|
414
|
-
(param_names, param_types, required_param_count) = parameter_info
|
414
|
+
(param_names, param_types, required_param_count) = parameter_info(impl_class)
|
415
415
|
|
416
416
|
# Create the callable with a size that reflects the required and optional parameters
|
417
417
|
param_types << required_param_count
|
@@ -442,11 +442,17 @@ class PObjectType < PMetaType
|
|
442
442
|
end
|
443
443
|
end
|
444
444
|
|
445
|
-
# Add the dispatch that uses the standard #new method on the class. It's assumed that the
|
445
|
+
# Add the dispatch that uses the standard #from_asserted_args or #new method on the class. It's assumed that the
|
446
446
|
# method performs no assertions.
|
447
447
|
dispatcher.add_dispatch(create_type, :create, param_names, nil, EMPTY_ARRAY, EMPTY_ARRAY, false)
|
448
|
-
|
449
|
-
|
448
|
+
if impl_class.respond_to?(:from_asserted_args)
|
449
|
+
def create(*args)
|
450
|
+
self.class.impl_class.from_asserted_args(*args)
|
451
|
+
end
|
452
|
+
else
|
453
|
+
def create(*args)
|
454
|
+
self.class.impl_class.new(*args)
|
455
|
+
end
|
450
456
|
end
|
451
457
|
end
|
452
458
|
end
|
@@ -474,7 +480,7 @@ class PObjectType < PMetaType
|
|
474
480
|
|
475
481
|
# @api private
|
476
482
|
# @return [(Array<String>, Array<PAnyType>, Integer)] array of parameter names, array of parameter types, and a count reflecting the required number of parameters
|
477
|
-
def parameter_info(attr_readers = false)
|
483
|
+
def parameter_info(impl_class, attr_readers = false)
|
478
484
|
# Create a types and a names array where optional entries ends up last
|
479
485
|
opt_types = []
|
480
486
|
opt_names = []
|
@@ -491,6 +497,35 @@ class PObjectType < PMetaType
|
|
491
497
|
end
|
492
498
|
param_names = non_opt_names + opt_names
|
493
499
|
param_types = non_opt_types + opt_types
|
500
|
+
param_count = param_names.size
|
501
|
+
|
502
|
+
init = impl_class.respond_to?(:from_asserted_args) ? impl_class.method(:from_asserted_args) : impl_class.instance_method(:initialize)
|
503
|
+
init_non_opt_count = 0
|
504
|
+
init_param_names = init.parameters.map do |p|
|
505
|
+
init_non_opt_count += 1 if :req == p[0]
|
506
|
+
p[1].to_s
|
507
|
+
end
|
508
|
+
|
509
|
+
if init_param_names != param_names
|
510
|
+
if init_param_names.size < param_count || init_non_opt_count > param_count
|
511
|
+
raise Serialization::SerializationError, "Initializer for class #{impl_class.name} does not match the attributes of #{name}"
|
512
|
+
end
|
513
|
+
init_param_names = init_param_names[0, param_count] if init_param_names.size > param_count
|
514
|
+
unless init_param_names == param_names
|
515
|
+
# Reorder needed to match initialize method arguments
|
516
|
+
new_param_types = []
|
517
|
+
init_param_names.each do |ip|
|
518
|
+
index = param_names.index(ip)
|
519
|
+
if index.nil?
|
520
|
+
raise Serialization::SerializationError,
|
521
|
+
"Initializer for class #{impl_class.name} parameter '#{ip}' does not match any of the the attributes of type #{name}"
|
522
|
+
end
|
523
|
+
new_param_types << param_types[index]
|
524
|
+
end
|
525
|
+
param_names = init_param_names
|
526
|
+
param_types = new_param_types
|
527
|
+
end
|
528
|
+
end
|
494
529
|
|
495
530
|
[param_names, param_types, non_opt_types.size]
|
496
531
|
end
|
@@ -620,6 +655,14 @@ class PObjectType < PMetaType
|
|
620
655
|
@i12n_type ||= create_i12n_type
|
621
656
|
end
|
622
657
|
|
658
|
+
def create(*args)
|
659
|
+
implementation_class.create(*args)
|
660
|
+
end
|
661
|
+
|
662
|
+
def from_hash(hash)
|
663
|
+
implementation_class.from_hash(hash)
|
664
|
+
end
|
665
|
+
|
623
666
|
# Creates the type that a initialization hash used for creating instances of this type must conform to.
|
624
667
|
#
|
625
668
|
# @return [PStructType] the initialization hash type
|
@@ -816,8 +859,8 @@ class PObjectType < PMetaType
|
|
816
859
|
def find_equality_definer_of(attr)
|
817
860
|
type = self
|
818
861
|
while !type.nil? do
|
819
|
-
p = type.
|
820
|
-
return type
|
862
|
+
p = type.resolved_parent
|
863
|
+
return type unless p.is_a?(PObjectType)
|
821
864
|
return type unless p.equality_attributes.include?(attr.name)
|
822
865
|
type = p
|
823
866
|
end
|
@@ -827,7 +870,7 @@ class PObjectType < PMetaType
|
|
827
870
|
def guarded_recursion(guard, dflt)
|
828
871
|
if @self_recursion
|
829
872
|
guard ||= RecursionGuard.new
|
830
|
-
|
873
|
+
guard.with_this(self) { |state| (state & RecursionGuard::SELF_RECURSION_IN_THIS) == 0 ? yield(guard) : dflt }
|
831
874
|
else
|
832
875
|
yield(guard)
|
833
876
|
end
|
@@ -10,21 +10,21 @@ class PSemVerRangeType < PScalarType
|
|
10
10
|
end
|
11
11
|
|
12
12
|
# Check if a version is included in a version range. The version can be a string or
|
13
|
-
# a `
|
13
|
+
# a `SemanticPuppet::SemVer`
|
14
14
|
#
|
15
|
-
# @param range [
|
16
|
-
# @param version [
|
15
|
+
# @param range [SemanticPuppet::VersionRange] the range to match against
|
16
|
+
# @param version [SemanticPuppet::Version,String] the version to match
|
17
17
|
# @return [Boolean] `true` if the range includes the given version
|
18
18
|
#
|
19
19
|
# @api public
|
20
20
|
def self.include?(range, version)
|
21
21
|
case version
|
22
|
-
when
|
22
|
+
when SemanticPuppet::Version
|
23
23
|
range.include?(version)
|
24
24
|
when String
|
25
25
|
begin
|
26
|
-
range.include?(
|
27
|
-
rescue
|
26
|
+
range.include?(SemanticPuppet::Version.parse(version))
|
27
|
+
rescue SemanticPuppet::Version::ValidationFailure
|
28
28
|
false
|
29
29
|
end
|
30
30
|
else
|
@@ -32,28 +32,28 @@ class PSemVerRangeType < PScalarType
|
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
-
# Creates a {
|
36
|
-
# a {
|
37
|
-
# {
|
35
|
+
# Creates a {SemanticPuppet::VersionRange} from the given _version_range_ argument. If the argument is `nil` or
|
36
|
+
# a {SemanticPuppet::VersionRange}, it is returned. If it is a {String}, it will be parsed into a
|
37
|
+
# {SemanticPuppet::VersionRange}. Any other class will raise an {ArgumentError}.
|
38
38
|
#
|
39
|
-
# @param version_range [
|
40
|
-
# @return [
|
39
|
+
# @param version_range [SemanticPuppet::VersionRange,String,nil] the version range to convert
|
40
|
+
# @return [SemanticPuppet::VersionRange] the converted version range
|
41
41
|
# @raise [ArgumentError] when the argument cannot be converted into a version range
|
42
42
|
#
|
43
43
|
def self.convert(version_range)
|
44
44
|
case version_range
|
45
|
-
when nil,
|
45
|
+
when nil, SemanticPuppet::VersionRange
|
46
46
|
version_range
|
47
47
|
when String
|
48
|
-
|
48
|
+
SemanticPuppet::VersionRange.parse(version_range)
|
49
49
|
else
|
50
50
|
raise ArgumentError, "Unable to convert a #{version_range.class.name} to a SemVerRange"
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
54
54
|
# Checks if range _a_ is a sub-range of (i.e. completely covered by) range _b_
|
55
|
-
# @param a [
|
56
|
-
# @param b [
|
55
|
+
# @param a [SemanticPuppet::VersionRange] the first range
|
56
|
+
# @param b [SemanticPuppet::VersionRange] the second range
|
57
57
|
#
|
58
58
|
# @return [Boolean] `true` if _a_ is completely covered by _b_
|
59
59
|
def self.covered_by?(a, b)
|
@@ -63,9 +63,9 @@ class PSemVerRangeType < PScalarType
|
|
63
63
|
# Merge two ranges so that the result matches all versions matched by both. A merge
|
64
64
|
# is only possible when the ranges are either adjacent or have an overlap.
|
65
65
|
#
|
66
|
-
# @param a [
|
67
|
-
# @param b [
|
68
|
-
# @return [
|
66
|
+
# @param a [SemanticPuppet::VersionRange] the first range
|
67
|
+
# @param b [SemanticPuppet::VersionRange] the second range
|
68
|
+
# @return [SemanticPuppet::VersionRange,nil] the result of the merge
|
69
69
|
#
|
70
70
|
# @api public
|
71
71
|
def self.merge(a, b)
|
@@ -77,13 +77,13 @@ class PSemVerRangeType < PScalarType
|
|
77
77
|
elsif b.exclude_end?
|
78
78
|
exclude_end = max == b.end && (max > a.end || a.exclude_end?)
|
79
79
|
end
|
80
|
-
|
80
|
+
SemanticPuppet::VersionRange.new([a.begin, b.begin].min, max, exclude_end)
|
81
81
|
elsif a.exclude_end? && a.end == b.begin
|
82
82
|
# Adjacent, a before b
|
83
|
-
|
83
|
+
SemanticPuppet::VersionRange.new(a.begin, b.end, b.exclude_end?)
|
84
84
|
elsif b.exclude_end? && b.end == a.begin
|
85
85
|
# Adjacent, b before a
|
86
|
-
|
86
|
+
SemanticPuppet::VersionRange.new(b.begin, a.end, a.exclude_end?)
|
87
87
|
else
|
88
88
|
# No overlap
|
89
89
|
nil
|
@@ -91,7 +91,7 @@ class PSemVerRangeType < PScalarType
|
|
91
91
|
end
|
92
92
|
|
93
93
|
def instance?(o, guard = nil)
|
94
|
-
o.is_a?(
|
94
|
+
o.is_a?(SemanticPuppet::VersionRange)
|
95
95
|
end
|
96
96
|
|
97
97
|
def eql?(o)
|
@@ -115,7 +115,7 @@ class PSemVerRangeType < PScalarType
|
|
115
115
|
# https://github.com/npm/node-semver#range-grammar
|
116
116
|
#
|
117
117
|
# The logical or || operator is not implemented since it effectively builds
|
118
|
-
# an array of ranges that may be disparate. The {{
|
118
|
+
# an array of ranges that may be disparate. The {{SemanticPuppet::VersionRange}} inherits
|
119
119
|
# from the standard ruby range. It must be possible to describe that range in terms
|
120
120
|
# of min, max, and exclude max.
|
121
121
|
#
|
@@ -144,13 +144,13 @@ class PSemVerRangeType < PScalarType
|
|
144
144
|
end
|
145
145
|
|
146
146
|
def from_string(str)
|
147
|
-
|
147
|
+
SemanticPuppet::VersionRange.parse(str)
|
148
148
|
end
|
149
149
|
|
150
150
|
def from_versions(min, max = :default, exclude_max = false)
|
151
|
-
min =
|
152
|
-
max =
|
153
|
-
|
151
|
+
min = SemanticPuppet::Version::MIN if min == :default
|
152
|
+
max = SemanticPuppet::Version::MAX if max == :default
|
153
|
+
SemanticPuppet::VersionRange.new(min, max, exclude_max)
|
154
154
|
end
|
155
155
|
|
156
156
|
def from_hash(hash)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Puppet::Pops
|
2
2
|
module Types
|
3
3
|
|
4
|
-
# A Puppet Language Type that exposes the {{
|
4
|
+
# A Puppet Language Type that exposes the {{SemanticPuppet::Version}} and {{SemanticPuppet::VersionRange}}.
|
5
5
|
# The version type is parameterized with version ranges.
|
6
6
|
#
|
7
7
|
# @api public
|
@@ -18,13 +18,13 @@ class PSemVerType < PScalarType
|
|
18
18
|
attr_reader :ranges
|
19
19
|
|
20
20
|
def initialize(ranges)
|
21
|
-
ranges = ranges.map { |range| range.is_a?(
|
21
|
+
ranges = ranges.map { |range| range.is_a?(SemanticPuppet::VersionRange) ? range : SemanticPuppet::VersionRange.parse(range) }
|
22
22
|
ranges = merge_ranges(ranges) if ranges.size > 1
|
23
23
|
@ranges = ranges
|
24
24
|
end
|
25
25
|
|
26
26
|
def instance?(o, guard = nil)
|
27
|
-
o.is_a?(
|
27
|
+
o.is_a?(SemanticPuppet::Version) && (@ranges.empty? || @ranges.any? {|range| range.include?(o) })
|
28
28
|
end
|
29
29
|
|
30
30
|
def eql?(o)
|
@@ -36,19 +36,19 @@ class PSemVerType < PScalarType
|
|
36
36
|
end
|
37
37
|
|
38
38
|
# Creates a SemVer version from the given _version_ argument. If the argument is `nil` or
|
39
|
-
# a {
|
40
|
-
# {
|
39
|
+
# a {SemanticPuppet::Version}, it is returned. If it is a {String}, it will be parsed into a
|
40
|
+
# {SemanticPuppet::Version}. Any other class will raise an {ArgumentError}.
|
41
41
|
#
|
42
|
-
# @param version [
|
43
|
-
# @return [
|
42
|
+
# @param version [SemanticPuppet::Version,String,nil] the version to convert
|
43
|
+
# @return [SemanticPuppet::Version] the converted version
|
44
44
|
# @raise [ArgumentError] when the argument cannot be converted into a version
|
45
45
|
#
|
46
46
|
def self.convert(version)
|
47
47
|
case version
|
48
|
-
when nil,
|
48
|
+
when nil, SemanticPuppet::Version
|
49
49
|
version
|
50
50
|
when String
|
51
|
-
|
51
|
+
SemanticPuppet::Version.parse(version)
|
52
52
|
else
|
53
53
|
raise ArgumentError, "Unable to convert a #{version.class.name} to a SemVer"
|
54
54
|
end
|
@@ -87,15 +87,15 @@ class PSemVerType < PScalarType
|
|
87
87
|
end
|
88
88
|
|
89
89
|
def from_string(str)
|
90
|
-
|
90
|
+
SemanticPuppet::Version.parse(str)
|
91
91
|
end
|
92
92
|
|
93
93
|
def from_args(major, minor, patch, prerelease = nil, build = nil)
|
94
|
-
|
94
|
+
SemanticPuppet::Version.new(major, minor, patch, prerelease, build)
|
95
95
|
end
|
96
96
|
|
97
97
|
def from_hash(hash)
|
98
|
-
|
98
|
+
SemanticPuppet::Version.new(hash['major'], hash['minor'], hash['patch'], hash['prerelease'], hash['build'])
|
99
99
|
end
|
100
100
|
end
|
101
101
|
end
|
@@ -1,10 +1,10 @@
|
|
1
1
|
module Puppet::Pops
|
2
2
|
module Types
|
3
3
|
class PAbstractTimeDataType < PAbstractRangeType
|
4
|
-
# @param [AbstractTime]
|
5
|
-
# @param [AbstractTime]
|
6
|
-
def initialize(
|
7
|
-
super(convert_arg(
|
4
|
+
# @param from [AbstractTime] lower bound for this type. Nil or :default means unbounded
|
5
|
+
# @param to [AbstractTime] upper bound for this type. Nil or :default means unbounded
|
6
|
+
def initialize(from = nil, to = nil)
|
7
|
+
super(convert_arg(from, true), convert_arg(to, false))
|
8
8
|
end
|
9
9
|
|
10
10
|
def convert_arg(arg, min)
|
@@ -51,8 +51,8 @@ module Types
|
|
51
51
|
class PTimespanType < PAbstractTimeDataType
|
52
52
|
def self.register_ptype(loader, ir)
|
53
53
|
create_ptype(loader, ir, 'ScalarType',
|
54
|
-
'from' => { KEY_TYPE => PTimespanType::DEFAULT, KEY_VALUE =>
|
55
|
-
'to' => { KEY_TYPE => PTimespanType::DEFAULT, KEY_VALUE =>
|
54
|
+
'from' => { KEY_TYPE => POptionalType.new(PTimespanType::DEFAULT), KEY_VALUE => nil },
|
55
|
+
'to' => { KEY_TYPE => POptionalType.new(PTimespanType::DEFAULT), KEY_VALUE => nil }
|
56
56
|
)
|
57
57
|
end
|
58
58
|
|
@@ -3,8 +3,8 @@ module Types
|
|
3
3
|
class PTimestampType < PAbstractTimeDataType
|
4
4
|
def self.register_ptype(loader, ir)
|
5
5
|
create_ptype(loader, ir, 'ScalarType',
|
6
|
-
'from' => { KEY_TYPE => PTimestampType::DEFAULT, KEY_VALUE =>
|
7
|
-
'to' => { KEY_TYPE => PTimestampType::DEFAULT, KEY_VALUE =>
|
6
|
+
'from' => { KEY_TYPE => POptionalType.new(PTimestampType::DEFAULT), KEY_VALUE => nil },
|
7
|
+
'to' => { KEY_TYPE => POptionalType.new(PTimestampType::DEFAULT), KEY_VALUE => nil }
|
8
8
|
)
|
9
9
|
end
|
10
10
|
|
@@ -216,27 +216,18 @@ class PTypeSetType < PMetaType
|
|
216
216
|
# @return [String] the name by which the type is referenced within this type set
|
217
217
|
#
|
218
218
|
# @api private
|
219
|
-
def name_for(t)
|
219
|
+
def name_for(t, default_name)
|
220
220
|
key = @types.key(t)
|
221
221
|
if key.nil?
|
222
222
|
qname = t.name
|
223
223
|
if @references.empty?
|
224
|
-
|
224
|
+
default_name
|
225
225
|
else
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
if type_set.nil?
|
230
|
-
qname
|
231
|
-
else
|
232
|
-
if segments.size == 1
|
233
|
-
qname
|
234
|
-
else
|
235
|
-
sub_name = type_set.name_for(t)
|
236
|
-
sub_name = "#{first}::#{sub_name}" unless sub_name == qname
|
237
|
-
sub_name
|
238
|
-
end
|
226
|
+
@references.each_pair do |ref_key, ref|
|
227
|
+
ref_name = ref.type_set.name_for(t, nil)
|
228
|
+
return "#{ref_key}::#{ref_name}" unless ref_name.nil?
|
239
229
|
end
|
230
|
+
default_name
|
240
231
|
end
|
241
232
|
else
|
242
233
|
key
|
@@ -332,7 +323,7 @@ class PTypeSetType < PMetaType
|
|
332
323
|
KEY_NAME_AUTHORITY => Pcore::RUNTIME_NAME_AUTHORITY,
|
333
324
|
Pcore::KEY_PCORE_URI => Pcore::PCORE_URI,
|
334
325
|
Pcore::KEY_PCORE_VERSION => Pcore::PCORE_VERSION,
|
335
|
-
KEY_VERSION =>
|
326
|
+
KEY_VERSION => SemanticPuppet::Version.new(0,0,0)
|
336
327
|
})
|
337
328
|
|
338
329
|
protected
|
@@ -24,14 +24,54 @@ class RecursionGuard
|
|
24
24
|
# @param instance [Object] the instance to check
|
25
25
|
# @return [Integer] the resulting state
|
26
26
|
def recursive_this?(instance)
|
27
|
-
|
27
|
+
instance_variable_defined?(:@recursive_this_map) && @recursive_this_map.has_key?(instance.object_id)
|
28
28
|
end
|
29
29
|
|
30
30
|
# Checks if recursion was detected for the given argument in the 'that' context
|
31
31
|
# @param instance [Object] the instance to check
|
32
32
|
# @return [Integer] the resulting state
|
33
33
|
def recursive_that?(instance)
|
34
|
-
|
34
|
+
instance_variable_defined?(:@recursive_that_map) && @recursive_that_map.has_key?(instance.object_id)
|
35
|
+
end
|
36
|
+
|
37
|
+
# Add the given argument as 'this' invoke the given block with the resulting state
|
38
|
+
# @param instance [Object] the instance to add
|
39
|
+
# @return [Object] the result of yielding
|
40
|
+
def with_this(instance)
|
41
|
+
if (@state & SELF_RECURSION_IN_THIS) == 0
|
42
|
+
tc = this_count
|
43
|
+
@state = @state | SELF_RECURSION_IN_THIS if this_put(instance)
|
44
|
+
if tc < this_count
|
45
|
+
# recursive state detected
|
46
|
+
result = yield(@state)
|
47
|
+
|
48
|
+
# pop state
|
49
|
+
@state &= ~SELF_RECURSION_IN_THIS
|
50
|
+
@this_map.delete(instance.object_id)
|
51
|
+
return result
|
52
|
+
end
|
53
|
+
end
|
54
|
+
yield(@state)
|
55
|
+
end
|
56
|
+
|
57
|
+
# Add the given argument as 'that' invoke the given block with the resulting state
|
58
|
+
# @param instance [Object] the instance to add
|
59
|
+
# @return [Object] the result of yielding
|
60
|
+
def with_that(instance)
|
61
|
+
if (@state & SELF_RECURSION_IN_THAT) == 0
|
62
|
+
tc = that_count
|
63
|
+
@state = @state | SELF_RECURSION_IN_THAT if that_put(instance)
|
64
|
+
if tc < that_count
|
65
|
+
# recursive state detected
|
66
|
+
result = yield(@state)
|
67
|
+
|
68
|
+
# pop state
|
69
|
+
@state &= ~SELF_RECURSION_IN_THAT
|
70
|
+
@that_map.delete(instance.object_id)
|
71
|
+
return result
|
72
|
+
end
|
73
|
+
end
|
74
|
+
yield(@state)
|
35
75
|
end
|
36
76
|
|
37
77
|
# Add the given argument as 'this' and return the resulting state
|
@@ -39,7 +79,7 @@ class RecursionGuard
|
|
39
79
|
# @return [Integer] the resulting state
|
40
80
|
def add_this(instance)
|
41
81
|
if (@state & SELF_RECURSION_IN_THIS) == 0
|
42
|
-
@state = @state | SELF_RECURSION_IN_THIS if
|
82
|
+
@state = @state | SELF_RECURSION_IN_THIS if this_put(instance)
|
43
83
|
end
|
44
84
|
@state
|
45
85
|
end
|
@@ -49,43 +89,47 @@ class RecursionGuard
|
|
49
89
|
# @return [Integer] the resulting state
|
50
90
|
def add_that(instance)
|
51
91
|
if (@state & SELF_RECURSION_IN_THAT) == 0
|
52
|
-
@state = @state | SELF_RECURSION_IN_THAT if
|
92
|
+
@state = @state | SELF_RECURSION_IN_THAT if that_put(instance)
|
53
93
|
end
|
54
94
|
@state
|
55
95
|
end
|
56
96
|
|
57
97
|
# @return the number of objects added to the `this` map
|
58
98
|
def this_count
|
59
|
-
this_map.size
|
99
|
+
instance_variable_defined?(:@this_map) ? @this_map.size : 0
|
60
100
|
end
|
61
101
|
|
62
102
|
# @return the number of objects added to the `that` map
|
63
103
|
def that_count
|
64
|
-
that_map.size
|
104
|
+
instance_variable_defined?(:@that_map) ? @that_map.size : 0
|
65
105
|
end
|
66
106
|
|
67
107
|
private
|
68
108
|
|
69
|
-
def
|
109
|
+
def this_put(o)
|
70
110
|
id = o.object_id
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
true # Recursion occured. This was the second time this entry was added
|
111
|
+
@this_map ||= {}
|
112
|
+
if @this_map.has_key?(id)
|
113
|
+
@recursive_this_map ||= {}
|
114
|
+
@recursive_this_map[id] = true
|
115
|
+
true
|
77
116
|
else
|
78
|
-
|
79
|
-
false
|
117
|
+
@this_map[id] = true
|
118
|
+
false
|
80
119
|
end
|
81
120
|
end
|
82
121
|
|
83
|
-
def
|
84
|
-
|
85
|
-
end
|
86
|
-
|
87
|
-
def that_map
|
122
|
+
def that_put(o)
|
123
|
+
id = o.object_id
|
88
124
|
@that_map ||= {}
|
125
|
+
if @that_map.has_key?(id)
|
126
|
+
@recursive_that_map ||= {}
|
127
|
+
@recursive_that_map[id] = true
|
128
|
+
true
|
129
|
+
else
|
130
|
+
@that_map[id] = true
|
131
|
+
false
|
132
|
+
end
|
89
133
|
end
|
90
134
|
end
|
91
135
|
end
|