puppet 5.4.0 → 5.5.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- data/Gemfile +3 -3
- data/MAINTAINERS +0 -19
- data/README.md +5 -5
- data/Rakefile +26 -0
- data/conf/auth.conf +5 -0
- data/ext/project_data.yaml +1 -0
- data/ext/regexp_nodes/regexp_nodes.rb +3 -4
- data/lib/puppet/application/apply.rb +1 -1
- data/lib/puppet/application/cert.rb +3 -1
- data/lib/puppet/application/device.rb +100 -13
- data/lib/puppet/application/facts.rb +5 -0
- data/lib/puppet/application/lookup.rb +12 -2
- data/lib/puppet/configurer.rb +37 -17
- data/lib/puppet/confine.rb +4 -1
- data/lib/puppet/datatypes.rb +1 -1
- data/lib/puppet/environments.rb +1 -1
- data/lib/puppet/error.rb +6 -3
- data/lib/puppet/external/dot.rb +0 -7
- data/lib/puppet/external/nagios/parser.rb +1 -1
- data/lib/puppet/face/config.rb +92 -10
- data/lib/puppet/face/epp.rb +31 -6
- data/lib/puppet/face/facts.rb +49 -0
- data/lib/puppet/face/help.rb +33 -35
- data/lib/puppet/face/help/action.erb +1 -1
- data/lib/puppet/face/help/face.erb +1 -1
- data/lib/puppet/face/man.rb +55 -12
- data/lib/puppet/face/parser.rb +30 -3
- data/lib/puppet/file_bucket/file.rb +0 -2
- data/lib/puppet/file_serving/base.rb +10 -10
- data/lib/puppet/forge.rb +3 -3
- data/lib/puppet/forge/errors.rb +3 -3
- data/lib/puppet/functions.rb +1 -3
- data/lib/puppet/functions/alert.rb +1 -1
- data/lib/puppet/functions/all.rb +6 -6
- data/lib/puppet/functions/annotate.rb +10 -10
- data/lib/puppet/functions/any.rb +6 -6
- data/lib/puppet/functions/assert_type.rb +4 -4
- data/lib/puppet/functions/binary_file.rb +14 -2
- data/lib/puppet/functions/break.rb +31 -2
- data/lib/puppet/functions/call.rb +4 -4
- data/lib/puppet/functions/contain.rb +19 -3
- data/lib/puppet/functions/convert_to.rb +6 -5
- data/lib/puppet/functions/crit.rb +1 -1
- data/lib/puppet/functions/debug.rb +1 -1
- data/lib/puppet/functions/defined.rb +11 -9
- data/lib/puppet/functions/dig.rb +26 -2
- data/lib/puppet/functions/each.rb +8 -8
- data/lib/puppet/functions/emerg.rb +1 -1
- data/lib/puppet/functions/empty.rb +79 -0
- data/lib/puppet/functions/err.rb +1 -1
- data/lib/puppet/functions/eyaml_lookup_key.rb +3 -1
- data/lib/puppet/functions/filter.rb +7 -7
- data/lib/puppet/functions/find_file.rb +15 -1
- data/lib/puppet/functions/flatten.rb +64 -0
- data/lib/puppet/functions/hiera.rb +6 -6
- data/lib/puppet/functions/hiera_array.rb +6 -6
- data/lib/puppet/functions/hiera_hash.rb +6 -6
- data/lib/puppet/functions/hiera_include.rb +8 -8
- data/lib/puppet/functions/include.rb +28 -2
- data/lib/puppet/functions/info.rb +1 -1
- data/lib/puppet/functions/inline_epp.rb +2 -2
- data/lib/puppet/functions/join.rb +56 -0
- data/lib/puppet/functions/json_data.rb +2 -2
- data/lib/puppet/functions/keys.rb +25 -0
- data/lib/puppet/functions/length.rb +44 -0
- data/lib/puppet/functions/lest.rb +39 -1
- data/lib/puppet/functions/lookup.rb +2 -1
- data/lib/puppet/functions/map.rb +10 -9
- data/lib/puppet/functions/match.rb +6 -6
- data/lib/puppet/functions/new.rb +995 -2
- data/lib/puppet/functions/next.rb +1 -1
- data/lib/puppet/functions/notice.rb +1 -1
- data/lib/puppet/functions/reduce.rb +6 -6
- data/lib/puppet/functions/regsubst.rb +9 -3
- data/lib/puppet/functions/require.rb +36 -2
- data/lib/puppet/functions/return.rb +1 -1
- data/lib/puppet/functions/reverse_each.rb +71 -2
- data/lib/puppet/functions/slice.rb +23 -9
- data/lib/puppet/functions/split.rb +12 -10
- data/lib/puppet/functions/step.rb +73 -1
- data/lib/puppet/functions/strftime.rb +176 -2
- data/lib/puppet/functions/then.rb +65 -2
- data/lib/puppet/functions/tree_each.rb +19 -19
- data/lib/puppet/functions/type.rb +42 -1
- data/lib/puppet/functions/unique.rb +13 -13
- data/lib/puppet/functions/unwrap.rb +8 -4
- data/lib/puppet/functions/values.rb +25 -0
- data/lib/puppet/functions/versioncmp.rb +1 -1
- data/lib/puppet/functions/warning.rb +1 -1
- data/lib/puppet/functions/with.rb +6 -4
- data/lib/puppet/functions/yaml_data.rb +3 -1
- data/lib/puppet/indirector/certificate_status/file.rb +1 -1
- data/lib/puppet/indirector/facts/facter.rb +1 -3
- data/lib/puppet/indirector/facts/rest.rb +21 -0
- data/lib/puppet/indirector/facts/yaml.rb +0 -4
- data/lib/puppet/indirector/rest.rb +2 -2
- data/lib/puppet/module.rb +3 -3
- data/lib/puppet/module/task.rb +2 -3
- data/lib/puppet/module_tool/applications/application.rb +4 -4
- data/lib/puppet/module_tool/applications/builder.rb +2 -2
- data/lib/puppet/module_tool/applications/checksummer.rb +3 -3
- data/lib/puppet/module_tool/applications/unpacker.rb +2 -2
- data/lib/puppet/module_tool/metadata.rb +3 -3
- data/lib/puppet/network/authconfig.rb +1 -1
- data/lib/puppet/network/format_support.rb +1 -1
- data/lib/puppet/network/formats.rb +5 -7
- data/lib/puppet/network/http/api/indirected_routes.rb +1 -0
- data/lib/puppet/network/http/api/master/v3/environment.rb +2 -2
- data/lib/puppet/network/http/api/master/v3/environments.rb +2 -2
- data/lib/puppet/network/http/error.rb +3 -3
- data/lib/puppet/network/resolver.rb +1 -2
- data/lib/puppet/parser/compiler.rb +12 -5
- data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +1 -1
- data/lib/puppet/parser/functions/fqdn_rand.rb +15 -4
- data/lib/puppet/parser/functions/new.rb +31 -46
- data/lib/puppet/parser/parser_factory.rb +1 -1
- data/lib/puppet/parser/resource.rb +1 -1
- data/lib/puppet/parser/type_loader.rb +11 -11
- data/lib/puppet/pops/evaluator/closure.rb +1 -1
- data/lib/puppet/pops/evaluator/collector_transformer.rb +1 -1
- data/lib/puppet/pops/evaluator/epp_evaluator.rb +2 -2
- data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +2 -2
- data/lib/puppet/pops/evaluator/runtime3_support.rb +5 -2
- data/lib/puppet/pops/functions/dispatch.rb +1 -1
- data/lib/puppet/pops/issue_reporter.rb +18 -1
- data/lib/puppet/pops/issues.rb +6 -3
- data/lib/puppet/pops/loader/ruby_data_type_instantiator.rb +1 -2
- data/lib/puppet/pops/loader/ruby_function_instantiator.rb +1 -2
- data/lib/puppet/pops/loader/task_instantiator.rb +5 -5
- data/lib/puppet/pops/loader/type_definition_instantiator.rb +4 -1
- data/lib/puppet/pops/loaders.rb +18 -7
- data/lib/puppet/pops/lookup/global_data_provider.rb +1 -1
- data/lib/puppet/pops/lookup/lookup_adapter.rb +55 -6
- data/lib/puppet/pops/model/factory.rb +6 -3
- data/lib/puppet/pops/model/model_tree_dumper.rb +4 -0
- data/lib/puppet/pops/model/pn_transformer.rb +400 -0
- data/lib/puppet/pops/parser/egrammar.ra +1 -1
- data/lib/puppet/pops/parser/eparser.rb +1 -1
- data/lib/puppet/pops/parser/heredoc_support.rb +1 -1
- data/lib/puppet/pops/parser/lexer_support.rb +3 -2
- data/lib/puppet/pops/parser/locator.rb +0 -2
- data/lib/puppet/pops/parser/pn_parser.rb +316 -0
- data/lib/puppet/pops/pcore.rb +17 -17
- data/lib/puppet/pops/pn.rb +236 -0
- data/lib/puppet/pops/serialization/json.rb +7 -7
- data/lib/puppet/pops/types/class_loader.rb +6 -3
- data/lib/puppet/pops/types/implementation_registry.rb +28 -35
- data/lib/puppet/pops/types/p_object_type.rb +3 -3
- data/lib/puppet/pops/types/p_timespan_type.rb +2 -2
- data/lib/puppet/pops/types/p_type_set_type.rb +24 -1
- data/lib/puppet/pops/types/ruby_generator.rb +3 -4
- data/lib/puppet/pops/types/type_calculator.rb +1 -1
- data/lib/puppet/pops/types/type_factory.rb +0 -4
- data/lib/puppet/pops/types/type_mismatch_describer.rb +1 -1
- data/lib/puppet/pops/types/type_parser.rb +14 -7
- data/lib/puppet/pops/types/types.rb +1 -1
- data/lib/puppet/pops/utils.rb +2 -2
- data/lib/puppet/pops/validation/checker4_0.rb +6 -2
- data/lib/puppet/provider/group/groupadd.rb +3 -1
- data/lib/puppet/provider/group/windows_adsi.rb +4 -7
- data/lib/puppet/provider/nameservice.rb +3 -3
- data/lib/puppet/provider/package/pacman.rb +4 -4
- data/lib/puppet/provider/package/pip.rb +3 -3
- data/lib/puppet/provider/package/pkgdmg.rb +3 -3
- data/lib/puppet/provider/package/pkgutil.rb +2 -2
- data/lib/puppet/provider/package/portage.rb +9 -9
- data/lib/puppet/provider/package/zypper.rb +2 -2
- data/lib/puppet/provider/service/base.rb +1 -1
- data/lib/puppet/provider/service/smf.rb +3 -2
- data/lib/puppet/provider/service/systemd.rb +1 -1
- data/lib/puppet/provider/user/useradd.rb +6 -2
- data/lib/puppet/provider/user/windows_adsi.rb +1 -1
- data/lib/puppet/provider/yumrepo/inifile.rb +20 -9
- data/lib/puppet/provider/zfs/zfs.rb +1 -1
- data/lib/puppet/reference/configuration.rb +2 -0
- data/lib/puppet/reference/type.rb +11 -11
- data/lib/puppet/resource.rb +1 -1
- data/lib/puppet/resource/capability_finder.rb +5 -5
- data/lib/puppet/resource/catalog.rb +6 -3
- data/lib/puppet/resource/status.rb +9 -2
- data/lib/puppet/resource/type.rb +1 -1
- data/lib/puppet/settings.rb +31 -19
- data/lib/puppet/settings/base_setting.rb +5 -0
- data/lib/puppet/settings/config_file.rb +1 -1
- data/lib/puppet/settings/ttl_setting.rb +5 -0
- data/lib/puppet/ssl/certificate_factory.rb +2 -2
- data/lib/puppet/ssl/certificate_request.rb +0 -2
- data/lib/puppet/syntax_checkers/json.rb +1 -1
- data/lib/puppet/transaction/additional_resource_generator.rb +2 -2
- data/lib/puppet/transaction/event.rb +1 -1
- data/lib/puppet/transaction/report.rb +18 -12
- data/lib/puppet/type.rb +9 -13
- data/lib/puppet/type/augeas.rb +2 -2
- data/lib/puppet/type/cron.rb +11 -6
- data/lib/puppet/type/exec.rb +1 -1
- data/lib/puppet/type/file.rb +4 -5
- data/lib/puppet/type/host.rb +1 -1
- data/lib/puppet/type/k5login.rb +30 -54
- data/lib/puppet/type/package.rb +3 -3
- data/lib/puppet/type/schedule.rb +12 -12
- data/lib/puppet/type/scheduled_task.rb +2 -2
- data/lib/puppet/type/ssh_authorized_key.rb +5 -5
- data/lib/puppet/type/sshkey.rb +2 -2
- data/lib/puppet/type/tidy.rb +1 -1
- data/lib/puppet/type/user.rb +1 -1
- data/lib/puppet/type/yumrepo.rb +26 -5
- data/lib/puppet/util.rb +0 -4
- data/lib/puppet/util/backups.rb +1 -1
- data/lib/puppet/util/inifile.rb +3 -4
- data/lib/puppet/util/json.rb +68 -0
- data/lib/puppet/util/json_lockfile.rb +3 -3
- data/lib/puppet/util/log.rb +2 -5
- data/lib/puppet/util/log/destinations.rb +2 -2
- data/lib/puppet/util/network_device/cisco/facts.rb +1 -1
- data/lib/puppet/util/plist.rb +1 -1
- data/lib/puppet/util/reference.rb +1 -8
- data/lib/puppet/util/tagging.rb +1 -1
- data/lib/puppet/util/warnings.rb +0 -2
- data/lib/puppet/util/windows/adsi.rb +15 -18
- data/lib/puppet/util/windows/com.rb +2 -1
- data/lib/puppet/util/windows/file.rb +2 -2
- data/lib/puppet/util/windows/principal.rb +7 -6
- data/lib/puppet/util/windows/sid.rb +60 -7
- data/lib/puppet/util/windows/taskscheduler.rb +0 -9
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet_pal.rb +53 -48
- data/locales/ja/puppet.po +1357 -912
- data/locales/puppet.pot +549 -466
- data/man/man5/puppet.conf.5 +103 -20
- data/man/man8/puppet-agent.8 +6 -2
- data/man/man8/puppet-apply.8 +2 -2
- data/man/man8/puppet-ca.8 +1 -1
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-cert.8 +1 -1
- data/man/man8/puppet-certificate.8 +1 -1
- data/man/man8/puppet-certificate_request.8 +1 -1
- data/man/man8/puppet-certificate_revocation_list.8 +1 -1
- data/man/man8/puppet-config.8 +35 -1
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +33 -11
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +34 -12
- data/man/man8/puppet-facts.8 +50 -1
- data/man/man8/puppet-filebucket.8 +38 -11
- data/man/man8/puppet-generate.8 +1 -1
- data/man/man8/puppet-help.8 +1 -1
- data/man/man8/puppet-key.8 +1 -1
- data/man/man8/puppet-lookup.8 +1 -1
- data/man/man8/puppet-man.8 +10 -4
- data/man/man8/puppet-master.8 +1 -1
- data/man/man8/puppet-module.8 +15 -6
- data/man/man8/puppet-node.8 +1 -1
- data/man/man8/puppet-parser.8 +31 -8
- data/man/man8/puppet-plugin.8 +1 -1
- data/man/man8/puppet-report.8 +1 -1
- data/man/man8/puppet-resource.8 +1 -1
- data/man/man8/puppet-script.8 +67 -0
- data/man/man8/puppet-status.8 +1 -1
- data/man/man8/puppet.8 +3 -3
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome2/lib/puppet_x/awesome2/echo_scheme_handler.rb +1 -1
- data/spec/integration/application/apply_spec.rb +15 -15
- data/spec/integration/application/lookup_spec.rb +21 -0
- data/spec/integration/faces/config_spec.rb +16 -4
- data/spec/integration/network/http/api/indirected_routes_spec.rb +5 -5
- data/spec/integration/parser/catalog_spec.rb +1 -1
- data/spec/integration/parser/collection_spec.rb +2 -2
- data/spec/integration/parser/compiler_spec.rb +17 -18
- data/spec/integration/parser/pcore_resource_spec.rb +2 -2
- data/spec/integration/parser/scope_spec.rb +2 -2
- data/spec/integration/ssl/certificate_authority_spec.rb +7 -7
- data/spec/integration/ssl/certificate_revocation_list_spec.rb +1 -1
- data/spec/integration/ssl/key_spec.rb +1 -1
- data/spec/integration/transaction/report_spec.rb +3 -3
- data/spec/integration/transaction_spec.rb +0 -1
- data/spec/integration/type/file_spec.rb +10 -11
- data/spec/integration/type_spec.rb +1 -2
- data/spec/integration/util/windows/adsi_spec.rb +86 -1
- data/spec/integration/util/windows/principal_spec.rb +11 -2
- data/spec/integration/util/windows/security_spec.rb +2 -2
- data/spec/lib/matchers/json.rb +4 -4
- data/spec/lib/puppet_spec/language.rb +34 -35
- data/spec/lib/puppet_spec/module_tool/shared_functions.rb +2 -2
- data/spec/shared_behaviours/file_server_terminus.rb +0 -2
- data/spec/shared_behaviours/things_that_declare_options.rb +2 -2
- data/spec/spec_helper.rb +1 -1
- data/spec/unit/application/cert_spec.rb +21 -9
- data/spec/unit/application/device_spec.rb +96 -2
- data/spec/unit/application/face_base_spec.rb +2 -2
- data/spec/unit/application/lookup_spec.rb +0 -1
- data/spec/unit/configurer_spec.rb +14 -0
- data/spec/unit/confine_spec.rb +16 -0
- data/spec/unit/data_providers/hiera_data_provider_spec.rb +4 -4
- data/spec/unit/datatypes_spec.rb +49 -0
- data/spec/unit/environments_spec.rb +7 -0
- data/spec/unit/face/config_spec.rb +116 -12
- data/spec/unit/face/epp_face_spec.rb +53 -2
- data/spec/unit/face/facts_spec.rb +53 -0
- data/spec/unit/face/help_spec.rb +62 -69
- data/spec/unit/face/man_spec.rb +26 -0
- data/spec/unit/face/module/list_spec.rb +0 -1
- data/spec/unit/face/parser_spec.rb +78 -0
- data/spec/unit/file_bucket/dipper_spec.rb +0 -4
- data/spec/unit/file_serving/content_spec.rb +0 -1
- data/spec/unit/file_serving/fileset_spec.rb +0 -1
- data/spec/unit/file_serving/metadata_spec.rb +0 -1
- data/spec/unit/file_serving/terminus_selector_spec.rb +0 -2
- data/spec/unit/forge_spec.rb +1 -2
- data/spec/unit/functions/assert_type_spec.rb +1 -1
- data/spec/unit/functions/empty_spec.rb +77 -0
- data/spec/unit/functions/epp_spec.rb +1 -1
- data/spec/unit/functions/flatten_spec.rb +31 -0
- data/spec/unit/functions/include_spec.rb +2 -2
- data/spec/unit/functions/inline_epp_spec.rb +1 -1
- data/spec/unit/functions/join_spec.rb +33 -0
- data/spec/unit/functions/keys_spec.rb +31 -0
- data/spec/unit/functions/length_spec.rb +50 -0
- data/spec/unit/functions/lookup_fixture_spec.rb +1 -1
- data/spec/unit/functions/lookup_spec.rb +52 -0
- data/spec/unit/functions/shared.rb +1 -1
- data/spec/unit/functions/values_spec.rb +30 -0
- data/spec/unit/functions/versioncmp_spec.rb +1 -1
- data/spec/unit/functions4_spec.rb +30 -32
- data/spec/unit/graph/title_hash_prioritizer_spec.rb +2 -1
- data/spec/unit/indirector/catalog/compiler_spec.rb +0 -15
- data/spec/unit/indirector/facts/rest_spec.rb +45 -0
- data/spec/unit/indirector/facts/yaml_spec.rb +6 -0
- data/spec/unit/indirector/file_bucket_file/file_spec.rb +2 -2
- data/spec/unit/indirector/indirection_spec.rb +1 -1
- data/spec/unit/indirector/node/ldap_spec.rb +2 -2
- data/spec/unit/indirector/request_spec.rb +0 -2
- data/spec/unit/indirector/rest_spec.rb +2 -2
- data/spec/unit/indirector_spec.rb +0 -1
- data/spec/unit/info_service_spec.rb +1 -1
- data/spec/unit/interface/action_manager_spec.rb +1 -1
- data/spec/unit/interface/action_spec.rb +1 -1
- data/spec/unit/module_spec.rb +0 -5
- data/spec/unit/module_tool/applications/builder_spec.rb +1 -1
- data/spec/unit/module_tool/applications/unpacker_spec.rb +4 -4
- data/spec/unit/network/formats_spec.rb +5 -13
- data/spec/unit/network/http/api/indirected_routes_spec.rb +6 -2
- data/spec/unit/network/http/connection_spec.rb +1 -1
- data/spec/unit/network/http/handler_spec.rb +3 -2
- data/spec/unit/node/environment_spec.rb +1 -1
- data/spec/unit/node_spec.rb +3 -3
- data/spec/unit/parser/compiler_spec.rb +9 -2
- data/spec/unit/parser/environment_compiler_spec.rb +8 -8
- data/spec/unit/parser/functions/create_resources_spec.rb +1 -1
- data/spec/unit/parser/functions/fail_spec.rb +1 -1
- data/spec/unit/parser/functions/fqdn_rand_spec.rb +24 -0
- data/spec/unit/parser/functions/realize_spec.rb +1 -1
- data/spec/unit/parser/resource_spec.rb +0 -1
- data/spec/unit/parser/scope_spec.rb +3 -3
- data/spec/unit/parser/type_loader_spec.rb +1 -1
- data/spec/unit/pops/adaptable_spec.rb +0 -1
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +0 -3
- data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +0 -4
- data/spec/unit/pops/factory_rspec_helper.rb +1 -1
- data/spec/unit/pops/factory_spec.rb +5 -5
- data/spec/unit/pops/issues_spec.rb +23 -8
- data/spec/unit/pops/loaders/loaders_spec.rb +24 -2
- data/spec/unit/pops/loaders/static_loader_spec.rb +1 -1
- data/spec/unit/pops/lookup/interpolation_spec.rb +5 -0
- data/spec/unit/pops/lookup/lookup_spec.rb +56 -0
- data/spec/unit/pops/model/pn_transformer_spec.rb +53 -0
- data/spec/unit/pops/parser/lexer2_spec.rb +14 -5
- data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +9 -9
- data/spec/unit/pops/parser/parse_calls_spec.rb +1 -1
- data/spec/unit/pops/parser/parse_functions_spec.rb +1 -1
- data/spec/unit/pops/parser/parse_heredoc_spec.rb +3 -3
- data/spec/unit/pops/parser/parse_lambda_spec.rb +1 -1
- data/spec/unit/pops/parser/parse_resource_spec.rb +35 -35
- data/spec/unit/pops/parser/pn_parser_spec.rb +101 -0
- data/spec/unit/pops/pn_spec.rb +148 -0
- data/spec/unit/pops/types/iterable_spec.rb +1 -1
- data/spec/unit/pops/types/p_object_type_spec.rb +5 -5
- data/spec/unit/pops/types/p_timespan_type_spec.rb +11 -4
- data/spec/unit/pops/types/p_timestamp_type_spec.rb +9 -2
- data/spec/unit/pops/types/p_type_set_type_spec.rb +106 -2
- data/spec/unit/pops/types/ruby_generator_spec.rb +3 -8
- data/spec/unit/pops/types/string_converter_spec.rb +3 -3
- data/spec/unit/pops/types/type_calculator_spec.rb +1 -1
- data/spec/unit/pops/validator/validator_spec.rb +3 -1
- data/spec/unit/property_spec.rb +2 -2
- data/spec/unit/provider/aixobject_spec.rb +1 -1
- data/spec/unit/provider/cron/crontab_spec.rb +3 -3
- data/spec/unit/provider/exec/posix_spec.rb +6 -6
- data/spec/unit/provider/group/groupadd_spec.rb +4 -4
- data/spec/unit/provider/group/windows_adsi_spec.rb +79 -22
- data/spec/unit/provider/ldap_spec.rb +0 -1
- data/spec/unit/provider/nameservice_spec.rb +5 -5
- data/spec/unit/provider/package/rpm_spec.rb +3 -4
- data/spec/unit/provider/package/yum_spec.rb +6 -2
- data/spec/unit/provider/parsedfile_spec.rb +1 -1
- data/spec/unit/provider/service/base_spec.rb +2 -4
- data/spec/unit/provider/service/init_spec.rb +2 -2
- data/spec/unit/provider/service/openrc_spec.rb +2 -2
- data/spec/unit/provider/service/redhat_spec.rb +2 -2
- data/spec/unit/provider/service/smf_spec.rb +2 -0
- data/spec/unit/provider/service/systemd_spec.rb +3 -3
- data/spec/unit/provider/service/upstart_spec.rb +7 -7
- data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +0 -4
- data/spec/unit/provider/sshkey/parsed_spec.rb +0 -2
- data/spec/unit/provider/user/useradd_spec.rb +15 -9
- data/spec/unit/provider/user/windows_adsi_spec.rb +4 -4
- data/spec/unit/provider/yumrepo/inifile_spec.rb +76 -0
- data/spec/unit/puppet_pal_2pec.rb +4 -5
- data/spec/unit/resource/catalog_spec.rb +8 -3
- data/spec/unit/resource/status_spec.rb +15 -4
- data/spec/unit/resource/type_spec.rb +2 -3
- data/spec/unit/settings_spec.rb +9 -4
- data/spec/unit/ssl/certificate_authority_spec.rb +1 -9
- data/spec/unit/ssl/certificate_request_spec.rb +1 -2
- data/spec/unit/transaction/report_spec.rb +41 -0
- data/spec/unit/transaction_spec.rb +1 -1
- data/spec/unit/type/exec_spec.rb +7 -9
- data/spec/unit/type/file/selinux_spec.rb +0 -1
- data/spec/unit/type/file_spec.rb +4 -3
- data/spec/unit/type/k5login_spec.rb +79 -10
- data/spec/unit/type/mount_spec.rb +1 -1
- data/spec/unit/type/nagios_spec.rb +6 -6
- data/spec/unit/type/user_spec.rb +1 -1
- data/spec/unit/type/yumrepo_spec.rb +18 -0
- data/spec/unit/type/zfs_spec.rb +1 -1
- data/spec/unit/type_spec.rb +14 -15
- data/spec/unit/util/docs_spec.rb +1 -1
- data/spec/unit/util/execution_spec.rb +0 -1
- data/spec/unit/util/inifile_spec.rb +35 -4
- data/spec/unit/util/log/destinations_spec.rb +2 -2
- data/spec/unit/util/log_spec.rb +6 -5
- data/spec/unit/util/network_device/cisco/device_spec.rb +2 -2
- data/spec/unit/util/plist_spec.rb +3 -3
- data/spec/unit/util/selinux_spec.rb +2 -2
- data/spec/unit/util/tagging_spec.rb +1 -7
- data/spec/unit/util/windows/adsi_spec.rb +31 -27
- data/spec/unit/util/windows/sid_spec.rb +86 -15
- data/spec/unit/util_spec.rb +2 -2
- data/spec/watchr.rb +0 -1
- data/tasks/benchmark.rake +37 -0
- data/tasks/manpages.rake +1 -1
- metadata +71 -11
- checksums.yaml +0 -7
@@ -30,7 +30,7 @@ module LexerSupport
|
|
30
30
|
|
31
31
|
# Raises a Puppet::LexError with the given message
|
32
32
|
def lex_error_without_pos(issue, args = {})
|
33
|
-
raise Puppet::ParseErrorWithIssue.new(issue.format(args), nil, nil, nil, nil, issue.issue_code)
|
33
|
+
raise Puppet::ParseErrorWithIssue.new(issue.format(args), nil, nil, nil, nil, issue.issue_code, args)
|
34
34
|
end
|
35
35
|
|
36
36
|
# Raises a Puppet::ParserErrorWithIssue with the given issue and arguments
|
@@ -73,7 +73,8 @@ module LexerSupport
|
|
73
73
|
line(pos),
|
74
74
|
position(pos),
|
75
75
|
nil,
|
76
|
-
issue.issue_code
|
76
|
+
issue.issue_code,
|
77
|
+
args)
|
77
78
|
end
|
78
79
|
|
79
80
|
# Asserts that the given string value is a float, or an integer in decimal, octal or hex form.
|
@@ -0,0 +1,316 @@
|
|
1
|
+
module Puppet::Pops
|
2
|
+
module Parser
|
3
|
+
|
4
|
+
class PNParser
|
5
|
+
LIT_TRUE = 'true'.freeze
|
6
|
+
LIT_FALSE = 'false'.freeze
|
7
|
+
LIT_NIL = 'nil'.freeze
|
8
|
+
|
9
|
+
TOKEN_END = 0
|
10
|
+
TOKEN_BOOL = 1
|
11
|
+
TOKEN_NIL = 2
|
12
|
+
TOKEN_INT = 3
|
13
|
+
TOKEN_FLOAT = 4
|
14
|
+
TOKEN_IDENTIFIER = 5
|
15
|
+
TOKEN_WS = 0x20
|
16
|
+
TOKEN_STRING = 0x22
|
17
|
+
TOKEN_KEY = 0x3a
|
18
|
+
TOKEN_LP = 0x28
|
19
|
+
TOKEN_RP = 0x29
|
20
|
+
TOKEN_LB = 0x5b
|
21
|
+
TOKEN_RB = 0x5d
|
22
|
+
TOKEN_LC = 0x7b
|
23
|
+
TOKEN_RC = 0x7d
|
24
|
+
|
25
|
+
TYPE_END = 0
|
26
|
+
TYPE_WS = 1
|
27
|
+
TYPE_DELIM = 2
|
28
|
+
TYPE_KEY_START = 3
|
29
|
+
TYPE_STRING_START = 4
|
30
|
+
TYPE_IDENTIFIER = 5
|
31
|
+
TYPE_MINUS = 6
|
32
|
+
TYPE_DIGIT = 7
|
33
|
+
TYPE_ALPHA = 8
|
34
|
+
|
35
|
+
def initialize
|
36
|
+
@char_types = self.class.char_types
|
37
|
+
end
|
38
|
+
|
39
|
+
def parse(text, locator = nil, offset = nil)
|
40
|
+
@locator = locator
|
41
|
+
@offset = offset
|
42
|
+
@text = text
|
43
|
+
@codepoints = text.codepoints.to_a.freeze
|
44
|
+
@pos = 0
|
45
|
+
@token = TOKEN_END
|
46
|
+
@token_value = nil
|
47
|
+
next_token
|
48
|
+
parse_next
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def parse_next
|
54
|
+
case @token
|
55
|
+
when TOKEN_LB
|
56
|
+
parse_array
|
57
|
+
when TOKEN_LC
|
58
|
+
parse_map
|
59
|
+
when TOKEN_LP
|
60
|
+
parse_call
|
61
|
+
when TOKEN_BOOL, TOKEN_INT, TOKEN_FLOAT, TOKEN_STRING, TOKEN_NIL
|
62
|
+
parse_literal
|
63
|
+
when TOKEN_END
|
64
|
+
parse_error(_('unexpected end of input'))
|
65
|
+
else
|
66
|
+
parse_error(_('unexpected %{value}' % { value: @token_value }))
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def parse_error(message)
|
71
|
+
file = ''
|
72
|
+
line = 1
|
73
|
+
pos = 1
|
74
|
+
if @locator
|
75
|
+
file = @locator.file
|
76
|
+
line = @locator.line_for_offset(@offset)
|
77
|
+
pos = @locator.pos_on_line(@offset)
|
78
|
+
end
|
79
|
+
@codepoints[0, @pos].each do |c|
|
80
|
+
if c == 0x09
|
81
|
+
line += 1
|
82
|
+
pos = 1
|
83
|
+
end
|
84
|
+
end
|
85
|
+
raise Puppet::ParseError.new(message, file, line, pos)
|
86
|
+
end
|
87
|
+
|
88
|
+
def parse_literal
|
89
|
+
pn = PN::Literal.new(@token_value)
|
90
|
+
next_token
|
91
|
+
pn
|
92
|
+
end
|
93
|
+
|
94
|
+
def parse_array
|
95
|
+
next_token
|
96
|
+
PN::List.new(parse_elements(TOKEN_RB))
|
97
|
+
end
|
98
|
+
|
99
|
+
def parse_map
|
100
|
+
next_token
|
101
|
+
entries = []
|
102
|
+
while @token != TOKEN_RC && @token != TOKEN_END
|
103
|
+
parse_error(_('map key expected')) unless @token == TOKEN_KEY
|
104
|
+
key = @token_value
|
105
|
+
next_token
|
106
|
+
entries << parse_next.with_name(key)
|
107
|
+
end
|
108
|
+
next_token
|
109
|
+
PN::Map.new(entries)
|
110
|
+
end
|
111
|
+
|
112
|
+
def parse_call
|
113
|
+
next_token
|
114
|
+
parse_error(_("expected identifier to follow '('")) unless @token == TOKEN_IDENTIFIER
|
115
|
+
name = @token_value
|
116
|
+
next_token
|
117
|
+
PN::Call.new(name, *parse_elements(TOKEN_RP))
|
118
|
+
end
|
119
|
+
|
120
|
+
def parse_elements(end_token)
|
121
|
+
elements = []
|
122
|
+
while @token != end_token && @token != TOKEN_END
|
123
|
+
elements << parse_next
|
124
|
+
end
|
125
|
+
parse_error(_("missing '%{token}' to end list") % { token: end_token.chr(Encoding::UTF_8) } ) unless @token == end_token
|
126
|
+
next_token
|
127
|
+
elements
|
128
|
+
end
|
129
|
+
|
130
|
+
# All methods below belong to the PN lexer
|
131
|
+
def self.char_types
|
132
|
+
unless instance_variable_defined?(:@char_types)
|
133
|
+
@char_types = Array.new(0x80, TYPE_IDENTIFIER)
|
134
|
+
@char_types[0] = TYPE_END
|
135
|
+
[0x09, 0x0d, 0x0a, 0x20].each { |n| @char_types[n] = TYPE_WS }
|
136
|
+
[TOKEN_LP, TOKEN_RP, TOKEN_LB, TOKEN_RB, TOKEN_LC, TOKEN_RC].each { |n| @char_types[n] = TYPE_DELIM }
|
137
|
+
@char_types[0x2d] = TYPE_MINUS
|
138
|
+
(0x30..0x39).each { |n| @char_types[n] = TYPE_DIGIT }
|
139
|
+
(0x41..0x5a).each { |n| @char_types[n] = TYPE_ALPHA }
|
140
|
+
(0x61..0x7a).each { |n| @char_types[n] = TYPE_ALPHA }
|
141
|
+
@char_types[TOKEN_KEY] = TYPE_KEY_START
|
142
|
+
@char_types[TOKEN_STRING] = TYPE_STRING_START
|
143
|
+
@char_types.freeze
|
144
|
+
end
|
145
|
+
@char_types
|
146
|
+
end
|
147
|
+
|
148
|
+
def next_token
|
149
|
+
skip_white
|
150
|
+
s = @pos
|
151
|
+
c = next_cp
|
152
|
+
|
153
|
+
case @char_types[c]
|
154
|
+
when TYPE_END
|
155
|
+
@token_value = nil
|
156
|
+
@token = TOKEN_END
|
157
|
+
|
158
|
+
when TYPE_MINUS
|
159
|
+
if @char_types[peek_cp] == TYPE_DIGIT
|
160
|
+
next_token # consume float or integer
|
161
|
+
@token_value = -@token_value
|
162
|
+
else
|
163
|
+
consume_identifier(s)
|
164
|
+
end
|
165
|
+
|
166
|
+
when TYPE_DIGIT
|
167
|
+
skip_decimal_digits
|
168
|
+
c = peek_cp
|
169
|
+
if c == 0x2e # '.'
|
170
|
+
@pos += 1
|
171
|
+
consume_float(s, c)
|
172
|
+
else
|
173
|
+
@token_value = @text[s..@pos].to_i
|
174
|
+
@token = TOKEN_INT
|
175
|
+
end
|
176
|
+
|
177
|
+
when TYPE_DELIM
|
178
|
+
@token_value = @text[s]
|
179
|
+
@token = c
|
180
|
+
|
181
|
+
when TYPE_KEY_START
|
182
|
+
if @char_types[peek_cp] == TYPE_ALPHA
|
183
|
+
next_token
|
184
|
+
@token = TOKEN_KEY
|
185
|
+
else
|
186
|
+
parse_error(_("expected identifier after ':'"))
|
187
|
+
end
|
188
|
+
|
189
|
+
when TYPE_STRING_START
|
190
|
+
consume_string
|
191
|
+
else
|
192
|
+
consume_identifier(s)
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
def consume_identifier(s)
|
197
|
+
while @char_types[peek_cp] >= TYPE_IDENTIFIER do
|
198
|
+
@pos += 1
|
199
|
+
end
|
200
|
+
id = @text[s...@pos]
|
201
|
+
case id
|
202
|
+
when LIT_TRUE
|
203
|
+
@token = TOKEN_BOOL
|
204
|
+
@token_value = true
|
205
|
+
when LIT_FALSE
|
206
|
+
@token = TOKEN_BOOL
|
207
|
+
@token_value = false
|
208
|
+
when LIT_NIL
|
209
|
+
@token = TOKEN_NIL
|
210
|
+
@token_value = nil
|
211
|
+
else
|
212
|
+
@token = TOKEN_IDENTIFIER
|
213
|
+
@token_value = id
|
214
|
+
end
|
215
|
+
end
|
216
|
+
|
217
|
+
def consume_string
|
218
|
+
s = @pos
|
219
|
+
b = ''
|
220
|
+
loop do
|
221
|
+
c = next_cp
|
222
|
+
case c
|
223
|
+
when TOKEN_END
|
224
|
+
@pos = s - 1
|
225
|
+
parse_error(_('unterminated quote'))
|
226
|
+
when TOKEN_STRING
|
227
|
+
@token_value = b
|
228
|
+
@token = TOKEN_STRING
|
229
|
+
break
|
230
|
+
when 0x5c # '\'
|
231
|
+
c = next_cp
|
232
|
+
case c
|
233
|
+
when 0x74 # 't'
|
234
|
+
b << "\t"
|
235
|
+
when 0x72 # 'r'
|
236
|
+
b << "\r"
|
237
|
+
when 0x6e # 'n'
|
238
|
+
b << "\n"
|
239
|
+
when TOKEN_STRING
|
240
|
+
b << '"'
|
241
|
+
when 0x5c # '\'
|
242
|
+
b << "\\"
|
243
|
+
when 0x6f # 'o'
|
244
|
+
c = 0
|
245
|
+
3.times do
|
246
|
+
n = next_cp
|
247
|
+
if 0x30 <= n && n <= 0x37c
|
248
|
+
c *= 8
|
249
|
+
c += n - 0x30
|
250
|
+
else
|
251
|
+
parse_error(_('malformed octal quote'))
|
252
|
+
end
|
253
|
+
end
|
254
|
+
b << c
|
255
|
+
else
|
256
|
+
b << "\\"
|
257
|
+
b << c
|
258
|
+
end
|
259
|
+
else
|
260
|
+
b << c
|
261
|
+
end
|
262
|
+
end
|
263
|
+
end
|
264
|
+
|
265
|
+
def consume_float(s, d)
|
266
|
+
parse_error(_('digit expected')) if skip_decimal_digits == 0
|
267
|
+
c = peek_cp
|
268
|
+
if d == 0x2e # '.'
|
269
|
+
if c == 0x45 || c == 0x65 # 'E' or 'e'
|
270
|
+
@pos += 1
|
271
|
+
parse_error(_('digit expected')) if skip_decimal_digits == 0
|
272
|
+
c = peek_cp
|
273
|
+
end
|
274
|
+
end
|
275
|
+
parse_error(_('digit expected')) if @char_types[c] == TYPE_ALPHA
|
276
|
+
@token_value = @text[s...@pos].to_f
|
277
|
+
@token = TOKEN_FLOAT
|
278
|
+
end
|
279
|
+
|
280
|
+
def skip_decimal_digits
|
281
|
+
count = 0
|
282
|
+
c = peek_cp
|
283
|
+
if c == 0x2d || c == 0x2b # '-' or '+'
|
284
|
+
@pos += 1
|
285
|
+
c = peek_cp
|
286
|
+
end
|
287
|
+
|
288
|
+
while @char_types[c] == TYPE_DIGIT do
|
289
|
+
@pos += 1
|
290
|
+
c = peek_cp
|
291
|
+
count += 1
|
292
|
+
end
|
293
|
+
count
|
294
|
+
end
|
295
|
+
|
296
|
+
def skip_white
|
297
|
+
while @char_types[peek_cp] == TYPE_WS do
|
298
|
+
@pos += 1
|
299
|
+
end
|
300
|
+
end
|
301
|
+
|
302
|
+
def next_cp
|
303
|
+
c = 0
|
304
|
+
if @pos < @codepoints.size
|
305
|
+
c = @codepoints[@pos]
|
306
|
+
@pos += 1
|
307
|
+
end
|
308
|
+
c
|
309
|
+
end
|
310
|
+
|
311
|
+
def peek_cp
|
312
|
+
@pos < @codepoints.size ? @codepoints[@pos] : 0
|
313
|
+
end
|
314
|
+
end
|
315
|
+
end
|
316
|
+
end
|
data/lib/puppet/pops/pcore.rb
CHANGED
@@ -31,14 +31,7 @@ module Pcore
|
|
31
31
|
instance
|
32
32
|
end
|
33
33
|
|
34
|
-
def self.
|
35
|
-
add_alias('Pcore::URI_RX', TYPE_URI_RX, loader)
|
36
|
-
add_type(TYPE_URI_ALIAS, loader)
|
37
|
-
add_alias('Pcore::SimpleTypeName', TYPE_SIMPLE_TYPE_NAME, loader)
|
38
|
-
add_alias('Pcore::MemberName', TYPE_MEMBER_NAME, loader)
|
39
|
-
add_alias('Pcore::TypeName', TYPE_QUALIFIED_REFERENCE, loader)
|
40
|
-
add_alias('Pcore::QRef', TYPE_QUALIFIED_REFERENCE, loader)
|
41
|
-
|
34
|
+
def self.init_env(loader)
|
42
35
|
if Puppet[:tasks]
|
43
36
|
add_object_type('Task', <<-PUPPET, loader)
|
44
37
|
{
|
@@ -83,18 +76,25 @@ module Pcore
|
|
83
76
|
}
|
84
77
|
PUPPET
|
85
78
|
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def self.init(loader, ir)
|
82
|
+
add_alias('Pcore::URI_RX', TYPE_URI_RX, loader)
|
83
|
+
add_type(TYPE_URI_ALIAS, loader)
|
84
|
+
add_alias('Pcore::SimpleTypeName', TYPE_SIMPLE_TYPE_NAME, loader)
|
85
|
+
add_alias('Pcore::MemberName', TYPE_MEMBER_NAME, loader)
|
86
|
+
add_alias('Pcore::TypeName', TYPE_QUALIFIED_REFERENCE, loader)
|
87
|
+
add_alias('Pcore::QRef', TYPE_QUALIFIED_REFERENCE, loader)
|
86
88
|
Types::TypedModelObject.register_ptypes(loader, ir)
|
87
89
|
|
88
90
|
@type = create_object_type(loader, ir, Pcore, 'Pcore', nil)
|
89
91
|
|
90
|
-
ir.register_implementation_namespace('Pcore', 'Puppet::Pops::Pcore'
|
91
|
-
ir.register_implementation_namespace('Puppet::AST', 'Puppet::Pops::Model'
|
92
|
-
ir.register_implementation('Puppet::AST::Locator', 'Puppet::Pops::Parser::Locator::Locator19'
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
Lookup::DataProvider.register_types(loader)
|
97
|
-
end
|
92
|
+
ir.register_implementation_namespace('Pcore', 'Puppet::Pops::Pcore')
|
93
|
+
ir.register_implementation_namespace('Puppet::AST', 'Puppet::Pops::Model')
|
94
|
+
ir.register_implementation('Puppet::AST::Locator', 'Puppet::Pops::Parser::Locator::Locator19')
|
95
|
+
Resource.register_ptypes(loader, ir)
|
96
|
+
Lookup::Context.register_ptype(loader, ir);
|
97
|
+
Lookup::DataProvider.register_types(loader)
|
98
98
|
end
|
99
99
|
|
100
100
|
# Create and register a new `Object` type in the Puppet Type System and map it to an implementation class
|
@@ -116,7 +116,7 @@ module Pcore
|
|
116
116
|
init_hash[Types::KEY_ATTRIBUTES] = attributes_hash unless attributes_hash.empty?
|
117
117
|
init_hash[Types::KEY_FUNCTIONS] = functions_hash unless functions_hash.empty?
|
118
118
|
init_hash[Types::KEY_EQUALITY] = equality unless equality.nil?
|
119
|
-
ir.register_implementation(type_name, impl_class
|
119
|
+
ir.register_implementation(type_name, impl_class)
|
120
120
|
add_type(Types::PObjectType.new(type_name, init_hash), loader)
|
121
121
|
end
|
122
122
|
|
@@ -0,0 +1,236 @@
|
|
1
|
+
module Puppet::Pops
|
2
|
+
module PN
|
3
|
+
KEY_PATTERN = /^[A-Za-z_-][0-9A-Za-z_-]*$/
|
4
|
+
|
5
|
+
def pnError(message)
|
6
|
+
raise ArgumentError, message
|
7
|
+
end
|
8
|
+
|
9
|
+
def as_call(name)
|
10
|
+
Call.new(name, self)
|
11
|
+
end
|
12
|
+
|
13
|
+
def as_parameters
|
14
|
+
[self]
|
15
|
+
end
|
16
|
+
|
17
|
+
def ==(o)
|
18
|
+
eql?(o)
|
19
|
+
end
|
20
|
+
|
21
|
+
def to_s
|
22
|
+
s = ''
|
23
|
+
format(nil, s)
|
24
|
+
s
|
25
|
+
end
|
26
|
+
|
27
|
+
def with_name(name)
|
28
|
+
Entry.new(name, self)
|
29
|
+
end
|
30
|
+
|
31
|
+
def double_quote(str, bld)
|
32
|
+
bld << '"'
|
33
|
+
str.each_codepoint do |codepoint|
|
34
|
+
case codepoint
|
35
|
+
when 0x09
|
36
|
+
bld << '\\t'
|
37
|
+
when 0x0a
|
38
|
+
bld << '\\n'
|
39
|
+
when 0x0d
|
40
|
+
bld << '\\r'
|
41
|
+
when 0x22
|
42
|
+
bld << '\\"'
|
43
|
+
when 0x5c
|
44
|
+
bld << '\\\\'
|
45
|
+
else
|
46
|
+
if codepoint < 0x20
|
47
|
+
bld << sprintf('\\o%3.3o', codepoint)
|
48
|
+
elsif codepoint <= 0x7f
|
49
|
+
bld << codepoint
|
50
|
+
else
|
51
|
+
bld << [codepoint].pack('U')
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
bld << '"'
|
56
|
+
end
|
57
|
+
|
58
|
+
def format_elements(elements, indent, b)
|
59
|
+
elements.each_with_index do |e, i|
|
60
|
+
if indent
|
61
|
+
b << "\n" << indent.current
|
62
|
+
elsif i > 0
|
63
|
+
b << ' '
|
64
|
+
end
|
65
|
+
e.format(indent, b)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
class Indent
|
70
|
+
attr_reader :current
|
71
|
+
def initialize(indent = ' ', current = '')
|
72
|
+
@indent = indent
|
73
|
+
@current = current
|
74
|
+
end
|
75
|
+
|
76
|
+
def increase
|
77
|
+
Indent.new(@indent, @current + @indent)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
class Call
|
82
|
+
include PN
|
83
|
+
attr_reader :name, :elements
|
84
|
+
|
85
|
+
def initialize(name, *elements)
|
86
|
+
@name = name
|
87
|
+
@elements = elements
|
88
|
+
end
|
89
|
+
|
90
|
+
def [](idx)
|
91
|
+
@elements[idx]
|
92
|
+
end
|
93
|
+
|
94
|
+
def as_call(name)
|
95
|
+
Call.new(name, *@elements)
|
96
|
+
end
|
97
|
+
|
98
|
+
def as_parameters
|
99
|
+
List.new(@elements)
|
100
|
+
end
|
101
|
+
|
102
|
+
def eql?(o)
|
103
|
+
o.is_a?(Call) && @name == o.name && @elements == o.elements
|
104
|
+
end
|
105
|
+
|
106
|
+
def format(indent, b)
|
107
|
+
b << '(' << @name
|
108
|
+
if @elements.size > 0
|
109
|
+
b << ' ' unless indent
|
110
|
+
format_elements(@elements, indent ? indent.increase : nil, b)
|
111
|
+
end
|
112
|
+
b << ')'
|
113
|
+
end
|
114
|
+
|
115
|
+
def to_data
|
116
|
+
{ '^' => [@name] + @elements.map { |e| e.to_data } }
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
class Entry
|
121
|
+
attr_reader :key, :value
|
122
|
+
def initialize(key, value)
|
123
|
+
@key = key
|
124
|
+
@value = value
|
125
|
+
end
|
126
|
+
|
127
|
+
def eql?(o)
|
128
|
+
o.is_a?(Entry) && @key == o.key && @value == o.value
|
129
|
+
end
|
130
|
+
|
131
|
+
alias == eql?
|
132
|
+
end
|
133
|
+
|
134
|
+
class List
|
135
|
+
include PN
|
136
|
+
attr_reader :elements
|
137
|
+
|
138
|
+
def initialize(elements)
|
139
|
+
@elements = elements
|
140
|
+
end
|
141
|
+
|
142
|
+
def [](idx)
|
143
|
+
@elements[idx]
|
144
|
+
end
|
145
|
+
|
146
|
+
def as_call(name)
|
147
|
+
Call.new(name, *@elements)
|
148
|
+
end
|
149
|
+
|
150
|
+
def as_parameters
|
151
|
+
@elements
|
152
|
+
end
|
153
|
+
|
154
|
+
def eql?(o)
|
155
|
+
o.is_a?(List) && @elements == o.elements
|
156
|
+
end
|
157
|
+
|
158
|
+
def format(indent, b)
|
159
|
+
b << '['
|
160
|
+
format_elements(@elements, indent ? indent.increase : nil, b) unless @elements.empty?
|
161
|
+
b << ']'
|
162
|
+
end
|
163
|
+
|
164
|
+
def to_data
|
165
|
+
@elements.map { |e| e.to_data }
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
class Literal
|
170
|
+
include PN
|
171
|
+
attr_reader :value
|
172
|
+
|
173
|
+
def initialize(value)
|
174
|
+
@value = value
|
175
|
+
end
|
176
|
+
|
177
|
+
def format(indent, b)
|
178
|
+
if @value.nil?
|
179
|
+
b << 'nil'
|
180
|
+
elsif value.is_a?(String)
|
181
|
+
double_quote(value, b)
|
182
|
+
else
|
183
|
+
b << value.to_s
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
def eql?(o)
|
188
|
+
o.is_a?(Literal) && @value == o.value
|
189
|
+
end
|
190
|
+
|
191
|
+
def to_data
|
192
|
+
@value
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
class Map
|
197
|
+
include PN
|
198
|
+
attr_reader :entries
|
199
|
+
|
200
|
+
def initialize(entries)
|
201
|
+
entries.each { |e| pnError("key #{e.key} does not conform to pattern /#{KEY_PATTERN.source}/)") unless e.key =~ KEY_PATTERN }
|
202
|
+
@entries = entries
|
203
|
+
end
|
204
|
+
|
205
|
+
def eql?(o)
|
206
|
+
o.is_a?(Map) && @entries == o.entries
|
207
|
+
end
|
208
|
+
|
209
|
+
def format(indent, b)
|
210
|
+
local_indent = indent ? indent.increase : nil
|
211
|
+
b << '{'
|
212
|
+
@entries.each_with_index do |e,i|
|
213
|
+
if indent
|
214
|
+
b << "\n" << local_indent.current
|
215
|
+
elsif i > 0
|
216
|
+
b << ' '
|
217
|
+
end
|
218
|
+
b << ':' << e.key
|
219
|
+
b << ' '
|
220
|
+
e.value.format(local_indent, b)
|
221
|
+
end
|
222
|
+
b << '}'
|
223
|
+
end
|
224
|
+
|
225
|
+
def to_data
|
226
|
+
r = []
|
227
|
+
@entries.each { |e| r << e.key << e.value.to_data }
|
228
|
+
{ '#' => r }
|
229
|
+
end
|
230
|
+
end
|
231
|
+
end
|
232
|
+
end
|
233
|
+
|
234
|
+
require_relative 'model/pn_transformer'
|
235
|
+
require_relative 'parser/pn_parser'
|
236
|
+
|