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,227 @@
|
|
1
|
+
# This module is an integral part of the Lexer.
|
2
|
+
# It defines interpolation support
|
3
|
+
# PERFORMANCE NOTE: There are 4 very similar methods in this module that are designed to be as
|
4
|
+
# performant as possible. While it is possible to parameterize them into one common method, the overhead
|
5
|
+
# of passing parameters and evaluating conditional logic has a negative impact on performance.
|
6
|
+
#
|
7
|
+
module Puppet::Pops::Parser::InterpolationSupport
|
8
|
+
|
9
|
+
PATTERN_VARIABLE = %r{(::)?(\w+::)*\w+}
|
10
|
+
|
11
|
+
# This is the starting point for a double quoted string with possible interpolation
|
12
|
+
# The structure mimics that of the grammar.
|
13
|
+
# The logic is explicit (where the former implementation used parameters/strucures) given to a
|
14
|
+
# generic handler.
|
15
|
+
# (This is both easier to understand and faster).
|
16
|
+
#
|
17
|
+
def interpolate_dq
|
18
|
+
scn = @scanner
|
19
|
+
ctx = @lexing_context
|
20
|
+
before = scn.pos
|
21
|
+
# skip the leading " by doing a scan since the slurp_dqstring uses last matched when there is an error
|
22
|
+
scn.scan(/"/)
|
23
|
+
value,terminator = slurp_dqstring()
|
24
|
+
text = value
|
25
|
+
after = scn.pos
|
26
|
+
while true
|
27
|
+
case terminator
|
28
|
+
when '"'
|
29
|
+
# simple case, there was no interpolation, return directly
|
30
|
+
return emit_completed([:STRING, text, scn.pos-before], before)
|
31
|
+
when '${'
|
32
|
+
count = ctx[:brace_count]
|
33
|
+
ctx[:brace_count] += 1
|
34
|
+
# The ${ terminator is counted towards the string part
|
35
|
+
enqueue_completed([:DQPRE, text, scn.pos-before], before)
|
36
|
+
# Lex expression tokens until a closing (balanced) brace count is reached
|
37
|
+
enqueue_until count
|
38
|
+
break
|
39
|
+
when '$'
|
40
|
+
if varname = scn.scan(PATTERN_VARIABLE)
|
41
|
+
# The $ is counted towards the variable
|
42
|
+
enqueue_completed([:DQPRE, text, after-before-1], before)
|
43
|
+
enqueue_completed([:VARIABLE, varname, scn.pos - after + 1], after -1)
|
44
|
+
break
|
45
|
+
else
|
46
|
+
# false $ variable start
|
47
|
+
text += value
|
48
|
+
value,terminator = slurp_dqstring()
|
49
|
+
after = scn.pos
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
interpolate_tail_dq
|
54
|
+
# return the first enqueued token and shift the queue
|
55
|
+
@token_queue.shift
|
56
|
+
end
|
57
|
+
|
58
|
+
def interpolate_tail_dq
|
59
|
+
scn = @scanner
|
60
|
+
ctx = @lexing_context
|
61
|
+
before = scn.pos
|
62
|
+
value,terminator = slurp_dqstring
|
63
|
+
text = value
|
64
|
+
after = scn.pos
|
65
|
+
while true
|
66
|
+
case terminator
|
67
|
+
when '"'
|
68
|
+
# simple case, there was no further interpolation, return directly
|
69
|
+
enqueue_completed([:DQPOST, text, scn.pos-before], before)
|
70
|
+
return
|
71
|
+
when '${'
|
72
|
+
count = ctx[:brace_count]
|
73
|
+
ctx[:brace_count] += 1
|
74
|
+
# The ${ terminator is counted towards the string part
|
75
|
+
enqueue_completed([:DQMID, text, scn.pos-before], before)
|
76
|
+
# Lex expression tokens until a closing (balanced) brace count is reached
|
77
|
+
enqueue_until count
|
78
|
+
break
|
79
|
+
when '$'
|
80
|
+
if varname = scn.scan(PATTERN_VARIABLE)
|
81
|
+
# The $ is counted towards the variable
|
82
|
+
enqueue_completed([:DQMID, text, after-before-1], before)
|
83
|
+
enqueue_completed([:VARIABLE, varname, scn.pos - after +1], after -1)
|
84
|
+
break
|
85
|
+
else
|
86
|
+
# false $ variable start
|
87
|
+
text += value
|
88
|
+
value,terminator = self.send(slurpfunc)
|
89
|
+
after = scn.pos
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
interpolate_tail_dq
|
94
|
+
end
|
95
|
+
|
96
|
+
# This is the starting point for a un-quoted string with possible interpolation
|
97
|
+
# The logic is explicit (where the former implementation used parameters/strucures) given to a
|
98
|
+
# generic handler.
|
99
|
+
# (This is both easier to understand and faster).
|
100
|
+
#
|
101
|
+
def interpolate_uq
|
102
|
+
scn = @scanner
|
103
|
+
ctx = @lexing_context
|
104
|
+
before = scn.pos
|
105
|
+
value,terminator = slurp_uqstring()
|
106
|
+
text = value
|
107
|
+
after = scn.pos
|
108
|
+
while true
|
109
|
+
case terminator
|
110
|
+
when ''
|
111
|
+
# simple case, there was no interpolation, return directly
|
112
|
+
enqueue_completed([:STRING, text, scn.pos-before], before)
|
113
|
+
return
|
114
|
+
when '${'
|
115
|
+
count = ctx[:brace_count]
|
116
|
+
ctx[:brace_count] += 1
|
117
|
+
# The ${ terminator is counted towards the string part
|
118
|
+
enqueue_completed([:DQPRE, text, scn.pos-before], before)
|
119
|
+
# Lex expression tokens until a closing (balanced) brace count is reached
|
120
|
+
enqueue_until count
|
121
|
+
break
|
122
|
+
when '$'
|
123
|
+
if varname = scn.scan(PATTERN_VARIABLE)
|
124
|
+
# The $ is counted towards the variable
|
125
|
+
enqueue_completed([:DQPRE, text, after-before-1], before)
|
126
|
+
enqueue_completed([:VARIABLE, varname, scn.pos - after + 1], after -1)
|
127
|
+
break
|
128
|
+
else
|
129
|
+
# false $ variable start
|
130
|
+
text += value
|
131
|
+
value,terminator = slurp_uqstring()
|
132
|
+
after = scn.pos
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
interpolate_tail_uq
|
137
|
+
nil
|
138
|
+
end
|
139
|
+
|
140
|
+
def interpolate_tail_uq
|
141
|
+
scn = @scanner
|
142
|
+
ctx = @lexing_context
|
143
|
+
before = scn.pos
|
144
|
+
value,terminator = slurp_uqstring
|
145
|
+
text = value
|
146
|
+
after = scn.pos
|
147
|
+
while true
|
148
|
+
case terminator
|
149
|
+
when ''
|
150
|
+
# simple case, there was no further interpolation, return directly
|
151
|
+
enqueue_completed([:DQPOST, text, scn.pos-before], before)
|
152
|
+
return
|
153
|
+
when '${'
|
154
|
+
count = ctx[:brace_count]
|
155
|
+
ctx[:brace_count] += 1
|
156
|
+
# The ${ terminator is counted towards the string part
|
157
|
+
enqueue_completed([:DQMID, text, scn.pos-before], before)
|
158
|
+
# Lex expression tokens until a closing (balanced) brace count is reached
|
159
|
+
enqueue_until count
|
160
|
+
break
|
161
|
+
when '$'
|
162
|
+
if varname = scn.scan(PATTERN_VARIABLE)
|
163
|
+
# The $ is counted towards the variable
|
164
|
+
enqueue_completed([:DQMID, text, after-before-1], before)
|
165
|
+
enqueue_completed([:VARIABLE, varname, scn.pos - after +1], after -1)
|
166
|
+
break
|
167
|
+
else
|
168
|
+
# false $ variable start
|
169
|
+
text += value
|
170
|
+
value,terminator = slurp_uqstring
|
171
|
+
after = scn.pos
|
172
|
+
end
|
173
|
+
end
|
174
|
+
end
|
175
|
+
interpolate_tail_uq
|
176
|
+
end
|
177
|
+
|
178
|
+
# Enqueues lexed tokens until either end of input, or the given brace_count is reached
|
179
|
+
#
|
180
|
+
def enqueue_until brace_count
|
181
|
+
scn = @scanner
|
182
|
+
ctx = @lexing_context
|
183
|
+
queue = @token_queue
|
184
|
+
|
185
|
+
scn.skip(self.class::PATTERN_WS)
|
186
|
+
queue_size = queue.size
|
187
|
+
until scn.eos? do
|
188
|
+
if token = lex_token
|
189
|
+
token_name = token[0]
|
190
|
+
ctx[:after] = token_name
|
191
|
+
if token_name == :RBRACE && ctx[:brace_count] == brace_count
|
192
|
+
if queue.size - queue_size == 1
|
193
|
+
# Single token is subject to replacement
|
194
|
+
queue[-1] = transform_to_variable(queue[-1])
|
195
|
+
end
|
196
|
+
return
|
197
|
+
end
|
198
|
+
queue << token
|
199
|
+
else
|
200
|
+
scn.skip(self.class::PATTERN_WS)
|
201
|
+
end
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
205
|
+
def transform_to_variable(token)
|
206
|
+
token_name = token[0]
|
207
|
+
if [:NUMBER, :NAME].include?(token_name) || self.class::KEYWORD_NAMES[token_name]
|
208
|
+
t = token[1]
|
209
|
+
ta = t.token_array
|
210
|
+
[:VARIABLE, self.class::TokenValue.new([:VARIABLE, ta[1], ta[2]], t.offset, t.locator)]
|
211
|
+
else
|
212
|
+
token
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
216
|
+
# Interpolates unquoted string and transfers the result to the given lexer
|
217
|
+
# (This is used when a second lexer instance is used to lex a substring)
|
218
|
+
#
|
219
|
+
def interpolate_uq_to(lexer)
|
220
|
+
interpolate_uq
|
221
|
+
queue = @token_queue
|
222
|
+
until queue.empty? do
|
223
|
+
lexer.enqueue(queue.shift)
|
224
|
+
end
|
225
|
+
end
|
226
|
+
|
227
|
+
end
|
@@ -58,8 +58,7 @@ class Puppet::Pops::Parser::Lexer
|
|
58
58
|
end
|
59
59
|
|
60
60
|
# @return [Boolean] if the token is acceptable in the given context or not.
|
61
|
-
#
|
62
|
-
# @param context [Hash] ? ? ?
|
61
|
+
# @param context [Hash] the lexing context
|
63
62
|
#
|
64
63
|
def acceptable?(context={})
|
65
64
|
@acceptable_when.call(context)
|
@@ -154,6 +153,7 @@ class Puppet::Pops::Parser::Lexer
|
|
154
153
|
')' => :RPAREN,
|
155
154
|
'=' => :EQUALS,
|
156
155
|
'+=' => :APPENDS,
|
156
|
+
'-=' => :DELETES,
|
157
157
|
'==' => :ISEQUAL,
|
158
158
|
'>=' => :GREATEREQUAL,
|
159
159
|
'>' => :GREATERTHAN,
|
@@ -213,13 +213,13 @@ class Puppet::Pops::Parser::Lexer
|
|
213
213
|
REGEX_INTRODUCING_TOKENS.include? context[:after]
|
214
214
|
end
|
215
215
|
|
216
|
-
DASHED_VARIABLES_ALLOWED = Proc.new do |context|
|
217
|
-
Puppet[:allow_variables_with_dashes]
|
218
|
-
end
|
219
|
-
|
220
|
-
VARIABLE_AND_DASHES_ALLOWED = Proc.new do |context|
|
221
|
-
Contextual::DASHED_VARIABLES_ALLOWED.call(context) and TOKENS[:VARIABLE].acceptable?(context)
|
222
|
-
end
|
216
|
+
# DASHED_VARIABLES_ALLOWED = Proc.new do |context|
|
217
|
+
# Puppet[:allow_variables_with_dashes]
|
218
|
+
# end
|
219
|
+
#
|
220
|
+
# VARIABLE_AND_DASHES_ALLOWED = Proc.new do |context|
|
221
|
+
# Contextual::DASHED_VARIABLES_ALLOWED.call(context) and TOKENS[:VARIABLE].acceptable?(context)
|
222
|
+
# end
|
223
223
|
end
|
224
224
|
|
225
225
|
# Numbers are treated separately from names, so that they may contain dots.
|
@@ -252,14 +252,14 @@ class Puppet::Pops::Parser::Lexer
|
|
252
252
|
end
|
253
253
|
|
254
254
|
TOKENS.add_token :COMMENT, %r{#.*}, :skip => true do |lexer,value|
|
255
|
-
value.sub!(/# ?/,'')
|
256
|
-
[self,
|
255
|
+
# value.sub!(/# ?/,'')
|
256
|
+
[self, ""]
|
257
257
|
end
|
258
258
|
|
259
259
|
TOKENS.add_token :MLCOMMENT, %r{/\*(.*?)\*/}m, :skip => true do |lexer, value|
|
260
|
-
value.sub!(/^\/\* ?/,'')
|
261
|
-
value.sub!(/ ?\*\/$/,'')
|
262
|
-
[self,
|
260
|
+
# value.sub!(/^\/\* ?/,'')
|
261
|
+
# value.sub!(/ ?\*\/$/,'')
|
262
|
+
[self, ""]
|
263
263
|
end
|
264
264
|
|
265
265
|
TOKENS.add_token :REGEX, %r{/[^/\n]*/} do |lexer, value|
|
@@ -312,30 +312,10 @@ class Puppet::Pops::Parser::Lexer
|
|
312
312
|
end
|
313
313
|
end
|
314
314
|
|
315
|
-
TOKENS.add_token :DOLLAR_VAR_WITH_DASH, %r{\$(?:::)?(?:[-\w]+::)*[-\w]+} do |lexer, value|
|
316
|
-
lexer.warn_if_variable_has_hyphen(value)
|
317
|
-
|
318
|
-
[TOKENS[:VARIABLE], value[1..-1]]
|
319
|
-
end
|
320
|
-
TOKENS[:DOLLAR_VAR_WITH_DASH].acceptable_when Contextual::DASHED_VARIABLES_ALLOWED
|
321
|
-
|
322
315
|
TOKENS.add_token :DOLLAR_VAR, %r{\$(::)?(\w+::)*\w+} do |lexer, value|
|
323
316
|
[TOKENS[:VARIABLE],value[1..-1]]
|
324
317
|
end
|
325
318
|
|
326
|
-
TOKENS.add_token :VARIABLE_WITH_DASH, %r{(?:::)?(?:[-\w]+::)*[-\w]+} do |lexer, value|
|
327
|
-
lexer.warn_if_variable_has_hyphen(value)
|
328
|
-
# If the varname (following $, or ${ is followed by (, it is a function call, and not a variable
|
329
|
-
# reference.
|
330
|
-
#
|
331
|
-
if lexer.match?(%r{[ \t\r]*\(})
|
332
|
-
[TOKENS[:NAME],value]
|
333
|
-
else
|
334
|
-
[TOKENS[:VARIABLE], value]
|
335
|
-
end
|
336
|
-
end
|
337
|
-
TOKENS[:VARIABLE_WITH_DASH].acceptable_when Contextual::VARIABLE_AND_DASHES_ALLOWED
|
338
|
-
|
339
319
|
TOKENS.add_token :VARIABLE, %r{(::)?(\w+::)*\w+} do |lexer, value|
|
340
320
|
# If the varname (following $, or ${ is followed by (, it is a function call, and not a variable
|
341
321
|
# reference.
|
@@ -418,9 +398,9 @@ class Puppet::Pops::Parser::Lexer
|
|
418
398
|
|
419
399
|
def file=(file)
|
420
400
|
@file = file
|
421
|
-
contents = Puppet::FileSystem
|
422
|
-
@scanner = StringScanner.new(contents)
|
423
|
-
@locator = Locator.
|
401
|
+
contents = Puppet::FileSystem.exist?(file) ? Puppet::FileSystem.read(file) : ""
|
402
|
+
@scanner = StringScanner.new(contents.freeze)
|
403
|
+
@locator = Puppet::Pops::Parser::Locator.locator(contents, file)
|
424
404
|
end
|
425
405
|
|
426
406
|
def_delegator :@token_queue, :shift, :shift_token
|
@@ -431,9 +411,13 @@ class Puppet::Pops::Parser::Lexer
|
|
431
411
|
# tries, where it is otherwise the number of string token we have. Also,
|
432
412
|
# the lookups are optimized hash lookups, instead of regex scans.
|
433
413
|
#
|
434
|
-
|
414
|
+
_scn = @scanner
|
415
|
+
s = _scn.peek(3)
|
435
416
|
token = TOKENS.lookup(s[0,3]) || TOKENS.lookup(s[0,2]) || TOKENS.lookup(s[0,1])
|
436
|
-
|
417
|
+
unless token
|
418
|
+
return [nil, nil]
|
419
|
+
end
|
420
|
+
[ token, _scn.scan(token.regex) ]
|
437
421
|
end
|
438
422
|
|
439
423
|
# Find the next token that matches a regex. We look for these first.
|
@@ -443,8 +427,10 @@ class Puppet::Pops::Parser::Lexer
|
|
443
427
|
|
444
428
|
# I tried optimizing based on the first char, but it had
|
445
429
|
# a slightly negative affect and was a good bit more complicated.
|
430
|
+
_lxc = @lexing_context
|
431
|
+
_scn = @scanner
|
446
432
|
TOKENS.regex_tokens.each do |token|
|
447
|
-
if length =
|
433
|
+
if length = _scn.match?(token.regex) and token.acceptable?(_lxc)
|
448
434
|
# We've found a longer match
|
449
435
|
if length > best_length
|
450
436
|
best_length = length
|
@@ -453,7 +439,7 @@ class Puppet::Pops::Parser::Lexer
|
|
453
439
|
end
|
454
440
|
end
|
455
441
|
|
456
|
-
return best_token,
|
442
|
+
return best_token, _scn.scan(best_token.regex) if best_token
|
457
443
|
end
|
458
444
|
|
459
445
|
# Find the next token, returning the string and the token.
|
@@ -461,8 +447,10 @@ class Puppet::Pops::Parser::Lexer
|
|
461
447
|
shift_token || find_regex_token || find_string_token
|
462
448
|
end
|
463
449
|
|
450
|
+
MULTIBYTE = Puppet::Pops::Parser::Locator::MULTIBYTE
|
451
|
+
SKIPPATTERN = MULTIBYTE ? %r{[[:blank:]\r]+} : %r{[ \t\r]+}
|
452
|
+
|
464
453
|
def initialize
|
465
|
-
@multibyte = init_multibyte
|
466
454
|
initvars
|
467
455
|
end
|
468
456
|
|
@@ -476,21 +464,6 @@ class Puppet::Pops::Parser::Lexer
|
|
476
464
|
end
|
477
465
|
end
|
478
466
|
|
479
|
-
# Returns true if ruby version >= 1.9.3 since regexp supports multi-byte matches and expanded
|
480
|
-
# character categories like [[:blank:]].
|
481
|
-
#
|
482
|
-
# This implementation will fail if there are more than 255 minor or micro versions of ruby
|
483
|
-
#
|
484
|
-
def init_multibyte
|
485
|
-
numver = RUBY_VERSION.split(".").collect {|s| s.to_i }
|
486
|
-
return true if (numver[0] << 16 | numver[1] << 8 | numver[2]) >= (1 << 16 | 9 << 8 | 3)
|
487
|
-
false
|
488
|
-
end
|
489
|
-
|
490
|
-
def multibyte?
|
491
|
-
@multibyte
|
492
|
-
end
|
493
|
-
|
494
467
|
def initvars
|
495
468
|
@previous_token = nil
|
496
469
|
@scanner = nil
|
@@ -499,13 +472,6 @@ class Puppet::Pops::Parser::Lexer
|
|
499
472
|
# AAARRGGGG! okay, regexes in ruby are bloody annoying
|
500
473
|
# no one else has "\n" =~ /\s/
|
501
474
|
|
502
|
-
if multibyte?
|
503
|
-
# Skip all kinds of space, and CR, but not newlines
|
504
|
-
@skip = %r{[[:blank:]\r]+}
|
505
|
-
else
|
506
|
-
@skip = %r{[ \t\r]+}
|
507
|
-
end
|
508
|
-
|
509
475
|
@namestack = []
|
510
476
|
@token_queue = []
|
511
477
|
@indefine = false
|
@@ -526,7 +492,7 @@ class Puppet::Pops::Parser::Lexer
|
|
526
492
|
#
|
527
493
|
return token, value if value.is_a? Hash
|
528
494
|
|
529
|
-
skip if token.skip_text
|
495
|
+
@scanner.skip(SKIPPATTERN) if token.skip_text
|
530
496
|
|
531
497
|
return if token.skip
|
532
498
|
|
@@ -539,26 +505,22 @@ class Puppet::Pops::Parser::Lexer
|
|
539
505
|
# If the conversion performed the munging/positioning
|
540
506
|
return token, value if value.is_a? Hash
|
541
507
|
|
542
|
-
|
543
|
-
pos_hash[:value] = value
|
544
|
-
|
545
|
-
# Add one to pos, first char on line is 1
|
546
|
-
return token, pos_hash
|
508
|
+
return token, positioned_value(value)
|
547
509
|
end
|
548
510
|
|
549
511
|
# Returns a hash with the current position in source based on the current lexing context
|
550
512
|
#
|
551
|
-
def
|
552
|
-
|
553
|
-
|
554
|
-
|
555
|
-
|
556
|
-
|
557
|
-
|
513
|
+
def positioned_value(value)
|
514
|
+
{
|
515
|
+
:value => value,
|
516
|
+
:locator => @locator,
|
517
|
+
:offset => @lexing_context[:offset],
|
518
|
+
:end_offset => @lexing_context[:end_offset]
|
519
|
+
}
|
558
520
|
end
|
559
521
|
|
560
522
|
def pos
|
561
|
-
@locator.pos_on_line(lexing_context[:offset])
|
523
|
+
@locator.pos_on_line(@lexing_context[:offset])
|
562
524
|
end
|
563
525
|
|
564
526
|
# Handling the namespace stack
|
@@ -575,58 +537,67 @@ class Puppet::Pops::Parser::Lexer
|
|
575
537
|
end
|
576
538
|
|
577
539
|
def_delegator :@scanner, :rest
|
540
|
+
|
541
|
+
LBRACE_CHAR = '{'
|
542
|
+
|
578
543
|
# this is the heart of the lexer
|
579
544
|
def scan
|
545
|
+
_scn = @scanner
|
580
546
|
#Puppet.debug("entering scan")
|
581
|
-
lex_error "Internal Error: No string or file given to lexer to process." unless
|
547
|
+
lex_error "Internal Error: No string or file given to lexer to process." unless _scn
|
582
548
|
|
583
549
|
# Skip any initial whitespace.
|
584
|
-
skip
|
550
|
+
_scn.skip(SKIPPATTERN)
|
551
|
+
_lbrace = '{'.freeze # faster to compare against a frozen string in
|
585
552
|
|
586
|
-
until token_queue.empty? and
|
587
|
-
offset =
|
553
|
+
until token_queue.empty? and _scn.eos? do
|
554
|
+
offset = _scn.pos
|
588
555
|
matched_token, value = find_token
|
589
|
-
end_offset =
|
556
|
+
end_offset = _scn.pos
|
590
557
|
|
591
558
|
# error out if we didn't match anything at all
|
592
|
-
lex_error "Could not match #{
|
559
|
+
lex_error "Could not match #{_scn.rest[/^(\S+|\s+|.*)/]}" unless matched_token
|
593
560
|
|
594
561
|
newline = matched_token.name == :RETURN
|
595
562
|
|
596
|
-
|
597
|
-
|
598
|
-
|
563
|
+
_lxc = @lexing_context
|
564
|
+
_lxc[:start_of_line] = newline
|
565
|
+
_lxc[:offset] = offset
|
566
|
+
_lxc[:end_offset] = end_offset
|
599
567
|
|
600
568
|
final_token, token_value = munge_token(matched_token, value)
|
601
569
|
# update end position since munging may have moved the end offset
|
602
|
-
|
570
|
+
_lxc[:end_offset] = _scn.pos
|
603
571
|
|
604
572
|
unless final_token
|
605
|
-
skip
|
573
|
+
_scn.skip(SKIPPATTERN)
|
606
574
|
next
|
607
575
|
end
|
608
576
|
|
609
|
-
|
577
|
+
_lxc[:after] = final_token.name unless newline
|
610
578
|
if final_token.name == :DQPRE
|
611
|
-
|
579
|
+
_lxc[:interpolation_stack] << _lxc[:brace_count]
|
612
580
|
elsif final_token.name == :DQPOST
|
613
|
-
|
581
|
+
_lxc[:interpolation_stack].pop
|
614
582
|
end
|
615
583
|
|
616
584
|
value = token_value[:value]
|
617
585
|
|
586
|
+
_expected = @expected
|
618
587
|
if match = @@pairs[value] and final_token.name != :DQUOTE and final_token.name != :SQUOTE
|
619
|
-
|
620
|
-
elsif exp =
|
621
|
-
|
588
|
+
_expected << match
|
589
|
+
elsif exp = _expected[-1] and exp == value and final_token.name != :DQUOTE and final_token.name != :SQUOTE
|
590
|
+
_expected.pop
|
622
591
|
end
|
623
592
|
|
624
593
|
yield [final_token.name, token_value]
|
625
594
|
|
626
|
-
|
627
|
-
|
595
|
+
_prv = @previous_token
|
596
|
+
if _prv
|
597
|
+
namestack(value) if _prv.name == :CLASS and value != LBRACE_CHAR
|
628
598
|
|
629
|
-
|
599
|
+
# TODO: Lexer has no business dealing with this - it is semantic
|
600
|
+
if _prv.name == :DEFINE
|
630
601
|
if indefine?
|
631
602
|
msg = "Cannot nest definition #{value} inside #{@indefine}"
|
632
603
|
self.indefine = false
|
@@ -637,7 +608,7 @@ class Puppet::Pops::Parser::Lexer
|
|
637
608
|
end
|
638
609
|
end
|
639
610
|
@previous_token = final_token
|
640
|
-
skip
|
611
|
+
_scn.skip(SKIPPATTERN)
|
641
612
|
end
|
642
613
|
# Cannot reset @scanner to nil here - it is needed to answer questions about context after
|
643
614
|
# completed parsing.
|
@@ -648,11 +619,6 @@ class Puppet::Pops::Parser::Lexer
|
|
648
619
|
yield [false,false]
|
649
620
|
end
|
650
621
|
|
651
|
-
# Skip any skipchars in our remaining string.
|
652
|
-
def skip
|
653
|
-
@scanner.skip(@skip)
|
654
|
-
end
|
655
|
-
|
656
622
|
def match? r
|
657
623
|
@scanner.match?(r)
|
658
624
|
end
|
@@ -721,9 +687,10 @@ class Puppet::Pops::Parser::Lexer
|
|
721
687
|
# Advanced after '{' if this is in expression ${} interpolation
|
722
688
|
braced = terminator == '$' && @scanner.scan(/\{/)
|
723
689
|
# make offset to end_ofset be the length of the pre expression string including its start and terminating chars
|
724
|
-
|
690
|
+
lxc = @lexing_context
|
691
|
+
lxc[:end_offset] = @scanner.pos
|
725
692
|
|
726
|
-
token_queue << [TOKENS[token_type[terminator]],
|
693
|
+
token_queue << [TOKENS[token_type[terminator]],positioned_value(preamble+value)]
|
727
694
|
variable_regex = if Puppet[:allow_variables_with_dashes]
|
728
695
|
TOKENS[:VARIABLE_WITH_DASH].regex
|
729
696
|
else
|
@@ -735,18 +702,18 @@ class Puppet::Pops::Parser::Lexer
|
|
735
702
|
|
736
703
|
tmp_offset = @scanner.pos
|
737
704
|
if var_name = @scanner.scan(variable_regex)
|
738
|
-
|
739
|
-
|
705
|
+
lxc[:offset] = tmp_offset
|
706
|
+
lxc[:end_offset] = @scanner.pos
|
740
707
|
warn_if_variable_has_hyphen(var_name)
|
741
708
|
# If the varname after ${ is followed by (, it is a function call, and not a variable
|
742
709
|
# reference.
|
743
710
|
#
|
744
711
|
if braced && @scanner.match?(%r{[ \t\r]*\(})
|
745
|
-
token_queue << [TOKENS[:NAME],
|
712
|
+
token_queue << [TOKENS[:NAME], positioned_value(var_name)]
|
746
713
|
else
|
747
|
-
token_queue << [TOKENS[:VARIABLE],
|
714
|
+
token_queue << [TOKENS[:VARIABLE],positioned_value(var_name)]
|
748
715
|
end
|
749
|
-
|
716
|
+
lxc[:offset] = @scanner.pos
|
750
717
|
tokenize_interpolated_string(DQ_continuation_token_types)
|
751
718
|
else
|
752
719
|
tokenize_interpolated_string(token_type, replace_false_start_with_text(terminator))
|
@@ -764,9 +731,9 @@ class Puppet::Pops::Parser::Lexer
|
|
764
731
|
end
|
765
732
|
|
766
733
|
# just parse a string, not a whole file
|
767
|
-
def string=(string)
|
768
|
-
@scanner = StringScanner.new(string)
|
769
|
-
@locator = Locator.
|
734
|
+
def string=(string, path='')
|
735
|
+
@scanner = StringScanner.new(string.freeze)
|
736
|
+
@locator = Puppet::Pops::Parser::Locator.locator(string, path)
|
770
737
|
end
|
771
738
|
|
772
739
|
def warn_if_variable_has_hyphen(var_name)
|
@@ -780,83 +747,7 @@ class Puppet::Pops::Parser::Lexer
|
|
780
747
|
# consumed.
|
781
748
|
#
|
782
749
|
def line
|
783
|
-
return 1 unless lexing_context && locator
|
784
|
-
locator.line_for_offset(lexing_context[:end_offset])
|
785
|
-
end
|
786
|
-
|
787
|
-
# Helper class that keeps track of where line breaks are located and can answer questions about positions.
|
788
|
-
#
|
789
|
-
class Locator
|
790
|
-
attr_reader :line_index
|
791
|
-
attr_reader :string
|
792
|
-
|
793
|
-
# Create a locator based on a content string, and a boolean indicating if ruby version support multi-byte strings
|
794
|
-
# or not.
|
795
|
-
#
|
796
|
-
def initialize(string, multibyte)
|
797
|
-
@string = string
|
798
|
-
@multibyte = multibyte
|
799
|
-
compute_line_index
|
800
|
-
end
|
801
|
-
|
802
|
-
# Returns whether this a ruby version that supports multi-byte strings or not
|
803
|
-
#
|
804
|
-
def multibyte?
|
805
|
-
@multibyte
|
806
|
-
end
|
807
|
-
|
808
|
-
# Computes the start offset for each line.
|
809
|
-
#
|
810
|
-
def compute_line_index
|
811
|
-
scanner = StringScanner.new(@string)
|
812
|
-
result = [0] # first line starts at 0
|
813
|
-
while scanner.scan_until(/\n/)
|
814
|
-
result << scanner.pos
|
815
|
-
end
|
816
|
-
@line_index = result
|
817
|
-
end
|
818
|
-
|
819
|
-
# Returns the line number (first line is 1) for the given offset
|
820
|
-
def line_for_offset(offset)
|
821
|
-
if line_nbr = line_index.index {|x| x > offset}
|
822
|
-
return line_nbr
|
823
|
-
end
|
824
|
-
# If not found it is after last
|
825
|
-
return line_index.size
|
826
|
-
end
|
827
|
-
|
828
|
-
# Returns the offset on line (first offset on a line is 0).
|
829
|
-
#
|
830
|
-
def offset_on_line(offset)
|
831
|
-
line_offset = line_index[line_for_offset(offset)-1]
|
832
|
-
if multibyte?
|
833
|
-
@string.byteslice(line_offset, offset-line_offset).length
|
834
|
-
else
|
835
|
-
offset - line_offset
|
836
|
-
end
|
837
|
-
end
|
838
|
-
|
839
|
-
# Returns the position on line (first position on a line is 1)
|
840
|
-
def pos_on_line(offset)
|
841
|
-
offset_on_line(offset) +1
|
842
|
-
end
|
843
|
-
|
844
|
-
# Returns the character offset for a given byte offset
|
845
|
-
def char_offset(byte_offset)
|
846
|
-
if multibyte?
|
847
|
-
@string.byteslice(0, byte_offset).length
|
848
|
-
else
|
849
|
-
byte_offset
|
850
|
-
end
|
851
|
-
end
|
852
|
-
|
853
|
-
# Returns the length measured in number of characters from the given start and end byte offseta
|
854
|
-
def char_length(offset, end_offset)
|
855
|
-
if multibyte?
|
856
|
-
@string.byteslice(offset, end_offset - offset).length
|
857
|
-
else
|
858
|
-
end_offset - offset
|
859
|
-
end
|
860
|
-
end
|
750
|
+
return 1 unless @lexing_context && locator
|
751
|
+
locator.line_for_offset(@lexing_context[:end_offset])
|
861
752
|
end
|
862
753
|
end
|