puppet 4.8.2-x64-mingw32 → 4.9.0-x64-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- checksums.yaml +15 -0
- data/CONTRIBUTING.md +25 -1
- data/Gemfile +6 -0
- data/Rakefile +1 -0
- data/ext/project_data.yaml +5 -1
- data/ext/windows/service/daemon.rb +2 -1
- data/install.rb +43 -6
- data/lib/hiera/puppet_function.rb +15 -17
- data/lib/hiera/scope.rb +12 -14
- data/lib/puppet.rb +52 -0
- data/lib/puppet/application/face_base.rb +4 -0
- data/lib/puppet/application/lookup.rb +4 -2
- data/lib/puppet/application/resource.rb +1 -1
- data/lib/puppet/data_providers.rb +6 -3
- data/lib/puppet/data_providers/data_adapter.rb +6 -0
- data/lib/puppet/data_providers/data_function_support.rb +7 -0
- data/lib/puppet/data_providers/function_env_data_provider.rb +7 -0
- data/lib/puppet/data_providers/function_module_data_provider.rb +6 -0
- data/lib/puppet/data_providers/hiera_config.rb +31 -10
- data/lib/puppet/data_providers/hiera_env_data_provider.rb +6 -0
- data/lib/puppet/data_providers/hiera_interpolate.rb +2 -1
- data/lib/puppet/data_providers/hiera_module_data_provider.rb +6 -0
- data/lib/puppet/data_providers/hiera_support.rb +6 -0
- data/lib/puppet/data_providers/json_data_provider_factory.rb +12 -0
- data/lib/puppet/data_providers/yaml_data_provider_factory.rb +12 -0
- data/lib/puppet/defaults.rb +25 -4
- data/lib/puppet/face/ca.rb +2 -0
- data/lib/puppet/face/certificate_request.rb +2 -0
- data/lib/puppet/face/certificate_revocation_list.rb +2 -0
- data/lib/puppet/face/file.rb +3 -0
- data/lib/puppet/face/help.rb +19 -17
- data/lib/puppet/face/help/face.erb +3 -0
- data/lib/puppet/face/key.rb +1 -0
- data/lib/puppet/face/man.rb +4 -2
- data/lib/puppet/face/module/generate.rb +1 -1
- data/lib/puppet/face/status.rb +2 -0
- data/lib/puppet/feature/base.rb +9 -2
- data/lib/puppet/feature/hocon.rb +3 -0
- data/lib/puppet/file_system.rb +15 -3
- data/lib/puppet/file_system/windows.rb +8 -0
- data/lib/puppet/forge.rb +6 -6
- data/lib/puppet/forge/repository.rb +1 -2
- data/lib/puppet/functions/binary_file.rb +4 -10
- data/lib/puppet/functions/hiera_array.rb +1 -1
- data/lib/puppet/functions/hiera_include.rb +1 -1
- data/lib/puppet/functions/hocon_data.rb +24 -0
- data/lib/puppet/functions/json_data.rb +18 -0
- data/lib/puppet/functions/yaml_data.rb +21 -0
- data/lib/puppet/generate/type.rb +1 -1
- data/lib/puppet/graph/simple_graph.rb +4 -2
- data/lib/puppet/indirector/file_bucket_file/file.rb +10 -2
- data/lib/puppet/indirector/request.rb +5 -1
- data/lib/puppet/interface.rb +14 -2
- data/lib/puppet/interface/face_collection.rb +1 -1
- data/lib/puppet/module.rb +14 -2
- data/lib/puppet/module_tool.rb +4 -4
- data/lib/puppet/module_tool/applications/builder.rb +3 -2
- data/lib/puppet/module_tool/applications/installer.rb +14 -14
- data/lib/puppet/module_tool/applications/upgrader.rb +13 -13
- data/lib/puppet/module_tool/installed_modules.rb +7 -7
- data/lib/puppet/module_tool/local_tarball.rb +3 -3
- data/lib/puppet/module_tool/metadata.rb +1 -1
- data/lib/puppet/network/http/connection.rb +2 -0
- data/lib/puppet/network/http/webrick.rb +2 -1
- data/lib/puppet/parser/functions/hiera.rb +14 -0
- data/lib/puppet/parser/functions/hiera_array.rb +14 -0
- data/lib/puppet/parser/functions/hiera_hash.rb +14 -0
- data/lib/puppet/parser/functions/hiera_include.rb +14 -0
- data/lib/puppet/parser/scope.rb +14 -20
- data/lib/puppet/plugins/data_providers.rb +2 -0
- data/lib/puppet/plugins/data_providers/data_provider.rb +108 -17
- data/lib/puppet/plugins/data_providers/registry.rb +2 -36
- data/lib/puppet/pops.rb +6 -9
- data/lib/puppet/pops/adaptable.rb +0 -3
- data/lib/puppet/pops/binder/producers.rb +3 -3
- data/lib/puppet/pops/evaluator/access_operator.rb +4 -4
- data/lib/puppet/pops/evaluator/closure.rb +1 -1
- data/lib/puppet/pops/evaluator/compare_operator.rb +4 -4
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +1 -1
- data/lib/puppet/pops/issues.rb +4 -0
- data/lib/puppet/pops/label_provider.rb +14 -0
- data/lib/puppet/pops/loader/loader_paths.rb +3 -1
- data/lib/puppet/pops/loader/module_loaders.rb +21 -7
- data/lib/puppet/pops/loader/typed_name.rb +0 -2
- data/lib/puppet/pops/loaders.rb +31 -12
- data/lib/puppet/pops/lookup.rb +4 -3
- data/lib/puppet/pops/lookup/configured_data_provider.rb +87 -0
- data/lib/puppet/pops/lookup/context.rb +121 -71
- data/lib/puppet/pops/lookup/data_adapter.rb +27 -0
- data/lib/puppet/pops/lookup/data_dig_function_provider.rb +55 -0
- data/lib/puppet/pops/lookup/data_hash_function_provider.rb +111 -0
- data/lib/puppet/pops/lookup/data_provider.rb +102 -0
- data/lib/puppet/pops/lookup/environment_data_provider.rb +27 -0
- data/lib/puppet/pops/lookup/explainer.rb +122 -82
- data/lib/puppet/pops/lookup/function_provider.rb +82 -0
- data/lib/puppet/pops/lookup/global_data_provider.rb +49 -0
- data/lib/puppet/pops/lookup/hiera_config.rb +601 -0
- data/lib/puppet/pops/lookup/interpolation.rb +56 -35
- data/lib/puppet/pops/lookup/invocation.rb +179 -101
- data/lib/puppet/pops/lookup/location_resolver.rb +72 -0
- data/lib/puppet/pops/lookup/lookup_adapter.rb +451 -0
- data/lib/puppet/pops/lookup/lookup_key.rb +99 -0
- data/lib/puppet/pops/lookup/lookup_key_function_provider.rb +119 -0
- data/lib/puppet/pops/lookup/module_data_provider.rb +58 -0
- data/lib/puppet/pops/lookup/sub_lookup.rb +8 -4
- data/lib/puppet/pops/merge_strategy.rb +120 -39
- data/lib/puppet/pops/parser/egrammar.ra +2 -0
- data/lib/puppet/pops/parser/eparser.rb +816 -808
- data/lib/puppet/pops/parser/locator.rb +3 -3
- data/lib/puppet/pops/parser/slurp_support.rb +4 -3
- data/lib/puppet/pops/pcore.rb +21 -12
- data/lib/puppet/pops/serialization/abstract_reader.rb +17 -7
- data/lib/puppet/pops/serialization/abstract_writer.rb +27 -12
- data/lib/puppet/pops/serialization/deserializer.rb +17 -4
- data/lib/puppet/pops/serialization/extension.rb +37 -8
- data/lib/puppet/pops/serialization/object.rb +14 -6
- data/lib/puppet/pops/serialization/rgen.rb +2 -1
- data/lib/puppet/pops/serialization/serializer.rb +30 -7
- data/lib/puppet/pops/types/implementation_registry.rb +1 -1
- data/lib/puppet/pops/types/p_object_type.rb +55 -12
- data/lib/puppet/pops/types/p_sem_ver_range_type.rb +27 -27
- data/lib/puppet/pops/types/p_sem_ver_type.rb +12 -12
- data/lib/puppet/pops/types/p_timespan_type.rb +6 -6
- data/lib/puppet/pops/types/p_timestamp_type.rb +2 -2
- data/lib/puppet/pops/types/p_type_set_type.rb +7 -16
- data/lib/puppet/pops/types/recursion_guard.rb +64 -20
- data/lib/puppet/pops/types/ruby_generator.rb +10 -0
- data/lib/puppet/pops/types/type_calculator.rb +23 -13
- data/lib/puppet/pops/types/type_factory.rb +20 -9
- data/lib/puppet/pops/types/type_formatter.rb +37 -17
- data/lib/puppet/pops/types/type_mismatch_describer.rb +7 -6
- data/lib/puppet/pops/types/type_parser.rb +6 -0
- data/lib/puppet/pops/types/types.rb +225 -132
- data/lib/puppet/pops/validation.rb +1 -1
- data/lib/puppet/pops/validation/checker4_0.rb +12 -2
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
- data/lib/puppet/pops/visitor.rb +4 -3
- data/lib/puppet/provider/mcx/mcxcontent.rb +2 -1
- data/lib/puppet/provider/nameservice.rb +15 -0
- data/lib/puppet/provider/package/appdmg.rb +1 -1
- data/lib/puppet/provider/package/dnf.rb +1 -1
- data/lib/puppet/provider/package/pkg.rb +1 -1
- data/lib/puppet/provider/package/pkgdmg.rb +1 -1
- data/lib/puppet/provider/package/pkgng.rb +1 -1
- data/lib/puppet/provider/package/rpm.rb +2 -2
- data/lib/puppet/provider/service/smf.rb +3 -3
- data/lib/puppet/provider/service/systemd.rb +5 -1
- data/lib/puppet/provider/user/directoryservice.rb +1 -0
- data/lib/puppet/provider/user/user_role_add.rb +15 -0
- data/lib/puppet/provider/yumrepo/inifile.rb +2 -2
- data/lib/puppet/provider/zone/solaris.rb +4 -1
- data/lib/puppet/reference/indirection.rb +1 -1
- data/lib/puppet/resource.rb +2 -3
- data/lib/puppet/resource/catalog.rb +12 -4
- data/lib/puppet/resource/type.rb +3 -3
- data/lib/puppet/settings.rb +1 -1
- data/lib/puppet/settings/config_file.rb +2 -1
- data/lib/puppet/settings/directory_setting.rb +6 -0
- data/lib/puppet/settings/environment_conf.rb +6 -2
- data/lib/puppet/settings/file_or_directory_setting.rb +6 -0
- data/lib/puppet/settings/file_setting.rb +10 -0
- data/lib/puppet/ssl/certificate_authority.rb +13 -2
- data/lib/puppet/ssl/host.rb +23 -1
- data/lib/puppet/transaction/additional_resource_generator.rb +7 -0
- data/lib/puppet/type/user.rb +16 -3
- data/lib/puppet/util.rb +1 -0
- data/lib/puppet/util/execution.rb +3 -3
- data/lib/puppet/util/filetype.rb +11 -5
- data/lib/puppet/util/logging.rb +2 -1
- data/lib/puppet/util/network_device/config.rb +1 -1
- data/lib/puppet/util/plist.rb +6 -0
- data/lib/puppet/util/profiler/aggregate.rb +1 -1
- data/lib/puppet/util/rdoc/generators/puppet_generator.rb +2 -2
- data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +2 -1
- data/lib/puppet/util/windows/adsi.rb +15 -12
- data/lib/puppet/vendor/load_semantic_puppet.rb +1 -0
- data/lib/puppet/vendor/pathspec/lib/pathspec.rb +2 -1
- data/lib/puppet/vendor/require_vendored.rb +0 -1
- data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet.rb +17 -0
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency.rb +7 -7
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/graph.rb +2 -2
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/graph_node.rb +2 -2
- data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/module_release.rb +58 -0
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/source.rb +2 -2
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/unsatisfiable_graph.rb +2 -2
- data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/gem_version.rb +3 -0
- data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/locales/config.yaml +21 -0
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/version.rb +48 -21
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/version_range.rb +15 -17
- data/lib/puppet/version.rb +1 -1
- data/lib/semver.rb +19 -12
- data/locales/config.yaml +29 -0
- data/locales/puppet.pot +79 -0
- data/man/man5/puppet.conf.5 +1 -1
- data/spec/fixtures/unit/application/environments/puppet_func_provider/functions/{data.pp → environment/data.pp} +0 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_misc/data/common.yaml +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/data/common.yaml +1 -1
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/hiera.yaml +5 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/lib/puppet/bindings/backend/default.rb +9 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/lib/puppet_x/backend/special_data_provider_factory.rb +23 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/manifests/init.pp +5 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/metadata.json +9 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_env_data.rb +1 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/manifests/init.pp +1 -1
- data/spec/fixtures/unit/functions/lookup/data/common.yaml +19 -0
- data/spec/fixtures/unit/functions/lookup_fixture/data/common.yaml +19 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/environment.conf +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/lib/puppet/functions/environment/data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/lib/puppet/bindings/abc/default.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/lib/puppet/functions/abc/data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/lib/puppet/bindings/bad_data/default.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/lib/puppet/bindings/bca/default.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/lib/puppet/functions/bca/data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/data/empty.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/hiera.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/data/empty_key.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/hiera.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/data/empty_key.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/hiera.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/data/empty.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/hiera.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/data/first.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/hiera.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/meta/lib/puppet/functions/meta/data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/meta/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/meta/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/lib/puppet/bindings/metawcp/default.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/lib/puppet_x/thallgren/sample_module_data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/no_provider/manifests/init.pp +0 -0
- data/spec/integration/application/apply_spec.rb +88 -2
- data/spec/integration/application/lookup_spec.rb +155 -0
- data/spec/integration/data_binding_spec.rb +5 -5
- data/spec/integration/defaults_spec.rb +13 -0
- data/spec/integration/environments/default_manifest_spec.rb +16 -16
- data/spec/integration/environments/setting_hooks_spec.rb +1 -1
- data/spec/integration/test/test_helper_spec.rb +6 -2
- data/spec/integration/transaction_spec.rb +74 -0
- data/spec/integration/util/execution_spec.rb +8 -0
- data/spec/lib/puppet_spec/module_tool/shared_functions.rb +2 -2
- data/spec/lib/puppet_spec/module_tool/stub_source.rb +1 -1
- data/spec/lib/puppet_spec/unindent.rb +2 -2
- data/spec/unit/application/face_base_spec.rb +16 -0
- data/spec/unit/application/lookup_spec.rb +262 -227
- data/spec/unit/data_providers/{sample_data_provider_spec.rb → custom_data_provider_spec.rb} +14 -16
- data/spec/unit/data_providers/function_data_provider_spec.rb +2 -2
- data/spec/unit/data_providers/hiera_data_provider_spec.rb +60 -97
- data/spec/unit/defaults_spec.rb +1 -1
- data/spec/unit/face/ca_spec.rb +10 -0
- data/spec/unit/face/certificate_request_spec.rb +10 -0
- data/spec/unit/face/certificate_revocation_list_spec.rb +10 -0
- data/spec/unit/face/file_spec.rb +4 -0
- data/spec/unit/face/help_spec.rb +17 -0
- data/spec/unit/face/key_spec.rb +10 -0
- data/spec/unit/face/status_spec.rb +10 -0
- data/spec/unit/file_system_spec.rb +143 -6
- data/spec/unit/functions/binary_file_spec.rb +1 -1
- data/spec/unit/functions/hiera_spec.rb +257 -47
- data/spec/unit/functions/lookup_fixture_spec.rb +693 -0
- data/spec/unit/functions/lookup_spec.rb +1319 -608
- data/spec/unit/functions/new_spec.rb +3 -3
- data/spec/unit/graph/rb_tree_map_spec.rb +1 -1
- data/spec/unit/graph/simple_graph_spec.rb +1 -1
- data/spec/unit/hiera/scope_spec.rb +4 -4
- data/spec/unit/indirector/request_spec.rb +9 -0
- data/spec/unit/interface_spec.rb +27 -0
- data/spec/unit/man_spec.rb +1 -1
- data/spec/unit/module_spec.rb +1 -1
- data/spec/unit/module_tool/applications/builder_spec.rb +16 -1
- data/spec/unit/module_tool/applications/installer_spec.rb +1 -1
- data/spec/unit/module_tool/applications/upgrader_spec.rb +1 -1
- data/spec/unit/module_tool/installed_modules_spec.rb +6 -6
- data/spec/unit/module_tool_spec.rb +3 -3
- data/spec/unit/network/http/connection_spec.rb +10 -0
- data/spec/unit/network/http/webrick_spec.rb +1 -1
- data/spec/unit/pops/evaluator/access_ops_spec.rb +2 -2
- data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +9 -9
- data/spec/unit/pops/loaders/environment_loader_spec.rb +172 -0
- data/spec/unit/pops/lookup/context_spec.rb +45 -16
- data/spec/unit/pops/lookup/interpolation_spec.rb +28 -20
- data/spec/unit/pops/lookup/lookup_spec.rb +197 -0
- data/spec/unit/pops/merge_strategy_spec.rb +18 -0
- data/spec/unit/pops/parser/lexer2_spec.rb +16 -1
- data/spec/unit/pops/parser/parse_site_spec.rb +4 -0
- data/spec/unit/pops/serialization/packer_spec.rb +4 -23
- data/spec/unit/pops/serialization/serialization_spec.rb +32 -8
- data/spec/unit/pops/types/p_object_type_spec.rb +68 -3
- data/spec/unit/pops/types/p_sem_ver_type_spec.rb +4 -4
- data/spec/unit/pops/types/p_type_set_type_spec.rb +31 -2
- data/spec/unit/pops/types/type_acceptor_spec.rb +18 -17
- data/spec/unit/pops/types/type_calculator_spec.rb +39 -40
- data/spec/unit/pops/types/type_factory_spec.rb +3 -3
- data/spec/unit/pops/types/type_formatter_spec.rb +7 -3
- data/spec/unit/pops/types/type_mismatch_describer_spec.rb +13 -2
- data/spec/unit/pops/types/types_spec.rb +25 -2
- data/spec/unit/pops/validator/validator_spec.rb +60 -4
- data/spec/unit/provider/nameservice_spec.rb +42 -0
- data/spec/unit/provider/package/aptrpm_spec.rb +1 -1
- data/spec/unit/provider/package/pkg_spec.rb +22 -0
- data/spec/unit/provider/package/pkgng_spec.rb +12 -0
- data/spec/unit/provider/package/rpm_spec.rb +8 -8
- data/spec/unit/provider/service/smf_spec.rb +13 -11
- data/spec/unit/provider/service/systemd_spec.rb +8 -1
- data/spec/unit/provider/user/useradd_spec.rb +1 -0
- data/spec/unit/puppet_spec.rb +14 -0
- data/spec/unit/resource/catalog_spec.rb +15 -9
- data/spec/unit/resource_spec.rb +20 -17
- data/spec/unit/semver_spec.rb +14 -0
- data/spec/unit/ssl/certificate_authority_spec.rb +12 -1
- data/spec/unit/transaction/additional_resource_generator_spec.rb +11 -0
- data/spec/unit/type/user_spec.rb +32 -6
- data/spec/unit/util/filetype_spec.rb +3 -3
- data/spec/unit/util/yaml_spec.rb +1 -1
- data/spec/unit/util_spec.rb +10 -2
- data/tasks/i18n.rake +20 -0
- metadata +2661 -2607
- data/lib/puppet/data_providers/lookup_adapter.rb +0 -254
- data/lib/puppet/vendor/load_semantic.rb +0 -1
- data/lib/puppet/vendor/semantic/Gemfile +0 -20
- data/lib/puppet/vendor/semantic/PUPPET_README.md +0 -6
- data/lib/puppet/vendor/semantic/Rakefile +0 -69
- data/lib/puppet/vendor/semantic/lib/semantic.rb +0 -7
- data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +0 -60
- data/lib/puppet/vendor/semantic/spec/spec_helper.rb +0 -24
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/graph_node_spec.rb +0 -141
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/graph_spec.rb +0 -162
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/module_release_spec.rb +0 -143
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/source_spec.rb +0 -5
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/unsatisfiable_graph_spec.rb +0 -44
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency_spec.rb +0 -383
- data/lib/puppet/vendor/semantic/spec/unit/semantic/version_range_spec.rb +0 -307
- data/lib/puppet/vendor/semantic/spec/unit/semantic/version_spec.rb +0 -608
- data/spec/fixtures/unit/data_providers/environments/sample/manifests/site.pp +0 -6
| @@ -59,7 +59,7 @@ module Types | |
| 59 59 | 
             
                    loader)
         | 
| 60 60 | 
             
                end
         | 
| 61 61 |  | 
| 62 | 
            -
                # Register a  | 
| 62 | 
            +
                # Register a bidirectional regexp mapping
         | 
| 63 63 | 
             
                #
         | 
| 64 64 | 
             
                # @param type_name_subst [Array(Regexp,String)] regexp and replacement mapping type names to runtime names
         | 
| 65 65 | 
             
                # @param impl_name_subst [Array(Regexp,String)] regexp and replacement mapping runtime names to type names
         | 
| @@ -358,14 +358,14 @@ class PObjectType < PMetaType | |
| 358 358 | 
             
              #   @param i12n_hash [Hash{String=>Object}] The hash describing the Object features
         | 
| 359 359 | 
             
              #
         | 
| 360 360 | 
             
              # @api private
         | 
| 361 | 
            -
              def initialize( | 
| 361 | 
            +
              def initialize(i12n_hash, i12n_hash_expression = nil)
         | 
| 362 362 | 
             
                @attributes = EMPTY_HASH
         | 
| 363 363 | 
             
                @functions = EMPTY_HASH
         | 
| 364 364 |  | 
| 365 | 
            -
                if  | 
| 366 | 
            -
                  initialize_from_hash( | 
| 365 | 
            +
                if i12n_hash.is_a?(Hash)
         | 
| 366 | 
            +
                  initialize_from_hash(i12n_hash)
         | 
| 367 367 | 
             
                else
         | 
| 368 | 
            -
                  @name = TypeAsserter.assert_instance_of('object name', TYPE_OBJECT_NAME,  | 
| 368 | 
            +
                  @name = TypeAsserter.assert_instance_of('object name', TYPE_OBJECT_NAME, i12n_hash)
         | 
| 369 369 | 
             
                  @i12n_hash_expression = i12n_hash_expression
         | 
| 370 370 | 
             
                end
         | 
| 371 371 | 
             
              end
         | 
| @@ -411,7 +411,7 @@ class PObjectType < PMetaType | |
| 411 411 | 
             
                impl_class = implementation_class
         | 
| 412 412 | 
             
                class_name = impl_class.name || "Anonymous Ruby class for #{name}"
         | 
| 413 413 |  | 
| 414 | 
            -
                (param_names, param_types, required_param_count) = parameter_info
         | 
| 414 | 
            +
                (param_names, param_types, required_param_count) = parameter_info(impl_class)
         | 
| 415 415 |  | 
| 416 416 | 
             
                # Create the callable with a size that reflects the required and optional parameters
         | 
| 417 417 | 
             
                param_types << required_param_count
         | 
| @@ -442,11 +442,17 @@ class PObjectType < PMetaType | |
| 442 442 | 
             
                    end
         | 
| 443 443 | 
             
                  end
         | 
| 444 444 |  | 
| 445 | 
            -
                  # Add the dispatch that uses the standard #new method on the class. It's assumed that the | 
| 445 | 
            +
                  # Add the dispatch that uses the standard #from_asserted_args or #new method on the class. It's assumed that the
         | 
| 446 446 | 
             
                  # method performs no assertions.
         | 
| 447 447 | 
             
                  dispatcher.add_dispatch(create_type, :create, param_names, nil, EMPTY_ARRAY, EMPTY_ARRAY, false)
         | 
| 448 | 
            -
                   | 
| 449 | 
            -
                     | 
| 448 | 
            +
                  if impl_class.respond_to?(:from_asserted_args)
         | 
| 449 | 
            +
                    def create(*args)
         | 
| 450 | 
            +
                      self.class.impl_class.from_asserted_args(*args)
         | 
| 451 | 
            +
                    end
         | 
| 452 | 
            +
                  else
         | 
| 453 | 
            +
                    def create(*args)
         | 
| 454 | 
            +
                      self.class.impl_class.new(*args)
         | 
| 455 | 
            +
                    end
         | 
| 450 456 | 
             
                  end
         | 
| 451 457 | 
             
                end
         | 
| 452 458 | 
             
              end
         | 
| @@ -474,7 +480,7 @@ class PObjectType < PMetaType | |
| 474 480 |  | 
| 475 481 | 
             
              # @api private
         | 
| 476 482 | 
             
              # @return [(Array<String>, Array<PAnyType>, Integer)] array of parameter names, array of parameter types, and a count reflecting the required number of parameters
         | 
| 477 | 
            -
              def parameter_info(attr_readers = false)
         | 
| 483 | 
            +
              def parameter_info(impl_class, attr_readers = false)
         | 
| 478 484 | 
             
                # Create a types and a names array where optional entries ends up last
         | 
| 479 485 | 
             
                opt_types = []
         | 
| 480 486 | 
             
                opt_names = []
         | 
| @@ -491,6 +497,35 @@ class PObjectType < PMetaType | |
| 491 497 | 
             
                end
         | 
| 492 498 | 
             
                param_names = non_opt_names + opt_names
         | 
| 493 499 | 
             
                param_types = non_opt_types + opt_types
         | 
| 500 | 
            +
                param_count = param_names.size
         | 
| 501 | 
            +
             | 
| 502 | 
            +
                init = impl_class.respond_to?(:from_asserted_args) ? impl_class.method(:from_asserted_args) : impl_class.instance_method(:initialize)
         | 
| 503 | 
            +
                init_non_opt_count = 0
         | 
| 504 | 
            +
                init_param_names = init.parameters.map do |p|
         | 
| 505 | 
            +
                  init_non_opt_count += 1 if :req == p[0]
         | 
| 506 | 
            +
                  p[1].to_s
         | 
| 507 | 
            +
                end
         | 
| 508 | 
            +
             | 
| 509 | 
            +
                if init_param_names != param_names
         | 
| 510 | 
            +
                  if init_param_names.size < param_count || init_non_opt_count > param_count
         | 
| 511 | 
            +
                    raise Serialization::SerializationError, "Initializer for class #{impl_class.name} does not match the attributes of #{name}"
         | 
| 512 | 
            +
                  end
         | 
| 513 | 
            +
                  init_param_names = init_param_names[0, param_count] if init_param_names.size > param_count
         | 
| 514 | 
            +
                  unless init_param_names == param_names
         | 
| 515 | 
            +
                    # Reorder needed to match initialize method arguments
         | 
| 516 | 
            +
                    new_param_types = []
         | 
| 517 | 
            +
                    init_param_names.each do |ip|
         | 
| 518 | 
            +
                      index = param_names.index(ip)
         | 
| 519 | 
            +
                      if index.nil?
         | 
| 520 | 
            +
                        raise Serialization::SerializationError,
         | 
| 521 | 
            +
                          "Initializer for class #{impl_class.name} parameter '#{ip}' does not match any of the the attributes of type #{name}"
         | 
| 522 | 
            +
                      end
         | 
| 523 | 
            +
                      new_param_types << param_types[index]
         | 
| 524 | 
            +
                    end
         | 
| 525 | 
            +
                    param_names = init_param_names
         | 
| 526 | 
            +
                    param_types = new_param_types
         | 
| 527 | 
            +
                  end
         | 
| 528 | 
            +
                end
         | 
| 494 529 |  | 
| 495 530 | 
             
                [param_names, param_types, non_opt_types.size]
         | 
| 496 531 | 
             
              end
         | 
| @@ -620,6 +655,14 @@ class PObjectType < PMetaType | |
| 620 655 | 
             
                @i12n_type ||= create_i12n_type
         | 
| 621 656 | 
             
              end
         | 
| 622 657 |  | 
| 658 | 
            +
              def create(*args)
         | 
| 659 | 
            +
                implementation_class.create(*args)
         | 
| 660 | 
            +
              end
         | 
| 661 | 
            +
             | 
| 662 | 
            +
              def from_hash(hash)
         | 
| 663 | 
            +
                implementation_class.from_hash(hash)
         | 
| 664 | 
            +
              end
         | 
| 665 | 
            +
             | 
| 623 666 | 
             
              # Creates the type that a initialization hash used for creating instances of this type must conform to.
         | 
| 624 667 | 
             
              #
         | 
| 625 668 | 
             
              # @return [PStructType] the initialization hash type
         | 
| @@ -816,8 +859,8 @@ class PObjectType < PMetaType | |
| 816 859 | 
             
              def find_equality_definer_of(attr)
         | 
| 817 860 | 
             
                type = self
         | 
| 818 861 | 
             
                while !type.nil? do
         | 
| 819 | 
            -
                  p = type. | 
| 820 | 
            -
                  return type  | 
| 862 | 
            +
                  p = type.resolved_parent
         | 
| 863 | 
            +
                  return type unless p.is_a?(PObjectType)
         | 
| 821 864 | 
             
                  return type unless p.equality_attributes.include?(attr.name)
         | 
| 822 865 | 
             
                  type = p
         | 
| 823 866 | 
             
                end
         | 
| @@ -827,7 +870,7 @@ class PObjectType < PMetaType | |
| 827 870 | 
             
              def guarded_recursion(guard, dflt)
         | 
| 828 871 | 
             
                if @self_recursion
         | 
| 829 872 | 
             
                  guard ||= RecursionGuard.new
         | 
| 830 | 
            -
                   | 
| 873 | 
            +
                  guard.with_this(self) { |state| (state & RecursionGuard::SELF_RECURSION_IN_THIS) == 0 ? yield(guard) : dflt }
         | 
| 831 874 | 
             
                else
         | 
| 832 875 | 
             
                  yield(guard)
         | 
| 833 876 | 
             
                end
         | 
| @@ -10,21 +10,21 @@ class PSemVerRangeType < PScalarType | |
| 10 10 | 
             
              end
         | 
| 11 11 |  | 
| 12 12 | 
             
              # Check if a version is included in a version range. The version can be a string or
         | 
| 13 | 
            -
              # a ` | 
| 13 | 
            +
              # a `SemanticPuppet::SemVer`
         | 
| 14 14 | 
             
              #
         | 
| 15 | 
            -
              # @param range [ | 
| 16 | 
            -
              # @param version [ | 
| 15 | 
            +
              # @param range [SemanticPuppet::VersionRange] the range to match against
         | 
| 16 | 
            +
              # @param version [SemanticPuppet::Version,String] the version to match
         | 
| 17 17 | 
             
              # @return [Boolean] `true` if the range includes the given version
         | 
| 18 18 | 
             
              #
         | 
| 19 19 | 
             
              # @api public
         | 
| 20 20 | 
             
              def self.include?(range, version)
         | 
| 21 21 | 
             
                case version
         | 
| 22 | 
            -
                when  | 
| 22 | 
            +
                when SemanticPuppet::Version
         | 
| 23 23 | 
             
                  range.include?(version)
         | 
| 24 24 | 
             
                when String
         | 
| 25 25 | 
             
                  begin
         | 
| 26 | 
            -
                    range.include?( | 
| 27 | 
            -
                  rescue  | 
| 26 | 
            +
                    range.include?(SemanticPuppet::Version.parse(version))
         | 
| 27 | 
            +
                  rescue SemanticPuppet::Version::ValidationFailure
         | 
| 28 28 | 
             
                    false
         | 
| 29 29 | 
             
                  end
         | 
| 30 30 | 
             
                else
         | 
| @@ -32,28 +32,28 @@ class PSemVerRangeType < PScalarType | |
| 32 32 | 
             
                end
         | 
| 33 33 | 
             
              end
         | 
| 34 34 |  | 
| 35 | 
            -
              # Creates a { | 
| 36 | 
            -
              # a { | 
| 37 | 
            -
              # { | 
| 35 | 
            +
              # Creates a {SemanticPuppet::VersionRange} from the given _version_range_ argument. If the argument is `nil` or
         | 
| 36 | 
            +
              # a {SemanticPuppet::VersionRange}, it is returned. If it is a {String}, it will be parsed into a
         | 
| 37 | 
            +
              # {SemanticPuppet::VersionRange}. Any other class will raise an {ArgumentError}.
         | 
| 38 38 | 
             
              #
         | 
| 39 | 
            -
              # @param version_range [ | 
| 40 | 
            -
              # @return [ | 
| 39 | 
            +
              # @param version_range [SemanticPuppet::VersionRange,String,nil] the version range to convert
         | 
| 40 | 
            +
              # @return [SemanticPuppet::VersionRange] the converted version range
         | 
| 41 41 | 
             
              # @raise [ArgumentError] when the argument cannot be converted into a version range
         | 
| 42 42 | 
             
              #
         | 
| 43 43 | 
             
              def self.convert(version_range)
         | 
| 44 44 | 
             
                case version_range
         | 
| 45 | 
            -
                when nil,  | 
| 45 | 
            +
                when nil, SemanticPuppet::VersionRange
         | 
| 46 46 | 
             
                  version_range
         | 
| 47 47 | 
             
                when String
         | 
| 48 | 
            -
                   | 
| 48 | 
            +
                  SemanticPuppet::VersionRange.parse(version_range)
         | 
| 49 49 | 
             
                else
         | 
| 50 50 | 
             
                  raise ArgumentError, "Unable to convert a #{version_range.class.name} to a SemVerRange"
         | 
| 51 51 | 
             
                end
         | 
| 52 52 | 
             
              end
         | 
| 53 53 |  | 
| 54 54 | 
             
              # Checks if range _a_ is a sub-range of (i.e. completely covered by) range _b_
         | 
| 55 | 
            -
              # @param a [ | 
| 56 | 
            -
              # @param b [ | 
| 55 | 
            +
              # @param a [SemanticPuppet::VersionRange] the first range
         | 
| 56 | 
            +
              # @param b [SemanticPuppet::VersionRange] the second range
         | 
| 57 57 | 
             
              #
         | 
| 58 58 | 
             
              # @return [Boolean] `true` if _a_ is completely covered by _b_
         | 
| 59 59 | 
             
              def self.covered_by?(a, b)
         | 
| @@ -63,9 +63,9 @@ class PSemVerRangeType < PScalarType | |
| 63 63 | 
             
              # Merge two ranges so that the result matches all versions matched by both. A merge
         | 
| 64 64 | 
             
              # is only possible when the ranges are either adjacent or have an overlap.
         | 
| 65 65 | 
             
              #
         | 
| 66 | 
            -
              # @param a [ | 
| 67 | 
            -
              # @param b [ | 
| 68 | 
            -
              # @return [ | 
| 66 | 
            +
              # @param a [SemanticPuppet::VersionRange] the first range
         | 
| 67 | 
            +
              # @param b [SemanticPuppet::VersionRange] the second range
         | 
| 68 | 
            +
              # @return [SemanticPuppet::VersionRange,nil] the result of the merge
         | 
| 69 69 | 
             
              #
         | 
| 70 70 | 
             
              # @api public
         | 
| 71 71 | 
             
              def self.merge(a, b)
         | 
| @@ -77,13 +77,13 @@ class PSemVerRangeType < PScalarType | |
| 77 77 | 
             
                  elsif b.exclude_end?
         | 
| 78 78 | 
             
                    exclude_end = max == b.end && (max > a.end || a.exclude_end?)
         | 
| 79 79 | 
             
                  end
         | 
| 80 | 
            -
                   | 
| 80 | 
            +
                  SemanticPuppet::VersionRange.new([a.begin, b.begin].min, max, exclude_end)
         | 
| 81 81 | 
             
                elsif a.exclude_end? && a.end == b.begin
         | 
| 82 82 | 
             
                  # Adjacent, a before b
         | 
| 83 | 
            -
                   | 
| 83 | 
            +
                  SemanticPuppet::VersionRange.new(a.begin, b.end, b.exclude_end?)
         | 
| 84 84 | 
             
                elsif b.exclude_end? && b.end == a.begin
         | 
| 85 85 | 
             
                  # Adjacent, b before a
         | 
| 86 | 
            -
                   | 
| 86 | 
            +
                  SemanticPuppet::VersionRange.new(b.begin, a.end, a.exclude_end?)
         | 
| 87 87 | 
             
                else
         | 
| 88 88 | 
             
                  # No overlap
         | 
| 89 89 | 
             
                  nil
         | 
| @@ -91,7 +91,7 @@ class PSemVerRangeType < PScalarType | |
| 91 91 | 
             
              end
         | 
| 92 92 |  | 
| 93 93 | 
             
              def instance?(o, guard = nil)
         | 
| 94 | 
            -
                o.is_a?( | 
| 94 | 
            +
                o.is_a?(SemanticPuppet::VersionRange)
         | 
| 95 95 | 
             
              end
         | 
| 96 96 |  | 
| 97 97 | 
             
              def eql?(o)
         | 
| @@ -115,7 +115,7 @@ class PSemVerRangeType < PScalarType | |
| 115 115 | 
             
                  # https://github.com/npm/node-semver#range-grammar
         | 
| 116 116 | 
             
                  #
         | 
| 117 117 | 
             
                  # The logical or || operator is not implemented since it effectively builds
         | 
| 118 | 
            -
                  # an array of ranges that may be disparate. The {{ | 
| 118 | 
            +
                  # an array of ranges that may be disparate. The {{SemanticPuppet::VersionRange}} inherits
         | 
| 119 119 | 
             
                  # from the standard ruby range. It must be possible to describe that range in terms
         | 
| 120 120 | 
             
                  # of min, max, and exclude max.
         | 
| 121 121 | 
             
                  #
         | 
| @@ -144,13 +144,13 @@ class PSemVerRangeType < PScalarType | |
| 144 144 | 
             
                  end
         | 
| 145 145 |  | 
| 146 146 | 
             
                  def from_string(str)
         | 
| 147 | 
            -
                     | 
| 147 | 
            +
                    SemanticPuppet::VersionRange.parse(str)
         | 
| 148 148 | 
             
                  end
         | 
| 149 149 |  | 
| 150 150 | 
             
                  def from_versions(min, max = :default, exclude_max = false)
         | 
| 151 | 
            -
                    min =  | 
| 152 | 
            -
                    max =  | 
| 153 | 
            -
                     | 
| 151 | 
            +
                    min = SemanticPuppet::Version::MIN if min == :default
         | 
| 152 | 
            +
                    max = SemanticPuppet::Version::MAX if max == :default
         | 
| 153 | 
            +
                    SemanticPuppet::VersionRange.new(min, max, exclude_max)
         | 
| 154 154 | 
             
                  end
         | 
| 155 155 |  | 
| 156 156 | 
             
                  def from_hash(hash)
         | 
| @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            module Puppet::Pops
         | 
| 2 2 | 
             
            module Types
         | 
| 3 3 |  | 
| 4 | 
            -
            # A Puppet Language Type that exposes the {{ | 
| 4 | 
            +
            # A Puppet Language Type that exposes the {{SemanticPuppet::Version}} and {{SemanticPuppet::VersionRange}}.
         | 
| 5 5 | 
             
            # The version type is parameterized with version ranges.
         | 
| 6 6 | 
             
            #
         | 
| 7 7 | 
             
            # @api public
         | 
| @@ -18,13 +18,13 @@ class PSemVerType < PScalarType | |
| 18 18 | 
             
              attr_reader :ranges
         | 
| 19 19 |  | 
| 20 20 | 
             
              def initialize(ranges)
         | 
| 21 | 
            -
                ranges = ranges.map { |range| range.is_a?( | 
| 21 | 
            +
                ranges = ranges.map { |range| range.is_a?(SemanticPuppet::VersionRange) ? range : SemanticPuppet::VersionRange.parse(range) }
         | 
| 22 22 | 
             
                ranges = merge_ranges(ranges) if ranges.size > 1
         | 
| 23 23 | 
             
                @ranges = ranges
         | 
| 24 24 | 
             
              end
         | 
| 25 25 |  | 
| 26 26 | 
             
              def instance?(o, guard = nil)
         | 
| 27 | 
            -
                o.is_a?( | 
| 27 | 
            +
                o.is_a?(SemanticPuppet::Version) && (@ranges.empty? || @ranges.any? {|range| range.include?(o) })
         | 
| 28 28 | 
             
              end
         | 
| 29 29 |  | 
| 30 30 | 
             
              def eql?(o)
         | 
| @@ -36,19 +36,19 @@ class PSemVerType < PScalarType | |
| 36 36 | 
             
              end
         | 
| 37 37 |  | 
| 38 38 | 
             
              # Creates a SemVer version from the given _version_ argument. If the argument is `nil` or
         | 
| 39 | 
            -
              # a { | 
| 40 | 
            -
              # { | 
| 39 | 
            +
              # a {SemanticPuppet::Version}, it is returned. If it is a {String}, it will be parsed into a
         | 
| 40 | 
            +
              # {SemanticPuppet::Version}. Any other class will raise an {ArgumentError}.
         | 
| 41 41 | 
             
              #
         | 
| 42 | 
            -
              # @param version [ | 
| 43 | 
            -
              # @return [ | 
| 42 | 
            +
              # @param version [SemanticPuppet::Version,String,nil] the version to convert
         | 
| 43 | 
            +
              # @return [SemanticPuppet::Version] the converted version
         | 
| 44 44 | 
             
              # @raise [ArgumentError] when the argument cannot be converted into a version
         | 
| 45 45 | 
             
              #
         | 
| 46 46 | 
             
              def self.convert(version)
         | 
| 47 47 | 
             
                case version
         | 
| 48 | 
            -
                when nil,  | 
| 48 | 
            +
                when nil, SemanticPuppet::Version
         | 
| 49 49 | 
             
                  version
         | 
| 50 50 | 
             
                when String
         | 
| 51 | 
            -
                   | 
| 51 | 
            +
                  SemanticPuppet::Version.parse(version)
         | 
| 52 52 | 
             
                else
         | 
| 53 53 | 
             
                  raise ArgumentError, "Unable to convert a #{version.class.name} to a SemVer"
         | 
| 54 54 | 
             
                end
         | 
| @@ -87,15 +87,15 @@ class PSemVerType < PScalarType | |
| 87 87 | 
             
                  end
         | 
| 88 88 |  | 
| 89 89 | 
             
                  def from_string(str)
         | 
| 90 | 
            -
                     | 
| 90 | 
            +
                    SemanticPuppet::Version.parse(str)
         | 
| 91 91 | 
             
                  end
         | 
| 92 92 |  | 
| 93 93 | 
             
                  def from_args(major, minor, patch, prerelease = nil, build = nil)
         | 
| 94 | 
            -
                     | 
| 94 | 
            +
                    SemanticPuppet::Version.new(major, minor, patch, prerelease, build)
         | 
| 95 95 | 
             
                  end
         | 
| 96 96 |  | 
| 97 97 | 
             
                  def from_hash(hash)
         | 
| 98 | 
            -
                     | 
| 98 | 
            +
                    SemanticPuppet::Version.new(hash['major'], hash['minor'], hash['patch'], hash['prerelease'], hash['build'])
         | 
| 99 99 | 
             
                  end
         | 
| 100 100 | 
             
                end
         | 
| 101 101 | 
             
              end
         | 
| @@ -1,10 +1,10 @@ | |
| 1 1 | 
             
            module Puppet::Pops
         | 
| 2 2 | 
             
            module Types
         | 
| 3 3 | 
             
              class PAbstractTimeDataType < PAbstractRangeType
         | 
| 4 | 
            -
                # @param [AbstractTime]  | 
| 5 | 
            -
                # @param [AbstractTime]  | 
| 6 | 
            -
                def initialize( | 
| 7 | 
            -
                  super(convert_arg( | 
| 4 | 
            +
                # @param from [AbstractTime] lower bound for this type. Nil or :default means unbounded
         | 
| 5 | 
            +
                # @param to [AbstractTime] upper bound for this type. Nil or :default means unbounded
         | 
| 6 | 
            +
                def initialize(from = nil, to = nil)
         | 
| 7 | 
            +
                  super(convert_arg(from, true), convert_arg(to, false))
         | 
| 8 8 | 
             
                end
         | 
| 9 9 |  | 
| 10 10 | 
             
                def convert_arg(arg, min)
         | 
| @@ -51,8 +51,8 @@ module Types | |
| 51 51 | 
             
              class PTimespanType < PAbstractTimeDataType
         | 
| 52 52 | 
             
                def self.register_ptype(loader, ir)
         | 
| 53 53 | 
             
                  create_ptype(loader, ir, 'ScalarType',
         | 
| 54 | 
            -
                    'from' => { KEY_TYPE => PTimespanType::DEFAULT, KEY_VALUE =>  | 
| 55 | 
            -
                    'to' => { KEY_TYPE => PTimespanType::DEFAULT, KEY_VALUE =>  | 
| 54 | 
            +
                    'from' => { KEY_TYPE => POptionalType.new(PTimespanType::DEFAULT), KEY_VALUE => nil },
         | 
| 55 | 
            +
                    'to' => { KEY_TYPE => POptionalType.new(PTimespanType::DEFAULT), KEY_VALUE => nil }
         | 
| 56 56 | 
             
                  )
         | 
| 57 57 | 
             
                end
         | 
| 58 58 |  | 
| @@ -3,8 +3,8 @@ module Types | |
| 3 3 | 
             
              class PTimestampType < PAbstractTimeDataType
         | 
| 4 4 | 
             
                def self.register_ptype(loader, ir)
         | 
| 5 5 | 
             
                  create_ptype(loader, ir, 'ScalarType',
         | 
| 6 | 
            -
                    'from' => { KEY_TYPE => PTimestampType::DEFAULT, KEY_VALUE =>  | 
| 7 | 
            -
                    'to' => { KEY_TYPE => PTimestampType::DEFAULT, KEY_VALUE =>  | 
| 6 | 
            +
                    'from' => { KEY_TYPE => POptionalType.new(PTimestampType::DEFAULT), KEY_VALUE => nil },
         | 
| 7 | 
            +
                    'to' => { KEY_TYPE => POptionalType.new(PTimestampType::DEFAULT), KEY_VALUE => nil }
         | 
| 8 8 | 
             
                  )
         | 
| 9 9 | 
             
                end
         | 
| 10 10 |  | 
| @@ -216,27 +216,18 @@ class PTypeSetType < PMetaType | |
| 216 216 | 
             
              # @return [String] the name by which the type is referenced within this type set
         | 
| 217 217 | 
             
              #
         | 
| 218 218 | 
             
              # @api private
         | 
| 219 | 
            -
              def name_for(t)
         | 
| 219 | 
            +
              def name_for(t, default_name)
         | 
| 220 220 | 
             
                key = @types.key(t)
         | 
| 221 221 | 
             
                if key.nil?
         | 
| 222 222 | 
             
                  qname = t.name
         | 
| 223 223 | 
             
                  if @references.empty?
         | 
| 224 | 
            -
                     | 
| 224 | 
            +
                    default_name
         | 
| 225 225 | 
             
                  else
         | 
| 226 | 
            -
                     | 
| 227 | 
            -
             | 
| 228 | 
            -
             | 
| 229 | 
            -
                    if type_set.nil?
         | 
| 230 | 
            -
                      qname
         | 
| 231 | 
            -
                    else
         | 
| 232 | 
            -
                      if segments.size == 1
         | 
| 233 | 
            -
                        qname
         | 
| 234 | 
            -
                      else
         | 
| 235 | 
            -
                        sub_name = type_set.name_for(t)
         | 
| 236 | 
            -
                        sub_name = "#{first}::#{sub_name}" unless sub_name == qname
         | 
| 237 | 
            -
                        sub_name
         | 
| 238 | 
            -
                      end
         | 
| 226 | 
            +
                    @references.each_pair do |ref_key, ref|
         | 
| 227 | 
            +
                      ref_name = ref.type_set.name_for(t, nil)
         | 
| 228 | 
            +
                      return "#{ref_key}::#{ref_name}" unless ref_name.nil?
         | 
| 239 229 | 
             
                    end
         | 
| 230 | 
            +
                    default_name
         | 
| 240 231 | 
             
                  end
         | 
| 241 232 | 
             
                else
         | 
| 242 233 | 
             
                  key
         | 
| @@ -332,7 +323,7 @@ class PTypeSetType < PMetaType | |
| 332 323 | 
             
                KEY_NAME_AUTHORITY => Pcore::RUNTIME_NAME_AUTHORITY,
         | 
| 333 324 | 
             
                Pcore::KEY_PCORE_URI => Pcore::PCORE_URI,
         | 
| 334 325 | 
             
                Pcore::KEY_PCORE_VERSION => Pcore::PCORE_VERSION,
         | 
| 335 | 
            -
                KEY_VERSION =>  | 
| 326 | 
            +
                KEY_VERSION => SemanticPuppet::Version.new(0,0,0)
         | 
| 336 327 | 
             
              })
         | 
| 337 328 |  | 
| 338 329 | 
             
              protected
         | 
| @@ -24,14 +24,54 @@ class RecursionGuard | |
| 24 24 | 
             
              # @param instance [Object] the instance to check
         | 
| 25 25 | 
             
              # @return [Integer] the resulting state
         | 
| 26 26 | 
             
              def recursive_this?(instance)
         | 
| 27 | 
            -
                 | 
| 27 | 
            +
                instance_variable_defined?(:@recursive_this_map) && @recursive_this_map.has_key?(instance.object_id)
         | 
| 28 28 | 
             
              end
         | 
| 29 29 |  | 
| 30 30 | 
             
              # Checks if recursion was detected for the given argument in the 'that' context
         | 
| 31 31 | 
             
              # @param instance [Object] the instance to check
         | 
| 32 32 | 
             
              # @return [Integer] the resulting state
         | 
| 33 33 | 
             
              def recursive_that?(instance)
         | 
| 34 | 
            -
                 | 
| 34 | 
            +
                instance_variable_defined?(:@recursive_that_map) && @recursive_that_map.has_key?(instance.object_id)
         | 
| 35 | 
            +
              end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
              # Add the given argument as 'this' invoke the given block with the resulting state
         | 
| 38 | 
            +
              # @param instance [Object] the instance to add
         | 
| 39 | 
            +
              # @return [Object] the result of yielding
         | 
| 40 | 
            +
              def with_this(instance)
         | 
| 41 | 
            +
                if (@state & SELF_RECURSION_IN_THIS) == 0
         | 
| 42 | 
            +
                  tc = this_count
         | 
| 43 | 
            +
                  @state = @state | SELF_RECURSION_IN_THIS if this_put(instance)
         | 
| 44 | 
            +
                  if tc < this_count
         | 
| 45 | 
            +
                    # recursive state detected
         | 
| 46 | 
            +
                    result = yield(@state)
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                    # pop state
         | 
| 49 | 
            +
                    @state &= ~SELF_RECURSION_IN_THIS
         | 
| 50 | 
            +
                    @this_map.delete(instance.object_id)
         | 
| 51 | 
            +
                    return result
         | 
| 52 | 
            +
                  end
         | 
| 53 | 
            +
                end
         | 
| 54 | 
            +
                yield(@state)
         | 
| 55 | 
            +
              end
         | 
| 56 | 
            +
             | 
| 57 | 
            +
              # Add the given argument as 'that' invoke the given block with the resulting state
         | 
| 58 | 
            +
              # @param instance [Object] the instance to add
         | 
| 59 | 
            +
              # @return [Object] the result of yielding
         | 
| 60 | 
            +
              def with_that(instance)
         | 
| 61 | 
            +
                if (@state & SELF_RECURSION_IN_THAT) == 0
         | 
| 62 | 
            +
                  tc = that_count
         | 
| 63 | 
            +
                  @state = @state | SELF_RECURSION_IN_THAT if that_put(instance)
         | 
| 64 | 
            +
                  if tc < that_count
         | 
| 65 | 
            +
                    # recursive state detected
         | 
| 66 | 
            +
                    result = yield(@state)
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                    # pop state
         | 
| 69 | 
            +
                    @state &= ~SELF_RECURSION_IN_THAT
         | 
| 70 | 
            +
                    @that_map.delete(instance.object_id)
         | 
| 71 | 
            +
                    return result
         | 
| 72 | 
            +
                  end
         | 
| 73 | 
            +
                end
         | 
| 74 | 
            +
                yield(@state)
         | 
| 35 75 | 
             
              end
         | 
| 36 76 |  | 
| 37 77 | 
             
              # Add the given argument as 'this' and return the resulting state
         | 
| @@ -39,7 +79,7 @@ class RecursionGuard | |
| 39 79 | 
             
              # @return [Integer] the resulting state
         | 
| 40 80 | 
             
              def add_this(instance)
         | 
| 41 81 | 
             
                if (@state & SELF_RECURSION_IN_THIS) == 0
         | 
| 42 | 
            -
                  @state = @state | SELF_RECURSION_IN_THIS if  | 
| 82 | 
            +
                  @state = @state | SELF_RECURSION_IN_THIS if this_put(instance)
         | 
| 43 83 | 
             
                end
         | 
| 44 84 | 
             
                @state
         | 
| 45 85 | 
             
              end
         | 
| @@ -49,43 +89,47 @@ class RecursionGuard | |
| 49 89 | 
             
              # @return [Integer] the resulting state
         | 
| 50 90 | 
             
              def add_that(instance)
         | 
| 51 91 | 
             
                if (@state & SELF_RECURSION_IN_THAT) == 0
         | 
| 52 | 
            -
                  @state = @state | SELF_RECURSION_IN_THAT if  | 
| 92 | 
            +
                  @state = @state | SELF_RECURSION_IN_THAT if that_put(instance)
         | 
| 53 93 | 
             
                end
         | 
| 54 94 | 
             
                @state
         | 
| 55 95 | 
             
              end
         | 
| 56 96 |  | 
| 57 97 | 
             
              # @return the number of objects added to the `this` map
         | 
| 58 98 | 
             
              def this_count
         | 
| 59 | 
            -
                this_map.size
         | 
| 99 | 
            +
                instance_variable_defined?(:@this_map) ? @this_map.size : 0
         | 
| 60 100 | 
             
              end
         | 
| 61 101 |  | 
| 62 102 | 
             
              # @return the number of objects added to the `that` map
         | 
| 63 103 | 
             
              def that_count
         | 
| 64 | 
            -
                that_map.size
         | 
| 104 | 
            +
                instance_variable_defined?(:@that_map) ? @that_map.size : 0
         | 
| 65 105 | 
             
              end
         | 
| 66 106 |  | 
| 67 107 | 
             
              private
         | 
| 68 108 |  | 
| 69 | 
            -
              def  | 
| 109 | 
            +
              def this_put(o)
         | 
| 70 110 | 
             
                id = o.object_id
         | 
| 71 | 
            -
                 | 
| 72 | 
            -
                 | 
| 73 | 
            -
                   | 
| 74 | 
            -
             | 
| 75 | 
            -
                   | 
| 76 | 
            -
                  true # Recursion occured. This was the second time this entry was added
         | 
| 111 | 
            +
                @this_map ||= {}
         | 
| 112 | 
            +
                if @this_map.has_key?(id)
         | 
| 113 | 
            +
                  @recursive_this_map ||= {}
         | 
| 114 | 
            +
                  @recursive_this_map[id] = true
         | 
| 115 | 
            +
                  true
         | 
| 77 116 | 
             
                else
         | 
| 78 | 
            -
                   | 
| 79 | 
            -
                  false | 
| 117 | 
            +
                  @this_map[id] = true
         | 
| 118 | 
            +
                  false
         | 
| 80 119 | 
             
                end
         | 
| 81 120 | 
             
              end
         | 
| 82 121 |  | 
| 83 | 
            -
              def  | 
| 84 | 
            -
                 | 
| 85 | 
            -
              end
         | 
| 86 | 
            -
             | 
| 87 | 
            -
              def that_map
         | 
| 122 | 
            +
              def that_put(o)
         | 
| 123 | 
            +
                id = o.object_id
         | 
| 88 124 | 
             
                @that_map ||= {}
         | 
| 125 | 
            +
                if @that_map.has_key?(id)
         | 
| 126 | 
            +
                  @recursive_that_map ||= {}
         | 
| 127 | 
            +
                  @recursive_that_map[id] = true
         | 
| 128 | 
            +
                  true
         | 
| 129 | 
            +
                else
         | 
| 130 | 
            +
                  @that_map[id] = true
         | 
| 131 | 
            +
                  false
         | 
| 132 | 
            +
                end
         | 
| 89 133 | 
             
              end
         | 
| 90 134 | 
             
            end
         | 
| 91 135 | 
             
            end
         |