puppet 3.4.3 → 3.5.0.rc1
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/CONTRIBUTING.md +6 -6
- data/Gemfile +22 -16
- data/LICENSE +1 -1
- data/README.md +33 -11
- data/Rakefile +1 -1
- data/conf/auth.conf +4 -0
- data/ext/build_defaults.yaml +1 -1
- data/ext/debian/control +6 -6
- data/ext/ips/transforms +1 -1
- data/ext/nagios/naggen +1 -1
- data/ext/project_data.yaml +21 -1
- data/ext/puppet-test +3 -3
- data/ext/redhat/puppet.spec.erb +28 -2
- data/ext/suse/puppet.spec +1 -1
- data/ext/upload_facts.rb +1 -1
- data/ext/windows/service/daemon.rb +99 -20
- data/lib/hiera_puppet.rb +2 -2
- data/lib/puppet.rb +68 -5
- data/lib/puppet/agent.rb +5 -1
- data/lib/puppet/application.rb +20 -11
- data/lib/puppet/application/agent.rb +1 -1
- data/lib/puppet/application/apply.rb +61 -41
- data/lib/puppet/application/cert.rb +3 -3
- data/lib/puppet/application/device.rb +7 -8
- data/lib/puppet/application/doc.rb +1 -1
- data/lib/puppet/application/filebucket.rb +3 -3
- data/lib/puppet/application/kick.rb +2 -2
- data/lib/puppet/application/master.rb +1 -1
- data/lib/puppet/application/queue.rb +9 -9
- data/lib/puppet/application/resource.rb +2 -2
- data/lib/puppet/bindings.rb +6 -6
- data/lib/puppet/configurer.rb +17 -14
- data/lib/puppet/configurer/fact_handler.rb +1 -1
- data/lib/puppet/confine/any.rb +26 -0
- data/lib/puppet/confine/exists.rb +1 -1
- data/lib/puppet/confiner.rb +1 -0
- data/lib/puppet/context.rb +55 -0
- data/lib/puppet/context/trusted_information.rb +56 -0
- data/lib/puppet/defaults.rb +97 -26
- data/lib/puppet/environments.rb +187 -0
- data/lib/puppet/error.rb +2 -1
- data/lib/puppet/external/pson/common.rb +1 -1
- data/lib/puppet/external/pson/pure/generator.rb +1 -1
- data/lib/puppet/external/pson/pure/parser.rb +1 -1
- data/lib/puppet/face/config.rb +73 -15
- data/lib/puppet/face/file/store.rb +1 -1
- data/lib/puppet/face/help.rb +2 -1
- data/lib/puppet/face/help/action.erb +1 -0
- data/lib/puppet/face/help/face.erb +1 -0
- data/lib/puppet/face/help/global.erb +1 -0
- data/lib/puppet/face/help/man.erb +9 -8
- data/lib/puppet/face/module/list.rb +13 -7
- data/lib/puppet/face/node/clean.rb +2 -2
- data/lib/puppet/face/parser.rb +11 -5
- data/lib/puppet/face/status.rb +1 -1
- data/lib/puppet/feature/external_facts.rb +2 -2
- data/lib/puppet/feature/libuser.rb +1 -1
- data/lib/puppet/feature/msgpack.rb +2 -0
- data/lib/puppet/feature/rails.rb +2 -2
- data/lib/puppet/file_bucket/dipper.rb +9 -9
- data/lib/puppet/file_bucket/file.rb +9 -5
- data/lib/puppet/file_serving/base.rb +1 -1
- data/lib/puppet/file_serving/configuration.rb +1 -1
- data/lib/puppet/file_serving/configuration/parser.rb +3 -3
- data/lib/puppet/file_serving/content.rb +2 -2
- data/lib/puppet/file_serving/fileset.rb +4 -4
- data/lib/puppet/file_serving/metadata.rb +69 -15
- data/lib/puppet/file_serving/mount/file.rb +1 -1
- data/lib/puppet/file_system.rb +361 -1
- data/lib/puppet/file_system/file18.rb +3 -3
- data/lib/puppet/file_system/file19.rb +3 -3
- data/lib/puppet/file_system/file19windows.rb +18 -23
- data/lib/puppet/file_system/file_impl.rb +145 -0
- data/lib/puppet/file_system/memory_file.rb +23 -9
- data/lib/puppet/file_system/memory_impl.rb +64 -0
- data/lib/puppet/forge.rb +4 -3
- data/lib/puppet/forge/repository.rb +0 -1
- data/lib/puppet/graph/relationship_graph.rb +7 -7
- data/lib/puppet/indirector.rb +1 -0
- data/lib/puppet/indirector/catalog/compiler.rb +3 -30
- data/lib/puppet/indirector/catalog/msgpack.rb +6 -0
- data/lib/puppet/indirector/catalog/static_compiler.rb +3 -7
- data/lib/puppet/indirector/data_binding/hiera.rb +1 -1
- data/lib/puppet/indirector/direct_file_server.rb +2 -2
- data/lib/puppet/indirector/exec.rb +1 -1
- data/lib/puppet/indirector/face.rb +3 -2
- data/lib/puppet/indirector/facts/facter.rb +1 -1
- data/lib/puppet/indirector/file_bucket_file/file.rb +25 -15
- data/lib/puppet/indirector/file_metadata/file.rb +1 -1
- data/lib/puppet/indirector/file_server.rb +1 -1
- data/lib/puppet/indirector/indirection.rb +1 -1
- data/lib/puppet/indirector/json.rb +4 -4
- data/lib/puppet/indirector/key/file.rb +8 -5
- data/lib/puppet/indirector/ldap.rb +1 -1
- data/lib/puppet/indirector/memory.rb +4 -0
- data/lib/puppet/indirector/msgpack.rb +82 -0
- data/lib/puppet/indirector/node/exec.rb +1 -1
- data/lib/puppet/indirector/node/ldap.rb +3 -3
- data/lib/puppet/indirector/node/msgpack.rb +7 -0
- data/lib/puppet/indirector/node/yaml.rb +15 -0
- data/lib/puppet/indirector/queue.rb +3 -2
- data/lib/puppet/indirector/report/msgpack.rb +11 -0
- data/lib/puppet/indirector/request.rb +17 -20
- data/lib/puppet/indirector/resource/rest.rb +1 -1
- data/lib/puppet/indirector/resource_type/parser.rb +3 -13
- data/lib/puppet/indirector/rest.rb +6 -7
- data/lib/puppet/indirector/ssl_file.rb +7 -7
- data/lib/puppet/indirector/yaml.rb +9 -13
- data/lib/puppet/metatype/manager.rb +12 -7
- data/lib/puppet/module.rb +14 -9
- data/lib/puppet/module_tool.rb +21 -26
- data/lib/puppet/module_tool/applications/application.rb +1 -1
- data/lib/puppet/module_tool/applications/generator.rb +2 -1
- data/lib/puppet/module_tool/applications/installer.rb +9 -4
- data/lib/puppet/module_tool/applications/uninstaller.rb +10 -7
- data/lib/puppet/module_tool/applications/unpacker.rb +1 -1
- data/lib/puppet/module_tool/applications/upgrader.rb +11 -8
- data/lib/puppet/module_tool/checksums.rb +1 -1
- data/lib/puppet/module_tool/contents_description.rb +2 -0
- data/lib/puppet/module_tool/dependency.rb +4 -5
- data/lib/puppet/module_tool/errors.rb +2 -0
- data/lib/puppet/module_tool/install_directory.rb +3 -0
- data/lib/puppet/module_tool/metadata.rb +3 -5
- data/lib/puppet/module_tool/modulefile.rb +3 -0
- data/lib/puppet/module_tool/shared_behaviors.rb +6 -1
- data/lib/puppet/module_tool/skeleton.rb +3 -0
- data/lib/puppet/module_tool/tar.rb +3 -0
- data/lib/puppet/network/auth_config_parser.rb +1 -1
- data/lib/puppet/network/authconfig.rb +5 -2
- data/lib/puppet/network/authentication.rb +7 -2
- data/lib/puppet/network/authorization.rb +2 -2
- data/lib/puppet/network/format_support.rb +4 -0
- data/lib/puppet/network/formats.rb +9 -14
- data/lib/puppet/network/http.rb +11 -0
- data/lib/puppet/network/http/api.rb +0 -2
- data/lib/puppet/network/http/api/v1.rb +146 -11
- data/lib/puppet/network/http/api/v2.rb +32 -0
- data/lib/puppet/network/http/api/v2/authorization.rb +13 -0
- data/lib/puppet/network/http/api/v2/environments.rb +21 -0
- data/lib/puppet/network/http/connection.rb +94 -37
- data/lib/puppet/network/http/error.rb +69 -0
- data/lib/puppet/network/http/handler.rb +28 -196
- data/lib/puppet/network/http/issues.rb +9 -0
- data/lib/puppet/network/http/memory_response.rb +13 -0
- data/lib/puppet/network/http/rack/rest.rb +10 -18
- data/lib/puppet/network/http/request.rb +56 -0
- data/lib/puppet/network/http/response.rb +11 -0
- data/lib/puppet/network/http/route.rb +91 -0
- data/lib/puppet/network/http/webrick.rb +1 -1
- data/lib/puppet/network/http/webrick/rest.rb +7 -12
- data/lib/puppet/network/http_pool.rb +3 -3
- data/lib/puppet/network/rights.rb +4 -4
- data/lib/puppet/node.rb +23 -14
- data/lib/puppet/node/environment.rb +149 -125
- data/lib/puppet/node/facts.rb +6 -5
- data/lib/puppet/parameter.rb +1 -1
- data/lib/puppet/parser/ast.rb +1 -1
- data/lib/puppet/parser/ast/block_expression.rb +1 -6
- data/lib/puppet/parser/ast/collexpr.rb +54 -2
- data/lib/puppet/parser/ast/lambda.rb +9 -0
- data/lib/puppet/parser/ast/leaf.rb +15 -0
- data/lib/puppet/parser/ast/pops_bridge.rb +168 -0
- data/lib/puppet/parser/code_merger.rb +13 -0
- data/lib/puppet/parser/collector.rb +1 -1
- data/lib/puppet/parser/compiler.rb +28 -30
- data/lib/puppet/parser/e4_parser_adapter.rb +81 -0
- data/lib/puppet/parser/e_parser_adapter.rb +0 -1
- data/lib/puppet/parser/files.rb +12 -7
- data/lib/puppet/parser/functions.rb +36 -29
- data/lib/puppet/parser/functions/collect.rb +1 -1
- data/lib/puppet/parser/functions/defined.rb +40 -16
- data/lib/puppet/parser/functions/each.rb +55 -41
- data/lib/puppet/parser/functions/epp.rb +41 -0
- data/lib/puppet/parser/functions/extlookup.rb +2 -2
- data/lib/puppet/parser/functions/file.rb +1 -1
- data/lib/puppet/parser/functions/filter.rb +68 -16
- data/lib/puppet/parser/functions/generate.rb +1 -1
- data/lib/puppet/parser/functions/include.rb +3 -2
- data/lib/puppet/parser/functions/inline_epp.rb +79 -0
- data/lib/puppet/parser/functions/inline_template.rb +1 -1
- data/lib/puppet/parser/functions/lookup.rb +127 -27
- data/lib/puppet/parser/functions/map.rb +64 -12
- data/lib/puppet/parser/functions/reduce.rb +40 -16
- data/lib/puppet/parser/functions/select.rb +1 -1
- data/lib/puppet/parser/functions/slice.rb +42 -23
- data/lib/puppet/parser/grammar.ra +3 -0
- data/lib/puppet/parser/lexer.rb +10 -9
- data/lib/puppet/parser/parser.rb +15 -12
- data/lib/puppet/parser/parser_factory.rb +26 -1
- data/lib/puppet/parser/parser_support.rb +13 -4
- data/lib/puppet/parser/resource.rb +1 -1
- data/lib/puppet/parser/scope.rb +246 -97
- data/lib/puppet/parser/templatewrapper.rb +1 -1
- data/lib/puppet/parser/type_loader.rb +13 -2
- data/lib/puppet/pops.rb +15 -1
- data/lib/puppet/pops/adapters.rb +64 -32
- data/lib/puppet/pops/binder/binder.rb +122 -150
- data/lib/puppet/pops/binder/binder_issues.rb +1 -21
- data/lib/puppet/pops/binder/bindings_checker.rb +0 -20
- data/lib/puppet/pops/binder/bindings_composer.rb +4 -70
- data/lib/puppet/pops/binder/bindings_factory.rb +16 -58
- data/lib/puppet/pops/binder/bindings_label_provider.rb +0 -3
- data/lib/puppet/pops/binder/bindings_loader.rb +13 -4
- data/lib/puppet/pops/binder/bindings_model.rb +17 -31
- data/lib/puppet/pops/binder/bindings_model_dumper.rb +2 -20
- data/lib/puppet/pops/binder/config/binder_config.rb +8 -40
- data/lib/puppet/pops/binder/config/binder_config_checker.rb +2 -43
- data/lib/puppet/pops/binder/config/issues.rb +1 -21
- data/lib/puppet/pops/binder/injector.rb +86 -7
- data/lib/puppet/pops/binder/injector_entry.rb +6 -2
- data/lib/puppet/pops/binder/key_factory.rb +7 -1
- data/lib/puppet/pops/binder/lookup.rb +191 -0
- data/lib/puppet/pops/binder/producers.rb +5 -5
- data/lib/puppet/pops/binder/scheme_handler/symbolic_scheme.rb +2 -3
- data/lib/puppet/pops/binder/system_bindings.rb +4 -16
- data/lib/puppet/pops/containment.rb +72 -5
- data/lib/puppet/pops/evaluator/access_operator.rb +548 -0
- data/lib/puppet/pops/evaluator/closure.rb +57 -0
- data/lib/puppet/pops/evaluator/compare_operator.rb +168 -0
- data/lib/puppet/pops/evaluator/epp_evaluator.rb +87 -0
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +1069 -0
- data/lib/puppet/pops/evaluator/external_syntax_support.rb +49 -0
- data/lib/puppet/pops/evaluator/relationship_operator.rb +156 -0
- data/lib/puppet/pops/evaluator/runtime3_support.rb +489 -0
- data/lib/puppet/pops/issue_reporter.rb +8 -4
- data/lib/puppet/pops/issues.rb +199 -4
- data/lib/puppet/pops/label_provider.rb +5 -0
- data/lib/puppet/pops/model/ast_transformer.rb +55 -31
- data/lib/puppet/pops/model/ast_tree_dumper.rb +9 -1
- data/lib/puppet/pops/model/factory.rb +265 -111
- data/lib/puppet/pops/model/model.rb +179 -140
- data/lib/puppet/pops/model/model_label_provider.rb +38 -9
- data/lib/puppet/pops/model/model_tree_dumper.rb +38 -13
- data/lib/puppet/pops/parser/code_merger.rb +17 -0
- data/lib/puppet/pops/parser/egrammar.ra +110 -61
- data/lib/puppet/pops/parser/eparser.rb +1415 -1092
- data/lib/puppet/pops/parser/epp_parser.rb +51 -0
- data/lib/puppet/pops/parser/epp_support.rb +247 -0
- data/lib/puppet/pops/parser/evaluating_parser.rb +53 -15
- data/lib/puppet/pops/parser/heredoc_support.rb +139 -0
- data/lib/puppet/pops/parser/interpolation_support.rb +227 -0
- data/lib/puppet/pops/parser/lexer.rb +83 -192
- data/lib/puppet/pops/parser/lexer2.rb +684 -0
- data/lib/puppet/pops/parser/lexer_support.rb +107 -0
- data/lib/puppet/pops/parser/locatable.rb +23 -0
- data/lib/puppet/pops/parser/locator.rb +291 -0
- data/lib/puppet/pops/parser/makefile +1 -8
- data/lib/puppet/pops/parser/parser_support.rb +76 -48
- data/lib/puppet/pops/parser/slurp_support.rb +95 -0
- data/lib/puppet/pops/patterns.rb +13 -4
- data/lib/puppet/pops/types/class_loader.rb +2 -2
- data/lib/puppet/pops/types/enumeration.rb +34 -0
- data/lib/puppet/pops/types/type_calculator.rb +983 -58
- data/lib/puppet/pops/types/type_factory.rb +203 -15
- data/lib/puppet/pops/types/type_parser.rb +355 -12
- data/lib/puppet/pops/types/types.rb +314 -24
- data/lib/puppet/pops/utils.rb +23 -7
- data/lib/puppet/pops/validation.rb +14 -8
- data/lib/puppet/pops/validation/checker3_1.rb +17 -12
- data/lib/puppet/pops/validation/checker4_0.rb +514 -0
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +31 -0
- data/lib/puppet/pops/visitor.rb +146 -4
- data/lib/puppet/property.rb +1 -1
- data/lib/puppet/property/ensure.rb +1 -1
- data/lib/puppet/provider.rb +47 -26
- data/lib/puppet/provider/aixobject.rb +3 -3
- data/lib/puppet/provider/augeas/augeas.rb +11 -11
- data/lib/puppet/provider/cron/crontab.rb +10 -1
- data/lib/puppet/provider/exec.rb +1 -1
- data/lib/puppet/provider/exec/posix.rb +1 -1
- data/lib/puppet/provider/exec/windows.rb +1 -1
- data/lib/puppet/provider/file/posix.rb +2 -2
- data/lib/puppet/provider/file/windows.rb +15 -9
- data/lib/puppet/provider/group/aix.rb +2 -2
- data/lib/puppet/provider/macauthorization/macauthorization.rb +3 -3
- data/lib/puppet/provider/mount.rb +7 -0
- data/lib/puppet/provider/mount/parsed.rb +0 -1
- data/lib/puppet/provider/naginator.rb +1 -1
- data/lib/puppet/provider/nameservice.rb +3 -3
- data/lib/puppet/provider/nameservice/directoryservice.rb +3 -3
- data/lib/puppet/provider/package/aix.rb +1 -1
- data/lib/puppet/provider/package/appdmg.rb +1 -4
- data/lib/puppet/provider/package/apple.rb +1 -1
- data/lib/puppet/provider/package/apt.rb +1 -1
- data/lib/puppet/provider/package/blastwave.rb +1 -1
- data/lib/puppet/provider/package/fink.rb +1 -1
- data/lib/puppet/provider/package/gem.rb +3 -3
- data/lib/puppet/provider/package/openbsd.rb +6 -4
- data/lib/puppet/provider/package/pacman.rb +58 -5
- data/lib/puppet/provider/package/pip.rb +2 -2
- data/lib/puppet/provider/package/pkgdmg.rb +25 -10
- data/lib/puppet/provider/package/pkgin.rb +48 -23
- data/lib/puppet/provider/package/pkgutil.rb +1 -1
- data/lib/puppet/provider/package/ports.rb +1 -1
- data/lib/puppet/provider/package/portupgrade.rb +7 -7
- data/lib/puppet/provider/package/rpm.rb +16 -8
- data/lib/puppet/provider/package/windows.rb +1 -1
- data/lib/puppet/provider/package/windows/package.rb +1 -1
- data/lib/puppet/provider/parsedfile.rb +1 -1
- data/lib/puppet/provider/selboolean/getsetsebool.rb +1 -1
- data/lib/puppet/provider/selmodule/semodule.rb +5 -5
- data/lib/puppet/provider/service/base.rb +1 -1
- data/lib/puppet/provider/service/bsd.rb +3 -3
- data/lib/puppet/provider/service/daemontools.rb +20 -20
- data/lib/puppet/provider/service/debian.rb +1 -1
- data/lib/puppet/provider/service/freebsd.rb +3 -3
- data/lib/puppet/provider/service/gentoo.rb +2 -2
- data/lib/puppet/provider/service/init.rb +5 -5
- data/lib/puppet/provider/service/launchd.rb +4 -4
- data/lib/puppet/provider/service/redhat.rb +2 -2
- data/lib/puppet/provider/service/runit.rb +4 -4
- data/lib/puppet/provider/service/service.rb +3 -4
- data/lib/puppet/provider/service/smf.rb +1 -1
- data/lib/puppet/provider/service/src.rb +3 -3
- data/lib/puppet/provider/service/systemd.rb +4 -4
- data/lib/puppet/provider/service/upstart.rb +22 -7
- data/lib/puppet/provider/service/windows.rb +7 -7
- data/lib/puppet/provider/ssh_authorized_key/parsed.rb +3 -3
- data/lib/puppet/provider/user/aix.rb +5 -5
- data/lib/puppet/provider/user/directoryservice.rb +8 -5
- data/lib/puppet/provider/user/ldap.rb +1 -1
- data/lib/puppet/provider/user/pw.rb +1 -1
- data/lib/puppet/provider/user/user_role_add.rb +2 -2
- data/lib/puppet/provider/user/useradd.rb +19 -5
- data/lib/puppet/provider/yumrepo/inifile.rb +187 -0
- data/lib/puppet/provider/zone/solaris.rb +4 -4
- data/lib/puppet/rails.rb +16 -11
- data/lib/puppet/rails/benchmark.rb +1 -1
- data/lib/puppet/rails/resource.rb +5 -1
- data/lib/puppet/reference/configuration.rb +1 -1
- data/lib/puppet/reference/report.rb +1 -1
- data/lib/puppet/relationship.rb +10 -5
- data/lib/puppet/reports/http.rb +8 -2
- data/lib/puppet/reports/rrdgraph.rb +1 -1
- data/lib/puppet/reports/store.rb +3 -3
- data/lib/puppet/reports/tagmail.rb +4 -4
- data/lib/puppet/resource.rb +37 -44
- data/lib/puppet/resource/catalog.rb +18 -20
- data/lib/puppet/resource/status.rb +7 -6
- data/lib/puppet/resource/type.rb +6 -5
- data/lib/puppet/resource/type_collection.rb +2 -2
- data/lib/puppet/run.rb +9 -8
- data/lib/puppet/settings.rb +395 -244
- data/lib/puppet/settings/base_setting.rb +10 -4
- data/lib/puppet/settings/config_file.rb +81 -44
- data/lib/puppet/settings/directory_setting.rb +1 -2
- data/lib/puppet/settings/file_setting.rb +12 -5
- data/lib/puppet/settings/ini_file.rb +171 -0
- data/lib/puppet/ssl/base.rb +4 -0
- data/lib/puppet/ssl/certificate_authority.rb +16 -11
- data/lib/puppet/ssl/certificate_authority/interface.rb +3 -2
- data/lib/puppet/ssl/certificate_factory.rb +50 -5
- data/lib/puppet/ssl/certificate_request.rb +2 -2
- data/lib/puppet/ssl/certificate_request_attributes.rb +1 -1
- data/lib/puppet/ssl/certificate_revocation_list.rb +3 -1
- data/lib/puppet/ssl/host.rb +9 -8
- data/lib/puppet/ssl/inventory.rb +1 -1
- data/lib/puppet/ssl/key.rb +1 -1
- data/lib/puppet/ssl/validator/default_validator.rb +1 -1
- data/lib/puppet/status.rb +8 -7
- data/lib/puppet/test/test_helper.rb +35 -4
- data/lib/puppet/transaction/event.rb +6 -5
- data/lib/puppet/transaction/report.rb +10 -10
- data/lib/puppet/type.rb +1 -3
- data/lib/puppet/type/augeas.rb +2 -1
- data/lib/puppet/type/cron.rb +41 -11
- data/lib/puppet/type/exec.rb +5 -5
- data/lib/puppet/type/file.rb +42 -4
- data/lib/puppet/type/file/content.rb +5 -6
- data/lib/puppet/type/file/ensure.rb +3 -3
- data/lib/puppet/type/file/source.rb +12 -6
- data/lib/puppet/type/file/target.rb +5 -5
- data/lib/puppet/type/k5login.rb +4 -4
- data/lib/puppet/type/mount.rb +1 -1
- data/lib/puppet/type/package.rb +79 -3
- data/lib/puppet/type/resources.rb +34 -5
- data/lib/puppet/type/selboolean.rb +1 -1
- data/lib/puppet/type/selmodule.rb +1 -1
- data/lib/puppet/type/ssh_authorized_key.rb +2 -1
- data/lib/puppet/type/sshkey.rb +2 -1
- data/lib/puppet/type/tidy.rb +1 -1
- data/lib/puppet/type/user.rb +4 -1
- data/lib/puppet/type/yumrepo.rb +219 -344
- data/lib/puppet/type/zone.rb +15 -5
- data/lib/puppet/util.rb +14 -13
- data/lib/puppet/util/adsi.rb +19 -3
- data/lib/puppet/util/autoload.rb +27 -24
- data/lib/puppet/util/backups.rb +6 -6
- data/lib/puppet/util/checksums.rb +2 -2
- data/lib/puppet/util/classgen.rb +1 -1
- data/lib/puppet/util/colors.rb +4 -12
- data/lib/puppet/util/command_line.rb +2 -2
- data/lib/puppet/util/command_line/trollop.rb +3 -3
- data/lib/puppet/util/docs.rb +2 -2
- data/lib/puppet/util/errors.rb +8 -1
- data/lib/puppet/util/execution.rb +12 -5
- data/lib/puppet/util/filetype.rb +5 -5
- data/lib/puppet/util/inifile.rb +19 -4
- data/lib/puppet/util/instrumentation/data.rb +5 -0
- data/lib/puppet/util/instrumentation/indirection_probe.rb +6 -1
- data/lib/puppet/util/instrumentation/listener.rb +6 -1
- data/lib/puppet/util/json_lockfile.rb +4 -1
- data/lib/puppet/util/ldap/connection.rb +1 -1
- data/lib/puppet/util/lockfile.rb +10 -6
- data/lib/puppet/util/log.rb +6 -1
- data/lib/puppet/util/log/destinations.rb +2 -2
- data/lib/puppet/util/metric.rb +9 -4
- data/lib/puppet/util/nagios_maker.rb +26 -1
- data/lib/puppet/util/network_device.rb +1 -1
- data/lib/puppet/util/network_device/config.rb +1 -1
- data/lib/puppet/util/network_device/transport/ssh.rb +3 -3
- data/lib/puppet/util/plugins.rb +1 -1
- data/lib/puppet/util/profiler.rb +13 -1
- data/lib/puppet/util/pson.rb +1 -1
- data/lib/puppet/util/queue/stomp.rb +2 -2
- data/lib/puppet/util/rdoc.rb +1 -1
- data/lib/puppet/util/rdoc/generators/puppet_generator.rb +1 -1
- data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +19 -19
- data/lib/puppet/util/reference.rb +1 -1
- data/lib/puppet/util/resource_template.rb +1 -1
- data/lib/puppet/util/retryaction.rb +1 -1
- data/lib/puppet/util/selinux.rb +2 -2
- data/lib/puppet/util/storage.rb +3 -3
- data/lib/puppet/util/symbolic_file_mode.rb +1 -1
- data/lib/puppet/util/tag_set.rb +15 -3
- data/lib/puppet/util/tagging.rb +12 -17
- data/lib/puppet/util/watched_file.rb +1 -1
- data/lib/puppet/util/watcher.rb +1 -1
- data/lib/puppet/util/windows/error.rb +2 -2
- data/lib/puppet/util/windows/file.rb +20 -4
- data/lib/puppet/util/windows/registry.rb +2 -2
- data/lib/puppet/vendor/safe_yaml/CHANGES.md +1 -1
- data/lib/puppet/version.rb +1 -1
- data/lib/puppetx.rb +1 -21
- data/lib/puppetx/puppet/syntax_checker.rb +1 -1
- data/lib/puppetx/puppetlabs/syntax_checkers/json.rb +9 -11
- data/spec/fixtures/integration/node/environment/sitedir/00_a.pp +2 -0
- data/spec/fixtures/integration/node/environment/sitedir/01_b.pp +6 -0
- data/spec/fixtures/{unit/pops/binder/hiera2/yaml_backend/empty/common.yaml → integration/node/environment/sitedir/03_empty.pp} +0 -0
- data/spec/fixtures/integration/node/environment/sitedir/04_include.pp +2 -0
- data/spec/fixtures/integration/provider/cron/crontab/purged +8 -0
- data/spec/fixtures/releases/jamtur01-apache/lib/puppet/provider/a2mod/debian.rb +1 -1
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/binder_config.yaml +3 -12
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/lib/puppet/bindings/confdirtest.rb +10 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome2/lib/puppet/bindings/awesome2/default.rb +20 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/{awesome/lib/puppetx/awesome → awesome2/lib/puppetx/awesome2}/echo_scheme_handler.rb +2 -2
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/bad/lib/puppet/bindings/bad/default.rb +5 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/good/lib/puppet/bindings/good/default.rb +6 -0
- data/spec/fixtures/unit/pops/binder/config/binder_config/ok/binder_config.yaml +2 -2
- data/spec/fixtures/unit/provider/service/systemd/{list_units → list_units_services} +0 -1
- data/spec/integration/agent/logging_spec.rb +1 -1
- data/spec/integration/application/apply_spec.rb +78 -3
- data/spec/integration/application/doc_spec.rb +3 -2
- data/spec/integration/configurer_spec.rb +5 -3
- data/spec/integration/directory_environments_spec.rb +50 -0
- data/spec/integration/indirector/direct_file_server_spec.rb +1 -1
- data/spec/integration/indirector/file_content/file_server_spec.rb +4 -5
- data/spec/integration/network/authconfig_spec.rb +4 -4
- data/spec/integration/network/formats_spec.rb +1 -1
- data/spec/integration/node/environment_spec.rb +67 -15
- data/spec/integration/node/facts_spec.rb +1 -1
- data/spec/integration/node_spec.rb +1 -1
- data/spec/integration/parser/catalog_spec.rb +100 -60
- data/spec/integration/parser/compiler_spec.rb +102 -13
- data/spec/integration/parser/future_compiler_spec.rb +416 -0
- data/spec/integration/parser/parser_spec.rb +44 -105
- data/spec/integration/parser/scope_spec.rb +614 -528
- data/spec/integration/provider/cron/crontab_spec.rb +21 -0
- data/spec/integration/provider/mount_spec.rb +15 -2
- data/spec/integration/resource/catalog_spec.rb +1 -1
- data/spec/integration/resource/type_collection_spec.rb +3 -4
- data/spec/integration/ssl/autosign_spec.rb +1 -1
- data/spec/integration/ssl/certificate_revocation_list_spec.rb +1 -1
- data/spec/integration/ssl/host_spec.rb +1 -1
- data/spec/integration/transaction_spec.rb +13 -13
- data/spec/integration/type/exec_spec.rb +2 -2
- data/spec/integration/type/file_spec.rb +114 -41
- data/spec/integration/type/nagios_spec.rb +80 -0
- data/spec/integration/type/tidy_spec.rb +2 -2
- data/spec/integration/util/execution_spec.rb +17 -0
- data/spec/integration/util/rdoc/parser_spec.rb +1 -1
- data/spec/integration/util/settings_spec.rb +1 -1
- data/spec/integration/util/windows/security_spec.rb +27 -2
- data/spec/lib/matchers/include.rb +27 -0
- data/spec/lib/matchers/include_spec.rb +32 -0
- data/spec/lib/matchers/json.rb +135 -79
- data/spec/lib/matchers/match_tokens2.rb +74 -0
- data/spec/lib/matchers/resource.rb +35 -0
- data/spec/lib/puppet/indirector/indirector_testing/memory.rb +7 -0
- data/spec/lib/puppet/indirector/indirector_testing/msgpack.rb +6 -0
- data/spec/lib/puppet/indirector_testing.rb +12 -2
- data/spec/lib/puppet_spec/files.rb +1 -0
- data/spec/lib/puppet_spec/matchers.rb +5 -0
- data/spec/lib/puppet_spec/modules.rb +1 -1
- data/spec/lib/puppet_spec/scope.rb +14 -0
- data/spec/shared_behaviours/file_server_terminus.rb +2 -2
- data/spec/spec_helper.rb +47 -17
- data/spec/unit/agent_spec.rb +8 -1
- data/spec/unit/application/agent_spec.rb +5 -4
- data/spec/unit/application/apply_spec.rb +34 -15
- data/spec/unit/application/device_spec.rb +27 -32
- data/spec/unit/application/doc_spec.rb +4 -4
- data/spec/unit/application/filebucket_spec.rb +1 -1
- data/spec/unit/application/master_spec.rb +2 -2
- data/spec/unit/application_spec.rb +1 -1
- data/spec/unit/configurer/downloader_spec.rb +1 -1
- data/spec/unit/configurer/fact_handler_spec.rb +5 -16
- data/spec/unit/configurer_spec.rb +2 -2
- data/spec/unit/confine/exists_spec.rb +5 -5
- data/spec/unit/context/trusted_information_spec.rb +124 -0
- data/spec/unit/context_spec.rb +74 -0
- data/spec/unit/environments_spec.rb +126 -0
- data/spec/unit/face/config_spec.rb +31 -16
- data/spec/unit/face/module/build_spec.rb +1 -0
- data/spec/unit/face/module/install_spec.rb +21 -104
- data/spec/unit/face/module/list_spec.rb +52 -36
- data/spec/unit/face/module/uninstall_spec.rb +18 -25
- data/spec/unit/face/parser_spec.rb +39 -23
- data/spec/unit/file_bucket/dipper_spec.rb +2 -2
- data/spec/unit/file_serving/base_spec.rb +9 -13
- data/spec/unit/file_serving/configuration/parser_spec.rb +8 -2
- data/spec/unit/file_serving/configuration_spec.rb +7 -7
- data/spec/unit/file_serving/content_spec.rb +7 -12
- data/spec/unit/file_serving/fileset_spec.rb +49 -53
- data/spec/unit/file_serving/metadata_spec.rb +83 -32
- data/spec/unit/file_serving/mount/file_spec.rb +10 -10
- data/spec/unit/file_system/tempfile_spec.rb +3 -3
- data/spec/unit/file_system_spec.rb +508 -0
- data/spec/unit/forge/errors_spec.rb +1 -1
- data/spec/unit/forge/repository_spec.rb +1 -3
- data/spec/unit/hiera/scope_spec.rb +6 -2
- data/spec/unit/hiera_puppet_spec.rb +13 -6
- data/spec/unit/indirector/catalog/msgpack_spec.rb +12 -0
- data/spec/unit/indirector/catalog/static_compiler_spec.rb +42 -11
- data/spec/unit/indirector/direct_file_server_spec.rb +6 -6
- data/spec/unit/indirector/facts/facter_spec.rb +5 -5
- data/spec/unit/indirector/file_bucket_file/file_spec.rb +4 -4
- data/spec/unit/indirector/file_metadata/file_spec.rb +2 -2
- data/spec/unit/indirector/file_server_spec.rb +4 -4
- data/spec/unit/indirector/json_spec.rb +6 -6
- data/spec/unit/indirector/key/file_spec.rb +8 -8
- data/spec/unit/indirector/msgpack_spec.rb +191 -0
- data/spec/unit/indirector/node/active_record_spec.rb +1 -1
- data/spec/unit/indirector/node/ldap_spec.rb +16 -7
- data/spec/unit/indirector/node/msgpack_spec.rb +24 -0
- data/spec/unit/indirector/node/plain_spec.rb +1 -1
- data/spec/unit/indirector/queue_spec.rb +1 -1
- data/spec/unit/indirector/report/msgpack_spec.rb +28 -0
- data/spec/unit/indirector/request_spec.rb +16 -8
- data/spec/unit/indirector/rest_spec.rb +0 -4
- data/spec/unit/indirector/ssl_file_spec.rb +12 -11
- data/spec/unit/indirector/yaml_spec.rb +4 -4
- data/spec/unit/man_spec.rb +32 -0
- data/spec/unit/module_spec.rb +60 -46
- data/spec/unit/module_tool/applications/checksummer_spec.rb +1 -1
- data/spec/unit/module_tool/applications/installer_spec.rb +53 -16
- data/spec/unit/module_tool/applications/uninstaller_spec.rb +26 -25
- data/spec/unit/module_tool/tar_spec.rb +1 -1
- data/spec/unit/module_tool_spec.rb +17 -90
- data/spec/unit/network/authconfig_spec.rb +3 -4
- data/spec/unit/network/authentication_spec.rb +20 -6
- data/spec/unit/network/authorization_spec.rb +11 -1
- data/spec/unit/network/formats_spec.rb +32 -9
- data/spec/unit/network/http/api/v1_spec.rb +365 -62
- data/spec/unit/network/http/api/v2/authorization_spec.rb +57 -0
- data/spec/unit/network/http/api/v2/environments_spec.rb +42 -0
- data/spec/unit/network/http/api/v2_spec.rb +14 -0
- data/spec/unit/network/http/connection_spec.rb +39 -5
- data/spec/unit/network/http/error_spec.rb +30 -0
- data/spec/unit/network/http/handler_spec.rb +69 -419
- data/spec/unit/network/http/rack/rest_spec.rb +20 -28
- data/spec/unit/network/http/route_spec.rb +75 -0
- data/spec/unit/network/http/webrick/rest_spec.rb +21 -58
- data/spec/unit/network/http_pool_spec.rb +3 -3
- data/spec/unit/network/rights_spec.rb +2 -2
- data/spec/unit/node/environment_spec.rb +108 -89
- data/spec/unit/node/facts_spec.rb +5 -12
- data/spec/unit/node_spec.rb +22 -22
- data/spec/unit/parser/ast/collection_spec.rb +1 -1
- data/spec/unit/parser/ast/leaf_spec.rb +2 -0
- data/spec/unit/parser/ast/resource_spec.rb +1 -1
- data/spec/unit/parser/compiler_spec.rb +5 -3
- data/spec/unit/parser/files_spec.rb +40 -50
- data/spec/unit/parser/functions/defined_spec.rb +80 -18
- data/spec/unit/parser/functions/epp_spec.rb +88 -0
- data/spec/unit/parser/functions/fqdn_rand_spec.rb +4 -1
- data/spec/unit/parser/functions/generate_spec.rb +6 -2
- data/spec/unit/parser/functions/hiera_array_spec.rb +5 -2
- data/spec/unit/parser/functions/hiera_hash_spec.rb +4 -1
- data/spec/unit/parser/functions/hiera_include_spec.rb +6 -3
- data/spec/unit/parser/functions/hiera_spec.rb +5 -2
- data/spec/unit/parser/functions/include_spec.rb +0 -1
- data/spec/unit/parser/functions/inline_epp_spec.rb +82 -0
- data/spec/unit/parser/functions/lookup_spec.rb +66 -16
- data/spec/unit/parser/functions_spec.rb +25 -91
- data/spec/unit/parser/lexer_spec.rb +1 -1
- data/spec/unit/parser/methods/filter_spec.rb +56 -0
- data/spec/unit/parser/methods/map_spec.rb +94 -5
- data/spec/unit/parser/methods/reduce_spec.rb +10 -0
- data/spec/unit/parser/methods/shared.rb +2 -18
- data/spec/unit/parser/methods/slice_spec.rb +39 -1
- data/spec/unit/parser/parser_spec.rb +14 -10
- data/spec/unit/parser/resource_spec.rb +3 -9
- data/spec/unit/parser/scope_spec.rb +81 -78
- data/spec/unit/parser/type_loader_spec.rb +0 -4
- data/spec/unit/pops/benchmark_spec.rb +142 -0
- data/spec/unit/pops/binder/binder_spec.rb +15 -34
- data/spec/unit/pops/binder/bindings_checker_spec.rb +0 -41
- data/spec/unit/pops/binder/bindings_composer_spec.rb +6 -31
- data/spec/unit/pops/binder/config/binder_config_spec.rb +5 -18
- data/spec/unit/pops/binder/injector_spec.rb +76 -81
- data/spec/unit/pops/evaluator/access_ops_spec.rb +376 -0
- data/spec/unit/pops/evaluator/arithmetic_ops_spec.rb +77 -0
- data/spec/unit/pops/evaluator/basic_expressions_spec.rb +103 -0
- data/spec/unit/pops/evaluator/collections_ops_spec.rb +111 -0
- data/spec/unit/pops/evaluator/comparison_ops_spec.rb +256 -0
- data/spec/unit/pops/evaluator/conditionals_spec.rb +190 -0
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +1045 -0
- data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +75 -0
- data/spec/unit/pops/evaluator/logical_ops_spec.rb +90 -0
- data/spec/unit/pops/evaluator/string_interpolation_spec.rb +44 -0
- data/spec/unit/pops/evaluator/variables_spec.rb +194 -0
- data/spec/unit/pops/factory_spec.rb +6 -29
- data/spec/unit/pops/issues_spec.rb +1 -1
- data/spec/unit/pops/model/ast_transformer_spec.rb +6 -9
- data/spec/unit/pops/model/model_spec.rb +2 -2
- data/spec/unit/pops/parser/epp_parser_spec.rb +86 -0
- data/spec/unit/pops/parser/evaluating_parser_spec.rb +4 -2
- data/spec/unit/pops/parser/lexer2_spec.rb +428 -0
- data/spec/unit/pops/parser/lexer_spec.rb +25 -86
- data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +29 -4
- data/spec/unit/pops/parser/parse_calls_spec.rb +10 -6
- data/spec/unit/pops/parser/parse_conditionals_spec.rb +0 -9
- data/spec/unit/pops/parser/parse_containers_spec.rb +43 -12
- data/spec/unit/pops/parser/parse_heredoc_spec.rb +73 -0
- data/spec/unit/pops/parser/parse_resource_spec.rb +14 -0
- data/spec/unit/pops/parser/parser_spec.rb +3 -1
- data/spec/unit/pops/transformer/transform_basic_expressions_spec.rb +4 -4
- data/spec/unit/pops/transformer/transform_calls_spec.rb +41 -6
- data/spec/unit/pops/transformer/transform_conditionals_spec.rb +0 -9
- data/spec/unit/pops/transformer/transform_containers_spec.rb +12 -4
- data/spec/unit/pops/types/enumeration_spec.rb +50 -0
- data/spec/unit/pops/types/type_calculator_spec.rb +1171 -196
- data/spec/unit/pops/types/type_factory_spec.rb +108 -4
- data/spec/unit/pops/types/type_parser_spec.rb +114 -10
- data/spec/unit/pops/validator/validator_spec.rb +36 -1
- data/spec/unit/provider/augeas/augeas_spec.rb +39 -16
- data/spec/unit/provider/cron/parsed_spec.rb +27 -31
- data/spec/unit/provider/file/posix_spec.rb +2 -2
- data/spec/unit/provider/group/windows_adsi_spec.rb +1 -0
- data/spec/unit/provider/mount_spec.rb +12 -1
- data/spec/unit/provider/nameservice/directoryservice_spec.rb +3 -3
- data/spec/unit/provider/package/apt_spec.rb +1 -1
- data/spec/unit/provider/package/aptrpm_spec.rb +1 -1
- data/spec/unit/provider/package/gem_spec.rb +12 -0
- data/spec/unit/provider/package/msi_spec.rb +4 -0
- data/spec/unit/provider/package/openbsd_spec.rb +10 -10
- data/spec/unit/provider/package/pacman_spec.rb +36 -7
- data/spec/unit/provider/package/pkgin_spec.rb +57 -55
- data/spec/unit/provider/package/rpm_spec.rb +51 -6
- data/spec/unit/provider/service/base_spec.rb +4 -4
- data/spec/unit/provider/service/daemontools_spec.rb +8 -13
- data/spec/unit/provider/service/freebsd_spec.rb +3 -3
- data/spec/unit/provider/service/gentoo_spec.rb +24 -24
- data/spec/unit/provider/service/init_spec.rb +15 -15
- data/spec/unit/provider/service/openbsd_spec.rb +16 -16
- data/spec/unit/provider/service/openrc_spec.rb +20 -20
- data/spec/unit/provider/service/openwrt_spec.rb +1 -1
- data/spec/unit/provider/service/runit_spec.rb +5 -8
- data/spec/unit/provider/service/src_spec.rb +4 -4
- data/spec/unit/provider/service/systemd_spec.rb +24 -14
- data/spec/unit/provider/service/upstart_spec.rb +12 -4
- data/spec/unit/provider/service/windows_spec.rb +1 -1
- data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +21 -23
- data/spec/unit/provider/user/directoryservice_spec.rb +7 -7
- data/spec/unit/provider/user/useradd_spec.rb +43 -15
- data/spec/unit/provider/user/windows_adsi_spec.rb +1 -0
- data/spec/unit/provider/yumrepo/inifile_spec.rb +105 -0
- data/spec/unit/provider/zone/solaris_spec.rb +1 -1
- data/spec/unit/provider_spec.rb +120 -62
- data/spec/unit/rails/host_spec.rb +1 -1
- data/spec/unit/rails/param_value_spec.rb +4 -0
- data/spec/unit/relationship_spec.rb +4 -4
- data/spec/unit/reports/http_spec.rb +14 -3
- data/spec/unit/reports/rrdgraph_spec.rb +0 -1
- data/spec/unit/reports/store_spec.rb +2 -2
- data/spec/unit/resource/catalog_spec.rb +17 -29
- data/spec/unit/resource/status_spec.rb +1 -1
- data/spec/unit/resource/type_collection_spec.rb +28 -47
- data/spec/unit/resource/type_spec.rb +12 -23
- data/spec/unit/resource_spec.rb +54 -93
- data/spec/unit/run_spec.rb +3 -3
- data/spec/unit/settings/autosign_setting_spec.rb +1 -1
- data/spec/unit/settings/config_file_spec.rb +68 -15
- data/spec/unit/settings/file_setting_spec.rb +2 -2
- data/spec/unit/settings/ini_file_spec.rb +184 -0
- data/spec/unit/settings_spec.rb +137 -79
- data/spec/unit/ssl/certificate_authority/interface_spec.rb +3 -1
- data/spec/unit/ssl/certificate_authority_spec.rb +11 -9
- data/spec/unit/ssl/certificate_factory_spec.rb +19 -4
- data/spec/unit/ssl/certificate_request_attributes_spec.rb +1 -1
- data/spec/unit/ssl/certificate_revocation_list_spec.rb +101 -72
- data/spec/unit/ssl/host_spec.rb +8 -20
- data/spec/unit/ssl/inventory_spec.rb +2 -2
- data/spec/unit/ssl/key_spec.rb +4 -4
- data/spec/unit/status_spec.rb +6 -4
- data/spec/unit/transaction/additional_resource_generator_spec.rb +3 -11
- data/spec/unit/transaction/event_spec.rb +2 -2
- data/spec/unit/transaction/report_spec.rb +24 -15
- data/spec/unit/transaction/resource_harness_spec.rb +1 -1
- data/spec/unit/type/cron_spec.rb +39 -1
- data/spec/unit/type/file/content_spec.rb +4 -5
- data/spec/unit/type/file/ctime_spec.rb +1 -1
- data/spec/unit/type/file/mode_spec.rb +5 -4
- data/spec/unit/type/file/mtime_spec.rb +1 -1
- data/spec/unit/type/file/source_spec.rb +30 -7
- data/spec/unit/type/file_spec.rb +8 -8
- data/spec/unit/type/k5login_spec.rb +3 -3
- data/spec/unit/type/nagios_spec.rb +6 -0
- data/spec/unit/type/package/package_settings_spec.rb +135 -0
- data/spec/unit/type/package_spec.rb +13 -1
- data/spec/unit/type/resources_spec.rb +155 -0
- data/spec/unit/type/service_spec.rb +3 -3
- data/spec/unit/type/ssh_authorized_key_spec.rb +96 -93
- data/spec/unit/type/sshkey_spec.rb +39 -30
- data/spec/unit/type/tidy_spec.rb +19 -12
- data/spec/unit/type/user_spec.rb +47 -2
- data/spec/unit/type/whit_spec.rb +2 -2
- data/spec/unit/type/yumrepo_spec.rb +32 -177
- data/spec/unit/type/zone_spec.rb +2 -2
- data/spec/unit/type_spec.rb +11 -0
- data/spec/unit/util/adsi_spec.rb +48 -1
- data/spec/unit/util/autoload_spec.rb +24 -39
- data/spec/unit/util/backups_spec.rb +25 -28
- data/spec/unit/util/checksums_spec.rb +1 -3
- data/spec/unit/util/colors_spec.rb +14 -0
- data/spec/unit/util/docs_spec.rb +9 -0
- data/spec/unit/util/execution_spec.rb +1 -1
- data/spec/unit/util/filetype_spec.rb +7 -7
- data/spec/unit/util/instrumentation/data_spec.rb +3 -1
- data/spec/unit/util/instrumentation/indirection_probe_spec.rb +2 -0
- data/spec/unit/util/instrumentation/listener_spec.rb +3 -2
- data/spec/unit/util/json_lockfile_spec.rb +25 -4
- data/spec/unit/util/lockfile_spec.rb +49 -7
- data/spec/unit/util/log/destinations_spec.rb +1 -0
- data/spec/unit/util/log_spec.rb +1 -1
- data/spec/unit/util/metric_spec.rb +1 -1
- data/spec/unit/util/pidlock_spec.rb +6 -6
- data/spec/unit/util/pson_spec.rb +2 -2
- data/spec/unit/util/rdoc/parser_spec.rb +32 -29
- data/spec/unit/util/resource_template_spec.rb +3 -3
- data/spec/unit/util/selinux_spec.rb +5 -5
- data/spec/unit/util/storage_spec.rb +4 -4
- data/spec/unit/util/tag_set_spec.rb +1 -1
- data/spec/unit/util/watcher_spec.rb +1 -4
- data/spec/unit/util/yaml_spec.rb +2 -2
- data/spec/unit/util_spec.rb +7 -7
- data/tasks/benchmark.rake +0 -1
- data/tasks/parallel.rake +408 -0
- data/tasks/yard.rake +59 -0
- metadata +2889 -2782
- checksums.yaml +0 -7
- data/README_DEVELOPER.md +0 -809
- data/lib/puppet/file_system/file.rb +0 -271
- data/lib/puppet/network/http/rack/httphandler.rb +0 -13
- data/lib/puppet/pops/binder/hiera2.rb +0 -10
- data/lib/puppet/pops/binder/hiera2/bindings_provider.rb +0 -148
- data/lib/puppet/pops/binder/hiera2/config.rb +0 -69
- data/lib/puppet/pops/binder/hiera2/config_checker.rb +0 -68
- data/lib/puppet/pops/binder/hiera2/diagnostic_producer.rb +0 -36
- data/lib/puppet/pops/binder/hiera2/issues.rb +0 -67
- data/lib/puppet/pops/binder/hiera2/json_backend.rb +0 -18
- data/lib/puppet/pops/binder/hiera2/yaml_backend.rb +0 -21
- data/lib/puppet/pops/binder/scheme_handler/confdir_hiera_scheme.rb +0 -67
- data/lib/puppet/pops/binder/scheme_handler/module_hiera_scheme.rb +0 -92
- data/lib/puppet/pops/parser/grammar.ra +0 -746
- data/lib/puppet/provider/port/parsed.rb +0 -173
- data/lib/puppet/type/port.rb +0 -119
- data/lib/puppetx/puppet/hiera2_backend.rb +0 -31
- data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/binder_config.yaml +0 -18
- data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/hiera.yaml +0 -8
- data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/modules/good/common.yaml +0 -1
- data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/modules/good/hiera.yaml +0 -10
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/common.yaml +0 -1
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/hiera.yaml +0 -11
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/localhost.yaml +0 -1
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/common.yaml +0 -3
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/hiera.yaml +0 -13
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/lib/puppet/bindings/awesome/default.rb +0 -4
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/lib/puppetx/awesome/echo_backend.rb +0 -11
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/localhost.yaml +0 -1
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/bad/common.yaml +0 -3
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/bad/hiera_config.yaml +0 -9
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/good/common.yaml +0 -2
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/good/hiera.yaml +0 -11
- data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/hiera.yaml +0 -9
- data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/node.example.com.json +0 -9
- data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/node.example.com.yaml +0 -5
- data/spec/fixtures/unit/pops/binder/hiera2/config/bad_syntax/hiera.yaml +0 -10
- data/spec/fixtures/unit/pops/binder/hiera2/config/malformed_hierarchy/hiera.yaml +0 -8
- data/spec/fixtures/unit/pops/binder/hiera2/config/missing/foo.txt +0 -1
- data/spec/fixtures/unit/pops/binder/hiera2/config/no_backends/hiera.yaml +0 -7
- data/spec/fixtures/unit/pops/binder/hiera2/config/no_hierarchy/hiera.yaml +0 -4
- data/spec/fixtures/unit/pops/binder/hiera2/config/not_a_hash/hiera.yaml +0 -2
- data/spec/fixtures/unit/pops/binder/hiera2/config/ok/hiera.yaml +0 -8
- data/spec/fixtures/unit/pops/binder/hiera2/yaml_backend/invalid/common.yaml +0 -1
- data/spec/fixtures/unit/pops/binder/hiera2/yaml_backend/ok/common.yaml +0 -2
- data/spec/unit/file_system/file_spec.rb +0 -486
- data/spec/unit/pops/binder/hiera2/bindings_provider_spec.rb +0 -74
- data/spec/unit/pops/binder/hiera2/config_spec.rb +0 -61
- data/spec/unit/pops/binder/hiera2/yaml_backend_spec.rb +0 -33
@@ -0,0 +1,107 @@
|
|
1
|
+
# This is an integral part of the Lexer. It is broken out into a separate module
|
2
|
+
# for maintainability of the code, and making the various parts of the lexer focused.
|
3
|
+
#
|
4
|
+
module Puppet::Pops::Parser::LexerSupport
|
5
|
+
|
6
|
+
# Formats given message by appending file, line and position if available.
|
7
|
+
def positioned_message(msg, pos = nil)
|
8
|
+
result = [msg]
|
9
|
+
file = @locator.file
|
10
|
+
line = @locator.line_for_offset(pos || @scanner.pos)
|
11
|
+
pos = @locator.pos_on_line(pos || @scanner.pos)
|
12
|
+
|
13
|
+
result << "in file #{file}" if file && file.is_a?(String) && !file.empty?
|
14
|
+
result << "at line #{line}:#{pos}"
|
15
|
+
result.join(" ")
|
16
|
+
end
|
17
|
+
|
18
|
+
# Returns "<eof>" if at end of input, else the following 5 characters with \n \r \t escaped
|
19
|
+
def followed_by
|
20
|
+
return "<eof>" if @scanner.eos?
|
21
|
+
result = @scanner.rest[0,5] + "..."
|
22
|
+
result.gsub!("\t", '\t')
|
23
|
+
result.gsub!("\n", '\n')
|
24
|
+
result.gsub!("\r", '\r')
|
25
|
+
result
|
26
|
+
end
|
27
|
+
|
28
|
+
# Returns a quoted string using " or ' depending on the given a strings's content
|
29
|
+
def format_quote(q)
|
30
|
+
if q == "'"
|
31
|
+
'"\'"'
|
32
|
+
else
|
33
|
+
"'#{q}'"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# Raises a Puppet::LexError with the given message
|
38
|
+
def lex_error_without_pos msg
|
39
|
+
raise Puppet::LexError.new(msg)
|
40
|
+
end
|
41
|
+
|
42
|
+
# Raises a Puppet::LexError with the given message
|
43
|
+
def lex_error(msg, pos=nil)
|
44
|
+
raise Puppet::LexError.new(positioned_message(msg, pos))
|
45
|
+
end
|
46
|
+
|
47
|
+
# Asserts that the given string value is a float, or an integer in decimal, octal or hex form.
|
48
|
+
# An error is raised if the given value does not comply.
|
49
|
+
#
|
50
|
+
def assert_numeric(value, length)
|
51
|
+
if value =~ /^0[xX].*$/
|
52
|
+
lex_error("Not a valid hex number #{value}", length) unless value =~ /^0[xX][0-9A-Fa-f]+$/
|
53
|
+
|
54
|
+
elsif value =~ /^0[^.].*$/
|
55
|
+
lex_error("Not a valid octal number #{value}", length) unless value =~ /^0[0-7]+$/
|
56
|
+
|
57
|
+
else
|
58
|
+
lex_error("Not a valid decimal number #{value}", length) unless value =~ /0?\d+(?:\.\d+)?(?:[eE]-?\d+)?/
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
# A TokenValue keeps track of the token symbol, the lexed text for the token, its length
|
63
|
+
# and its position in its source container. There is a cost associated with computing the
|
64
|
+
# line and position on line information.
|
65
|
+
#
|
66
|
+
class TokenValue < Puppet::Pops::Parser::Locatable
|
67
|
+
attr_reader :token_array
|
68
|
+
attr_reader :offset
|
69
|
+
attr_reader :locator
|
70
|
+
|
71
|
+
def initialize(token_array, offset, locator)
|
72
|
+
@token_array = token_array
|
73
|
+
@offset = offset
|
74
|
+
@locator = locator
|
75
|
+
end
|
76
|
+
|
77
|
+
def length
|
78
|
+
@token_array[2]
|
79
|
+
end
|
80
|
+
|
81
|
+
def [](key)
|
82
|
+
case key
|
83
|
+
when :value
|
84
|
+
@token_array[1]
|
85
|
+
when :file
|
86
|
+
@locator.file
|
87
|
+
when :line
|
88
|
+
@locator.line_for_offset(@offset)
|
89
|
+
when :pos
|
90
|
+
@locator.pos_on_line(@offset)
|
91
|
+
when :length
|
92
|
+
@token_array[2]
|
93
|
+
when :locator
|
94
|
+
@locator
|
95
|
+
when :offset
|
96
|
+
@offset
|
97
|
+
else
|
98
|
+
nil
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
# TODO: Make this comparable for testing
|
103
|
+
# vs symbolic, vs array with symbol and non hash, array with symbol and hash)
|
104
|
+
#
|
105
|
+
end
|
106
|
+
|
107
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# Interface for something that is "locateable" (holds offset and length).
|
2
|
+
class Puppet::Pops::Parser::Locatable
|
3
|
+
|
4
|
+
# The offset in the locator's content
|
5
|
+
def offset
|
6
|
+
end
|
7
|
+
|
8
|
+
# The length in the locator from the given offset
|
9
|
+
def length
|
10
|
+
end
|
11
|
+
|
12
|
+
# This class is useful for testing
|
13
|
+
class Fixed < Puppet::Pops::Parser::Locatable
|
14
|
+
attr_reader :offset
|
15
|
+
attr_reader :length
|
16
|
+
|
17
|
+
def initialize(offset, length)
|
18
|
+
@offset = offset
|
19
|
+
@length = length
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1,291 @@
|
|
1
|
+
# Helper class that keeps track of where line breaks are located and can answer questions about positions.
|
2
|
+
#
|
3
|
+
class Puppet::Pops::Parser::Locator
|
4
|
+
|
5
|
+
RUBY_1_9_3 = (1 << 16 | 9 << 8 | 3)
|
6
|
+
RUBY_2_0_0 = (2 << 16 | 0 << 8 | 0)
|
7
|
+
RUBYVER_ARRAY = RUBY_VERSION.split(".").collect {|s| s.to_i }
|
8
|
+
RUBYVER = (RUBYVER_ARRAY[0] << 16 | RUBYVER_ARRAY[1] << 8 | RUBYVER_ARRAY[2])
|
9
|
+
|
10
|
+
# Computes a symbol representing which ruby runtime this is running on
|
11
|
+
# This implementation will fail if there are more than 255 minor or micro versions of ruby
|
12
|
+
#
|
13
|
+
def self.locator_version
|
14
|
+
if RUBYVER >= RUBY_2_0_0
|
15
|
+
:ruby20
|
16
|
+
elsif RUBYVER >= RUBY_1_9_3
|
17
|
+
:ruby19
|
18
|
+
else
|
19
|
+
:ruby18
|
20
|
+
end
|
21
|
+
end
|
22
|
+
LOCATOR_VERSION = locator_version
|
23
|
+
|
24
|
+
# Constant set to true if multibyte is supported (includes multibyte extended regular expressions)
|
25
|
+
MULTIBYTE = !!(LOCATOR_VERSION == :ruby19 || LOCATOR_VERSION == :ruby20)
|
26
|
+
|
27
|
+
# Creates, or recreates a Locator. A Locator is created if index is not given (a scan is then
|
28
|
+
# performed of the given source string.
|
29
|
+
#
|
30
|
+
def self.locator(string, file, index = nil)
|
31
|
+
case LOCATOR_VERSION
|
32
|
+
when :ruby20, :ruby19
|
33
|
+
Locator19.new(string, file, index)
|
34
|
+
else
|
35
|
+
Locator18.new(string, file, index)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
# Returns the file name associated with the string content
|
40
|
+
def file
|
41
|
+
end
|
42
|
+
|
43
|
+
# Returns the string content
|
44
|
+
def string
|
45
|
+
end
|
46
|
+
|
47
|
+
# Returns the position on line (first position on a line is 1)
|
48
|
+
def pos_on_line(offset)
|
49
|
+
end
|
50
|
+
|
51
|
+
# Returns the line number (first line is 1) for the given offset
|
52
|
+
def line_for_offset(offset)
|
53
|
+
end
|
54
|
+
|
55
|
+
# Returns the offset on line (first offset on a line is 0).
|
56
|
+
#
|
57
|
+
def offset_on_line(offset)
|
58
|
+
end
|
59
|
+
|
60
|
+
# Returns the character offset for a given reported offset
|
61
|
+
def char_offset(byte_offset)
|
62
|
+
end
|
63
|
+
|
64
|
+
# Returns the length measured in number of characters from the given start and end reported offseta
|
65
|
+
def char_length(offset, end_offset)
|
66
|
+
end
|
67
|
+
|
68
|
+
# Returns the line index - an array of line offsets for the start position of each line, starting at 0 for
|
69
|
+
# the first line.
|
70
|
+
#
|
71
|
+
def line_index()
|
72
|
+
end
|
73
|
+
|
74
|
+
# A Sublocator locates a concrete locator (subspace) in a virtual space.
|
75
|
+
# The `leading_line_count` is the (virtual) number of lines preceding the first line in the concrete locator.
|
76
|
+
# The `leading_offset` is the (virtual) byte offset of the first byte in the concrete locator.
|
77
|
+
# The `leading_line_offset` is the (virtual) offset / margin in characters for each line.
|
78
|
+
#
|
79
|
+
# This illustrates characters in the sublocator (`.`) inside the subspace (`X`):
|
80
|
+
#
|
81
|
+
# 1:XXXXXXXX
|
82
|
+
# 2:XXXX.... .. ... ..
|
83
|
+
# 3:XXXX. . .... ..
|
84
|
+
# 4:XXXX............
|
85
|
+
#
|
86
|
+
# This sublocator would be configured with leading_line_count = 1,
|
87
|
+
# leading_offset=8, and leading_line_offset=4
|
88
|
+
#
|
89
|
+
# Note that leading_offset must be the same for all lines and measured in characters.
|
90
|
+
#
|
91
|
+
class SubLocator < Puppet::Pops::Parser::Locator
|
92
|
+
attr_reader :locator
|
93
|
+
attr_reader :leading_line_count
|
94
|
+
attr_reader :leading_offset
|
95
|
+
attr_reader :leading_line_offset
|
96
|
+
|
97
|
+
def self.sub_locator(string, file, leading_line_count, leading_offset, leading_line_offset)
|
98
|
+
self.new(Puppet::Pops::Parser::Locator.locator(string, file),
|
99
|
+
leading_line_count,
|
100
|
+
leading_offset,
|
101
|
+
leading_line_offset)
|
102
|
+
end
|
103
|
+
|
104
|
+
def initialize(locator, leading_line_count, leading_offset, leading_line_offset)
|
105
|
+
@locator = locator
|
106
|
+
@leading_line_count = leading_line_count
|
107
|
+
@leading_offset = leading_offset
|
108
|
+
@leading_line_offset = leading_line_offset
|
109
|
+
end
|
110
|
+
|
111
|
+
def file
|
112
|
+
@locator.file
|
113
|
+
end
|
114
|
+
|
115
|
+
def string
|
116
|
+
@locator.string
|
117
|
+
end
|
118
|
+
|
119
|
+
# Given offset is offset in the subspace
|
120
|
+
def line_for_offset(offset)
|
121
|
+
@locator.line_for_offset(offset) + @leading_line_count
|
122
|
+
end
|
123
|
+
|
124
|
+
# Given offset is offset in the subspace
|
125
|
+
def offset_on_line(offset)
|
126
|
+
@locator.offset_on_line(offset) + @leading_line_offset
|
127
|
+
end
|
128
|
+
|
129
|
+
# Given offset is offset in the subspace
|
130
|
+
def char_offset(offset)
|
131
|
+
effective_line = @locator.line_for_offset(offset)
|
132
|
+
locator.char_offset(offset) + (effective_line * @leading_line_offset) + @leading_offset
|
133
|
+
end
|
134
|
+
|
135
|
+
# Given offsets are offsets in the subspace
|
136
|
+
def char_length(offset, end_offset)
|
137
|
+
effective_line = @locator.line_for_offset(end_offset) - @locator.line_for_offset(offset)
|
138
|
+
locator.char_length(offset, end_offset) + (effective_line * @leading_line_offset)
|
139
|
+
end
|
140
|
+
|
141
|
+
def pos_on_line(offset)
|
142
|
+
offset_on_line(offset) +1
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
private
|
147
|
+
|
148
|
+
class AbstractLocator < Puppet::Pops::Parser::Locator
|
149
|
+
attr_accessor :line_index
|
150
|
+
attr_accessor :string
|
151
|
+
attr_accessor :prev_offset
|
152
|
+
attr_accessor :prev_line
|
153
|
+
attr_reader :string
|
154
|
+
attr_reader :file
|
155
|
+
|
156
|
+
# Create a locator based on a content string, and a boolean indicating if ruby version support multi-byte strings
|
157
|
+
# or not.
|
158
|
+
#
|
159
|
+
def initialize(string, file, index = nil)
|
160
|
+
@string = string.freeze
|
161
|
+
@file = file.freeze
|
162
|
+
@prev_offset = nil
|
163
|
+
@prev_line = nil
|
164
|
+
@line_index = index
|
165
|
+
compute_line_index unless !index.nil?
|
166
|
+
end
|
167
|
+
|
168
|
+
# Returns the position on line (first position on a line is 1)
|
169
|
+
def pos_on_line(offset)
|
170
|
+
offset_on_line(offset) +1
|
171
|
+
end
|
172
|
+
|
173
|
+
def to_location_hash(reported_offset, end_offset)
|
174
|
+
pos = pos_on_line(reported_offset)
|
175
|
+
offset = char_offset(reported_offset)
|
176
|
+
length = char_length(reported_offset, end_offset)
|
177
|
+
start_line = line_for_offset(reported_offset)
|
178
|
+
{ :line => start_line, :pos => pos, :offset => offset, :length => length}
|
179
|
+
end
|
180
|
+
|
181
|
+
# Returns the index of the smallest item for which the item > the given value
|
182
|
+
# This is a min binary search. Although written in Ruby it is only slightly slower than
|
183
|
+
# the corresponding method in C in Ruby 2.0.0 - the main benefit to use this method over
|
184
|
+
# the Ruby C version is that it returns the index (not the value) which means there is not need
|
185
|
+
# to have an additional structure to get the index (or record the index in the structure). This
|
186
|
+
# saves both memory and CPU. It also does not require passing a block that is called since this
|
187
|
+
# method is specialized to search the line index.
|
188
|
+
#
|
189
|
+
def ary_bsearch_i(ary, value)
|
190
|
+
low = 0
|
191
|
+
high = ary.length
|
192
|
+
mid = nil
|
193
|
+
smaller = false
|
194
|
+
satisfied = false
|
195
|
+
v = nil
|
196
|
+
|
197
|
+
while low < high do
|
198
|
+
mid = low + ((high - low) / 2)
|
199
|
+
v = (ary[mid] > value)
|
200
|
+
if v == true
|
201
|
+
satisfied = true
|
202
|
+
smaller = true
|
203
|
+
elsif !v
|
204
|
+
smaller = false
|
205
|
+
else
|
206
|
+
raise TypeError, "wrong argument, must be boolean or nil, got '#{v.class}'"
|
207
|
+
end
|
208
|
+
|
209
|
+
if smaller
|
210
|
+
high = mid
|
211
|
+
else
|
212
|
+
low = mid + 1;
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
216
|
+
return nil if low == ary.length
|
217
|
+
return nil if !satisfied
|
218
|
+
return low
|
219
|
+
end
|
220
|
+
|
221
|
+
# Common impl for 18 and 19 since scanner is byte based
|
222
|
+
def compute_line_index
|
223
|
+
scanner = StringScanner.new(string)
|
224
|
+
result = [0] # first line starts at 0
|
225
|
+
while scanner.scan_until(/\n/)
|
226
|
+
result << scanner.pos
|
227
|
+
end
|
228
|
+
self.line_index = result.freeze
|
229
|
+
end
|
230
|
+
|
231
|
+
# Returns the line number (first line is 1) for the given offset
|
232
|
+
def line_for_offset(offset)
|
233
|
+
if prev_offset == offset
|
234
|
+
# use cache
|
235
|
+
return prev_line
|
236
|
+
end
|
237
|
+
if line_nbr = ary_bsearch_i(line_index, offset)
|
238
|
+
# cache
|
239
|
+
prev_offset = offset
|
240
|
+
prev_line = line_nbr
|
241
|
+
return line_nbr
|
242
|
+
end
|
243
|
+
# If not found it is after last
|
244
|
+
# clear cache
|
245
|
+
prev_offset = prev_line = nil
|
246
|
+
return line_index.size
|
247
|
+
end
|
248
|
+
end
|
249
|
+
|
250
|
+
class Locator18 < AbstractLocator
|
251
|
+
|
252
|
+
def offset_on_line(offset)
|
253
|
+
line_offset = line_index[ line_for_offset(offset)-1 ]
|
254
|
+
offset - line_offset
|
255
|
+
end
|
256
|
+
|
257
|
+
def char_offset(char_offset)
|
258
|
+
char_offset
|
259
|
+
end
|
260
|
+
|
261
|
+
def char_length(offset, end_offset)
|
262
|
+
end_offset - offset
|
263
|
+
end
|
264
|
+
|
265
|
+
end
|
266
|
+
|
267
|
+
# This implementation is for Ruby19 and Ruby20. It uses byteslice to get strings from byte based offsets.
|
268
|
+
# For Ruby20 this is faster than using the Stringscanner.charpos method (byteslice outperforms it, when
|
269
|
+
# strings are frozen).
|
270
|
+
#
|
271
|
+
class Locator19 < AbstractLocator
|
272
|
+
|
273
|
+
# Returns the offset on line (first offset on a line is 0).
|
274
|
+
# Ruby 19 is multibyte but has no character position methods, must use byteslice
|
275
|
+
def offset_on_line(offset)
|
276
|
+
line_offset = line_index[ line_for_offset(offset)-1 ]
|
277
|
+
string.byteslice(line_offset, offset-line_offset).length
|
278
|
+
end
|
279
|
+
|
280
|
+
# Returns the character offset for a given byte offset
|
281
|
+
# Ruby 19 is multibyte but has no character position methods, must use byteslice
|
282
|
+
def char_offset(byte_offset)
|
283
|
+
string.byteslice(0, byte_offset).length
|
284
|
+
end
|
285
|
+
|
286
|
+
# Returns the length measured in number of characters from the given start and end byte offseta
|
287
|
+
def char_length(offset, end_offset)
|
288
|
+
string.byteslice(offset, end_offset - offset).length
|
289
|
+
end
|
290
|
+
end
|
291
|
+
end
|
@@ -1,13 +1,6 @@
|
|
1
1
|
|
2
|
-
#parser.rb: grammar.ra
|
3
|
-
# racc -o$@ grammar.ra
|
4
|
-
#
|
5
|
-
#grammar.output: grammar.ra
|
6
|
-
# racc -v -o$@ grammar.ra
|
7
|
-
#
|
8
|
-
|
9
2
|
eparser.rb: egrammar.ra
|
10
3
|
racc -o$@ egrammar.ra
|
11
4
|
|
12
5
|
egrammar.output: egrammar.ra
|
13
|
-
racc -v -o$@ egrammar.ra
|
6
|
+
racc -v -o$@ egrammar.ra
|
@@ -24,6 +24,7 @@ class Puppet::Pops::Parser::Parser
|
|
24
24
|
include Puppet::Resource::TypeCollectionHelper
|
25
25
|
|
26
26
|
attr_accessor :lexer
|
27
|
+
attr_reader :definitions
|
27
28
|
|
28
29
|
# Returns the token text of the given lexer token, or nil, if token is nil
|
29
30
|
def token_text t
|
@@ -42,28 +43,28 @@ class Puppet::Pops::Parser::Parser
|
|
42
43
|
# before evaluation-time.
|
43
44
|
#
|
44
45
|
def classname(name)
|
45
|
-
[
|
46
|
+
[namespace, name].join("::").sub(/^::/, '')
|
46
47
|
end
|
47
48
|
|
48
|
-
# Reinitializes variables (i.e. creates a new lexer instance
|
49
|
-
#
|
50
|
-
def clear
|
51
|
-
initvars
|
52
|
-
end
|
49
|
+
# # Reinitializes variables (i.e. creates a new lexer instance
|
50
|
+
# #
|
51
|
+
# def clear
|
52
|
+
# initvars
|
53
|
+
# end
|
53
54
|
|
54
55
|
# Raises a Parse error.
|
55
|
-
def error(message, options = {})
|
56
|
+
def error(value, message, options = {})
|
56
57
|
except = Puppet::ParseError.new(message)
|
57
|
-
except.line = options[:line] ||
|
58
|
-
except.file = options[:file] || @lexer.file
|
59
|
-
except.pos = options[:pos] || @lexer.pos
|
58
|
+
except.line = options[:line] || value[:line]
|
59
|
+
except.file = options[:file] || value[:file] # @lexer.file
|
60
|
+
except.pos = options[:pos] || value[:pos] # @lexer.pos
|
60
61
|
|
61
62
|
raise except
|
62
63
|
end
|
63
64
|
|
64
65
|
# Parses a file expected to contain pp DSL logic.
|
65
66
|
def parse_file(file)
|
66
|
-
unless Puppet::FileSystem
|
67
|
+
unless Puppet::FileSystem.exist?(file)
|
67
68
|
unless file =~ /\.pp$/
|
68
69
|
file = file + ".pp"
|
69
70
|
end
|
@@ -77,15 +78,16 @@ class Puppet::Pops::Parser::Parser
|
|
77
78
|
# and there is no syntax that requires knowing if something referenced exists, it is safe
|
78
79
|
# to assume that no environment is needed when parsing. (All that comes later).
|
79
80
|
#
|
80
|
-
|
81
|
+
@lexer = Puppet::Pops::Parser::Lexer2.new
|
82
|
+
@namestack = []
|
83
|
+
@definitions = []
|
81
84
|
end
|
82
85
|
|
83
|
-
# Initializes the parser support by creating a new instance of {Puppet::Pops::Parser::Lexer}
|
84
|
-
# @return [void]
|
85
|
-
#
|
86
|
-
def initvars
|
87
|
-
|
88
|
-
end
|
86
|
+
# # Initializes the parser support by creating a new instance of {Puppet::Pops::Parser::Lexer}
|
87
|
+
# # @return [void]
|
88
|
+
# #
|
89
|
+
# def initvars
|
90
|
+
# end
|
89
91
|
|
90
92
|
# This is a callback from the generated grammar (when an error occurs while parsing)
|
91
93
|
# TODO Picks up origin information from the lexer, probably needs this from the caller instead
|
@@ -93,26 +95,36 @@ class Puppet::Pops::Parser::Parser
|
|
93
95
|
#
|
94
96
|
def on_error(token,value,stack)
|
95
97
|
if token == 0 # denotes end of file
|
96
|
-
|
98
|
+
value_at = 'end of file'
|
97
99
|
else
|
98
|
-
|
100
|
+
value_at = "'#{value[:value]}'"
|
99
101
|
end
|
100
|
-
error = "Syntax error at #{
|
102
|
+
error = "Syntax error at #{value_at}"
|
101
103
|
|
102
104
|
# The 'expected' is only of value at end of input, otherwise any parse error involving a
|
103
|
-
# start of a pair will be reported as expecting the close of the pair - e.g. "$x.each |$x {", would
|
105
|
+
# start of a pair will be reported as expecting the close of the pair - e.g. "$x.each |$x {|", would
|
104
106
|
# report that "seeing the '{', the '}' is expected. That would be wrong.
|
105
107
|
# Real "expected" tokens are very difficult to compute (would require parsing of racc output data). Output of the stack
|
106
108
|
# could help, but can require extensive backtracking and produce many options.
|
107
109
|
#
|
108
|
-
|
109
|
-
|
110
|
-
|
110
|
+
# The lexer should handle the "expected instead of end of file for strings, and interpolation", other expectancies
|
111
|
+
# must be handled by the grammar. The lexer may have enqueued tokens far ahead - the lexer's opinion about this
|
112
|
+
# is not trustworthy.
|
113
|
+
#
|
114
|
+
# if token == 0 && brace = @lexer.expected
|
115
|
+
# error += "; expected '#{brace}'"
|
116
|
+
# end
|
111
117
|
|
112
118
|
except = Puppet::ParseError.new(error)
|
113
|
-
|
114
|
-
|
115
|
-
|
119
|
+
if token != 0
|
120
|
+
path = value[:file]
|
121
|
+
except.line = value[:line]
|
122
|
+
except.pos = value[:pos]
|
123
|
+
else
|
124
|
+
# At end of input, use what the lexer thinks is the source file
|
125
|
+
path = lexer.file
|
126
|
+
end
|
127
|
+
except.file = path if path.is_a?(String) && !path.empty?
|
116
128
|
|
117
129
|
raise except
|
118
130
|
end
|
@@ -130,8 +142,12 @@ class Puppet::Pops::Parser::Parser
|
|
130
142
|
# @return [Puppet::Pops::Model::Factory] the given factory
|
131
143
|
# @api private
|
132
144
|
#
|
133
|
-
def loc(factory,
|
134
|
-
factory.record_position(
|
145
|
+
def loc(factory, start_locateable, end_locateable = nil)
|
146
|
+
factory.record_position(start_locateable, end_locateable)
|
147
|
+
end
|
148
|
+
|
149
|
+
def heredoc_loc(factory, start_locateabke, end_locateable = nil)
|
150
|
+
factory.record_heredoc_position(start_locatable, end_locatable)
|
135
151
|
end
|
136
152
|
|
137
153
|
# Associate documentation with the factory wrapped model object.
|
@@ -141,28 +157,28 @@ class Puppet::Pops::Parser::Parser
|
|
141
157
|
factory.doc = doc_string
|
142
158
|
end
|
143
159
|
|
144
|
-
def sourcepos(o)
|
145
|
-
if !o
|
146
|
-
Puppet::Pops::Adapters::SourcePosAdapter.new
|
147
|
-
elsif o.is_a? Puppet::Pops::Model::Factory
|
148
|
-
# It is a built model element with loc set returns start at pos 0
|
149
|
-
o.loc
|
150
|
-
else
|
151
|
-
loc = Puppet::Pops::Adapters::SourcePosAdapter.new
|
152
|
-
# It must be a token
|
153
|
-
loc.line = o[:line]
|
154
|
-
loc.pos = o[:pos]
|
155
|
-
loc.offset = o[:offset]
|
156
|
-
loc.length = o[:length]
|
157
|
-
loc
|
158
|
-
end
|
159
|
-
end
|
160
|
-
|
161
160
|
def aryfy(o)
|
162
161
|
o = [o] unless o.is_a?(Array)
|
163
162
|
o
|
164
163
|
end
|
165
164
|
|
165
|
+
def namespace
|
166
|
+
@namestack.join('::')
|
167
|
+
end
|
168
|
+
|
169
|
+
def namestack(name)
|
170
|
+
@namestack << name
|
171
|
+
end
|
172
|
+
|
173
|
+
def namepop()
|
174
|
+
@namestack.pop
|
175
|
+
end
|
176
|
+
|
177
|
+
def add_definition(definition)
|
178
|
+
@definitions << definition.current
|
179
|
+
definition
|
180
|
+
end
|
181
|
+
|
166
182
|
# Transforms an array of expressions containing literal name expressions to calls if followed by an
|
167
183
|
# expression, or expression list
|
168
184
|
#
|
@@ -170,6 +186,17 @@ class Puppet::Pops::Parser::Parser
|
|
170
186
|
Factory.transform_calls(expressions)
|
171
187
|
end
|
172
188
|
|
189
|
+
# Transforms a LEFT followed by the result of attribute_operations, this may be a call or an invalid sequence
|
190
|
+
def transform_resource_wo_title(left, resource)
|
191
|
+
Factory.transform_resource_wo_title(left, resource)
|
192
|
+
end
|
193
|
+
|
194
|
+
# If there are definitions that require initialization a Program is produced, else the body
|
195
|
+
def create_program(body)
|
196
|
+
locator = @lexer.locator
|
197
|
+
Factory.PROGRAM(body, definitions, locator)
|
198
|
+
end
|
199
|
+
|
173
200
|
# Performs the parsing and returns the resulting model.
|
174
201
|
# The lexer holds state, and this is setup with {#parse_string}, or {#parse_file}.
|
175
202
|
#
|
@@ -194,10 +221,11 @@ class Puppet::Pops::Parser::Parser
|
|
194
221
|
# rescue => except
|
195
222
|
# raise Puppet::ParseError.new(except.message, @lexer.file, @lexer.line, @lexer.pos, except)
|
196
223
|
end
|
197
|
-
main.record_origin(@lexer.file) if main
|
198
224
|
return main
|
199
225
|
ensure
|
200
226
|
@lexer.clear
|
227
|
+
@namestack = []
|
228
|
+
@definitions = []
|
201
229
|
end
|
202
230
|
|
203
231
|
end
|