rubygems-update 2.7.11 → 3.0.9
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.
- checksums.yaml +4 -4
- data/.rubocop.yml +67 -0
- data/.travis.yml +24 -18
- data/CODE_OF_CONDUCT.md +10 -8
- data/CONTRIBUTING.md +148 -0
- data/History.txt +458 -8
- data/MAINTAINERS.txt +1 -0
- data/Manifest.txt +16 -9
- data/POLICIES.md +92 -0
- data/README.md +53 -26
- data/Rakefile +77 -211
- data/{UPGRADING.rdoc → UPGRADING.md} +31 -32
- data/appveyor.yml +20 -45
- data/bin/gem +1 -2
- data/bin/update_rubygems +2 -3
- data/bundler/CHANGELOG.md +65 -0
- data/bundler/bundler.gemspec +7 -1
- data/bundler/lib/bundler/build_metadata.rb +1 -1
- data/bundler/lib/bundler/cli/add.rb +15 -5
- data/bundler/lib/bundler/cli/binstubs.rb +8 -2
- data/bundler/lib/bundler/cli/doctor.rb +47 -1
- data/bundler/lib/bundler/cli/install.rb +8 -5
- data/bundler/lib/bundler/cli/list.rb +41 -5
- data/bundler/lib/bundler/cli/outdated.rb +7 -1
- data/bundler/lib/bundler/cli/pristine.rb +4 -0
- data/bundler/lib/bundler/cli/remove.rb +18 -0
- data/bundler/lib/bundler/cli.rb +63 -21
- data/bundler/lib/bundler/definition.rb +15 -16
- data/bundler/lib/bundler/dependency.rb +2 -2
- data/bundler/lib/bundler/dsl.rb +19 -3
- data/bundler/lib/bundler/feature_flag.rb +7 -0
- data/bundler/lib/bundler/gem_version_promoter.rb +4 -2
- data/bundler/lib/bundler/injector.rb +168 -9
- data/bundler/lib/bundler/installer/parallel_installer.rb +5 -0
- data/bundler/lib/bundler/installer.rb +29 -6
- data/bundler/lib/bundler/plugin/events.rb +61 -0
- data/bundler/lib/bundler/plugin.rb +10 -3
- data/bundler/lib/bundler/resolver.rb +2 -2
- data/bundler/lib/bundler/rubygems_gem_installer.rb +7 -0
- data/bundler/lib/bundler/runtime.rb +8 -2
- data/bundler/lib/bundler/settings/validator.rb +23 -0
- data/bundler/lib/bundler/settings.rb +24 -3
- data/bundler/lib/bundler/shared_helpers.rb +19 -3
- data/bundler/lib/bundler/source/metadata.rb +2 -3
- data/bundler/lib/bundler/source.rb +9 -9
- data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +1 -0
- data/bundler/lib/bundler/version.rb +1 -1
- data/bundler/lib/bundler.rb +26 -8
- data/bundler/man/bundle-add.ronn +13 -2
- data/bundler/man/bundle-config.ronn +21 -0
- data/bundler/man/bundle-install.ronn +1 -1
- data/bundler/man/bundle-list.ronn +19 -1
- data/bundler/man/bundle-outdated.ronn +4 -0
- data/bundler/man/bundle-remove.ronn +23 -0
- data/bundler/man/bundle-update.ronn +1 -1
- data/bundler/man/bundle.ronn +3 -0
- data/lib/rubygems/available_set.rb +1 -1
- data/lib/rubygems/basic_specification.rb +12 -12
- data/lib/rubygems/bundler_version_finder.rb +3 -3
- data/lib/rubygems/command.rb +22 -15
- data/lib/rubygems/command_manager.rb +22 -5
- data/lib/rubygems/commands/build_command.rb +41 -7
- data/lib/rubygems/commands/cert_command.rb +45 -24
- data/lib/rubygems/commands/check_command.rb +1 -1
- data/lib/rubygems/commands/cleanup_command.rb +14 -7
- data/lib/rubygems/commands/contents_command.rb +14 -15
- data/lib/rubygems/commands/dependency_command.rb +17 -17
- data/lib/rubygems/commands/environment_command.rb +20 -1
- data/lib/rubygems/commands/fetch_command.rb +2 -3
- data/lib/rubygems/commands/generate_index_command.rb +2 -3
- data/lib/rubygems/commands/help_command.rb +12 -13
- data/lib/rubygems/commands/info_command.rb +33 -0
- data/lib/rubygems/commands/install_command.rb +21 -17
- data/lib/rubygems/commands/list_command.rb +0 -1
- data/lib/rubygems/commands/lock_command.rb +3 -4
- data/lib/rubygems/commands/open_command.rb +16 -10
- data/lib/rubygems/commands/owner_command.rb +21 -7
- data/lib/rubygems/commands/pristine_command.rb +23 -16
- data/lib/rubygems/commands/push_command.rb +19 -8
- data/lib/rubygems/commands/query_command.rb +24 -24
- data/lib/rubygems/commands/rdoc_command.rb +3 -4
- data/lib/rubygems/commands/search_command.rb +0 -1
- data/lib/rubygems/commands/server_command.rb +1 -2
- data/lib/rubygems/commands/setup_command.rb +86 -48
- data/lib/rubygems/commands/signin_command.rb +2 -1
- data/lib/rubygems/commands/signout_command.rb +2 -2
- data/lib/rubygems/commands/sources_command.rb +11 -12
- data/lib/rubygems/commands/specification_command.rb +7 -7
- data/lib/rubygems/commands/uninstall_command.rb +50 -18
- data/lib/rubygems/commands/unpack_command.rb +16 -7
- data/lib/rubygems/commands/update_command.rb +28 -23
- data/lib/rubygems/commands/which_command.rb +5 -8
- data/lib/rubygems/commands/yank_command.rb +1 -2
- data/lib/rubygems/compatibility.rb +1 -21
- data/lib/rubygems/config_file.rb +36 -36
- data/lib/rubygems/core_ext/kernel_require.rb +6 -6
- data/lib/rubygems/core_ext/kernel_warn.rb +45 -0
- data/lib/rubygems/defaults.rb +31 -19
- data/lib/rubygems/dependency.rb +15 -15
- data/lib/rubygems/dependency_installer.rb +30 -33
- data/lib/rubygems/dependency_list.rb +9 -10
- data/lib/rubygems/deprecate.rb +2 -3
- data/lib/rubygems/doctor.rb +5 -6
- data/lib/rubygems/errors.rb +3 -3
- data/lib/rubygems/exceptions.rb +11 -8
- data/lib/rubygems/ext/build_error.rb +0 -1
- data/lib/rubygems/ext/builder.rb +50 -23
- data/lib/rubygems/ext/cmake_builder.rb +2 -2
- data/lib/rubygems/ext/configure_builder.rb +2 -3
- data/lib/rubygems/ext/ext_conf_builder.rb +8 -7
- data/lib/rubygems/ext/rake_builder.rb +16 -18
- data/lib/rubygems/ext.rb +0 -1
- data/lib/rubygems/gem_runner.rb +2 -2
- data/lib/rubygems/gemcutter_utilities.rb +46 -12
- data/lib/rubygems/indexer.rb +19 -12
- data/lib/rubygems/install_default_message.rb +0 -1
- data/lib/rubygems/install_message.rb +0 -1
- data/lib/rubygems/install_update_options.rb +3 -29
- data/lib/rubygems/installer.rb +97 -55
- data/lib/rubygems/installer_test_case.rb +2 -16
- data/lib/rubygems/local_remote_options.rb +5 -4
- data/lib/rubygems/mock_gem_ui.rb +3 -4
- data/lib/rubygems/name_tuple.rb +4 -4
- data/lib/rubygems/package/digest_io.rb +3 -4
- data/lib/rubygems/package/file_source.rb +3 -4
- data/lib/rubygems/package/io_source.rb +1 -2
- data/lib/rubygems/package/old.rb +8 -16
- data/lib/rubygems/package/source.rb +0 -1
- data/lib/rubygems/package/tar_header.rb +13 -4
- data/lib/rubygems/package/tar_reader/entry.rb +20 -4
- data/lib/rubygems/package/tar_reader.rb +2 -4
- data/lib/rubygems/package/tar_test_case.rb +2 -8
- data/lib/rubygems/package/tar_writer.rb +13 -15
- data/lib/rubygems/package.rb +90 -63
- data/lib/rubygems/package_task.rb +0 -1
- data/lib/rubygems/path_support.rb +16 -6
- data/lib/rubygems/platform.rb +4 -5
- data/lib/rubygems/psych_tree.rb +1 -1
- data/lib/rubygems/rdoc.rb +2 -313
- data/lib/rubygems/remote_fetcher.rb +29 -82
- data/lib/rubygems/request/connection_pools.rb +24 -13
- data/lib/rubygems/request/http_pool.rb +3 -4
- data/lib/rubygems/request/https_pool.rb +1 -3
- data/lib/rubygems/request.rb +17 -16
- data/lib/rubygems/request_set/gem_dependency_api.rb +46 -49
- data/lib/rubygems/request_set/lockfile/parser.rb +18 -29
- data/lib/rubygems/request_set/lockfile/tokenizer.rb +9 -9
- data/lib/rubygems/request_set/lockfile.rb +12 -12
- data/lib/rubygems/request_set.rb +52 -25
- data/lib/rubygems/requirement.rb +32 -21
- data/lib/rubygems/resolver/activation_request.rb +6 -6
- data/lib/rubygems/resolver/api_set.rb +5 -6
- data/lib/rubygems/resolver/api_specification.rb +2 -3
- data/lib/rubygems/resolver/best_set.rb +5 -6
- data/lib/rubygems/resolver/composed_set.rb +5 -6
- data/lib/rubygems/resolver/conflict.rb +5 -5
- data/lib/rubygems/resolver/current_set.rb +1 -2
- data/lib/rubygems/resolver/dependency_request.rb +4 -4
- data/lib/rubygems/resolver/git_set.rb +5 -6
- data/lib/rubygems/resolver/git_specification.rb +4 -5
- data/lib/rubygems/resolver/index_set.rb +5 -6
- data/lib/rubygems/resolver/index_specification.rb +3 -4
- data/lib/rubygems/resolver/installed_specification.rb +3 -4
- data/lib/rubygems/resolver/installer_set.rb +12 -12
- data/lib/rubygems/resolver/local_specification.rb +1 -2
- data/lib/rubygems/resolver/lock_set.rb +5 -6
- data/lib/rubygems/resolver/lock_specification.rb +7 -8
- data/lib/rubygems/resolver/requirement_list.rb +1 -1
- data/lib/rubygems/resolver/set.rb +2 -2
- data/lib/rubygems/resolver/source_set.rb +4 -5
- data/lib/rubygems/resolver/spec_specification.rb +1 -2
- data/lib/rubygems/resolver/specification.rb +10 -7
- data/lib/rubygems/resolver/stats.rb +1 -1
- data/lib/rubygems/resolver/vendor_set.rb +4 -5
- data/lib/rubygems/resolver/vendor_specification.rb +2 -3
- data/lib/rubygems/resolver.rb +14 -16
- data/lib/rubygems/s3_uri_signer.rb +183 -0
- data/lib/rubygems/safe_yaml.rb +18 -10
- data/lib/rubygems/security/policies.rb +1 -2
- data/lib/rubygems/security/policy.rb +25 -25
- data/lib/rubygems/security/signer.rb +72 -24
- data/lib/rubygems/security/trust_dir.rb +10 -10
- data/lib/rubygems/security.rb +21 -22
- data/lib/rubygems/security_option.rb +0 -1
- data/lib/rubygems/server.rb +21 -21
- data/lib/rubygems/source/git.rb +9 -10
- data/lib/rubygems/source/installed.rb +3 -4
- data/lib/rubygems/source/local.rb +7 -7
- data/lib/rubygems/source/lock.rb +4 -4
- data/lib/rubygems/source/specific_file.rb +5 -5
- data/lib/rubygems/source/vendor.rb +2 -3
- data/lib/rubygems/source.rb +16 -25
- data/lib/rubygems/source_list.rb +2 -2
- data/lib/rubygems/source_local.rb +0 -1
- data/lib/rubygems/spec_fetcher.rb +5 -6
- data/lib/rubygems/specification.rb +219 -558
- data/lib/rubygems/specification_policy.rb +407 -0
- data/lib/rubygems/stub_specification.rb +12 -17
- data/lib/rubygems/test_case.rb +161 -75
- data/lib/rubygems/test_utilities.rb +20 -35
- data/lib/rubygems/text.rb +6 -6
- data/lib/rubygems/uninstaller.rb +38 -27
- data/lib/rubygems/uri_formatter.rb +1 -2
- data/lib/rubygems/user_interaction.rb +37 -89
- data/lib/rubygems/util/licenses.rb +27 -1
- data/lib/rubygems/util/list.rb +1 -1
- data/lib/rubygems/util.rb +32 -14
- data/lib/rubygems/validator.rb +4 -5
- data/lib/rubygems/version.rb +15 -15
- data/lib/rubygems/version_option.rb +2 -3
- data/lib/rubygems.rb +71 -102
- data/rubygems-update.gemspec +43 -0
- data/setup.rb +2 -8
- data/test/rubygems/ca_cert.pem +74 -65
- data/test/rubygems/client.pem +103 -45
- data/test/rubygems/rubygems_plugin.rb +0 -1
- data/test/rubygems/simple_gem.rb +1 -1
- data/test/rubygems/ssl_cert.pem +78 -17
- data/test/rubygems/ssl_key.pem +25 -13
- data/test/rubygems/test_bundled_ca.rb +1 -1
- data/test/rubygems/test_config.rb +7 -2
- data/test/rubygems/test_gem.rb +205 -132
- data/test/rubygems/test_gem_bundler_version_finder.rb +4 -0
- data/test/rubygems/test_gem_command.rb +0 -1
- data/test/rubygems/test_gem_command_manager.rb +18 -3
- data/test/rubygems/test_gem_commands_build_command.rb +220 -15
- data/test/rubygems/test_gem_commands_cert_command.rb +69 -8
- data/test/rubygems/test_gem_commands_check_command.rb +1 -1
- data/test/rubygems/test_gem_commands_cleanup_command.rb +27 -1
- data/test/rubygems/test_gem_commands_contents_command.rb +1 -2
- data/test/rubygems/test_gem_commands_dependency_command.rb +33 -34
- data/test/rubygems/test_gem_commands_environment_command.rb +1 -0
- data/test/rubygems/test_gem_commands_fetch_command.rb +0 -1
- data/test/rubygems/test_gem_commands_generate_index_command.rb +0 -1
- data/test/rubygems/test_gem_commands_help_command.rb +7 -4
- data/test/rubygems/test_gem_commands_info_command.rb +44 -0
- data/test/rubygems/test_gem_commands_install_command.rb +79 -12
- data/test/rubygems/test_gem_commands_lock_command.rb +0 -1
- data/test/rubygems/test_gem_commands_open_command.rb +29 -0
- data/test/rubygems/test_gem_commands_outdated_command.rb +0 -1
- data/test/rubygems/test_gem_commands_owner_command.rb +93 -57
- data/test/rubygems/test_gem_commands_pristine_command.rb +65 -30
- data/test/rubygems/test_gem_commands_push_command.rb +54 -0
- data/test/rubygems/test_gem_commands_query_command.rb +102 -100
- data/test/rubygems/test_gem_commands_search_command.rb +0 -1
- data/test/rubygems/test_gem_commands_server_command.rb +0 -1
- data/test/rubygems/test_gem_commands_setup_command.rb +50 -15
- data/test/rubygems/test_gem_commands_signin_command.rb +1 -1
- data/test/rubygems/test_gem_commands_sources_command.rb +0 -1
- data/test/rubygems/test_gem_commands_specification_command.rb +2 -3
- data/test/rubygems/test_gem_commands_stale_command.rb +3 -2
- data/test/rubygems/test_gem_commands_uninstall_command.rb +161 -8
- data/test/rubygems/test_gem_commands_unpack_command.rb +17 -1
- data/test/rubygems/test_gem_commands_update_command.rb +19 -2
- data/test/rubygems/test_gem_commands_which_command.rb +0 -1
- data/test/rubygems/test_gem_commands_yank_command.rb +0 -1
- data/test/rubygems/test_gem_config_file.rb +4 -2
- data/test/rubygems/test_gem_dependency.rb +0 -1
- data/test/rubygems/test_gem_dependency_installer.rb +8 -5
- data/test/rubygems/test_gem_dependency_list.rb +6 -7
- data/test/rubygems/test_gem_dependency_resolution_error.rb +0 -1
- data/test/rubygems/test_gem_doctor.rb +1 -2
- data/test/rubygems/test_gem_ext_builder.rb +10 -23
- data/test/rubygems/test_gem_ext_cmake_builder.rb +5 -4
- data/test/rubygems/test_gem_ext_configure_builder.rb +3 -3
- data/test/rubygems/test_gem_ext_ext_conf_builder.rb +8 -9
- data/test/rubygems/test_gem_ext_rake_builder.rb +20 -5
- data/test/rubygems/test_gem_gem_runner.rb +0 -1
- data/test/rubygems/test_gem_gemcutter_utilities.rb +32 -6
- data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -1
- data/test/rubygems/test_gem_indexer.rb +16 -10
- data/test/rubygems/test_gem_install_update_options.rb +1 -20
- data/test/rubygems/test_gem_installer.rb +154 -119
- data/test/rubygems/test_gem_local_remote_options.rb +3 -3
- data/test/rubygems/test_gem_name_tuple.rb +0 -1
- data/test/rubygems/test_gem_package.rb +77 -31
- data/test/rubygems/test_gem_package_old.rb +0 -1
- data/test/rubygems/test_gem_package_tar_header.rb +42 -2
- data/test/rubygems/test_gem_package_tar_reader.rb +0 -1
- data/test/rubygems/test_gem_package_tar_reader_entry.rb +11 -0
- data/test/rubygems/test_gem_package_tar_writer.rb +43 -7
- data/test/rubygems/test_gem_package_task.rb +2 -2
- data/test/rubygems/test_gem_path_support.rb +28 -11
- data/test/rubygems/test_gem_platform.rb +4 -5
- data/test/rubygems/test_gem_rdoc.rb +1 -136
- data/test/rubygems/test_gem_remote_fetcher.rb +241 -141
- data/test/rubygems/test_gem_request.rb +9 -9
- data/test/rubygems/test_gem_request_connection_pools.rb +24 -3
- data/test/rubygems/test_gem_request_set.rb +5 -5
- data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +82 -64
- data/test/rubygems/test_gem_request_set_lockfile.rb +1 -2
- data/test/rubygems/test_gem_request_set_lockfile_parser.rb +4 -9
- data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +1 -1
- data/test/rubygems/test_gem_requirement.rb +24 -4
- data/test/rubygems/test_gem_resolver.rb +13 -17
- data/test/rubygems/test_gem_resolver_activation_request.rb +0 -1
- data/test/rubygems/test_gem_resolver_api_set.rb +0 -1
- data/test/rubygems/test_gem_resolver_api_specification.rb +0 -1
- data/test/rubygems/test_gem_resolver_best_set.rb +0 -1
- data/test/rubygems/test_gem_resolver_composed_set.rb +0 -1
- data/test/rubygems/test_gem_resolver_conflict.rb +0 -1
- data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -1
- data/test/rubygems/test_gem_resolver_git_set.rb +0 -1
- data/test/rubygems/test_gem_resolver_git_specification.rb +0 -1
- data/test/rubygems/test_gem_resolver_index_set.rb +0 -1
- data/test/rubygems/test_gem_resolver_index_specification.rb +0 -1
- data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -1
- data/test/rubygems/test_gem_resolver_installer_set.rb +2 -3
- data/test/rubygems/test_gem_resolver_local_specification.rb +0 -1
- data/test/rubygems/test_gem_resolver_lock_set.rb +0 -1
- data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -1
- data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -1
- data/test/rubygems/test_gem_resolver_specification.rb +1 -2
- data/test/rubygems/test_gem_resolver_vendor_set.rb +0 -1
- data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -1
- data/test/rubygems/test_gem_security.rb +1 -3
- data/test/rubygems/test_gem_security_policy.rb +5 -6
- data/test/rubygems/test_gem_security_signer.rb +4 -3
- data/test/rubygems/test_gem_security_trust_dir.rb +1 -2
- data/test/rubygems/test_gem_server.rb +4 -4
- data/test/rubygems/test_gem_source.rb +0 -13
- data/test/rubygems/test_gem_source_fetch_problem.rb +0 -1
- data/test/rubygems/test_gem_source_git.rb +0 -1
- data/test/rubygems/test_gem_source_installed.rb +0 -1
- data/test/rubygems/test_gem_source_lock.rb +0 -1
- data/test/rubygems/test_gem_source_vendor.rb +0 -1
- data/test/rubygems/test_gem_spec_fetcher.rb +0 -1
- data/test/rubygems/test_gem_specification.rb +366 -198
- data/test/rubygems/test_gem_stream_ui.rb +15 -32
- data/test/rubygems/test_gem_stub_specification.rb +0 -2
- data/test/rubygems/test_gem_text.rb +4 -0
- data/test/rubygems/test_gem_uninstaller.rb +42 -3
- data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -1
- data/test/rubygems/test_gem_uri_formatter.rb +0 -1
- data/test/rubygems/test_gem_util.rb +31 -11
- data/test/rubygems/test_gem_validator.rb +0 -1
- data/test/rubygems/test_gem_version.rb +11 -11
- data/test/rubygems/test_gem_version_option.rb +0 -1
- data/test/rubygems/test_remote_fetch_error.rb +0 -1
- data/test/rubygems/test_require.rb +67 -52
- data/util/CL2notes +1 -2
- data/util/ci +20 -12
- data/util/cops/deprecations.rb +52 -0
- data/util/create_certs.rb +6 -7
- data/util/create_certs.sh +27 -0
- data/util/create_encrypted_key.rb +4 -5
- data/util/patch_with_prs.rb +1 -1
- data/util/rubocop +8 -0
- data/util/update_bundled_ca_certificates.rb +12 -13
- data/util/update_changelog.rb +1 -1
- metadata +61 -51
- data/.autotest +0 -71
- data/.document +0 -5
- data/CONTRIBUTING.rdoc +0 -130
- data/CVE-2013-4287.txt +0 -35
- data/CVE-2013-4363.txt +0 -45
- data/CVE-2015-3900.txt +0 -40
- data/POLICIES.rdoc +0 -74
- data/test/rubygems/fix_openssl_warnings.rb +0 -13
@@ -9,7 +9,7 @@ class Gem::Resolver::LockSpecification < Gem::Resolver::Specification
|
|
9
9
|
|
10
10
|
attr_reader :sources
|
11
11
|
|
12
|
-
def initialize
|
12
|
+
def initialize(set, name, version, sources, platform)
|
13
13
|
super()
|
14
14
|
|
15
15
|
@name = name
|
@@ -27,10 +27,10 @@ class Gem::Resolver::LockSpecification < Gem::Resolver::Specification
|
|
27
27
|
# This is a null install as a locked specification is considered installed.
|
28
28
|
# +options+ are ignored.
|
29
29
|
|
30
|
-
def install
|
30
|
+
def install(options = {})
|
31
31
|
destination = options[:install_dir] || Gem.dir
|
32
32
|
|
33
|
-
if File.exist? File.join(destination, 'specifications', spec.spec_name)
|
33
|
+
if File.exist? File.join(destination, 'specifications', spec.spec_name)
|
34
34
|
yield nil
|
35
35
|
return
|
36
36
|
end
|
@@ -41,11 +41,11 @@ class Gem::Resolver::LockSpecification < Gem::Resolver::Specification
|
|
41
41
|
##
|
42
42
|
# Adds +dependency+ from the lockfile to this specification
|
43
43
|
|
44
|
-
def add_dependency
|
44
|
+
def add_dependency(dependency) # :nodoc:
|
45
45
|
@dependencies << dependency
|
46
46
|
end
|
47
47
|
|
48
|
-
def pretty_print
|
48
|
+
def pretty_print(q) # :nodoc:
|
49
49
|
q.group 2, '[LockSpecification', ']' do
|
50
50
|
q.breakable
|
51
51
|
q.text "name: #{@name}"
|
@@ -53,12 +53,12 @@ class Gem::Resolver::LockSpecification < Gem::Resolver::Specification
|
|
53
53
|
q.breakable
|
54
54
|
q.text "version: #{@version}"
|
55
55
|
|
56
|
-
unless @platform == Gem::Platform::RUBY
|
56
|
+
unless @platform == Gem::Platform::RUBY
|
57
57
|
q.breakable
|
58
58
|
q.text "platform: #{@platform}"
|
59
59
|
end
|
60
60
|
|
61
|
-
unless @dependencies.empty?
|
61
|
+
unless @dependencies.empty?
|
62
62
|
q.breakable
|
63
63
|
q.text 'dependencies:'
|
64
64
|
q.breakable
|
@@ -85,4 +85,3 @@ class Gem::Resolver::LockSpecification < Gem::Resolver::Specification
|
|
85
85
|
end
|
86
86
|
|
87
87
|
end
|
88
|
-
|
@@ -31,7 +31,7 @@ class Gem::Resolver::Set
|
|
31
31
|
# The find_all method must be implemented. It returns all Resolver
|
32
32
|
# Specification objects matching the given DependencyRequest +req+.
|
33
33
|
|
34
|
-
def find_all
|
34
|
+
def find_all(req)
|
35
35
|
raise NotImplementedError
|
36
36
|
end
|
37
37
|
|
@@ -43,7 +43,7 @@ class Gem::Resolver::Set
|
|
43
43
|
# When overridden, the #prefetch method should look up specifications
|
44
44
|
# matching +reqs+.
|
45
45
|
|
46
|
-
def prefetch
|
46
|
+
def prefetch(reqs)
|
47
47
|
end
|
48
48
|
|
49
49
|
##
|
@@ -16,7 +16,7 @@ class Gem::Resolver::SourceSet < Gem::Resolver::Set
|
|
16
16
|
@sets = {}
|
17
17
|
end
|
18
18
|
|
19
|
-
def find_all
|
19
|
+
def find_all(req) # :nodoc:
|
20
20
|
if set = get_set(req.dependency.name)
|
21
21
|
set.find_all req
|
22
22
|
else
|
@@ -25,7 +25,7 @@ class Gem::Resolver::SourceSet < Gem::Resolver::Set
|
|
25
25
|
end
|
26
26
|
|
27
27
|
# potentially no-op
|
28
|
-
def prefetch
|
28
|
+
def prefetch(reqs) # :nodoc:
|
29
29
|
reqs.each do |req|
|
30
30
|
if set = get_set(req.dependency.name)
|
31
31
|
set.prefetch reqs
|
@@ -33,11 +33,11 @@ class Gem::Resolver::SourceSet < Gem::Resolver::Set
|
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
|
-
def add_source_gem
|
36
|
+
def add_source_gem(name, source)
|
37
37
|
@links[name] = source
|
38
38
|
end
|
39
39
|
|
40
|
-
private
|
40
|
+
private
|
41
41
|
|
42
42
|
def get_set(name)
|
43
43
|
link = @links[name]
|
@@ -45,4 +45,3 @@ private
|
|
45
45
|
end
|
46
46
|
|
47
47
|
end
|
48
|
-
|
@@ -10,7 +10,7 @@ class Gem::Resolver::SpecSpecification < Gem::Resolver::Specification
|
|
10
10
|
# +spec+. The +source+ is either where the +spec+ came from, or should be
|
11
11
|
# loaded from.
|
12
12
|
|
13
|
-
def initialize
|
13
|
+
def initialize(set, spec, source = nil)
|
14
14
|
@set = set
|
15
15
|
@source = source
|
16
16
|
@spec = spec
|
@@ -54,4 +54,3 @@ class Gem::Resolver::SpecSpecification < Gem::Resolver::Specification
|
|
54
54
|
end
|
55
55
|
|
56
56
|
end
|
57
|
-
|
@@ -81,14 +81,10 @@ class Gem::Resolver::Specification
|
|
81
81
|
# After installation #spec is updated to point to the just-installed
|
82
82
|
# specification.
|
83
83
|
|
84
|
-
def install
|
84
|
+
def install(options = {})
|
85
85
|
require 'rubygems/installer'
|
86
86
|
|
87
|
-
|
88
|
-
|
89
|
-
Gem.ensure_gem_subdirectories destination
|
90
|
-
|
91
|
-
gem = source.download spec, destination
|
87
|
+
gem = download options
|
92
88
|
|
93
89
|
installer = Gem::Installer.at gem, options
|
94
90
|
|
@@ -97,6 +93,14 @@ class Gem::Resolver::Specification
|
|
97
93
|
@spec = installer.install
|
98
94
|
end
|
99
95
|
|
96
|
+
def download(options)
|
97
|
+
dir = options[:install_dir] || Gem.dir
|
98
|
+
|
99
|
+
Gem.ensure_gem_subdirectories dir
|
100
|
+
|
101
|
+
source.download spec, dir
|
102
|
+
end
|
103
|
+
|
100
104
|
##
|
101
105
|
# Returns true if this specification is installable on this platform.
|
102
106
|
|
@@ -108,4 +112,3 @@ class Gem::Resolver::Specification
|
|
108
112
|
false
|
109
113
|
end
|
110
114
|
end
|
111
|
-
|
@@ -32,7 +32,7 @@ class Gem::Resolver::VendorSet < Gem::Resolver::Set
|
|
32
32
|
# Adds a specification to the set with the given +name+ which has been
|
33
33
|
# unpacked into the given +directory+.
|
34
34
|
|
35
|
-
def add_vendor_gem
|
35
|
+
def add_vendor_gem(name, directory) # :nodoc:
|
36
36
|
gemspec = File.join directory, "#{name}.gemspec"
|
37
37
|
|
38
38
|
spec = Gem::Specification.load gemspec
|
@@ -52,7 +52,7 @@ class Gem::Resolver::VendorSet < Gem::Resolver::Set
|
|
52
52
|
# Returns an Array of VendorSpecification objects matching the
|
53
53
|
# DependencyRequest +req+.
|
54
54
|
|
55
|
-
def find_all
|
55
|
+
def find_all(req)
|
56
56
|
@specs.values.select do |spec|
|
57
57
|
req.match? spec
|
58
58
|
end.map do |spec|
|
@@ -65,11 +65,11 @@ class Gem::Resolver::VendorSet < Gem::Resolver::Set
|
|
65
65
|
# Loads a spec with the given +name+. +version+, +platform+ and +source+ are
|
66
66
|
# ignored.
|
67
67
|
|
68
|
-
def load_spec
|
68
|
+
def load_spec(name, version, platform, source) # :nodoc:
|
69
69
|
@specs.fetch name
|
70
70
|
end
|
71
71
|
|
72
|
-
def pretty_print
|
72
|
+
def pretty_print(q) # :nodoc:
|
73
73
|
q.group 2, '[VendorSet', ']' do
|
74
74
|
next if @directories.empty?
|
75
75
|
q.breakable
|
@@ -85,4 +85,3 @@ class Gem::Resolver::VendorSet < Gem::Resolver::Set
|
|
85
85
|
end
|
86
86
|
|
87
87
|
end
|
88
|
-
|
@@ -6,7 +6,7 @@
|
|
6
6
|
|
7
7
|
class Gem::Resolver::VendorSpecification < Gem::Resolver::SpecSpecification
|
8
8
|
|
9
|
-
def ==
|
9
|
+
def ==(other) # :nodoc:
|
10
10
|
self.class === other and
|
11
11
|
@set == other.set and
|
12
12
|
@spec == other.spec and
|
@@ -17,9 +17,8 @@ class Gem::Resolver::VendorSpecification < Gem::Resolver::SpecSpecification
|
|
17
17
|
# This is a null install as this gem was unpacked into a directory.
|
18
18
|
# +options+ are ignored.
|
19
19
|
|
20
|
-
def install
|
20
|
+
def install(options = {})
|
21
21
|
yield nil
|
22
22
|
end
|
23
23
|
|
24
24
|
end
|
25
|
-
|
data/lib/rubygems/resolver.rb
CHANGED
@@ -59,7 +59,7 @@ class Gem::Resolver
|
|
59
59
|
# uniform manner. If one of the +sets+ is itself a ComposedSet its sets are
|
60
60
|
# flattened into the result ComposedSet.
|
61
61
|
|
62
|
-
def self.compose_sets
|
62
|
+
def self.compose_sets(*sets)
|
63
63
|
sets.compact!
|
64
64
|
|
65
65
|
sets = sets.map do |set|
|
@@ -87,7 +87,7 @@ class Gem::Resolver
|
|
87
87
|
# Creates a Resolver that queries only against the already installed gems
|
88
88
|
# for the +needed+ dependencies.
|
89
89
|
|
90
|
-
def self.for_current_gems
|
90
|
+
def self.for_current_gems(needed)
|
91
91
|
new needed, Gem::Resolver::CurrentSet.new
|
92
92
|
end
|
93
93
|
|
@@ -99,7 +99,7 @@ class Gem::Resolver
|
|
99
99
|
# satisfy the Dependencies. This defaults to IndexSet, which will query
|
100
100
|
# rubygems.org.
|
101
101
|
|
102
|
-
def initialize
|
102
|
+
def initialize(needed, set = nil)
|
103
103
|
@set = set || Gem::Resolver::IndexSet.new
|
104
104
|
@needed = needed
|
105
105
|
|
@@ -112,19 +112,22 @@ class Gem::Resolver
|
|
112
112
|
@stats = Gem::Resolver::Stats.new
|
113
113
|
end
|
114
114
|
|
115
|
-
def explain
|
115
|
+
def explain(stage, *data) # :nodoc:
|
116
116
|
return unless DEBUG_RESOLVER
|
117
117
|
|
118
118
|
d = data.map { |x| x.pretty_inspect }.join(", ")
|
119
119
|
$stderr.printf "%10s %s\n", stage.to_s.upcase, d
|
120
120
|
end
|
121
121
|
|
122
|
-
def explain_list
|
122
|
+
def explain_list(stage) # :nodoc:
|
123
123
|
return unless DEBUG_RESOLVER
|
124
124
|
|
125
125
|
data = yield
|
126
126
|
$stderr.printf "%10s (%d entries)\n", stage.to_s.upcase, data.size
|
127
|
-
|
127
|
+
unless data.empty?
|
128
|
+
require 'pp'
|
129
|
+
PP.pp data, $stderr
|
130
|
+
end
|
128
131
|
end
|
129
132
|
|
130
133
|
##
|
@@ -133,7 +136,7 @@ class Gem::Resolver
|
|
133
136
|
#
|
134
137
|
# Returns the Specification and the ActivationRequest
|
135
138
|
|
136
|
-
def activation_request
|
139
|
+
def activation_request(dep, possible) # :nodoc:
|
137
140
|
spec = possible.pop
|
138
141
|
|
139
142
|
explain :activate, [spec.full_name, possible.size]
|
@@ -145,7 +148,7 @@ class Gem::Resolver
|
|
145
148
|
return spec, activation_request
|
146
149
|
end
|
147
150
|
|
148
|
-
def requests
|
151
|
+
def requests(s, act, reqs=[]) # :nodoc:
|
149
152
|
return reqs if @ignore_dependencies
|
150
153
|
|
151
154
|
s.fetch_development_dependencies if @development
|
@@ -171,7 +174,7 @@ class Gem::Resolver
|
|
171
174
|
include Molinillo::UI
|
172
175
|
|
173
176
|
def output
|
174
|
-
@output ||= debug? ? $stdout : File.open(
|
177
|
+
@output ||= debug? ? $stdout : File.open(IO::NULL, 'w')
|
175
178
|
end
|
176
179
|
|
177
180
|
def debug?
|
@@ -197,7 +200,7 @@ class Gem::Resolver
|
|
197
200
|
# Extracts the specifications that may be able to fulfill +dependency+ and
|
198
201
|
# returns those that match the local platform and all those that match.
|
199
202
|
|
200
|
-
def find_possible
|
203
|
+
def find_possible(dependency) # :nodoc:
|
201
204
|
all = @set.find_all dependency
|
202
205
|
|
203
206
|
if (skip_dep_gems = skip_gems[dependency.name]) && !skip_dep_gems.empty?
|
@@ -216,7 +219,7 @@ class Gem::Resolver
|
|
216
219
|
##
|
217
220
|
# Returns the gems in +specs+ that match the local platform.
|
218
221
|
|
219
|
-
def select_local_platforms
|
222
|
+
def select_local_platforms(specs) # :nodoc:
|
220
223
|
specs.select do |spec|
|
221
224
|
Gem::Platform.installable? spec
|
222
225
|
end
|
@@ -314,11 +317,6 @@ class Gem::Resolver
|
|
314
317
|
|
315
318
|
end
|
316
319
|
|
317
|
-
##
|
318
|
-
# TODO remove in RubyGems 3
|
319
|
-
|
320
|
-
Gem::DependencyResolver = Gem::Resolver # :nodoc:
|
321
|
-
|
322
320
|
require 'rubygems/resolver/activation_request'
|
323
321
|
require 'rubygems/resolver/conflict'
|
324
322
|
require 'rubygems/resolver/dependency_request'
|
@@ -0,0 +1,183 @@
|
|
1
|
+
require 'base64'
|
2
|
+
require 'digest'
|
3
|
+
require 'openssl'
|
4
|
+
|
5
|
+
##
|
6
|
+
# S3URISigner implements AWS SigV4 for S3 Source to avoid a dependency on the aws-sdk-* gems
|
7
|
+
# More on AWS SigV4: https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html
|
8
|
+
class Gem::S3URISigner
|
9
|
+
|
10
|
+
class ConfigurationError < Gem::Exception
|
11
|
+
|
12
|
+
def initialize(message)
|
13
|
+
super message
|
14
|
+
end
|
15
|
+
|
16
|
+
def to_s # :nodoc:
|
17
|
+
"#{super}"
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
class InstanceProfileError < Gem::Exception
|
23
|
+
|
24
|
+
def initialize(message)
|
25
|
+
super message
|
26
|
+
end
|
27
|
+
|
28
|
+
def to_s # :nodoc:
|
29
|
+
"#{super}"
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
attr_accessor :uri
|
35
|
+
|
36
|
+
def initialize(uri)
|
37
|
+
@uri = uri
|
38
|
+
end
|
39
|
+
|
40
|
+
##
|
41
|
+
# Signs S3 URI using query-params according to the reference: https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html
|
42
|
+
def sign(expiration = 86400)
|
43
|
+
s3_config = fetch_s3_config
|
44
|
+
|
45
|
+
current_time = Time.now.utc
|
46
|
+
date_time = current_time.strftime("%Y%m%dT%H%m%SZ")
|
47
|
+
date = date_time[0,8]
|
48
|
+
|
49
|
+
credential_info = "#{date}/#{s3_config.region}/s3/aws4_request"
|
50
|
+
canonical_host = "#{uri.host}.s3.#{s3_config.region}.amazonaws.com"
|
51
|
+
|
52
|
+
query_params = generate_canonical_query_params(s3_config, date_time, credential_info, expiration)
|
53
|
+
canonical_request = generate_canonical_request(canonical_host, query_params)
|
54
|
+
string_to_sign = generate_string_to_sign(date_time, credential_info, canonical_request)
|
55
|
+
signature = generate_signature(s3_config, date, string_to_sign)
|
56
|
+
|
57
|
+
URI.parse("https://#{canonical_host}#{uri.path}?#{query_params}&X-Amz-Signature=#{signature}")
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
S3Config = Struct.new :access_key_id, :secret_access_key, :security_token, :region
|
63
|
+
|
64
|
+
def generate_canonical_query_params(s3_config, date_time, credential_info, expiration)
|
65
|
+
canonical_params = {}
|
66
|
+
canonical_params["X-Amz-Algorithm"] = "AWS4-HMAC-SHA256"
|
67
|
+
canonical_params["X-Amz-Credential"] = "#{s3_config.access_key_id}/#{credential_info}"
|
68
|
+
canonical_params["X-Amz-Date"] = date_time
|
69
|
+
canonical_params["X-Amz-Expires"] = expiration.to_s
|
70
|
+
canonical_params["X-Amz-SignedHeaders"] = "host"
|
71
|
+
canonical_params["X-Amz-Security-Token"] = s3_config.security_token if s3_config.security_token
|
72
|
+
|
73
|
+
# Sorting is required to generate proper signature
|
74
|
+
canonical_params.sort.to_h.map do |key, value|
|
75
|
+
"#{base64_uri_escape(key)}=#{base64_uri_escape(value)}"
|
76
|
+
end.join("&")
|
77
|
+
end
|
78
|
+
|
79
|
+
def generate_canonical_request(canonical_host, query_params)
|
80
|
+
[
|
81
|
+
"GET",
|
82
|
+
uri.path,
|
83
|
+
query_params,
|
84
|
+
"host:#{canonical_host}",
|
85
|
+
"", # empty params
|
86
|
+
"host",
|
87
|
+
"UNSIGNED-PAYLOAD",
|
88
|
+
].join("\n")
|
89
|
+
end
|
90
|
+
|
91
|
+
def generate_string_to_sign(date_time, credential_info, canonical_request)
|
92
|
+
[
|
93
|
+
"AWS4-HMAC-SHA256",
|
94
|
+
date_time,
|
95
|
+
credential_info,
|
96
|
+
Digest::SHA256.hexdigest(canonical_request)
|
97
|
+
].join("\n")
|
98
|
+
end
|
99
|
+
|
100
|
+
def generate_signature(s3_config, date, string_to_sign)
|
101
|
+
date_key = OpenSSL::HMAC.digest("sha256", "AWS4" + s3_config.secret_access_key, date)
|
102
|
+
date_region_key = OpenSSL::HMAC.digest("sha256", date_key, s3_config.region)
|
103
|
+
date_region_service_key = OpenSSL::HMAC.digest("sha256", date_region_key, "s3")
|
104
|
+
signing_key = OpenSSL::HMAC.digest("sha256", date_region_service_key, "aws4_request")
|
105
|
+
OpenSSL::HMAC.hexdigest("sha256", signing_key, string_to_sign)
|
106
|
+
end
|
107
|
+
|
108
|
+
##
|
109
|
+
# Extracts S3 configuration for S3 bucket
|
110
|
+
def fetch_s3_config
|
111
|
+
return S3Config.new(uri.user, uri.password, nil, "us-east-1") if uri.user && uri.password
|
112
|
+
|
113
|
+
s3_source = Gem.configuration[:s3_source] || Gem.configuration["s3_source"]
|
114
|
+
host = uri.host
|
115
|
+
raise ConfigurationError.new("no s3_source key exists in .gemrc") unless s3_source
|
116
|
+
|
117
|
+
auth = s3_source[host] || s3_source[host.to_sym]
|
118
|
+
raise ConfigurationError.new("no key for host #{host} in s3_source in .gemrc") unless auth
|
119
|
+
|
120
|
+
provider = auth[:provider] || auth["provider"]
|
121
|
+
case provider
|
122
|
+
when "env"
|
123
|
+
id = ENV["AWS_ACCESS_KEY_ID"]
|
124
|
+
secret = ENV["AWS_SECRET_ACCESS_KEY"]
|
125
|
+
security_token = ENV["AWS_SESSION_TOKEN"]
|
126
|
+
when "instance_profile"
|
127
|
+
credentials = ec2_metadata_credentials_json
|
128
|
+
id = credentials["AccessKeyId"]
|
129
|
+
secret = credentials["SecretAccessKey"]
|
130
|
+
security_token = credentials["Token"]
|
131
|
+
else
|
132
|
+
id = auth[:id] || auth["id"]
|
133
|
+
secret = auth[:secret] || auth["secret"]
|
134
|
+
security_token = auth[:security_token] || auth["security_token"]
|
135
|
+
end
|
136
|
+
|
137
|
+
raise ConfigurationError.new("s3_source for #{host} missing id or secret") unless id && secret
|
138
|
+
|
139
|
+
region = auth[:region] || auth["region"] || "us-east-1"
|
140
|
+
S3Config.new(id, secret, security_token, region)
|
141
|
+
end
|
142
|
+
|
143
|
+
def base64_uri_escape(str)
|
144
|
+
str.gsub(/[\+\/=\n]/, BASE64_URI_TRANSLATE)
|
145
|
+
end
|
146
|
+
|
147
|
+
def ec2_metadata_credentials_json
|
148
|
+
require 'net/http'
|
149
|
+
require 'rubygems/request'
|
150
|
+
require 'rubygems/request/connection_pools'
|
151
|
+
require 'json'
|
152
|
+
|
153
|
+
iam_info = ec2_metadata_request(EC2_IAM_INFO)
|
154
|
+
# Expected format: arn:aws:iam::<id>:instance-profile/<role_name>
|
155
|
+
role_name = iam_info['InstanceProfileArn'].split('/').last
|
156
|
+
ec2_metadata_request(EC2_IAM_SECURITY_CREDENTIALS + role_name)
|
157
|
+
end
|
158
|
+
|
159
|
+
def ec2_metadata_request(url)
|
160
|
+
uri = URI(url)
|
161
|
+
@request_pool ||= create_request_pool(uri)
|
162
|
+
request = Gem::Request.new(uri, Net::HTTP::Get, nil, @request_pool)
|
163
|
+
response = request.fetch
|
164
|
+
|
165
|
+
case response
|
166
|
+
when Net::HTTPOK then
|
167
|
+
JSON.parse(response.body)
|
168
|
+
else
|
169
|
+
raise InstanceProfileError.new("Unable to fetch AWS metadata from #{uri}: #{response.message} #{response.code}")
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
def create_request_pool(uri)
|
174
|
+
proxy_uri = Gem::Request.proxy_uri(Gem::Request.get_proxy_from_env(uri.scheme))
|
175
|
+
certs = Gem::Request.get_cert_files
|
176
|
+
Gem::Request::ConnectionPools.new(proxy_uri, certs).pool_for(uri)
|
177
|
+
end
|
178
|
+
|
179
|
+
BASE64_URI_TRANSLATE = { "+" => "%2B", "/" => "%2F", "=" => "%3D", "\n" => "" }.freeze
|
180
|
+
EC2_IAM_INFO = "http://169.254.169.254/latest/meta-data/iam/info".freeze
|
181
|
+
EC2_IAM_SECURITY_CREDENTIALS = "http://169.254.169.254/latest/meta-data/iam/security-credentials/".freeze
|
182
|
+
|
183
|
+
end
|
data/lib/rubygems/safe_yaml.rb
CHANGED
@@ -7,7 +7,7 @@ module Gem
|
|
7
7
|
# Psych.safe_load
|
8
8
|
|
9
9
|
module SafeYAML
|
10
|
-
|
10
|
+
PERMITTED_CLASSES = %w(
|
11
11
|
Symbol
|
12
12
|
Time
|
13
13
|
Date
|
@@ -19,31 +19,39 @@ module Gem
|
|
19
19
|
Gem::Version::Requirement
|
20
20
|
YAML::Syck::DefaultKey
|
21
21
|
Syck::DefaultKey
|
22
|
-
)
|
22
|
+
).freeze
|
23
23
|
|
24
|
-
|
24
|
+
PERMITTED_SYMBOLS = %w(
|
25
25
|
development
|
26
26
|
runtime
|
27
|
-
)
|
27
|
+
).freeze
|
28
28
|
|
29
29
|
if ::YAML.respond_to? :safe_load
|
30
|
-
def self.safe_load
|
31
|
-
::
|
30
|
+
def self.safe_load(input)
|
31
|
+
if Gem::Version.new(Psych::VERSION) >= Gem::Version.new('3.1.0.pre1')
|
32
|
+
::YAML.safe_load(input, permitted_classes: PERMITTED_CLASSES, permitted_symbols: PERMITTED_SYMBOLS, aliases: true)
|
33
|
+
else
|
34
|
+
::YAML.safe_load(input, PERMITTED_CLASSES, PERMITTED_SYMBOLS, true)
|
35
|
+
end
|
32
36
|
end
|
33
37
|
|
34
|
-
def self.load
|
35
|
-
::
|
38
|
+
def self.load(input)
|
39
|
+
if Gem::Version.new(Psych::VERSION) >= Gem::Version.new('3.1.0.pre1')
|
40
|
+
::YAML.safe_load(input, permitted_classes: [::Symbol])
|
41
|
+
else
|
42
|
+
::YAML.safe_load(input, [::Symbol])
|
43
|
+
end
|
36
44
|
end
|
37
45
|
else
|
38
46
|
unless Gem::Deprecate.skip
|
39
47
|
warn "YAML safe loading is not available. Please upgrade psych to a version that supports safe loading (>= 2.0)."
|
40
48
|
end
|
41
49
|
|
42
|
-
def self.safe_load
|
50
|
+
def self.safe_load(input, *args)
|
43
51
|
::YAML.load input
|
44
52
|
end
|
45
53
|
|
46
|
-
def self.load
|
54
|
+
def self.load(input)
|
47
55
|
::YAML.load input
|
48
56
|
end
|
49
57
|
end
|