puppet 4.8.2-x64-mingw32 → 4.9.0-x64-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
| @@ -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)
         |