puppet 4.8.2-universal-darwin → 4.9.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.
- 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/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/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/data_providers.rb +6 -3
- 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/face.erb +3 -0
- data/lib/puppet/face/help.rb +19 -17
- 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/windows.rb +8 -0
- data/lib/puppet/file_system.rb +15 -3
- data/lib/puppet/forge/repository.rb +1 -2
- data/lib/puppet/forge.rb +6 -6
- 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/face_collection.rb +1 -1
- data/lib/puppet/interface.rb +14 -2
- data/lib/puppet/module.rb +14 -2
- 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/module_tool.rb +4 -4
- 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/data_provider.rb +108 -17
- data/lib/puppet/plugins/data_providers/registry.rb +2 -36
- data/lib/puppet/plugins/data_providers.rb +2 -0
- 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/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/lookup.rb +4 -3
- 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/checker4_0.rb +12 -2
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
- data/lib/puppet/pops/validation.rb +1 -1
- data/lib/puppet/pops/visitor.rb +4 -3
- data/lib/puppet/pops.rb +6 -9
- 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/catalog.rb +12 -4
- data/lib/puppet/resource/type.rb +3 -3
- data/lib/puppet/resource.rb +2 -3
- 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/settings.rb +1 -1
- 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/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/util.rb +1 -0
- 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/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/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency.rb +7 -7
- 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/vendor/semantic_puppet/lib/semantic_puppet.rb +17 -0
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet.rb +52 -0
- 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 -2595
- 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/dependency/module_release.rb +0 -60
- data/lib/puppet/vendor/semantic/lib/semantic.rb +0 -7
- 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
@@ -143,13 +143,13 @@ class Locator
|
|
143
143
|
# Create a locator based on a content string, and a boolean indicating if ruby version support multi-byte strings
|
144
144
|
# or not.
|
145
145
|
#
|
146
|
-
def initialize(string, file,
|
146
|
+
def initialize(string, file, line_index = nil)
|
147
147
|
@string = string.freeze
|
148
148
|
@file = file.freeze
|
149
149
|
@prev_offset = nil
|
150
150
|
@prev_line = nil
|
151
|
-
@line_index =
|
152
|
-
compute_line_index if
|
151
|
+
@line_index = line_index
|
152
|
+
compute_line_index if line_index.nil?
|
153
153
|
end
|
154
154
|
|
155
155
|
# Returns the position on line (first position on a line is 1)
|
@@ -76,9 +76,10 @@ module SlurpSupport
|
|
76
76
|
# Process unicode escapes first as they require getting 4 hex digits
|
77
77
|
# If later a \u is found it is warned not to be a unicode escape
|
78
78
|
if escapes.include?('u')
|
79
|
-
|
80
|
-
|
81
|
-
|
79
|
+
# gsub must be repeated to cater for adjacent escapes
|
80
|
+
while(str.gsub!(/((?:[^\\]|^)(?:[\\]{2})*)\\u(?:([\da-fA-F]{4})|\{([\da-fA-F]{1,6})\})/m) { $1 + [($2 || $3).hex].pack("U") })
|
81
|
+
# empty block. Everything happens in the gsub block
|
82
|
+
end
|
82
83
|
end
|
83
84
|
|
84
85
|
begin
|
data/lib/puppet/pops/pcore.rb
CHANGED
@@ -4,6 +4,7 @@ module Puppet::Pops
|
|
4
4
|
module Pcore
|
5
5
|
TYPE_URI_RX = Types::TypeFactory.regexp(URI.regexp)
|
6
6
|
TYPE_URI = Types::TypeFactory.pattern(TYPE_URI_RX)
|
7
|
+
TYPE_URI_ALIAS = Types::PTypeAliasType.new('Pcore::URI', nil, TYPE_URI)
|
7
8
|
TYPE_SIMPLE_TYPE_NAME = Types::TypeFactory.pattern(/\A[A-Z]\w*\z/)
|
8
9
|
TYPE_QUALIFIED_REFERENCE = Types::TypeFactory.pattern(/\A[A-Z][\w]*(?:::[A-Z][\w]*)*\z/)
|
9
10
|
|
@@ -11,30 +12,36 @@ module Pcore
|
|
11
12
|
KEY_PCORE_VERSION = 'pcore_version'.freeze
|
12
13
|
|
13
14
|
PCORE_URI = 'http://puppet.com/2016.1/pcore'
|
14
|
-
PCORE_VERSION =
|
15
|
-
PARSABLE_PCORE_VERSIONS =
|
15
|
+
PCORE_VERSION = SemanticPuppet::Version.new(1,0,0)
|
16
|
+
PARSABLE_PCORE_VERSIONS = SemanticPuppet::VersionRange.parse('1.x')
|
16
17
|
|
17
18
|
RUNTIME_NAME_AUTHORITY = 'http://puppet.com/2016.1/runtime'
|
18
19
|
|
19
|
-
def self.init(loader, ir)
|
20
|
+
def self.init(loader, ir, for_agent)
|
20
21
|
add_alias('Pcore::URI_RX', TYPE_URI_RX, loader)
|
21
|
-
|
22
|
+
add_type(TYPE_URI_ALIAS, loader)
|
22
23
|
add_alias('Pcore::SimpleTypeName', TYPE_SIMPLE_TYPE_NAME, loader)
|
23
24
|
add_alias('Pcore::TypeName', TYPE_QUALIFIED_REFERENCE, loader)
|
24
25
|
add_alias('Pcore::QRef', TYPE_QUALIFIED_REFERENCE, loader)
|
26
|
+
begin
|
25
27
|
Types::TypedModelObject.register_ptypes(loader, ir)
|
28
|
+
rescue Exception => e
|
29
|
+
puts e.message
|
30
|
+
end
|
26
31
|
|
27
32
|
ir.register_implementation_namespace('Pcore', 'Puppet::Pops::Pcore', loader)
|
28
|
-
|
29
|
-
|
33
|
+
unless for_agent
|
34
|
+
ir.register_implementation_namespace('Puppet::AST', 'Puppet::Pops::Model', loader)
|
35
|
+
ast_type_set = Serialization::RGen::TypeGenerator.new.generate_type_set('Puppet::AST', Puppet::Pops::Model, loader)
|
30
36
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
37
|
+
# Extend the Puppet::AST type set with the Locator (it's not an RGen class, but nevertheless, used in the model)
|
38
|
+
ast_ts_i12n = ast_type_set.i12n_hash
|
39
|
+
ast_ts_i12n['types'] = ast_ts_i12n['types'].merge('Locator' => Parser::Locator::Locator19.register_ptype(loader, ir))
|
40
|
+
add_type(Types::PTypeSetType.new(ast_ts_i12n), loader)
|
35
41
|
|
36
|
-
|
37
|
-
|
42
|
+
Resource.register_ptypes(loader, ir)
|
43
|
+
Lookup::Context.register_ptype(loader, ir);
|
44
|
+
end
|
38
45
|
end
|
39
46
|
|
40
47
|
# Create and register a new `Object` type in the Puppet Type System and map it to an implementation class
|
@@ -82,6 +89,8 @@ module Pcore
|
|
82
89
|
aliases.each do |name, type_string|
|
83
90
|
add_type(Types::PTypeAliasType.new(name, Types::TypeFactory.type_reference(type_string), nil), loader, name_authority)
|
84
91
|
end
|
92
|
+
parser = Types::TypeParser.singleton
|
93
|
+
aliases.each_key.map { |name| loader.load(:type, name.downcase).resolve(parser, loader) }
|
85
94
|
end
|
86
95
|
end
|
87
96
|
end
|
@@ -105,8 +105,12 @@ class AbstractReader
|
|
105
105
|
read_payload(data) { |ep| Extension::MapStart.new(ep.read) }
|
106
106
|
end
|
107
107
|
|
108
|
+
register_type(Extension::PCORE_OBJECT_START) do |data|
|
109
|
+
read_payload(data) { |ep| type_name = read_tpl_qname(ep); Extension::PcoreObjectStart.new(type_name, ep.read) }
|
110
|
+
end
|
111
|
+
|
108
112
|
register_type(Extension::OBJECT_START) do |data|
|
109
|
-
read_payload(data) { |ep|
|
113
|
+
read_payload(data) { |ep| Extension::ObjectStart.new(ep.read) }
|
110
114
|
end
|
111
115
|
|
112
116
|
register_type(Extension::DEFAULT) do |data|
|
@@ -117,12 +121,16 @@ class AbstractReader
|
|
117
121
|
read_payload(data) { |ep| Extension::Comment.new(ep.read) }
|
118
122
|
end
|
119
123
|
|
124
|
+
register_type(Extension::SENSITIVE_START) do |data|
|
125
|
+
read_payload(data) { |ep| Extension::SensitiveStart::INSTANCE }
|
126
|
+
end
|
127
|
+
|
120
128
|
register_type(Extension::REGEXP) do |data|
|
121
129
|
read_payload(data) { |ep| Regexp.new(ep.read) }
|
122
130
|
end
|
123
131
|
|
124
132
|
register_type(Extension::TYPE_REFERENCE) do |data|
|
125
|
-
read_payload(data) { |ep| Types::PTypeReferenceType.new(
|
133
|
+
read_payload(data) { |ep| Types::PTypeReferenceType.new(ep.read) }
|
126
134
|
end
|
127
135
|
|
128
136
|
register_type(Extension::SYMBOL) do |data|
|
@@ -146,19 +154,21 @@ class AbstractReader
|
|
146
154
|
end
|
147
155
|
|
148
156
|
register_type(Extension::VERSION) do |data|
|
149
|
-
read_payload(data) { |ep|
|
157
|
+
read_payload(data) { |ep| SemanticPuppet::Version.parse(ep.read) }
|
150
158
|
end
|
151
159
|
|
152
160
|
register_type(Extension::VERSION_RANGE) do |data|
|
153
|
-
read_payload(data) { |ep|
|
161
|
+
read_payload(data) { |ep| SemanticPuppet::VersionRange.parse(ep.read) }
|
154
162
|
end
|
155
163
|
|
156
|
-
register_type(Extension::
|
157
|
-
read_payload(data) { |ep| Types::
|
164
|
+
register_type(Extension::BASE64) do |data|
|
165
|
+
read_payload(data) { |ep| Types::PBinaryType::Binary.from_base64_strict(ep.read) }
|
158
166
|
end
|
159
167
|
|
160
168
|
register_type(Extension::BINARY) do |data|
|
161
|
-
|
169
|
+
# The Ruby MessagePack implementation have special treatment for "ASCII-8BIT" strings. They
|
170
|
+
# are written as binary data.
|
171
|
+
read_payload(data) { |ep| Types::PBinaryType::Binary.new(ep.read) }
|
162
172
|
end
|
163
173
|
end
|
164
174
|
end
|
@@ -45,6 +45,10 @@ class AbstractWriter
|
|
45
45
|
@packer.flush
|
46
46
|
end
|
47
47
|
|
48
|
+
def supports_binary?
|
49
|
+
false
|
50
|
+
end
|
51
|
+
|
48
52
|
# Write a value on the underlying stream
|
49
53
|
# @api public
|
50
54
|
def write(value)
|
@@ -53,7 +57,7 @@ class AbstractWriter
|
|
53
57
|
when Integer
|
54
58
|
# not tabulated, but integers larger than 64-bit cannot be allowed.
|
55
59
|
raise SerializationError, 'Integer out of bounds' if value > MAX_INTEGER || value < MIN_INTEGER
|
56
|
-
when Numeric, Symbol,
|
60
|
+
when Numeric, Symbol, Extension::NotTabulated, true, false, nil
|
57
61
|
# not tabulated
|
58
62
|
else
|
59
63
|
if @tabulate
|
@@ -134,10 +138,14 @@ class AbstractWriter
|
|
134
138
|
build_payload { |ep| ep.write(o.size) }
|
135
139
|
end
|
136
140
|
|
137
|
-
register_type(Extension::
|
141
|
+
register_type(Extension::PCORE_OBJECT_START, Extension::PcoreObjectStart) do |o|
|
138
142
|
build_payload { |ep| write_tpl_qname(ep, o.type_name); ep.write(o.attribute_count) }
|
139
143
|
end
|
140
144
|
|
145
|
+
register_type(Extension::OBJECT_START, Extension::ObjectStart) do |o|
|
146
|
+
build_payload { |ep| ep.write(o.attribute_count) }
|
147
|
+
end
|
148
|
+
|
141
149
|
# 0x20 - 0x2f reserved for special extension objects
|
142
150
|
|
143
151
|
register_type(Extension::DEFAULT, Extension::Default) do |o|
|
@@ -148,6 +156,10 @@ class AbstractWriter
|
|
148
156
|
build_payload { |ep| ep.write(o.comment) }
|
149
157
|
end
|
150
158
|
|
159
|
+
register_type(Extension::SENSITIVE_START, Extension::SensitiveStart) do |o|
|
160
|
+
build_payload { |ep| }
|
161
|
+
end
|
162
|
+
|
151
163
|
# 0x30 - 0x7f reserved for mapping of specific runtime classes
|
152
164
|
|
153
165
|
register_type(Extension::REGEXP, Regexp) do |o|
|
@@ -155,7 +167,7 @@ class AbstractWriter
|
|
155
167
|
end
|
156
168
|
|
157
169
|
register_type(Extension::TYPE_REFERENCE, Types::PTypeReferenceType) do |o|
|
158
|
-
build_payload { |ep|
|
170
|
+
build_payload { |ep| ep.write(o.type_string) }
|
159
171
|
end
|
160
172
|
|
161
173
|
register_type(Extension::SYMBOL, Symbol) do |o|
|
@@ -170,23 +182,26 @@ class AbstractWriter
|
|
170
182
|
build_payload { |ep| nsecs = o.nsecs; ep.write(nsecs / 1000000000); ep.write(nsecs % 1000000000) }
|
171
183
|
end
|
172
184
|
|
173
|
-
register_type(Extension::VERSION,
|
185
|
+
register_type(Extension::VERSION, SemanticPuppet::Version) do |o|
|
174
186
|
build_payload { |ep| ep.write(o.to_s) }
|
175
187
|
end
|
176
188
|
|
177
|
-
register_type(Extension::VERSION_RANGE,
|
189
|
+
register_type(Extension::VERSION_RANGE, SemanticPuppet::VersionRange) do |o|
|
178
190
|
build_payload { |ep| ep.write(o.to_s) }
|
179
191
|
end
|
180
192
|
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
193
|
+
if supports_binary?
|
194
|
+
register_type(Extension::BINARY, Types::PBinaryType::Binary) do |o|
|
195
|
+
# The Ruby MessagePack implementation has special treatment for "ASCII-8BIT" strings. They
|
196
|
+
# are written as binary data.
|
197
|
+
build_payload { |ep| ep.write(o.binary_buffer) }
|
198
|
+
end
|
199
|
+
else
|
200
|
+
register_type(Extension::BASE64, Types::PBinaryType::Binary) do |o|
|
201
|
+
build_payload { |ep| ep.write(o.to_s) }
|
202
|
+
end
|
187
203
|
end
|
188
204
|
end
|
189
205
|
end
|
190
206
|
end
|
191
207
|
end
|
192
|
-
|
@@ -8,7 +8,7 @@ module Serialization
|
|
8
8
|
class Deserializer
|
9
9
|
# Provides access to the reader.
|
10
10
|
# @api private
|
11
|
-
attr_reader :reader
|
11
|
+
attr_reader :reader, :loader
|
12
12
|
|
13
13
|
# @param [AbstractReader] reader the reader used when reading primitive objects from a stream
|
14
14
|
# @param [Loader::Loader] loader the loader used when resolving names of types
|
@@ -38,12 +38,25 @@ module Serialization
|
|
38
38
|
result = remember({})
|
39
39
|
val.size.times { key = read; result[key] = read }
|
40
40
|
result
|
41
|
-
when Extension::
|
41
|
+
when Extension::SensitiveStart
|
42
|
+
Types::PSensitiveType::Sensitive.new(read)
|
43
|
+
when Extension::PcoreObjectStart
|
42
44
|
type_name = val.type_name
|
43
45
|
type = Types::TypeParser.singleton.parse(type_name, @loader)
|
44
46
|
raise SerializationError, "No implementation mapping found for Puppet Type #{type_name}" if type.is_a?(Types::PTypeReferenceType)
|
45
|
-
type.read(val.attribute_count, self)
|
46
|
-
|
47
|
+
result = type.read(val.attribute_count, self)
|
48
|
+
if result.is_a?(Types::PObjectType)
|
49
|
+
existing_type = loader.load(:type, result.name)
|
50
|
+
|
51
|
+
# Add result to the loader unless it is the exact same instance as the existing_type. The add
|
52
|
+
# will succeed when the existing_type is nil.
|
53
|
+
loader.add_entry(:type, result.name, result, nil) unless result.equal?(existing_type)
|
54
|
+
end
|
55
|
+
result
|
56
|
+
when Extension::ObjectStart
|
57
|
+
type = read
|
58
|
+
type.read(val.attribute_count - 1, self)
|
59
|
+
when Numeric, String, true, false, nil
|
47
60
|
val
|
48
61
|
else
|
49
62
|
remember(val)
|
@@ -12,7 +12,9 @@ module Extension
|
|
12
12
|
# 0x10 - 0x1F are reserved for structural extensions
|
13
13
|
ARRAY_START = 0x10
|
14
14
|
MAP_START = 0x11
|
15
|
-
|
15
|
+
PCORE_OBJECT_START = 0x12
|
16
|
+
OBJECT_START = 0x13
|
17
|
+
SENSITIVE_START = 0x14
|
16
18
|
|
17
19
|
# 0x20 - 0x2f reserved for special extension objects
|
18
20
|
DEFAULT = 0x20
|
@@ -26,13 +28,13 @@ module Extension
|
|
26
28
|
TIMESPAN = 0x34
|
27
29
|
VERSION = 0x35
|
28
30
|
VERSION_RANGE = 0x36
|
29
|
-
|
30
|
-
|
31
|
+
BINARY = 0x37
|
32
|
+
BASE64 = 0x38
|
31
33
|
|
32
34
|
# Marker module indicating whether or not an instance is tabulated or not
|
33
35
|
module NotTabulated; end
|
34
36
|
|
35
|
-
# Marker module for objects that starts a sequence, i.e. ArrayStart, MapStart, and
|
37
|
+
# Marker module for objects that starts a sequence, i.e. ArrayStart, MapStart, and PcoreObjectStart
|
36
38
|
module SequenceStart; end
|
37
39
|
|
38
40
|
# The class that triggers the use of the DEFAULT extension. It doesn't have any payload
|
@@ -83,9 +85,15 @@ module Extension
|
|
83
85
|
end
|
84
86
|
end
|
85
87
|
|
86
|
-
# The class that triggers the use of the
|
87
|
-
|
88
|
-
|
88
|
+
# The class that triggers the use of the SENSITIVE_START extension. It has no payload
|
89
|
+
class SensitiveStart
|
90
|
+
include NotTabulated
|
91
|
+
INSTANCE = SensitiveStart.new
|
92
|
+
end
|
93
|
+
|
94
|
+
# The class that triggers the use of the PCORE_OBJECT_START extension. The payload is the name of the object type
|
95
|
+
# and the number of attributes in the instance.
|
96
|
+
class PcoreObjectStart
|
89
97
|
include SequenceStart
|
90
98
|
attr_reader :type_name, :attribute_count
|
91
99
|
def initialize(type_name, attribute_count)
|
@@ -98,7 +106,28 @@ module Extension
|
|
98
106
|
end
|
99
107
|
|
100
108
|
def eql?(o)
|
101
|
-
o.is_a?(
|
109
|
+
o.is_a?(PcoreObjectStart) && o.type_name == @type_name && o.attribute_count == @attribute_count
|
110
|
+
end
|
111
|
+
alias == eql?
|
112
|
+
|
113
|
+
def sequence_size
|
114
|
+
@attribute_count
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
class ObjectStart
|
119
|
+
include SequenceStart
|
120
|
+
attr_reader :attribute_count
|
121
|
+
def initialize(attribute_count)
|
122
|
+
@attribute_count = attribute_count
|
123
|
+
end
|
124
|
+
|
125
|
+
def hash
|
126
|
+
attribute_count.hash
|
127
|
+
end
|
128
|
+
|
129
|
+
def eql?(o)
|
130
|
+
o.is_a?(ObjectStart) && o.attribute_count == @attribute_count
|
102
131
|
end
|
103
132
|
alias == eql?
|
104
133
|
|
@@ -11,10 +11,10 @@ class ObjectReader
|
|
11
11
|
|
12
12
|
def read(impl_class, value_count, deserializer)
|
13
13
|
type = impl_class._ptype
|
14
|
-
(names, types, required_count) = type.parameter_info
|
14
|
+
(names, types, required_count) = type.parameter_info(impl_class)
|
15
15
|
max = names.size
|
16
16
|
unless value_count >= required_count && value_count <= max
|
17
|
-
raise Serialization::SerializationError, "Feature count mismatch for #{impl_class.name}. Expected #{
|
17
|
+
raise Serialization::SerializationError, "Feature count mismatch for #{impl_class.name}. Expected #{required_count} - #{max}, actual #{value_count}"
|
18
18
|
end
|
19
19
|
# Deserializer must know about this instance before we read its attributes
|
20
20
|
val = deserializer.remember(impl_class.allocate)
|
@@ -43,16 +43,24 @@ class ObjectWriter
|
|
43
43
|
|
44
44
|
def write(type, value, serializer)
|
45
45
|
impl_class = value.class
|
46
|
-
(names, types, required_count) = type.parameter_info(true)
|
46
|
+
(names, types, required_count) = type.parameter_info(impl_class, true)
|
47
47
|
args = names.map { |name| value.send(name) }
|
48
48
|
|
49
|
-
# Pop optional arguments that are
|
49
|
+
# Pop optional arguments that are default
|
50
50
|
while args.size > required_count
|
51
|
-
break unless args.last.
|
51
|
+
break unless args.last == type[names[args.size-1]].value
|
52
52
|
args.pop
|
53
53
|
end
|
54
54
|
|
55
|
-
|
55
|
+
if type.name.start_with?('Pcore::')
|
56
|
+
serializer.push_written(value)
|
57
|
+
serializer.start_pcore_object(type.name, args.size)
|
58
|
+
else
|
59
|
+
serializer.start_object(args.size + 1)
|
60
|
+
serializer.write(type)
|
61
|
+
serializer.push_written(value)
|
62
|
+
end
|
63
|
+
|
56
64
|
args.each { |arg| serializer.write(arg) }
|
57
65
|
end
|
58
66
|
|
@@ -37,7 +37,8 @@ module RGen
|
|
37
37
|
def write(type, value, serializer)
|
38
38
|
impl_class = value.class
|
39
39
|
features = features(impl_class)
|
40
|
-
serializer.
|
40
|
+
serializer.push_written(value)
|
41
|
+
serializer.start_pcore_object(type.name, features.size)
|
41
42
|
features.each { |feature| serializer.write(value.getGeneric(feature.name)) }
|
42
43
|
end
|
43
44
|
|
@@ -28,7 +28,7 @@ module Serialization
|
|
28
28
|
# @api public
|
29
29
|
def write(value)
|
30
30
|
case value
|
31
|
-
when Integer, Float, String, true, false, nil
|
31
|
+
when Integer, Float, String, true, false, nil
|
32
32
|
@writer.write(value)
|
33
33
|
when :default
|
34
34
|
@writer.write(Extension::Default::INSTANCE)
|
@@ -37,7 +37,7 @@ module Serialization
|
|
37
37
|
if index.nil?
|
38
38
|
write_tabulated_first_time(value)
|
39
39
|
else
|
40
|
-
@writer.write(Extension::Tabulation.new(index))
|
40
|
+
@writer.write(Extension::Tabulation.new(index))
|
41
41
|
end
|
42
42
|
end
|
43
43
|
end
|
@@ -56,12 +56,29 @@ module Serialization
|
|
56
56
|
@writer.write(Extension::MapStart.new(size))
|
57
57
|
end
|
58
58
|
|
59
|
-
# Write the start of a complex object
|
59
|
+
# Write the start of a complex pcore object
|
60
60
|
# @param [String] type_ref the name of the type
|
61
61
|
# @param [Integer] attr_count the number of attributes in the object
|
62
62
|
# @api private
|
63
|
-
def
|
64
|
-
@writer.write(Extension::
|
63
|
+
def start_pcore_object(type_ref, attr_count)
|
64
|
+
@writer.write(Extension::PcoreObjectStart.new(type_ref, attr_count))
|
65
|
+
end
|
66
|
+
|
67
|
+
# Write the start of a complex object
|
68
|
+
# @param [Integer] attr_count the number of attributes in the object
|
69
|
+
# @api private
|
70
|
+
def start_object(attr_count)
|
71
|
+
@writer.write(Extension::ObjectStart.new(attr_count))
|
72
|
+
end
|
73
|
+
|
74
|
+
def push_written(value)
|
75
|
+
@written[value.object_id] = @written.size
|
76
|
+
end
|
77
|
+
|
78
|
+
# Write the start of a sensitive object
|
79
|
+
# @api private
|
80
|
+
def start_sensitive
|
81
|
+
@writer.write(Extension::SensitiveStart::INSTANCE)
|
65
82
|
end
|
66
83
|
|
67
84
|
# First time write of a tabulated object. This means that the object is written and then remembered. Subsequent writes
|
@@ -69,17 +86,23 @@ module Serialization
|
|
69
86
|
# @param [Object] value the value to write
|
70
87
|
# @api private
|
71
88
|
def write_tabulated_first_time(value)
|
72
|
-
@written[value.object_id] = @written.size
|
73
89
|
case value
|
74
|
-
when Symbol, Regexp,
|
90
|
+
when Symbol, Regexp, SemanticPuppet::Version, SemanticPuppet::VersionRange, Time::Timestamp, Time::Timespan, Types::PBinaryType::Binary
|
91
|
+
push_written(value)
|
75
92
|
@writer.write(value)
|
76
93
|
when Array
|
94
|
+
push_written(value)
|
77
95
|
start_array(value.size)
|
78
96
|
value.each { |elem| write(elem) }
|
79
97
|
when Hash
|
98
|
+
push_written(value)
|
80
99
|
start_map(value.size)
|
81
100
|
value.each_pair { |key, val| write(key); write(val) }
|
101
|
+
when Types::PSensitiveType::Sensitive
|
102
|
+
start_sensitive
|
103
|
+
write(value.unwrap)
|
82
104
|
when Types::PTypeReferenceType
|
105
|
+
push_written(value)
|
83
106
|
@writer.write(value)
|
84
107
|
when Types::PuppetObject
|
85
108
|
value._ptype.write(value, self)
|
@@ -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
|