puppet 4.8.2 → 4.9.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- checksums.yaml +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 -2593
- 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
@@ -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)
|