puppet 4.5.3-universal-darwin → 4.6.1-universal-darwin
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/Gemfile +10 -1
- data/ext/debian/control +2 -4
- data/ext/project_data.yaml +4 -4
- data/install.rb +6 -2
- data/lib/puppet.rb +3 -1
- data/lib/puppet/agent/locker.rb +1 -1
- data/lib/puppet/application.rb +6 -4
- data/lib/puppet/application/agent.rb +2 -1
- data/lib/puppet/application/cert.rb +35 -2
- data/lib/puppet/application/device.rb +1 -1
- data/lib/puppet/application/generate.rb +5 -0
- data/lib/puppet/application/lookup.rb +3 -3
- data/lib/puppet/application_support.rb +1 -1
- data/lib/puppet/compilable_resource_type.rb +15 -0
- data/lib/puppet/configurer.rb +67 -10
- data/lib/puppet/configurer/plugin_handler.rb +2 -4
- data/lib/puppet/data_providers/hiera_config.rb +1 -1
- data/lib/puppet/defaults.rb +34 -7
- data/lib/puppet/environments.rb +4 -2
- data/lib/puppet/error.rb +1 -1
- data/lib/puppet/external/dot.rb +1 -1
- data/lib/puppet/face/ca.rb +4 -1
- data/lib/puppet/face/certificate.rb +7 -1
- data/lib/puppet/face/epp.rb +5 -5
- data/lib/puppet/face/generate.rb +64 -0
- data/lib/puppet/face/help.rb +19 -13
- data/lib/puppet/face/man.rb +1 -1
- data/lib/puppet/feature/external_facts.rb +1 -1
- data/lib/puppet/file_system.rb +16 -0
- data/lib/puppet/file_system/file_impl.rb +5 -0
- data/lib/puppet/file_system/memory_impl.rb +4 -0
- data/lib/puppet/file_system/path_pattern.rb +1 -0
- data/lib/puppet/file_system/windows.rb +19 -0
- data/lib/puppet/functions.rb +3 -5
- data/lib/puppet/functions/assert_type.rb +1 -1
- data/lib/puppet/functions/defined.rb +7 -5
- data/lib/puppet/functions/dig.rb +2 -18
- data/lib/puppet/functions/hiera.rb +1 -1
- data/lib/puppet/functions/lest.rb +1 -37
- data/lib/puppet/functions/new.rb +2 -473
- data/lib/puppet/functions/reverse_each.rb +2 -59
- data/lib/puppet/functions/scanf.rb +4 -4
- data/lib/puppet/functions/step.rb +1 -63
- data/lib/puppet/functions/then.rb +1 -61
- data/lib/puppet/functions/type.rb +1 -40
- data/lib/puppet/functions/unwrap.rb +40 -0
- data/lib/puppet/generate/models/type/property.rb +70 -0
- data/lib/puppet/generate/models/type/type.rb +57 -0
- data/lib/puppet/generate/templates/type/pcore.erb +41 -0
- data/lib/puppet/generate/type.rb +239 -0
- data/lib/puppet/graph/simple_graph.rb +2 -6
- data/lib/puppet/indirector/catalog/static_compiler.rb +5 -2
- data/lib/puppet/indirector/facts/facter.rb +1 -1
- data/lib/puppet/indirector/key/ca.rb +2 -2
- data/lib/puppet/indirector/request.rb +25 -4
- data/lib/puppet/indirector/rest.rb +73 -3
- data/lib/puppet/info_service/class_information_service.rb +1 -2
- data/lib/puppet/interface/documentation.rb +1 -1
- data/lib/puppet/loaders.rb +2 -0
- data/lib/puppet/metatype/manager.rb +6 -6
- data/lib/puppet/module.rb +8 -1
- data/lib/puppet/module_tool.rb +2 -2
- data/lib/puppet/module_tool/checksums.rb +1 -1
- data/lib/puppet/module_tool/errors/installer.rb +2 -2
- data/lib/puppet/module_tool/metadata.rb +1 -1
- data/lib/puppet/network/http/api/indirected_routes.rb +23 -32
- data/lib/puppet/network/http/rack/rest.rb +15 -1
- data/lib/puppet/network/rights.rb +1 -11
- data/lib/puppet/node/environment.rb +7 -3
- data/lib/puppet/node/facts.rb +1 -1
- data/lib/puppet/parameter.rb +23 -3
- data/lib/puppet/parameter/boolean.rb +1 -1
- data/lib/puppet/parameter/value.rb +1 -1
- data/lib/puppet/parser.rb +0 -1
- data/lib/puppet/parser/ast/pops_bridge.rb +1 -1
- data/lib/puppet/parser/ast/resource.rb +5 -0
- data/lib/puppet/parser/ast/resource_instance.rb +5 -1
- data/lib/puppet/parser/ast/resourceparam.rb +5 -0
- data/lib/puppet/parser/compiler.rb +14 -17
- data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +1 -1
- data/lib/puppet/parser/environment_compiler.rb +10 -0
- data/lib/puppet/parser/functions/create_resources.rb +39 -24
- data/lib/puppet/parser/functions/defined.rb +2 -26
- data/lib/puppet/parser/functions/dig.rb +29 -0
- data/lib/puppet/parser/functions/lest.rb +49 -0
- data/lib/puppet/parser/functions/new.rb +530 -0
- data/lib/puppet/parser/functions/require.rb +1 -1
- data/lib/puppet/parser/functions/reverse_each.rb +83 -0
- data/lib/puppet/parser/functions/scanf.rb +4 -4
- data/lib/puppet/parser/functions/step.rb +84 -0
- data/lib/puppet/parser/functions/then.rb +73 -0
- data/lib/puppet/parser/functions/type.rb +53 -0
- data/lib/puppet/parser/resource.rb +16 -7
- data/lib/puppet/parser/scope.rb +36 -28
- data/lib/puppet/parser/type_loader.rb +1 -1
- data/lib/puppet/plugins/data_providers/data_provider.rb +1 -1
- data/lib/puppet/pops.rb +13 -0
- data/lib/puppet/pops/adapters.rb +49 -49
- data/lib/puppet/pops/binder/scheme_handler/confdir_scheme.rb +1 -1
- data/lib/puppet/pops/evaluator/access_operator.rb +39 -2
- data/lib/puppet/pops/evaluator/closure.rb +39 -13
- data/lib/puppet/pops/evaluator/collector_transformer.rb +10 -1
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +16 -11
- data/lib/puppet/pops/evaluator/external_syntax_support.rb +1 -1
- data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +0 -1
- data/lib/puppet/pops/evaluator/literal_evaluator.rb +0 -1
- data/lib/puppet/pops/evaluator/relationship_operator.rb +1 -2
- data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +119 -0
- data/lib/puppet/pops/evaluator/runtime3_support.rb +19 -45
- data/lib/puppet/pops/functions/function.rb +5 -0
- data/lib/puppet/pops/issues.rb +1 -1
- data/lib/puppet/pops/label_provider.rb +2 -2
- data/lib/puppet/pops/loader/base_loader.rb +12 -15
- data/lib/puppet/pops/loader/loader.rb +15 -50
- data/lib/puppet/pops/loader/loader_paths.rb +28 -2
- data/lib/puppet/pops/loader/module_loaders.rb +16 -1
- data/lib/puppet/pops/loader/null_loader.rb +17 -1
- data/lib/puppet/pops/loader/puppet_function_instantiator.rb +12 -11
- data/lib/puppet/pops/loader/puppet_resource_type_impl_instantiator.rb +80 -0
- data/lib/puppet/pops/loader/ruby_function_instantiator.rb +2 -3
- data/lib/puppet/pops/loader/runtime3_type_loader.rb +52 -13
- data/lib/puppet/pops/loader/static_loader.rb +55 -0
- data/lib/puppet/pops/loader/type_definition_instantiator.rb +30 -14
- data/lib/puppet/pops/loader/typed_name.rb +50 -0
- data/lib/puppet/pops/loaders.rb +64 -19
- data/lib/puppet/pops/merge_strategy.rb +7 -7
- data/lib/puppet/pops/migration/migration_checker.rb +4 -0
- data/lib/puppet/pops/model/model_label_provider.rb +2 -0
- data/lib/puppet/pops/parser/egrammar.ra +8 -5
- data/lib/puppet/pops/parser/eparser.rb +1550 -1498
- data/lib/puppet/pops/parser/evaluating_parser.rb +1 -1
- data/lib/puppet/pops/parser/interpolation_support.rb +7 -0
- data/lib/puppet/pops/parser/lexer2.rb +14 -1
- data/lib/puppet/pops/parser/locator.rb +30 -1
- data/lib/puppet/pops/parser/parser_support.rb +0 -3
- data/lib/puppet/pops/parser/slurp_support.rb +3 -3
- data/lib/puppet/pops/patterns.rb +9 -1
- data/lib/puppet/pops/pcore.rb +67 -11
- data/lib/puppet/pops/puppet_stack.rb +43 -0
- data/lib/puppet/pops/resource/param.rb +51 -0
- data/lib/puppet/pops/resource/resource_type_impl.rb +301 -0
- data/lib/puppet/pops/resource/resource_type_set.pcore +21 -0
- data/lib/puppet/pops/serialization.rb +17 -0
- data/lib/puppet/pops/serialization/abstract_reader.rb +149 -0
- data/lib/puppet/pops/serialization/abstract_writer.rb +179 -0
- data/lib/puppet/pops/serialization/deserializer.rb +60 -0
- data/lib/puppet/pops/serialization/extension.rb +126 -0
- data/lib/puppet/pops/serialization/instance_reader.rb +19 -0
- data/lib/puppet/pops/serialization/instance_writer.rb +14 -0
- data/lib/puppet/pops/serialization/json.rb +247 -0
- data/lib/puppet/pops/serialization/object.rb +63 -0
- data/lib/puppet/pops/serialization/rgen.rb +151 -0
- data/lib/puppet/pops/serialization/serializer.rb +91 -0
- data/lib/puppet/pops/serialization/time_factory.rb +66 -0
- data/lib/puppet/pops/types/annotatable.rb +36 -0
- data/lib/puppet/pops/types/implementation_registry.rb +3 -8
- data/lib/puppet/pops/types/p_meta_type.rb +83 -0
- data/lib/puppet/pops/types/p_object_type.rb +110 -117
- data/lib/puppet/pops/types/p_runtime_type.rb +13 -0
- data/lib/puppet/pops/types/p_sem_ver_range_type.rb +23 -0
- data/lib/puppet/pops/types/p_sem_ver_type.rb +30 -2
- data/lib/puppet/pops/types/p_sensitive_type.rb +69 -0
- data/lib/puppet/pops/types/p_type_set_type.rb +361 -0
- data/lib/puppet/pops/types/puppet_object.rb +0 -5
- data/lib/puppet/pops/types/ruby_generator.rb +9 -2
- data/lib/puppet/pops/types/type_calculator.rb +6 -1
- data/lib/puppet/pops/types/type_factory.rb +14 -12
- data/lib/puppet/pops/types/type_formatter.rb +78 -33
- data/lib/puppet/pops/types/type_mismatch_describer.rb +0 -2
- data/lib/puppet/pops/types/type_parser.rb +27 -2
- data/lib/puppet/pops/types/type_set_reference.rb +59 -0
- data/lib/puppet/pops/types/types.rb +366 -13
- data/lib/puppet/pops/validation.rb +4 -4
- data/lib/puppet/pops/validation/checker4_0.rb +5 -2
- data/lib/puppet/pops/visitor.rb +2 -2
- data/lib/puppet/property.rb +64 -5
- data/lib/puppet/provider.rb +1 -1
- data/lib/puppet/provider/aixobject.rb +3 -3
- data/lib/puppet/provider/group/aix.rb +4 -4
- data/lib/puppet/provider/macauthorization/macauthorization.rb +1 -1
- data/lib/puppet/provider/mailalias/aliases.rb +1 -1
- data/lib/puppet/provider/mcx/mcxcontent.rb +2 -2
- data/lib/puppet/provider/mount/parsed.rb +1 -1
- data/lib/puppet/provider/nameservice/directoryservice.rb +5 -5
- data/lib/puppet/provider/package/appdmg.rb +3 -3
- data/lib/puppet/provider/package/apple.rb +1 -1
- data/lib/puppet/provider/package/dnf.rb +5 -0
- data/lib/puppet/provider/package/nim.rb +1 -1
- data/lib/puppet/provider/package/pacman.rb +2 -2
- data/lib/puppet/provider/package/pip.rb +5 -3
- data/lib/puppet/provider/package/pip3.rb +1 -1
- data/lib/puppet/provider/package/pkg.rb +5 -5
- data/lib/puppet/provider/package/pkgdmg.rb +4 -4
- data/lib/puppet/provider/package/pkgin.rb +1 -1
- data/lib/puppet/provider/package/pkgutil.rb +1 -1
- data/lib/puppet/provider/package/portage.rb +48 -8
- data/lib/puppet/provider/package/sun.rb +1 -1
- data/lib/puppet/provider/package/tdnf.rb +28 -0
- data/lib/puppet/provider/package/yum.rb +22 -4
- data/lib/puppet/provider/parsedfile.rb +2 -2
- data/lib/puppet/provider/service/base.rb +1 -1
- data/lib/puppet/provider/service/bsd.rb +1 -1
- data/lib/puppet/provider/service/daemontools.rb +2 -2
- data/lib/puppet/provider/service/debian.rb +3 -3
- data/lib/puppet/provider/service/init.rb +5 -3
- data/lib/puppet/provider/service/launchd.rb +16 -2
- data/lib/puppet/provider/service/runit.rb +1 -1
- data/lib/puppet/provider/service/smf.rb +8 -1
- data/lib/puppet/provider/service/systemd.rb +39 -6
- data/lib/puppet/provider/ssh_authorized_key/parsed.rb +1 -1
- data/lib/puppet/provider/user/aix.rb +3 -2
- data/lib/puppet/provider/user/directoryservice.rb +4 -3
- data/lib/puppet/provider/user/hpux.rb +1 -1
- data/lib/puppet/provider/user/user_role_add.rb +1 -1
- data/lib/puppet/provider/user/windows_adsi.rb +3 -0
- data/lib/puppet/provider/zfs/zfs.rb +1 -1
- data/lib/puppet/reference/type.rb +1 -1
- data/lib/puppet/resource.rb +33 -7
- data/lib/puppet/resource/capability_finder.rb +74 -54
- data/lib/puppet/resource/status.rb +11 -2
- data/lib/puppet/settings.rb +17 -6
- data/lib/puppet/settings/environment_conf.rb +1 -1
- data/lib/puppet/settings/server_list_setting.rb +20 -0
- data/lib/puppet/ssl/certificate_authority.rb +32 -9
- data/lib/puppet/ssl/certificate_authority/interface.rb +164 -24
- data/lib/puppet/ssl/host.rb +3 -3
- data/lib/puppet/ssl/oids.rb +10 -0
- data/lib/puppet/ssl/validator/default_validator.rb +2 -2
- data/lib/puppet/test/test_helper.rb +2 -2
- data/lib/puppet/transaction.rb +12 -0
- data/lib/puppet/transaction/additional_resource_generator.rb +1 -1
- data/lib/puppet/transaction/event.rb +29 -2
- data/lib/puppet/transaction/event_manager.rb +1 -1
- data/lib/puppet/transaction/persistence.rb +84 -0
- data/lib/puppet/transaction/report.rb +49 -2
- data/lib/puppet/transaction/resource_harness.rb +98 -18
- data/lib/puppet/type.rb +63 -21
- data/lib/puppet/type/augeas.rb +3 -3
- data/lib/puppet/type/cron.rb +1 -1
- data/lib/puppet/type/file.rb +39 -2
- data/lib/puppet/type/file/data_sync.rb +13 -5
- data/lib/puppet/type/host.rb +1 -1
- data/lib/puppet/type/mount.rb +2 -6
- data/lib/puppet/type/notify.rb +1 -1
- data/lib/puppet/type/package.rb +1 -1
- data/lib/puppet/type/resources.rb +1 -1
- data/lib/puppet/type/scheduled_task.rb +1 -1
- data/lib/puppet/type/ssh_authorized_key.rb +2 -2
- data/lib/puppet/type/tidy.rb +1 -1
- data/lib/puppet/type/yumrepo.rb +3 -3
- data/lib/puppet/type/zone.rb +1 -1
- data/lib/puppet/util.rb +2 -2
- data/lib/puppet/util/classgen.rb +1 -1
- data/lib/puppet/util/command_line.rb +6 -2
- data/lib/puppet/util/command_line/trollop.rb +1 -1
- data/lib/puppet/util/execution.rb +2 -2
- data/lib/puppet/util/http_proxy.rb +1 -1
- data/lib/puppet/util/inifile.rb +1 -1
- data/lib/puppet/util/instance_loader.rb +1 -1
- data/lib/puppet/util/logging.rb +1 -1
- data/lib/puppet/util/multi_match.rb +1 -1
- data/lib/puppet/util/plist.rb +15 -5
- data/lib/puppet/util/profiler.rb +1 -1
- data/lib/puppet/util/profiler/around_profiler.rb +1 -1
- data/lib/puppet/util/psych_support.rb +1 -1
- data/lib/puppet/util/rdoc.rb +2 -2
- data/lib/puppet/util/rubygems.rb +1 -1
- data/lib/puppet/util/watcher/periodic_watcher.rb +2 -2
- data/lib/puppet/util/windows/access_control_entry.rb +1 -1
- data/lib/puppet/util/windows/adsi.rb +30 -8
- data/lib/puppet/util/windows/api_types.rb +1 -1
- data/lib/puppet/util/windows/file.rb +59 -0
- data/lib/puppet/util/windows/process.rb +10 -0
- data/lib/puppet/util/windows/security.rb +1 -1
- data/lib/puppet/util/windows/user.rb +22 -4
- data/lib/puppet/util/yaml.rb +15 -3
- data/lib/puppet/vendor/deep_merge/test/test_deep_merge.rb +1 -1
- data/lib/puppet/vendor/rgen_patch.rb +1 -1
- data/lib/puppet/version.rb +2 -2
- data/spec/fixtures/unit/pops/loaders/loaders/no_modules/manifests/site.pp +10 -0
- data/spec/integration/agent/logging_spec.rb +15 -14
- data/spec/integration/application/apply_spec.rb +1 -0
- data/spec/integration/directory_environments_spec.rb +16 -0
- data/spec/integration/environments/settings_spec.rb +32 -4
- data/spec/integration/faces/documentation_spec.rb +1 -1
- data/spec/integration/network/http/api/indirected_routes_spec.rb +33 -0
- data/spec/integration/node/environment_spec.rb +21 -0
- data/spec/integration/parser/collection_spec.rb +10 -0
- data/spec/integration/parser/compiler_spec.rb +76 -840
- data/spec/integration/parser/functions/require_spec.rb +3 -3
- data/spec/integration/parser/parameter_defaults_spec.rb +6 -2
- data/spec/integration/parser/pcore_resource_spec.rb +208 -0
- data/spec/integration/parser/resource_expressions_spec.rb +4 -2
- data/spec/integration/provider/yumrepo_spec.rb +4 -1
- data/spec/integration/transaction/report_spec.rb +666 -0
- data/spec/integration/type/file_spec.rb +11 -12
- data/spec/integration/util/windows/adsi_spec.rb +99 -0
- data/spec/integration/util/windows/principal_spec.rb +109 -60
- data/spec/integration/util/windows/process_spec.rb +4 -2
- data/spec/integration/util/windows/security_spec.rb +34 -8
- data/spec/integration/util/windows/user_spec.rb +26 -4
- data/spec/lib/puppet_spec/files.rb +2 -2
- data/spec/lib/puppet_spec/network.rb +12 -8
- data/spec/shared_examples/rhel_package_provider.rb +341 -0
- data/spec/spec_helper.rb +8 -2
- data/spec/unit/application/cert_spec.rb +20 -0
- data/spec/unit/configurer/plugin_handler_spec.rb +0 -26
- data/spec/unit/configurer_spec.rb +46 -0
- data/spec/unit/defaults_spec.rb +14 -0
- data/spec/unit/face/generate_spec.rb +230 -0
- data/spec/unit/face/help_spec.rb +53 -0
- data/spec/unit/face/parser_spec.rb +6 -0
- data/spec/unit/face/plugin_spec.rb +0 -4
- data/spec/unit/file_system_spec.rb +85 -0
- data/spec/unit/functions/lookup_spec.rb +4 -4
- data/spec/unit/functions/match_spec.rb +2 -2
- data/spec/unit/functions/regsubst_spec.rb +1 -1
- data/spec/unit/functions/split_spec.rb +1 -1
- data/spec/unit/functions/unwrap_spec.rb +29 -0
- data/spec/unit/functions/versioncmp_spec.rb +1 -1
- data/spec/unit/functions4_spec.rb +8 -8
- data/spec/unit/indirector/facts/facter_spec.rb +1 -9
- data/spec/unit/indirector/rest_spec.rb +95 -9
- data/spec/unit/module_spec.rb +43 -7
- data/spec/unit/module_tool/applications/installer_spec.rb +10 -1
- data/spec/unit/module_tool/applications/unpacker_spec.rb +2 -1
- data/spec/unit/module_tool/applications/upgrader_spec.rb +8 -0
- data/spec/unit/module_tool/tar/mini_spec.rb +3 -3
- data/spec/unit/network/http/api/indirected_routes_spec.rb +49 -58
- data/spec/unit/network/http/api/master/v3_spec.rb +7 -4
- data/spec/unit/network/rights_spec.rb +1 -1
- data/spec/unit/parameter_spec.rb +11 -0
- data/spec/unit/parser/compiler_spec.rb +19 -33
- data/spec/unit/{appmgmt_spec.rb → parser/environment_compiler_spec.rb} +12 -1
- data/spec/unit/parser/functions/create_resources_spec.rb +76 -4
- data/spec/unit/parser/functions/require_spec.rb +2 -2
- data/spec/unit/parser/resource_spec.rb +21 -11
- data/spec/unit/parser/scope_spec.rb +1 -5
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +1 -1
- data/spec/unit/pops/loaders/dependency_loader_spec.rb +1 -1
- data/spec/unit/pops/loaders/loader_paths_spec.rb +1 -1
- data/spec/unit/pops/loaders/loaders_spec.rb +63 -5
- data/spec/unit/pops/loaders/module_loaders_spec.rb +2 -2
- data/spec/unit/pops/loaders/static_loader_spec.rb +1 -1
- data/spec/unit/pops/parser/lexer2_spec.rb +27 -3
- data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +8 -0
- data/spec/unit/pops/parser/parse_calls_spec.rb +9 -0
- data/spec/unit/pops/puppet_stack_spec.rb +79 -0
- data/spec/unit/pops/resource/resource_type_impl_spec.rb +37 -0
- data/spec/unit/pops/serialization/packer_spec.rb +153 -0
- data/spec/unit/pops/serialization/rgen_spec.rb +88 -0
- data/spec/unit/pops/serialization/serialization_spec.rb +228 -0
- data/spec/unit/pops/types/p_object_type_spec.rb +44 -2
- data/spec/unit/pops/types/p_sem_ver_type_spec.rb +42 -0
- data/spec/unit/pops/types/p_sensitive_type_spec.rb +139 -0
- data/spec/unit/pops/types/p_type_set_type_spec.rb +424 -0
- data/spec/unit/pops/types/ruby_generator_spec.rb +497 -181
- data/spec/unit/pops/types/type_calculator_spec.rb +10 -4
- data/spec/unit/pops/types/type_formatter_spec.rb +1 -1
- data/spec/unit/pops/types/type_mismatch_describer_spec.rb +2 -2
- data/spec/unit/pops/types/type_parser_spec.rb +1 -1
- data/spec/unit/pops/types/types_spec.rb +1 -1
- data/spec/unit/pops/validator/validator_spec.rb +18 -1
- data/spec/unit/property_spec.rb +48 -11
- data/spec/unit/provider/group/windows_adsi_spec.rb +11 -1
- data/spec/unit/provider/package/dnf_spec.rb +1 -99
- data/spec/unit/provider/package/pacman_spec.rb +4 -4
- data/spec/unit/provider/package/pip_spec.rb +14 -0
- data/spec/unit/provider/package/pkg_spec.rb +6 -0
- data/spec/unit/provider/package/pkgdmg_spec.rb +0 -3
- data/spec/unit/provider/package/portage_spec.rb +64 -8
- data/spec/unit/provider/package/tdnf_spec.rb +18 -0
- data/spec/unit/provider/package/windows/package_spec.rb +4 -1
- data/spec/unit/provider/package/windows_spec.rb +8 -2
- data/spec/unit/provider/package/yum_spec.rb +6 -377
- data/spec/unit/provider/service/base_spec.rb +6 -0
- data/spec/unit/provider/service/debian_spec.rb +16 -7
- data/spec/unit/provider/service/gentoo_spec.rb +6 -0
- data/spec/unit/provider/service/init_spec.rb +7 -0
- data/spec/unit/provider/service/launchd_spec.rb +35 -4
- data/spec/unit/provider/service/openrc_spec.rb +6 -0
- data/spec/unit/provider/service/smf_spec.rb +31 -6
- data/spec/unit/provider/service/src_spec.rb +6 -0
- data/spec/unit/provider/service/systemd_spec.rb +70 -20
- data/spec/unit/provider/service/upstart_spec.rb +6 -0
- data/spec/unit/provider/user/aix_spec.rb +7 -0
- data/spec/unit/provider/user/directoryservice_spec.rb +30 -1
- data/spec/unit/provider/user/windows_adsi_spec.rb +19 -0
- data/spec/unit/resource/capability_finder_spec.rb +51 -3
- data/spec/unit/resource/catalog_spec.rb +5 -0
- data/spec/unit/resource/type_spec.rb +2 -2
- data/spec/unit/resource_spec.rb +19 -0
- data/spec/unit/settings_spec.rb +13 -0
- data/spec/unit/ssl/certificate_authority/interface_spec.rb +176 -10
- data/spec/unit/ssl/certificate_authority_spec.rb +63 -22
- data/spec/unit/ssl/host_spec.rb +1 -1
- data/spec/unit/ssl/oids_spec.rb +24 -21
- data/spec/unit/transaction/event_spec.rb +3 -1
- data/spec/unit/transaction/persistence_spec.rb +173 -0
- data/spec/unit/transaction/report_spec.rb +64 -1
- data/spec/unit/transaction/resource_harness_spec.rb +91 -0
- data/spec/unit/type/file/content_spec.rb +47 -15
- data/spec/unit/type/file_spec.rb +28 -0
- data/spec/unit/type/mount_spec.rb +5 -12
- data/spec/unit/type/yumrepo_spec.rb +1 -5
- data/spec/unit/type_spec.rb +32 -0
- data/spec/unit/util/command_line_spec.rb +11 -0
- data/spec/unit/util/execution_spec.rb +1 -1
- data/spec/unit/util/plist_spec.rb +16 -3
- data/spec/unit/util/storage_spec.rb +4 -1
- data/spec/unit/util/windows/adsi_spec.rb +23 -2
- data/spec/unit/util/windows/file_spec.rb +56 -1
- data/spec/unit/util/windows/sid_spec.rb +31 -7
- data/spec/unit/util/yaml_spec.rb +12 -0
- data/spec/unit/util_spec.rb +87 -20
- metadata +89 -34
- data/ext/puppetlisten/puppetlisten.rb +0 -77
- data/ext/puppetlisten/puppetrun.rb +0 -38
- data/lib/puppet/resource/type_collection_helper.rb +0 -7
- data/spec/unit/parser/functions/defined_spec.rb +0 -120
- data/spec/unit/resource/type_collection_helper_spec.rb +0 -24
@@ -0,0 +1,21 @@
|
|
1
|
+
type Puppet::Resource::Param = Object[{
|
2
|
+
attributes => {
|
3
|
+
type => Type,
|
4
|
+
name => String[1],
|
5
|
+
name_var => { type => Boolean, value => false }
|
6
|
+
},
|
7
|
+
equality => [name],
|
8
|
+
}]
|
9
|
+
|
10
|
+
|
11
|
+
type Puppet::Resource::ResourceType3 = Object[{
|
12
|
+
attributes => {
|
13
|
+
name => String[1],
|
14
|
+
properties => { type => Array[Puppet::Resource::Param], value = []},
|
15
|
+
parameters => { type => Array[Puppet::Resource::Param], value = []},
|
16
|
+
title_patterns => { type => Optional[Hash[Regexp, Array[String[1]]], value => nil },
|
17
|
+
isomorphic => { type => Boolean, value => true },
|
18
|
+
},
|
19
|
+
equality => [name],
|
20
|
+
}]
|
21
|
+
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Puppet::Pops
|
2
|
+
module Serialization
|
3
|
+
def self.not_implemented(impl, method_name)
|
4
|
+
raise NotImplementedError, "The class #{impl.class.name} should have implemented the method #{method_name}()"
|
5
|
+
end
|
6
|
+
|
7
|
+
class SerializationError < Puppet::Error
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
require_relative 'serialization/serializer'
|
13
|
+
require_relative 'serialization/deserializer'
|
14
|
+
require_relative 'serialization/json'
|
15
|
+
require_relative 'serialization/time_factory'
|
16
|
+
require_relative 'serialization/rgen'
|
17
|
+
require_relative 'serialization/object'
|
@@ -0,0 +1,149 @@
|
|
1
|
+
require_relative 'extension'
|
2
|
+
require_relative 'time_factory'
|
3
|
+
|
4
|
+
module Puppet::Pops
|
5
|
+
module Serialization
|
6
|
+
# Abstract class for protocol specific readers such as MsgPack or JSON
|
7
|
+
# The abstract reader is capable of reading the primitive scalars:
|
8
|
+
# - Boolean
|
9
|
+
# - Integer
|
10
|
+
# - Float
|
11
|
+
# - String
|
12
|
+
# and, by using extensions, also
|
13
|
+
# - Array start
|
14
|
+
# - Map start
|
15
|
+
# - Object start
|
16
|
+
# - Regexp
|
17
|
+
# - Version
|
18
|
+
# - VersionRange
|
19
|
+
# - Timestamp
|
20
|
+
# - Default
|
21
|
+
#
|
22
|
+
# @api public
|
23
|
+
class AbstractReader
|
24
|
+
# @param [MessagePack::Unpacker,JSON::Unpacker] unpacker The low lever unpacker that delivers the primitive objects
|
25
|
+
# @param [MessagePack::Unpacker,JSON::Unpacker] extension_unpacker Optional unpacker for extensions. Defaults to the unpacker
|
26
|
+
# @api public
|
27
|
+
def initialize(unpacker, extension_unpacker = nil)
|
28
|
+
@read = []
|
29
|
+
@unpacker = unpacker
|
30
|
+
@extension_unpacker = extension_unpacker.nil? ? unpacker : extension_unpacker
|
31
|
+
register_types
|
32
|
+
end
|
33
|
+
|
34
|
+
# Read an object from the underlying unpacker
|
35
|
+
# @return [Object] the object that was read
|
36
|
+
# @api public
|
37
|
+
def read
|
38
|
+
obj = @unpacker.read
|
39
|
+
case obj
|
40
|
+
when Extension::InnerTabulation
|
41
|
+
@read[obj.index]
|
42
|
+
when Numeric, Symbol, Extension::NotTabulated, true, false, nil
|
43
|
+
# not tabulated
|
44
|
+
obj
|
45
|
+
else
|
46
|
+
@read << obj
|
47
|
+
obj
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# @return [Integer] The total count of unique primitive values that has been read
|
52
|
+
# @api private
|
53
|
+
def primitive_count
|
54
|
+
@read.size
|
55
|
+
end
|
56
|
+
|
57
|
+
# @api private
|
58
|
+
def read_payload(data)
|
59
|
+
raise SerializationError, "Internal error: Class #{self.class} does not implement method 'read_payload'"
|
60
|
+
end
|
61
|
+
|
62
|
+
# @api private
|
63
|
+
def read_tpl_qname(ep)
|
64
|
+
Array.new(ep.read) { read_tpl(ep) }.join('::')
|
65
|
+
end
|
66
|
+
|
67
|
+
# @api private
|
68
|
+
def read_tpl(ep)
|
69
|
+
obj = ep.read
|
70
|
+
case obj
|
71
|
+
when Integer
|
72
|
+
@read[obj]
|
73
|
+
else
|
74
|
+
@read << obj
|
75
|
+
obj
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
# @api private
|
80
|
+
def extension_unpacker
|
81
|
+
@extension_unpacker
|
82
|
+
end
|
83
|
+
|
84
|
+
# @api private
|
85
|
+
def register_type(extension_number, &block)
|
86
|
+
@unpacker.register_type(extension_number, &block)
|
87
|
+
end
|
88
|
+
|
89
|
+
# @api private
|
90
|
+
def register_types
|
91
|
+
register_type(Extension::INNER_TABULATION) do |data|
|
92
|
+
read_payload(data) { |ep| Extension::InnerTabulation.new(ep.read) }
|
93
|
+
end
|
94
|
+
|
95
|
+
register_type(Extension::TABULATION) do |data|
|
96
|
+
read_payload(data) { |ep| Extension::Tabulation.new(ep.read) }
|
97
|
+
end
|
98
|
+
|
99
|
+
register_type(Extension::ARRAY_START) do |data|
|
100
|
+
read_payload(data) { |ep| Extension::ArrayStart.new(ep.read) }
|
101
|
+
end
|
102
|
+
|
103
|
+
register_type(Extension::MAP_START) do |data|
|
104
|
+
read_payload(data) { |ep| Extension::MapStart.new(ep.read) }
|
105
|
+
end
|
106
|
+
|
107
|
+
register_type(Extension::OBJECT_START) do |data|
|
108
|
+
read_payload(data) { |ep| type_name = read_tpl_qname(ep); Extension::ObjectStart.new(type_name, ep.read) }
|
109
|
+
end
|
110
|
+
|
111
|
+
register_type(Extension::DEFAULT) do |data|
|
112
|
+
read_payload(data) { |ep| Extension::Default::INSTANCE }
|
113
|
+
end
|
114
|
+
|
115
|
+
register_type(Extension::COMMENT) do |data|
|
116
|
+
read_payload(data) { |ep| Extension::Comment.new(ep.read) }
|
117
|
+
end
|
118
|
+
|
119
|
+
register_type(Extension::REGEXP) do |data|
|
120
|
+
read_payload(data) { |ep| Regexp.new(ep.read) }
|
121
|
+
end
|
122
|
+
|
123
|
+
register_type(Extension::TYPE_REFERENCE) do |data|
|
124
|
+
read_payload(data) { |ep| Types::PTypeReferenceType.new(read_tpl_qname(ep)) }
|
125
|
+
end
|
126
|
+
|
127
|
+
register_type(Extension::SYMBOL) do |data|
|
128
|
+
read_payload(data) { |ep| ep.read.to_sym }
|
129
|
+
end
|
130
|
+
|
131
|
+
register_type(Extension::TIME) do |data|
|
132
|
+
read_payload(data) do |ep|
|
133
|
+
sec = ep.read
|
134
|
+
nsec = ep.read
|
135
|
+
TimeFactory.from_sec_nsec(sec, nsec)
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
register_type(Extension::VERSION) do |data|
|
140
|
+
read_payload(data) { |ep| Semantic::Version.parse(ep.read) }
|
141
|
+
end
|
142
|
+
|
143
|
+
register_type(Extension::VERSION_RANGE) do |data|
|
144
|
+
read_payload(data) { |ep| Semantic::VersionRange.parse(ep.read) }
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
@@ -0,0 +1,179 @@
|
|
1
|
+
require_relative 'extension'
|
2
|
+
|
3
|
+
module Puppet::Pops
|
4
|
+
module Serialization
|
5
|
+
|
6
|
+
MAX_INTEGER = 0x7fffffffffffffff
|
7
|
+
MIN_INTEGER = -0x8000000000000000
|
8
|
+
|
9
|
+
# Abstract class for protocol specific writers such as MsgPack or JSON
|
10
|
+
# The abstract write is capable of writing the primitive scalars:
|
11
|
+
# - Boolean
|
12
|
+
# - Integer
|
13
|
+
# - Float
|
14
|
+
# - String
|
15
|
+
# and, by using extensions, also
|
16
|
+
# - Array start
|
17
|
+
# - Map start
|
18
|
+
# - Object start
|
19
|
+
# - Regexp
|
20
|
+
# - Version
|
21
|
+
# - VersionRange
|
22
|
+
# - Timestamp
|
23
|
+
# - Default
|
24
|
+
#
|
25
|
+
# @api public
|
26
|
+
class AbstractWriter
|
27
|
+
# @param [MessagePack::Packer,JSON::Packer] packer the underlying packer stream
|
28
|
+
# @param [Hash] options
|
29
|
+
# @option options [Boolean] :tabulate `true` if tabulation is enabled (which is the default).
|
30
|
+
# @param [DebugPacker,nil] extension_packer Optional specific extension packer. Only used for debug output
|
31
|
+
# @api public
|
32
|
+
def initialize(packer, options, extension_packer = nil)
|
33
|
+
@tabulate = options[:tabulate]
|
34
|
+
@tabulate = true if @tabulate.nil?
|
35
|
+
@written = {}
|
36
|
+
@packer = packer
|
37
|
+
@extension_packer = extension_packer.nil? ? packer : extension_packer
|
38
|
+
register_types
|
39
|
+
end
|
40
|
+
|
41
|
+
# Tell the underlying packer to flush.
|
42
|
+
# @api public
|
43
|
+
def finish
|
44
|
+
@packer.flush
|
45
|
+
end
|
46
|
+
|
47
|
+
# Write a value on the underlying stream
|
48
|
+
# @api public
|
49
|
+
def write(value)
|
50
|
+
written = false
|
51
|
+
case value
|
52
|
+
when Integer
|
53
|
+
# not tabulated, but integers larger than 64-bit cannot be allowed.
|
54
|
+
raise SerializationError, 'Integer out of bounds' if value > MAX_INTEGER || value < MIN_INTEGER
|
55
|
+
when Numeric, Symbol, Extension::NotTabulated, true, false, nil
|
56
|
+
# not tabulated
|
57
|
+
else
|
58
|
+
if @tabulate
|
59
|
+
index = @written[value]
|
60
|
+
if index.nil?
|
61
|
+
@packer.write(value)
|
62
|
+
written = true
|
63
|
+
@written[value] = @written.size
|
64
|
+
else
|
65
|
+
value = Extension::InnerTabulation.new(index)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
@packer.write(value) unless written
|
70
|
+
end
|
71
|
+
|
72
|
+
# Called from extension callbacks only
|
73
|
+
#
|
74
|
+
# @api private
|
75
|
+
def build_payload
|
76
|
+
raise SerializationError, "Internal error: Class #{self.class} does not implement method 'build_payload'"
|
77
|
+
end
|
78
|
+
|
79
|
+
# @api private
|
80
|
+
def extension_packer
|
81
|
+
@extension_packer
|
82
|
+
end
|
83
|
+
|
84
|
+
# Called from extension callbacks only
|
85
|
+
#
|
86
|
+
# @api private
|
87
|
+
def write_tpl_qname(ep, qname)
|
88
|
+
names = qname.split('::')
|
89
|
+
ep.write(names.size)
|
90
|
+
names.each {|n| write_tpl(ep, n)}
|
91
|
+
end
|
92
|
+
|
93
|
+
# Called from extension callbacks only
|
94
|
+
#
|
95
|
+
# @api private
|
96
|
+
def write_tpl(ep, value)
|
97
|
+
raise ArgumentError, 'Internal error. Integers cannot be tabulated in extension payload' if value.is_a?(Integer)
|
98
|
+
if @tabulate
|
99
|
+
index = @written[value]
|
100
|
+
if index.nil?
|
101
|
+
@written[value] = @written.size
|
102
|
+
else
|
103
|
+
value = index
|
104
|
+
end
|
105
|
+
end
|
106
|
+
ep.write(value)
|
107
|
+
end
|
108
|
+
|
109
|
+
# @api private
|
110
|
+
def register_type(extension_number, payload_class, &block)
|
111
|
+
@packer.register_type(extension_number, payload_class, &block)
|
112
|
+
end
|
113
|
+
|
114
|
+
# @api private
|
115
|
+
def register_types
|
116
|
+
# 0x00 - 0x0F are reserved for low-level serialization / tabulation extensions
|
117
|
+
|
118
|
+
register_type(Extension::INNER_TABULATION, Extension::InnerTabulation) do |o|
|
119
|
+
build_payload { |ep| ep.write(o.index) }
|
120
|
+
end
|
121
|
+
|
122
|
+
register_type(Extension::TABULATION, Extension::Tabulation) do |o|
|
123
|
+
build_payload { |ep| ep.write(o.index) }
|
124
|
+
end
|
125
|
+
|
126
|
+
# 0x10 - 0x1F are reserved for structural extensions
|
127
|
+
|
128
|
+
register_type(Extension::ARRAY_START, Extension::ArrayStart) do |o|
|
129
|
+
build_payload { |ep| ep.write(o.size) }
|
130
|
+
end
|
131
|
+
|
132
|
+
register_type(Extension::MAP_START, Extension::MapStart) do |o|
|
133
|
+
build_payload { |ep| ep.write(o.size) }
|
134
|
+
end
|
135
|
+
|
136
|
+
register_type(Extension::OBJECT_START, Extension::ObjectStart) do |o|
|
137
|
+
build_payload { |ep| write_tpl_qname(ep, o.type_name); ep.write(o.attribute_count) }
|
138
|
+
end
|
139
|
+
|
140
|
+
# 0x20 - 0x2f reserved for special extension objects
|
141
|
+
|
142
|
+
register_type(Extension::DEFAULT, Extension::Default) do |o|
|
143
|
+
build_payload { |ep| }
|
144
|
+
end
|
145
|
+
|
146
|
+
register_type(Extension::COMMENT, Extension::Comment) do |o|
|
147
|
+
build_payload { |ep| ep.write(o.comment) }
|
148
|
+
end
|
149
|
+
|
150
|
+
# 0x30 - 0x7f reserved for mapping of specific runtime classes
|
151
|
+
|
152
|
+
register_type(Extension::REGEXP, Regexp) do |o|
|
153
|
+
build_payload { |ep| ep.write(o.source) }
|
154
|
+
end
|
155
|
+
|
156
|
+
register_type(Extension::TYPE_REFERENCE, Types::PTypeReferenceType) do |o|
|
157
|
+
build_payload { |ep| write_tpl_qname(ep, o.type_string) }
|
158
|
+
end
|
159
|
+
|
160
|
+
register_type(Extension::SYMBOL, Symbol) do |o|
|
161
|
+
build_payload { |ep| ep.write(o.to_s) }
|
162
|
+
end
|
163
|
+
|
164
|
+
register_type(Extension::TIME, Time) do |o|
|
165
|
+
build_payload { |ep| ep.write(o.tv_sec); ep.write(o.tv_nsec) }
|
166
|
+
end
|
167
|
+
|
168
|
+
register_type(Extension::VERSION, Semantic::Version) do |o|
|
169
|
+
build_payload { |ep| ep.write(o.to_s) }
|
170
|
+
end
|
171
|
+
|
172
|
+
register_type(Extension::VERSION_RANGE, Semantic::VersionRange) do |o|
|
173
|
+
build_payload { |ep| ep.write(o.to_s) }
|
174
|
+
end
|
175
|
+
end
|
176
|
+
end
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require_relative 'extension'
|
2
|
+
|
3
|
+
module Puppet::Pops
|
4
|
+
module Serialization
|
5
|
+
# The deserializer is capable of reading, arrays, maps, and complex objects using an underlying protocol reader. It takes care of
|
6
|
+
# resolving tabulations and assembling complex objects. The type of the complex objects are resolved using a loader.
|
7
|
+
# @api public
|
8
|
+
class Deserializer
|
9
|
+
# @param [AbstractReader] reader the reader used when reading primitive objects from a stream
|
10
|
+
# @param [Loader::Loader] loader the loader used when resolving names of types
|
11
|
+
# @api public
|
12
|
+
def initialize(reader, loader)
|
13
|
+
@read = []
|
14
|
+
@reader = reader
|
15
|
+
@loader = loader
|
16
|
+
end
|
17
|
+
|
18
|
+
# Read the next value from the reader.
|
19
|
+
#
|
20
|
+
# @return [Object] the value that was read
|
21
|
+
# @api public
|
22
|
+
def read
|
23
|
+
val = @reader.read
|
24
|
+
case val
|
25
|
+
when Extension::Tabulation
|
26
|
+
@read[val.index]
|
27
|
+
when Extension::Default
|
28
|
+
:default
|
29
|
+
when Extension::ArrayStart
|
30
|
+
result = remember([])
|
31
|
+
val.size.times { result << read }
|
32
|
+
result
|
33
|
+
when Extension::MapStart
|
34
|
+
result = remember({})
|
35
|
+
val.size.times { key = read; result[key] = read }
|
36
|
+
result
|
37
|
+
when Extension::ObjectStart
|
38
|
+
type_name = val.type_name
|
39
|
+
type = Types::TypeParser.singleton.parse(type_name, @loader)
|
40
|
+
raise SerializationError, "No implementation mapping found for Puppet Type #{type_name}" if type.is_a?(Types::PTypeReferenceType)
|
41
|
+
type.read(val.attribute_count, self)
|
42
|
+
when Numeric, String, true, false, nil, Time
|
43
|
+
val
|
44
|
+
else
|
45
|
+
remember(val)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# Remember that a value has been read. This means that the value is given an index
|
50
|
+
# and that subsequent reads of a tabulation with that index should return the value.
|
51
|
+
# @param [Object] value The value to remember
|
52
|
+
# @return [Object] the argument
|
53
|
+
# @api private
|
54
|
+
def remember(value)
|
55
|
+
@read << value
|
56
|
+
value
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,126 @@
|
|
1
|
+
module Puppet::Pops
|
2
|
+
module Serialization
|
3
|
+
module Extension
|
4
|
+
# 0x00 - 0x0F are reserved for low-level serialization / tabulation extensions
|
5
|
+
|
6
|
+
# Tabulation internal to the low level protocol reader/writer
|
7
|
+
INNER_TABULATION = 0x00
|
8
|
+
|
9
|
+
# Tabulation managed by the serializer / deserializer
|
10
|
+
TABULATION = 0x01
|
11
|
+
|
12
|
+
# 0x10 - 0x1F are reserved for structural extensions
|
13
|
+
ARRAY_START = 0x10
|
14
|
+
MAP_START = 0x11
|
15
|
+
OBJECT_START = 0x12
|
16
|
+
|
17
|
+
# 0x20 - 0x2f reserved for special extension objects
|
18
|
+
DEFAULT = 0x20
|
19
|
+
COMMENT = 0x21
|
20
|
+
|
21
|
+
# 0x30 - 0x7f reserved for mapping of specific runtime classes
|
22
|
+
REGEXP = 0x30
|
23
|
+
TYPE_REFERENCE = 0x31
|
24
|
+
SYMBOL = 0x32
|
25
|
+
TIME = 0x33
|
26
|
+
TIMESPAN = 0x34
|
27
|
+
VERSION = 0x35
|
28
|
+
VERSION_RANGE = 0x36
|
29
|
+
|
30
|
+
# Marker module indicating whether or not an instance is tabulated or not
|
31
|
+
module NotTabulated; end
|
32
|
+
|
33
|
+
# Marker module for objects that starts a sequence, i.e. ArrayStart, MapStart, and ObjectStart
|
34
|
+
module SequenceStart; end
|
35
|
+
|
36
|
+
# The class that triggers the use of the DEFAULT extension. It doesn't have any payload
|
37
|
+
class Default
|
38
|
+
include NotTabulated
|
39
|
+
INSTANCE = Default.new
|
40
|
+
end
|
41
|
+
|
42
|
+
# The class that triggers the use of the TABULATION extension. The payload is the tabulation index
|
43
|
+
class Tabulation
|
44
|
+
include NotTabulated
|
45
|
+
attr_reader :index
|
46
|
+
def initialize(index)
|
47
|
+
@index = index
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# Tabulation internal to the protocol reader/writer
|
52
|
+
class InnerTabulation < Tabulation
|
53
|
+
end
|
54
|
+
|
55
|
+
# The class that triggers the use of the MAP_START extension. The payload is the map size (number of entries)
|
56
|
+
class MapStart
|
57
|
+
include NotTabulated
|
58
|
+
include SequenceStart
|
59
|
+
attr_reader :size
|
60
|
+
def initialize(size)
|
61
|
+
@size = size
|
62
|
+
end
|
63
|
+
|
64
|
+
# Sequence size is twice the map size since each entry is written as key and value
|
65
|
+
def sequence_size
|
66
|
+
@size * 2
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
# The class that triggers the use of the ARRAY_START extension. The payload is the array size
|
71
|
+
class ArrayStart
|
72
|
+
include NotTabulated
|
73
|
+
include SequenceStart
|
74
|
+
attr_reader :size
|
75
|
+
def initialize(size)
|
76
|
+
@size = size
|
77
|
+
end
|
78
|
+
|
79
|
+
def sequence_size
|
80
|
+
@size
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
# The class that triggers the use of the OBJECT_START extension. The payload is the name of the object type and the
|
85
|
+
# number of attributes in the instance.
|
86
|
+
class ObjectStart
|
87
|
+
include SequenceStart
|
88
|
+
attr_reader :type_name, :attribute_count
|
89
|
+
def initialize(type_name, attribute_count)
|
90
|
+
@type_name = type_name
|
91
|
+
@attribute_count = attribute_count
|
92
|
+
end
|
93
|
+
|
94
|
+
def hash
|
95
|
+
@type_name.hash * 29 + attribute_count.hash
|
96
|
+
end
|
97
|
+
|
98
|
+
def eql?(o)
|
99
|
+
o.is_a?(ObjectStart) && o.type_name == @type_name && o.attribute_count == @attribute_count
|
100
|
+
end
|
101
|
+
alias == eql?
|
102
|
+
|
103
|
+
def sequence_size
|
104
|
+
@attribute_count
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
# The class that triggers the use of the COMMENT extension. The payload is comment text
|
109
|
+
class Comment
|
110
|
+
attr_reader :comment
|
111
|
+
def initialize(comment)
|
112
|
+
@comment = comment
|
113
|
+
end
|
114
|
+
|
115
|
+
def hash
|
116
|
+
@comment.hash
|
117
|
+
end
|
118
|
+
|
119
|
+
def eql?(o)
|
120
|
+
o.is_a?(Comment) && o.comment == @comment
|
121
|
+
end
|
122
|
+
alias == eql?
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|