rubygems-update 3.4.22 → 3.5.1
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/CHANGELOG.md +105 -2
- data/Manifest.txt +46 -221
- data/README.md +1 -3
- data/bundler/CHANGELOG.md +63 -0
- data/bundler/bundler.gemspec +4 -2
- data/bundler/exe/bundle +1 -10
- data/bundler/lib/bundler/build_metadata.rb +3 -3
- data/bundler/lib/bundler/capistrano.rb +1 -1
- data/bundler/lib/bundler/checksum.rb +254 -0
- data/bundler/lib/bundler/ci_detector.rb +75 -0
- data/bundler/lib/bundler/cli/add.rb +3 -3
- data/bundler/lib/bundler/cli/binstubs.rb +4 -4
- data/bundler/lib/bundler/cli/cache.rb +1 -1
- data/bundler/lib/bundler/cli/check.rb +1 -1
- data/bundler/lib/bundler/cli/common.rb +9 -1
- data/bundler/lib/bundler/cli/config.rb +8 -7
- data/bundler/lib/bundler/cli/console.rb +3 -2
- data/bundler/lib/bundler/cli/doctor.rb +2 -2
- data/bundler/lib/bundler/cli/exec.rb +1 -1
- data/bundler/lib/bundler/cli/gem.rb +28 -23
- data/bundler/lib/bundler/cli/info.rb +2 -13
- data/bundler/lib/bundler/cli/install.rb +5 -4
- data/bundler/lib/bundler/cli/issue.rb +1 -1
- data/bundler/lib/bundler/cli/lock.rb +4 -4
- data/bundler/lib/bundler/cli/open.rb +1 -1
- data/bundler/lib/bundler/cli/outdated.rb +6 -6
- data/bundler/lib/bundler/cli/plugin.rb +7 -14
- data/bundler/lib/bundler/cli/pristine.rb +38 -30
- data/bundler/lib/bundler/cli/show.rb +2 -2
- data/bundler/lib/bundler/cli/update.rb +5 -5
- data/bundler/lib/bundler/cli.rb +215 -263
- data/bundler/lib/bundler/compact_index_client/cache.rb +29 -9
- data/bundler/lib/bundler/compact_index_client/cache_file.rb +153 -0
- data/bundler/lib/bundler/compact_index_client/gem_parser.rb +7 -3
- data/bundler/lib/bundler/compact_index_client/updater.rb +79 -81
- data/bundler/lib/bundler/compact_index_client.rb +14 -7
- data/bundler/lib/bundler/constants.rb +1 -1
- data/bundler/lib/bundler/current_ruby.rb +5 -21
- data/bundler/lib/bundler/definition.rb +42 -15
- data/bundler/lib/bundler/dependency.rb +16 -12
- data/bundler/lib/bundler/digest.rb +2 -2
- data/bundler/lib/bundler/dsl.rb +46 -30
- data/bundler/lib/bundler/endpoint_specification.rb +5 -1
- data/bundler/lib/bundler/env.rb +1 -3
- data/bundler/lib/bundler/errors.rb +43 -0
- data/bundler/lib/bundler/fetcher/base.rb +3 -1
- data/bundler/lib/bundler/fetcher/compact_index.rb +4 -4
- data/bundler/lib/bundler/fetcher/downloader.rb +13 -11
- data/bundler/lib/bundler/fetcher/gem_remote_fetcher.rb +16 -0
- data/bundler/lib/bundler/fetcher/index.rb +1 -1
- data/bundler/lib/bundler/fetcher.rb +28 -25
- data/bundler/lib/bundler/friendly_errors.rb +5 -5
- data/bundler/lib/bundler/gem_helper.rb +1 -1
- data/bundler/lib/bundler/gem_helpers.rb +5 -2
- data/bundler/lib/bundler/graph.rb +9 -9
- data/bundler/lib/bundler/index.rb +1 -2
- data/bundler/lib/bundler/injector.rb +1 -1
- data/bundler/lib/bundler/inline.rb +3 -3
- data/bundler/lib/bundler/installer/gem_installer.rb +5 -5
- data/bundler/lib/bundler/installer/parallel_installer.rb +16 -8
- data/bundler/lib/bundler/installer/standalone.rb +2 -3
- data/bundler/lib/bundler/installer.rb +9 -9
- data/bundler/lib/bundler/lazy_specification.rb +24 -17
- data/bundler/lib/bundler/lockfile_generator.rb +9 -0
- data/bundler/lib/bundler/lockfile_parser.rb +81 -10
- data/bundler/lib/bundler/man/bundle-add.1 +3 -26
- data/bundler/lib/bundler/man/bundle-binstubs.1 +4 -16
- data/bundler/lib/bundler/man/bundle-cache.1 +3 -24
- data/bundler/lib/bundler/man/bundle-check.1 +3 -12
- data/bundler/lib/bundler/man/bundle-clean.1 +3 -10
- data/bundler/lib/bundler/man/bundle-config.1 +20 -211
- data/bundler/lib/bundler/man/bundle-config.1.ronn +6 -0
- data/bundler/lib/bundler/man/bundle-console.1 +4 -22
- data/bundler/lib/bundler/man/bundle-doctor.1 +4 -18
- data/bundler/lib/bundler/man/bundle-exec.1 +12 -73
- data/bundler/lib/bundler/man/bundle-gem.1 +13 -49
- data/bundler/lib/bundler/man/bundle-help.1 +3 -7
- data/bundler/lib/bundler/man/bundle-info.1 +3 -9
- data/bundler/lib/bundler/man/bundle-init.1 +3 -12
- data/bundler/lib/bundler/man/bundle-inject.1 +6 -19
- data/bundler/lib/bundler/man/bundle-install.1 +27 -125
- data/bundler/lib/bundler/man/bundle-install.1.ronn +1 -0
- data/bundler/lib/bundler/man/bundle-list.1 +4 -19
- data/bundler/lib/bundler/man/bundle-lock.1 +5 -29
- data/bundler/lib/bundler/man/bundle-open.1 +7 -27
- data/bundler/lib/bundler/man/bundle-outdated.1 +3 -55
- data/bundler/lib/bundler/man/bundle-outdated.1.ronn +1 -0
- data/bundler/lib/bundler/man/bundle-platform.1 +5 -27
- data/bundler/lib/bundler/man/bundle-plugin.1 +3 -29
- data/bundler/lib/bundler/man/bundle-pristine.1 +5 -16
- data/bundler/lib/bundler/man/bundle-remove.1 +4 -14
- data/bundler/lib/bundler/man/bundle-show.1 +3 -10
- data/bundler/lib/bundler/man/bundle-update.1 +18 -137
- data/bundler/lib/bundler/man/bundle-version.1 +3 -16
- data/bundler/lib/bundler/man/bundle-viz.1 +4 -16
- data/bundler/lib/bundler/man/bundle.1 +5 -44
- data/bundler/lib/bundler/man/gemfile.5 +24 -301
- data/bundler/lib/bundler/man/gemfile.5.ronn +4 -0
- data/bundler/lib/bundler/match_metadata.rb +4 -0
- data/bundler/lib/bundler/match_platform.rb +1 -1
- data/bundler/lib/bundler/plugin/api/source.rb +3 -2
- data/bundler/lib/bundler/plugin/installer.rb +1 -1
- data/bundler/lib/bundler/plugin.rb +3 -3
- data/bundler/lib/bundler/resolver/base.rb +1 -1
- data/bundler/lib/bundler/resolver/incompatibility.rb +1 -1
- data/bundler/lib/bundler/resolver/spec_group.rb +1 -4
- data/bundler/lib/bundler/resolver.rb +16 -16
- data/bundler/lib/bundler/ruby_dsl.rb +20 -12
- data/bundler/lib/bundler/ruby_version.rb +1 -1
- data/bundler/lib/bundler/rubygems_ext.rb +24 -50
- data/bundler/lib/bundler/rubygems_gem_installer.rb +6 -56
- data/bundler/lib/bundler/rubygems_integration.rb +25 -94
- data/bundler/lib/bundler/runtime.rb +2 -2
- data/bundler/lib/bundler/self_manager.rb +23 -7
- data/bundler/lib/bundler/settings.rb +27 -7
- data/bundler/lib/bundler/setup.rb +4 -1
- data/bundler/lib/bundler/shared_helpers.rb +35 -13
- data/bundler/lib/bundler/source/git/git_proxy.rb +15 -15
- data/bundler/lib/bundler/source/git.rb +4 -3
- data/bundler/lib/bundler/source/metadata.rb +15 -15
- data/bundler/lib/bundler/source/path.rb +7 -6
- data/bundler/lib/bundler/source/rubygems.rb +21 -14
- data/bundler/lib/bundler/source.rb +2 -0
- data/bundler/lib/bundler/spec_set.rb +38 -10
- data/bundler/lib/bundler/stub_specification.rb +1 -0
- data/bundler/lib/bundler/templates/Executable.bundler +1 -1
- data/bundler/lib/bundler/templates/newgem/README.md.tt +3 -3
- data/bundler/lib/bundler/templates/newgem/Rakefile.tt +2 -6
- data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +1 -1
- data/bundler/lib/bundler/templates/newgem/standard.yml.tt +1 -1
- data/bundler/lib/bundler/ui/shell.rb +1 -1
- data/bundler/lib/bundler/vendor/connection_pool/.document +1 -0
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +53 -6
- data/bundler/lib/bundler/vendor/fileutils/.document +1 -0
- data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +8 -20
- data/bundler/lib/bundler/vendor/net-http-persistent/.document +1 -0
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +3 -3
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +2 -2
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +1 -1
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +34 -34
- data/bundler/lib/bundler/vendor/pub_grub/.document +1 -0
- data/bundler/lib/bundler/vendor/thor/.document +1 -0
- data/bundler/lib/bundler/vendor/tsort/.document +1 -0
- data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +3 -0
- data/bundler/lib/bundler/vendor/uri/.document +1 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +256 -132
- data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +1 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +95 -31
- data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
- data/bundler/lib/bundler/vendored_net_http.rb +8 -0
- data/bundler/lib/bundler/vendored_persistent.rb +0 -4
- data/bundler/lib/bundler/vendored_timeout.rb +8 -0
- data/bundler/lib/bundler/version.rb +1 -1
- data/bundler/lib/bundler/vlad.rb +1 -1
- data/bundler/lib/bundler/yaml_serializer.rb +3 -3
- data/bundler/lib/bundler.rb +41 -32
- data/lib/rubygems/available_set.rb +4 -4
- data/lib/rubygems/basic_specification.rb +35 -37
- data/lib/rubygems/bundler_version_finder.rb +4 -4
- data/lib/rubygems/ci_detector.rb +75 -0
- data/lib/rubygems/command.rb +13 -15
- data/lib/rubygems/command_manager.rb +5 -4
- data/lib/rubygems/commands/build_command.rb +2 -2
- data/lib/rubygems/commands/cert_command.rb +1 -2
- data/lib/rubygems/commands/check_command.rb +4 -4
- data/lib/rubygems/commands/cleanup_command.rb +12 -14
- data/lib/rubygems/commands/contents_command.rb +4 -4
- data/lib/rubygems/commands/dependency_command.rb +4 -5
- data/lib/rubygems/commands/environment_command.rb +1 -3
- data/lib/rubygems/commands/exec_command.rb +1 -1
- data/lib/rubygems/commands/fetch_command.rb +2 -2
- data/lib/rubygems/commands/generate_index_command.rb +39 -74
- data/lib/rubygems/commands/help_command.rb +3 -3
- data/lib/rubygems/commands/info_command.rb +2 -2
- data/lib/rubygems/commands/install_command.rb +8 -16
- data/lib/rubygems/commands/list_command.rb +2 -2
- data/lib/rubygems/commands/lock_command.rb +1 -1
- data/lib/rubygems/commands/open_command.rb +1 -1
- data/lib/rubygems/commands/owner_command.rb +1 -1
- data/lib/rubygems/commands/pristine_command.rb +13 -15
- data/lib/rubygems/commands/push_command.rb +2 -2
- data/lib/rubygems/commands/query_command.rb +4 -5
- data/lib/rubygems/commands/rdoc_command.rb +2 -2
- data/lib/rubygems/commands/search_command.rb +2 -2
- data/lib/rubygems/commands/setup_command.rb +31 -34
- data/lib/rubygems/commands/sources_command.rb +12 -12
- data/lib/rubygems/commands/specification_command.rb +10 -10
- data/lib/rubygems/commands/stale_command.rb +1 -1
- data/lib/rubygems/commands/uninstall_command.rb +9 -10
- data/lib/rubygems/commands/unpack_command.rb +4 -4
- data/lib/rubygems/commands/update_command.rb +10 -12
- data/lib/rubygems/commands/which_command.rb +1 -1
- data/lib/rubygems/commands/yank_command.rb +1 -1
- data/lib/rubygems/compatibility.rb +5 -6
- data/lib/rubygems/config_file.rb +4 -4
- data/lib/rubygems/core_ext/kernel_gem.rb +0 -2
- data/lib/rubygems/core_ext/kernel_require.rb +19 -48
- data/lib/rubygems/core_ext/kernel_warn.rb +1 -1
- data/lib/rubygems/core_ext/tcpsocket_init.rb +1 -1
- data/lib/rubygems/defaults.rb +15 -3
- data/lib/rubygems/dependency.rb +12 -14
- data/lib/rubygems/dependency_installer.rb +29 -30
- data/lib/rubygems/dependency_list.rb +1 -1
- data/lib/rubygems/deprecate.rb +16 -15
- data/lib/rubygems/doctor.rb +5 -5
- data/lib/rubygems/errors.rb +2 -6
- data/lib/rubygems/exceptions.rb +2 -1
- data/lib/rubygems/ext/builder.rb +15 -10
- data/lib/rubygems/ext/cargo_builder.rb +5 -5
- data/lib/rubygems/ext/ext_conf_builder.rb +1 -3
- data/lib/rubygems/gem_runner.rb +4 -4
- data/lib/rubygems/gemcutter_utilities/webauthn_listener/response.rb +3 -3
- data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +3 -3
- data/lib/rubygems/gemcutter_utilities.rb +18 -19
- data/lib/rubygems/install_update_options.rb +18 -19
- data/lib/rubygems/installer.rb +59 -33
- data/lib/rubygems/installer_uninstaller_utils.rb +0 -2
- data/lib/rubygems/local_remote_options.rb +7 -10
- data/lib/rubygems/name_tuple.rb +7 -9
- data/lib/rubygems/net/http.rb +3 -0
- data/lib/rubygems/net-http/.document +1 -0
- data/lib/rubygems/net-http/LICENSE.txt +22 -0
- data/lib/rubygems/net-http/lib/net/http/backward.rb +40 -0
- data/lib/rubygems/net-http/lib/net/http/exceptions.rb +34 -0
- data/lib/rubygems/net-http/lib/net/http/generic_request.rb +414 -0
- data/lib/rubygems/net-http/lib/net/http/header.rb +981 -0
- data/lib/rubygems/net-http/lib/net/http/proxy_delta.rb +17 -0
- data/lib/rubygems/net-http/lib/net/http/request.rb +88 -0
- data/lib/rubygems/net-http/lib/net/http/requests.rb +425 -0
- data/lib/rubygems/net-http/lib/net/http/response.rb +738 -0
- data/lib/rubygems/net-http/lib/net/http/responses.rb +1174 -0
- data/lib/rubygems/net-http/lib/net/http/status.rb +84 -0
- data/lib/rubygems/net-http/lib/net/http.rb +2496 -0
- data/lib/rubygems/net-http/lib/net/https.rb +23 -0
- data/lib/rubygems/net-protocol/.document +1 -0
- data/lib/rubygems/net-protocol/LICENSE.txt +22 -0
- data/lib/rubygems/net-protocol/lib/net/protocol.rb +544 -0
- data/lib/rubygems/optparse/lib/optparse.rb +39 -17
- data/lib/rubygems/package/old.rb +2 -2
- data/lib/rubygems/package/tar_header.rb +45 -39
- data/lib/rubygems/package/tar_reader/entry.rb +5 -4
- data/lib/rubygems/package/tar_reader.rb +5 -3
- data/lib/rubygems/package/tar_writer.rb +19 -17
- data/lib/rubygems/package.rb +27 -26
- data/lib/rubygems/package_task.rb +2 -2
- data/lib/rubygems/path_support.rb +9 -10
- data/lib/rubygems/platform.rb +60 -45
- data/lib/rubygems/query_utils.rb +7 -9
- data/lib/rubygems/remote_fetcher.rb +15 -15
- data/lib/rubygems/request/connection_pools.rb +3 -3
- data/lib/rubygems/request.rb +20 -17
- data/lib/rubygems/request_set/gem_dependency_api.rb +119 -122
- data/lib/rubygems/request_set/lockfile/parser.rb +9 -9
- data/lib/rubygems/request_set/lockfile/tokenizer.rb +20 -12
- data/lib/rubygems/request_set/lockfile.rb +6 -11
- data/lib/rubygems/request_set.rb +5 -5
- data/lib/rubygems/requirement.rb +7 -7
- data/lib/rubygems/resolv/.document +1 -0
- data/lib/rubygems/resolv/LICENSE.txt +22 -0
- data/lib/rubygems/resolv/lib/resolv.rb +3387 -0
- data/lib/rubygems/resolver/activation_request.rb +1 -3
- data/lib/rubygems/resolver/api_set/gem_parser.rb +7 -3
- data/lib/rubygems/resolver/best_set.rb +1 -1
- data/lib/rubygems/resolver/composed_set.rb +1 -1
- data/lib/rubygems/resolver/conflict.rb +4 -12
- data/lib/rubygems/resolver/index_set.rb +4 -4
- data/lib/rubygems/resolver/index_specification.rb +2 -2
- data/lib/rubygems/resolver/installer_set.rb +5 -6
- data/lib/rubygems/resolver/lock_set.rb +1 -1
- data/lib/rubygems/resolver/molinillo/.document +1 -0
- data/lib/rubygems/resolver.rb +3 -10
- data/lib/rubygems/s3_uri_signer.rb +6 -6
- data/lib/rubygems/safe_marshal/elements.rb +138 -0
- data/lib/rubygems/safe_marshal/reader.rb +306 -0
- data/lib/rubygems/safe_marshal/visitors/stream_printer.rb +31 -0
- data/lib/rubygems/safe_marshal/visitors/to_ruby.rb +385 -0
- data/lib/rubygems/safe_marshal/visitors/visitor.rb +74 -0
- data/lib/rubygems/safe_marshal.rb +74 -0
- data/lib/rubygems/safe_yaml.rb +5 -28
- data/lib/rubygems/security/policies.rb +36 -38
- data/lib/rubygems/security/policy.rb +7 -11
- data/lib/rubygems/security/signer.rb +1 -1
- data/lib/rubygems/security/trust_dir.rb +3 -3
- data/lib/rubygems/security.rb +8 -22
- data/lib/rubygems/source/git.rb +1 -3
- data/lib/rubygems/source/installed.rb +0 -2
- data/lib/rubygems/source/local.rb +5 -8
- data/lib/rubygems/source/lock.rb +1 -3
- data/lib/rubygems/source/specific_file.rb +0 -1
- data/lib/rubygems/source/vendor.rb +0 -2
- data/lib/rubygems/source.rb +12 -12
- data/lib/rubygems/source_list.rb +4 -4
- data/lib/rubygems/spec_fetcher.rb +29 -29
- data/lib/rubygems/specification.rb +125 -138
- data/lib/rubygems/specification_policy.rb +55 -25
- data/lib/rubygems/stub_specification.rb +4 -5
- data/lib/rubygems/text.rb +1 -2
- data/lib/rubygems/timeout/.document +1 -0
- data/lib/rubygems/timeout/LICENSE.txt +22 -0
- data/lib/rubygems/timeout/lib/timeout.rb +199 -0
- data/lib/rubygems/timeout.rb +3 -0
- data/lib/rubygems/tsort/lib/tsort.rb +3 -0
- data/lib/rubygems/uninstaller.rb +7 -9
- data/lib/rubygems/update_suggestion.rb +5 -18
- data/lib/rubygems/uri_formatter.rb +1 -1
- data/lib/rubygems/user_interaction.rb +15 -21
- data/lib/rubygems/util/licenses.rb +65 -35
- data/lib/rubygems/util/list.rb +3 -1
- data/lib/rubygems/util.rb +2 -4
- data/lib/rubygems/validator.rb +5 -3
- data/lib/rubygems/version.rb +34 -28
- data/lib/rubygems/version_option.rb +2 -5
- data/lib/rubygems/yaml_serializer.rb +3 -3
- data/lib/rubygems.rb +37 -37
- data/rubygems-update.gemspec +4 -4
- data/setup.rb +2 -2
- metadata +50 -225
- data/lib/rubygems/indexer.rb +0 -428
- data/lib/rubygems/mock_gem_ui.rb +0 -86
- data/test/rubygems/alternate_cert.pem +0 -19
- data/test/rubygems/alternate_cert_32.pem +0 -19
- data/test/rubygems/alternate_key.pem +0 -27
- data/test/rubygems/bad_rake.rb +0 -3
- data/test/rubygems/bundler_test_gem.rb +0 -424
- data/test/rubygems/ca_cert.pem +0 -77
- data/test/rubygems/child_cert.pem +0 -19
- data/test/rubygems/child_cert_32.pem +0 -19
- data/test/rubygems/child_key.pem +0 -27
- data/test/rubygems/client.pem +0 -107
- data/test/rubygems/data/excon-0.7.7.gemspec.rz +0 -0
- data/test/rubygems/data/gem-private_key.pem +0 -27
- data/test/rubygems/data/gem-public_cert.pem +0 -20
- data/test/rubygems/data/null-required-ruby-version.gemspec.rz +0 -0
- data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
- data/test/rubygems/data/pry-0.4.7.gemspec.rz +0 -0
- data/test/rubygems/encrypted_private_key.pem +0 -30
- data/test/rubygems/expired_cert.pem +0 -19
- data/test/rubygems/fake_certlib/openssl.rb +0 -9
- data/test/rubygems/foo/discover.rb +0 -1
- data/test/rubygems/future_cert.pem +0 -19
- data/test/rubygems/future_cert_32.pem +0 -19
- data/test/rubygems/good_rake.rb +0 -3
- data/test/rubygems/grandchild_cert.pem +0 -19
- data/test/rubygems/grandchild_cert_32.pem +0 -19
- data/test/rubygems/grandchild_key.pem +0 -27
- data/test/rubygems/helper.rb +0 -1649
- data/test/rubygems/installer_test_case.rb +0 -248
- data/test/rubygems/invalid_client.pem +0 -49
- data/test/rubygems/invalid_issuer_cert.pem +0 -20
- data/test/rubygems/invalid_issuer_cert_32.pem +0 -20
- data/test/rubygems/invalid_key.pem +0 -27
- data/test/rubygems/invalid_signer_cert.pem +0 -19
- data/test/rubygems/invalid_signer_cert_32.pem +0 -19
- data/test/rubygems/invalidchild_cert.pem +0 -19
- data/test/rubygems/invalidchild_cert_32.pem +0 -19
- data/test/rubygems/invalidchild_key.pem +0 -27
- data/test/rubygems/multifactor_auth_utilities.rb +0 -111
- data/test/rubygems/package/tar_test_case.rb +0 -175
- data/test/rubygems/packages/Bluebie-legs-0.6.2.gem +0 -0
- data/test/rubygems/packages/ascii_binder-0.1.10.1.gem +0 -0
- data/test/rubygems/packages/ill-formatted-platform-1.0.0.10.gem +0 -0
- data/test/rubygems/plugin/exception/rubygems_plugin.rb +0 -4
- data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -5
- data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +0 -4
- data/test/rubygems/private3072_key.pem +0 -40
- data/test/rubygems/private_ec_key.pem +0 -9
- data/test/rubygems/private_key.pem +0 -27
- data/test/rubygems/public3072_cert.pem +0 -25
- data/test/rubygems/public_cert.pem +0 -20
- data/test/rubygems/public_cert_32.pem +0 -19
- data/test/rubygems/public_key.pem +0 -9
- data/test/rubygems/rubygems/commands/crash_command.rb +0 -5
- data/test/rubygems/rubygems_plugin.rb +0 -24
- data/test/rubygems/sff/discover.rb +0 -1
- data/test/rubygems/simple_gem.rb +0 -68
- data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -9
- data/test/rubygems/specifications/foo-0.0.1-x86-mswin32.gemspec +0 -0
- data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +0 -14
- data/test/rubygems/ssl_cert.pem +0 -80
- data/test/rubygems/ssl_key.pem +0 -27
- data/test/rubygems/test_bundled_ca.rb +0 -61
- data/test/rubygems/test_config.rb +0 -28
- data/test/rubygems/test_deprecate.rb +0 -158
- data/test/rubygems/test_exit.rb +0 -17
- data/test/rubygems/test_gem.rb +0 -1799
- data/test/rubygems/test_gem_available_set.rb +0 -130
- data/test/rubygems/test_gem_bundler_version_finder.rb +0 -127
- data/test/rubygems/test_gem_command.rb +0 -403
- data/test/rubygems/test_gem_command_manager.rb +0 -400
- data/test/rubygems/test_gem_commands_build_command.rb +0 -739
- data/test/rubygems/test_gem_commands_cert_command.rb +0 -866
- data/test/rubygems/test_gem_commands_check_command.rb +0 -68
- data/test/rubygems/test_gem_commands_cleanup_command.rb +0 -292
- data/test/rubygems/test_gem_commands_contents_command.rb +0 -271
- data/test/rubygems/test_gem_commands_dependency_command.rb +0 -228
- data/test/rubygems/test_gem_commands_environment_command.rb +0 -169
- data/test/rubygems/test_gem_commands_exec_command.rb +0 -857
- data/test/rubygems/test_gem_commands_fetch_command.rb +0 -258
- data/test/rubygems/test_gem_commands_generate_index_command.rb +0 -81
- data/test/rubygems/test_gem_commands_help_command.rb +0 -94
- data/test/rubygems/test_gem_commands_info_command.rb +0 -70
- data/test/rubygems/test_gem_commands_install_command.rb +0 -1573
- data/test/rubygems/test_gem_commands_list_command.rb +0 -33
- data/test/rubygems/test_gem_commands_lock_command.rb +0 -67
- data/test/rubygems/test_gem_commands_mirror.rb +0 -20
- data/test/rubygems/test_gem_commands_open_command.rb +0 -101
- data/test/rubygems/test_gem_commands_outdated_command.rb +0 -50
- data/test/rubygems/test_gem_commands_owner_command.rb +0 -503
- data/test/rubygems/test_gem_commands_pristine_command.rb +0 -708
- data/test/rubygems/test_gem_commands_push_command.rb +0 -603
- data/test/rubygems/test_gem_commands_query_command.rb +0 -858
- data/test/rubygems/test_gem_commands_search_command.rb +0 -16
- data/test/rubygems/test_gem_commands_server_command.rb +0 -20
- data/test/rubygems/test_gem_commands_setup_command.rb +0 -474
- data/test/rubygems/test_gem_commands_signin_command.rb +0 -259
- data/test/rubygems/test_gem_commands_signout_command.rb +0 -30
- data/test/rubygems/test_gem_commands_sources_command.rb +0 -534
- data/test/rubygems/test_gem_commands_specification_command.rb +0 -277
- data/test/rubygems/test_gem_commands_stale_command.rb +0 -43
- data/test/rubygems/test_gem_commands_uninstall_command.rb +0 -542
- data/test/rubygems/test_gem_commands_unpack_command.rb +0 -224
- data/test/rubygems/test_gem_commands_update_command.rb +0 -836
- data/test/rubygems/test_gem_commands_which_command.rb +0 -85
- data/test/rubygems/test_gem_commands_yank_command.rb +0 -299
- data/test/rubygems/test_gem_config_file.rb +0 -551
- data/test/rubygems/test_gem_dependency.rb +0 -398
- data/test/rubygems/test_gem_dependency_installer.rb +0 -1190
- data/test/rubygems/test_gem_dependency_list.rb +0 -265
- data/test/rubygems/test_gem_dependency_resolution_error.rb +0 -27
- data/test/rubygems/test_gem_doctor.rb +0 -195
- data/test/rubygems/test_gem_ext_builder.rb +0 -337
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/.gitignore +0 -1
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +0 -10
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.lock +0 -249
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.toml +0 -10
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/src/lib.rs +0 -27
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/lib/custom_name.rb +0 -3
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/.gitignore +0 -1
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +0 -249
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +0 -10
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +0 -10
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +0 -51
- data/test/rubygems/test_gem_ext_cargo_builder.rb +0 -167
- data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +0 -34
- data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +0 -60
- data/test/rubygems/test_gem_ext_cmake_builder.rb +0 -84
- data/test/rubygems/test_gem_ext_configure_builder.rb +0 -80
- data/test/rubygems/test_gem_ext_ext_conf_builder.rb +0 -229
- data/test/rubygems/test_gem_ext_rake_builder.rb +0 -113
- data/test/rubygems/test_gem_gem_runner.rb +0 -119
- data/test/rubygems/test_gem_gemcutter_utilities.rb +0 -361
- data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -60
- data/test/rubygems/test_gem_indexer.rb +0 -381
- data/test/rubygems/test_gem_install_update_options.rb +0 -208
- data/test/rubygems/test_gem_installer.rb +0 -2512
- data/test/rubygems/test_gem_local_remote_options.rb +0 -133
- data/test/rubygems/test_gem_name_tuple.rb +0 -43
- data/test/rubygems/test_gem_package.rb +0 -1306
- data/test/rubygems/test_gem_package_old.rb +0 -91
- data/test/rubygems/test_gem_package_tar_header.rb +0 -226
- data/test/rubygems/test_gem_package_tar_reader.rb +0 -150
- data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -350
- data/test/rubygems/test_gem_package_tar_writer.rb +0 -331
- data/test/rubygems/test_gem_package_task.rb +0 -118
- data/test/rubygems/test_gem_path_support.rb +0 -139
- data/test/rubygems/test_gem_platform.rb +0 -497
- data/test/rubygems/test_gem_rdoc.rb +0 -137
- data/test/rubygems/test_gem_remote_fetcher.rb +0 -1227
- data/test/rubygems/test_gem_request.rb +0 -547
- data/test/rubygems/test_gem_request_connection_pools.rb +0 -152
- data/test/rubygems/test_gem_request_set.rb +0 -672
- data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +0 -853
- data/test/rubygems/test_gem_request_set_lockfile.rb +0 -469
- data/test/rubygems/test_gem_request_set_lockfile_parser.rb +0 -544
- data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +0 -307
- data/test/rubygems/test_gem_requirement.rb +0 -505
- data/test/rubygems/test_gem_resolver.rb +0 -859
- data/test/rubygems/test_gem_resolver_activation_request.rb +0 -43
- data/test/rubygems/test_gem_resolver_api_set.rb +0 -210
- data/test/rubygems/test_gem_resolver_api_specification.rb +0 -167
- data/test/rubygems/test_gem_resolver_best_set.rb +0 -159
- data/test/rubygems/test_gem_resolver_composed_set.rb +0 -44
- data/test/rubygems/test_gem_resolver_conflict.rb +0 -82
- data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -83
- data/test/rubygems/test_gem_resolver_git_set.rb +0 -188
- data/test/rubygems/test_gem_resolver_git_specification.rb +0 -114
- data/test/rubygems/test_gem_resolver_index_set.rb +0 -88
- data/test/rubygems/test_gem_resolver_index_specification.rb +0 -93
- data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -47
- data/test/rubygems/test_gem_resolver_installer_set.rb +0 -320
- data/test/rubygems/test_gem_resolver_local_specification.rb +0 -44
- data/test/rubygems/test_gem_resolver_lock_set.rb +0 -62
- data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -98
- data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -19
- data/test/rubygems/test_gem_resolver_specification.rb +0 -63
- data/test/rubygems/test_gem_resolver_vendor_set.rb +0 -82
- data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -82
- data/test/rubygems/test_gem_security.rb +0 -341
- data/test/rubygems/test_gem_security_policy.rb +0 -535
- data/test/rubygems/test_gem_security_signer.rb +0 -218
- data/test/rubygems/test_gem_security_trust_dir.rb +0 -99
- data/test/rubygems/test_gem_silent_ui.rb +0 -123
- data/test/rubygems/test_gem_source.rb +0 -254
- data/test/rubygems/test_gem_source_fetch_problem.rb +0 -37
- data/test/rubygems/test_gem_source_git.rb +0 -310
- data/test/rubygems/test_gem_source_installed.rb +0 -35
- data/test/rubygems/test_gem_source_list.rb +0 -119
- data/test/rubygems/test_gem_source_local.rb +0 -107
- data/test/rubygems/test_gem_source_lock.rb +0 -113
- data/test/rubygems/test_gem_source_specific_file.rb +0 -76
- data/test/rubygems/test_gem_source_subpath_problem.rb +0 -50
- data/test/rubygems/test_gem_source_vendor.rb +0 -30
- data/test/rubygems/test_gem_spec_fetcher.rb +0 -338
- data/test/rubygems/test_gem_specification.rb +0 -3856
- data/test/rubygems/test_gem_stream_ui.rb +0 -255
- data/test/rubygems/test_gem_stub_specification.rb +0 -278
- data/test/rubygems/test_gem_text.rb +0 -103
- data/test/rubygems/test_gem_uninstaller.rb +0 -675
- data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -31
- data/test/rubygems/test_gem_update_suggestion.rb +0 -209
- data/test/rubygems/test_gem_uri.rb +0 -41
- data/test/rubygems/test_gem_uri_formatter.rb +0 -27
- data/test/rubygems/test_gem_util.rb +0 -91
- data/test/rubygems/test_gem_validator.rb +0 -42
- data/test/rubygems/test_gem_version.rb +0 -305
- data/test/rubygems/test_gem_version_option.rb +0 -165
- data/test/rubygems/test_kernel.rb +0 -124
- data/test/rubygems/test_project_sanity.rb +0 -49
- data/test/rubygems/test_remote_fetch_error.rb +0 -20
- data/test/rubygems/test_require.rb +0 -732
- data/test/rubygems/test_rubygems.rb +0 -76
- data/test/rubygems/test_webauthn_listener.rb +0 -143
- data/test/rubygems/test_webauthn_listener_response.rb +0 -93
- data/test/rubygems/test_webauthn_poller.rb +0 -124
- data/test/rubygems/utilities.rb +0 -436
- data/test/rubygems/wrong_key_cert.pem +0 -19
- data/test/rubygems/wrong_key_cert_32.pem +0 -19
- data/test/test_changelog_generator.rb +0 -17
@@ -13,7 +13,6 @@ require_relative "../rubygems"
|
|
13
13
|
# Mixin methods for local and remote Gem::Command options.
|
14
14
|
|
15
15
|
module Gem::LocalRemoteOptions
|
16
|
-
|
17
16
|
##
|
18
17
|
# Allows Gem::OptionParser to handle HTTP URIs.
|
19
18
|
|
@@ -40,17 +39,17 @@ module Gem::LocalRemoteOptions
|
|
40
39
|
|
41
40
|
def add_local_remote_options
|
42
41
|
add_option(:"Local/Remote", "-l", "--local",
|
43
|
-
"Restrict operations to the LOCAL domain") do |
|
42
|
+
"Restrict operations to the LOCAL domain") do |_value, options|
|
44
43
|
options[:domain] = :local
|
45
44
|
end
|
46
45
|
|
47
46
|
add_option(:"Local/Remote", "-r", "--remote",
|
48
|
-
"Restrict operations to the REMOTE domain") do |
|
47
|
+
"Restrict operations to the REMOTE domain") do |_value, options|
|
49
48
|
options[:domain] = :remote
|
50
49
|
end
|
51
50
|
|
52
51
|
add_option(:"Local/Remote", "-b", "--both",
|
53
|
-
"Allow LOCAL and REMOTE operations") do |
|
52
|
+
"Allow LOCAL and REMOTE operations") do |_value, options|
|
54
53
|
options[:domain] = :both
|
55
54
|
end
|
56
55
|
|
@@ -67,8 +66,7 @@ module Gem::LocalRemoteOptions
|
|
67
66
|
def add_bulk_threshold_option
|
68
67
|
add_option(:"Local/Remote", "-B", "--bulk-threshold COUNT",
|
69
68
|
"Threshold for switching to bulk",
|
70
|
-
"synchronization (default #{Gem.configuration.bulk_threshold})") do
|
71
|
-
|value, options|
|
69
|
+
"synchronization (default #{Gem.configuration.bulk_threshold})") do |value, _options|
|
72
70
|
Gem.configuration.bulk_threshold = value.to_i
|
73
71
|
end
|
74
72
|
end
|
@@ -78,7 +76,7 @@ module Gem::LocalRemoteOptions
|
|
78
76
|
|
79
77
|
def add_clear_sources_option
|
80
78
|
add_option(:"Local/Remote", "--clear-sources",
|
81
|
-
"Clear the gem sources") do |
|
79
|
+
"Clear the gem sources") do |_value, options|
|
82
80
|
Gem.sources = nil
|
83
81
|
options[:sources_cleared] = true
|
84
82
|
end
|
@@ -92,7 +90,7 @@ module Gem::LocalRemoteOptions
|
|
92
90
|
|
93
91
|
add_option(:"Local/Remote", "-p", "--[no-]http-proxy [URL]", URI::HTTP,
|
94
92
|
"Use HTTP proxy for remote operations") do |value, options|
|
95
|
-
options[:http_proxy] =
|
93
|
+
options[:http_proxy] = value == false ? :no_proxy : value
|
96
94
|
Gem.configuration[:http_proxy] = options[:http_proxy]
|
97
95
|
end
|
98
96
|
end
|
@@ -120,7 +118,7 @@ module Gem::LocalRemoteOptions
|
|
120
118
|
|
121
119
|
def add_update_sources_option
|
122
120
|
add_option(:Deprecated, "-u", "--[no-]update-sources",
|
123
|
-
"Update local source cache") do |value,
|
121
|
+
"Update local source cache") do |value, _options|
|
124
122
|
Gem.configuration.update_sources = value
|
125
123
|
end
|
126
124
|
end
|
@@ -145,5 +143,4 @@ module Gem::LocalRemoteOptions
|
|
145
143
|
def remote?
|
146
144
|
options[:domain] == :remote || options[:domain] == :both
|
147
145
|
end
|
148
|
-
|
149
146
|
end
|
data/lib/rubygems/name_tuple.rb
CHANGED
@@ -6,14 +6,12 @@
|
|
6
6
|
# wrap the data returned from the indexes.
|
7
7
|
|
8
8
|
class Gem::NameTuple
|
9
|
-
def initialize(name, version, platform=
|
9
|
+
def initialize(name, version, platform=Gem::Platform::RUBY)
|
10
10
|
@name = name
|
11
11
|
@version = version
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
end
|
16
|
-
|
13
|
+
platform &&= platform.to_s
|
14
|
+
platform = Gem::Platform::RUBY if !platform || platform.empty?
|
17
15
|
@platform = platform
|
18
16
|
end
|
19
17
|
|
@@ -32,7 +30,7 @@ class Gem::NameTuple
|
|
32
30
|
# [name, version, platform] tuples.
|
33
31
|
|
34
32
|
def self.to_basic(list)
|
35
|
-
list.map
|
33
|
+
list.map(&:to_a)
|
36
34
|
end
|
37
35
|
|
38
36
|
##
|
@@ -49,11 +47,11 @@ class Gem::NameTuple
|
|
49
47
|
|
50
48
|
def full_name
|
51
49
|
case @platform
|
52
|
-
when nil, "
|
50
|
+
when nil, "", Gem::Platform::RUBY
|
53
51
|
"#{@name}-#{@version}"
|
54
52
|
else
|
55
53
|
"#{@name}-#{@version}-#{@platform}"
|
56
|
-
end
|
54
|
+
end
|
57
55
|
end
|
58
56
|
|
59
57
|
##
|
@@ -87,7 +85,7 @@ class Gem::NameTuple
|
|
87
85
|
"#<Gem::NameTuple #{@name}, #{@version}, #{@platform}>"
|
88
86
|
end
|
89
87
|
|
90
|
-
|
88
|
+
alias_method :to_s, :inspect # :nodoc:
|
91
89
|
|
92
90
|
def <=>(other)
|
93
91
|
[@name, @version, Gem::Platform.sort_priority(@platform)] <=>
|
@@ -0,0 +1 @@
|
|
1
|
+
# Vendored files do not need to be documented
|
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (C) 1993-2013 Yukihiro Matsumoto. All rights reserved.
|
2
|
+
|
3
|
+
Redistribution and use in source and binary forms, with or without
|
4
|
+
modification, are permitted provided that the following conditions
|
5
|
+
are met:
|
6
|
+
1. Redistributions of source code must retain the above copyright
|
7
|
+
notice, this list of conditions and the following disclaimer.
|
8
|
+
2. Redistributions in binary form must reproduce the above copyright
|
9
|
+
notice, this list of conditions and the following disclaimer in the
|
10
|
+
documentation and/or other materials provided with the distribution.
|
11
|
+
|
12
|
+
THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
13
|
+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
14
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
15
|
+
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
16
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
17
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
18
|
+
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
19
|
+
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
20
|
+
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
21
|
+
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
22
|
+
SUCH DAMAGE.
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# for backward compatibility
|
3
|
+
|
4
|
+
# :enddoc:
|
5
|
+
|
6
|
+
class Gem::Net::HTTP
|
7
|
+
ProxyMod = ProxyDelta
|
8
|
+
deprecate_constant :ProxyMod
|
9
|
+
end
|
10
|
+
|
11
|
+
module Gem::Net::NetPrivate
|
12
|
+
HTTPRequest = ::Gem::Net::HTTPRequest
|
13
|
+
deprecate_constant :HTTPRequest
|
14
|
+
end
|
15
|
+
|
16
|
+
module Gem::Net
|
17
|
+
HTTPSession = HTTP
|
18
|
+
|
19
|
+
HTTPInformationCode = HTTPInformation
|
20
|
+
HTTPSuccessCode = HTTPSuccess
|
21
|
+
HTTPRedirectionCode = HTTPRedirection
|
22
|
+
HTTPRetriableCode = HTTPRedirection
|
23
|
+
HTTPClientErrorCode = HTTPClientError
|
24
|
+
HTTPFatalErrorCode = HTTPClientError
|
25
|
+
HTTPServerErrorCode = HTTPServerError
|
26
|
+
HTTPResponseReceiver = HTTPResponse
|
27
|
+
|
28
|
+
HTTPResponceReceiver = HTTPResponse # Typo since 2001
|
29
|
+
|
30
|
+
deprecate_constant :HTTPSession,
|
31
|
+
:HTTPInformationCode,
|
32
|
+
:HTTPSuccessCode,
|
33
|
+
:HTTPRedirectionCode,
|
34
|
+
:HTTPRetriableCode,
|
35
|
+
:HTTPClientErrorCode,
|
36
|
+
:HTTPFatalErrorCode,
|
37
|
+
:HTTPServerErrorCode,
|
38
|
+
:HTTPResponseReceiver,
|
39
|
+
:HTTPResponceReceiver
|
40
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Gem::Net
|
3
|
+
# Gem::Net::HTTP exception class.
|
4
|
+
# You cannot use Gem::Net::HTTPExceptions directly; instead, you must use
|
5
|
+
# its subclasses.
|
6
|
+
module HTTPExceptions
|
7
|
+
def initialize(msg, res) #:nodoc:
|
8
|
+
super msg
|
9
|
+
@response = res
|
10
|
+
end
|
11
|
+
attr_reader :response
|
12
|
+
alias data response #:nodoc: obsolete
|
13
|
+
end
|
14
|
+
|
15
|
+
class HTTPError < ProtocolError
|
16
|
+
include HTTPExceptions
|
17
|
+
end
|
18
|
+
|
19
|
+
class HTTPRetriableError < ProtoRetriableError
|
20
|
+
include HTTPExceptions
|
21
|
+
end
|
22
|
+
|
23
|
+
class HTTPClientException < ProtoServerError
|
24
|
+
include HTTPExceptions
|
25
|
+
end
|
26
|
+
|
27
|
+
class HTTPFatalError < ProtoFatalError
|
28
|
+
include HTTPExceptions
|
29
|
+
end
|
30
|
+
|
31
|
+
# We cannot use the name "HTTPServerError", it is the name of the response.
|
32
|
+
HTTPServerException = HTTPClientException # :nodoc:
|
33
|
+
deprecate_constant(:HTTPServerException)
|
34
|
+
end
|
@@ -0,0 +1,414 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# \HTTPGenericRequest is the parent of the Gem::Net::HTTPRequest class.
|
4
|
+
#
|
5
|
+
# Do not use this directly; instead, use a subclass of Gem::Net::HTTPRequest.
|
6
|
+
#
|
7
|
+
# == About the Examples
|
8
|
+
#
|
9
|
+
# :include: doc/net-http/examples.rdoc
|
10
|
+
#
|
11
|
+
class Gem::Net::HTTPGenericRequest
|
12
|
+
|
13
|
+
include Gem::Net::HTTPHeader
|
14
|
+
|
15
|
+
def initialize(m, reqbody, resbody, uri_or_path, initheader = nil) # :nodoc:
|
16
|
+
@method = m
|
17
|
+
@request_has_body = reqbody
|
18
|
+
@response_has_body = resbody
|
19
|
+
|
20
|
+
if URI === uri_or_path then
|
21
|
+
raise ArgumentError, "not an HTTP URI" unless URI::HTTP === uri_or_path
|
22
|
+
hostname = uri_or_path.hostname
|
23
|
+
raise ArgumentError, "no host component for URI" unless (hostname && hostname.length > 0)
|
24
|
+
@uri = uri_or_path.dup
|
25
|
+
host = @uri.hostname.dup
|
26
|
+
host << ":" << @uri.port.to_s if @uri.port != @uri.default_port
|
27
|
+
@path = uri_or_path.request_uri
|
28
|
+
raise ArgumentError, "no HTTP request path given" unless @path
|
29
|
+
else
|
30
|
+
@uri = nil
|
31
|
+
host = nil
|
32
|
+
raise ArgumentError, "no HTTP request path given" unless uri_or_path
|
33
|
+
raise ArgumentError, "HTTP request path is empty" if uri_or_path.empty?
|
34
|
+
@path = uri_or_path.dup
|
35
|
+
end
|
36
|
+
|
37
|
+
@decode_content = false
|
38
|
+
|
39
|
+
if Gem::Net::HTTP::HAVE_ZLIB then
|
40
|
+
if !initheader ||
|
41
|
+
!initheader.keys.any? { |k|
|
42
|
+
%w[accept-encoding range].include? k.downcase
|
43
|
+
} then
|
44
|
+
@decode_content = true if @response_has_body
|
45
|
+
initheader = initheader ? initheader.dup : {}
|
46
|
+
initheader["accept-encoding"] =
|
47
|
+
"gzip;q=1.0,deflate;q=0.6,identity;q=0.3"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
initialize_http_header initheader
|
52
|
+
self['Accept'] ||= '*/*'
|
53
|
+
self['User-Agent'] ||= 'Ruby'
|
54
|
+
self['Host'] ||= host if host
|
55
|
+
@body = nil
|
56
|
+
@body_stream = nil
|
57
|
+
@body_data = nil
|
58
|
+
end
|
59
|
+
|
60
|
+
# Returns the string method name for the request:
|
61
|
+
#
|
62
|
+
# Gem::Net::HTTP::Get.new(uri).method # => "GET"
|
63
|
+
# Gem::Net::HTTP::Post.new(uri).method # => "POST"
|
64
|
+
#
|
65
|
+
attr_reader :method
|
66
|
+
|
67
|
+
# Returns the string path for the request:
|
68
|
+
#
|
69
|
+
# Gem::Net::HTTP::Get.new(uri).path # => "/"
|
70
|
+
# Gem::Net::HTTP::Post.new('example.com').path # => "example.com"
|
71
|
+
#
|
72
|
+
attr_reader :path
|
73
|
+
|
74
|
+
# Returns the URI object for the request, or +nil+ if none:
|
75
|
+
#
|
76
|
+
# Gem::Net::HTTP::Get.new(uri).uri
|
77
|
+
# # => #<URI::HTTPS https://jsonplaceholder.typicode.com/>
|
78
|
+
# Gem::Net::HTTP::Get.new('example.com').uri # => nil
|
79
|
+
#
|
80
|
+
attr_reader :uri
|
81
|
+
|
82
|
+
# Returns +false+ if the request's header <tt>'Accept-Encoding'</tt>
|
83
|
+
# has been set manually or deleted
|
84
|
+
# (indicating that the user intends to handle encoding in the response),
|
85
|
+
# +true+ otherwise:
|
86
|
+
#
|
87
|
+
# req = Gem::Net::HTTP::Get.new(uri) # => #<Gem::Net::HTTP::Get GET>
|
88
|
+
# req['Accept-Encoding'] # => "gzip;q=1.0,deflate;q=0.6,identity;q=0.3"
|
89
|
+
# req.decode_content # => true
|
90
|
+
# req['Accept-Encoding'] = 'foo'
|
91
|
+
# req.decode_content # => false
|
92
|
+
# req.delete('Accept-Encoding')
|
93
|
+
# req.decode_content # => false
|
94
|
+
#
|
95
|
+
attr_reader :decode_content
|
96
|
+
|
97
|
+
# Returns a string representation of the request:
|
98
|
+
#
|
99
|
+
# Gem::Net::HTTP::Post.new(uri).inspect # => "#<Gem::Net::HTTP::Post POST>"
|
100
|
+
#
|
101
|
+
def inspect
|
102
|
+
"\#<#{self.class} #{@method}>"
|
103
|
+
end
|
104
|
+
|
105
|
+
##
|
106
|
+
# Don't automatically decode response content-encoding if the user indicates
|
107
|
+
# they want to handle it.
|
108
|
+
|
109
|
+
def []=(key, val) # :nodoc:
|
110
|
+
@decode_content = false if key.downcase == 'accept-encoding'
|
111
|
+
|
112
|
+
super key, val
|
113
|
+
end
|
114
|
+
|
115
|
+
# Returns whether the request may have a body:
|
116
|
+
#
|
117
|
+
# Gem::Net::HTTP::Post.new(uri).request_body_permitted? # => true
|
118
|
+
# Gem::Net::HTTP::Get.new(uri).request_body_permitted? # => false
|
119
|
+
#
|
120
|
+
def request_body_permitted?
|
121
|
+
@request_has_body
|
122
|
+
end
|
123
|
+
|
124
|
+
# Returns whether the response may have a body:
|
125
|
+
#
|
126
|
+
# Gem::Net::HTTP::Post.new(uri).response_body_permitted? # => true
|
127
|
+
# Gem::Net::HTTP::Head.new(uri).response_body_permitted? # => false
|
128
|
+
#
|
129
|
+
def response_body_permitted?
|
130
|
+
@response_has_body
|
131
|
+
end
|
132
|
+
|
133
|
+
def body_exist? # :nodoc:
|
134
|
+
warn "Gem::Net::HTTPRequest#body_exist? is obsolete; use response_body_permitted?", uplevel: 1 if $VERBOSE
|
135
|
+
response_body_permitted?
|
136
|
+
end
|
137
|
+
|
138
|
+
# Returns the string body for the request, or +nil+ if there is none:
|
139
|
+
#
|
140
|
+
# req = Gem::Net::HTTP::Post.new(uri)
|
141
|
+
# req.body # => nil
|
142
|
+
# req.body = '{"title": "foo","body": "bar","userId": 1}'
|
143
|
+
# req.body # => "{\"title\": \"foo\",\"body\": \"bar\",\"userId\": 1}"
|
144
|
+
#
|
145
|
+
attr_reader :body
|
146
|
+
|
147
|
+
# Sets the body for the request:
|
148
|
+
#
|
149
|
+
# req = Gem::Net::HTTP::Post.new(uri)
|
150
|
+
# req.body # => nil
|
151
|
+
# req.body = '{"title": "foo","body": "bar","userId": 1}'
|
152
|
+
# req.body # => "{\"title\": \"foo\",\"body\": \"bar\",\"userId\": 1}"
|
153
|
+
#
|
154
|
+
def body=(str)
|
155
|
+
@body = str
|
156
|
+
@body_stream = nil
|
157
|
+
@body_data = nil
|
158
|
+
str
|
159
|
+
end
|
160
|
+
|
161
|
+
# Returns the body stream object for the request, or +nil+ if there is none:
|
162
|
+
#
|
163
|
+
# req = Gem::Net::HTTP::Post.new(uri) # => #<Gem::Net::HTTP::Post POST>
|
164
|
+
# req.body_stream # => nil
|
165
|
+
# require 'stringio'
|
166
|
+
# req.body_stream = StringIO.new('xyzzy') # => #<StringIO:0x0000027d1e5affa8>
|
167
|
+
# req.body_stream # => #<StringIO:0x0000027d1e5affa8>
|
168
|
+
#
|
169
|
+
attr_reader :body_stream
|
170
|
+
|
171
|
+
# Sets the body stream for the request:
|
172
|
+
#
|
173
|
+
# req = Gem::Net::HTTP::Post.new(uri) # => #<Gem::Net::HTTP::Post POST>
|
174
|
+
# req.body_stream # => nil
|
175
|
+
# require 'stringio'
|
176
|
+
# req.body_stream = StringIO.new('xyzzy') # => #<StringIO:0x0000027d1e5affa8>
|
177
|
+
# req.body_stream # => #<StringIO:0x0000027d1e5affa8>
|
178
|
+
#
|
179
|
+
def body_stream=(input)
|
180
|
+
@body = nil
|
181
|
+
@body_stream = input
|
182
|
+
@body_data = nil
|
183
|
+
input
|
184
|
+
end
|
185
|
+
|
186
|
+
def set_body_internal(str) #:nodoc: internal use only
|
187
|
+
raise ArgumentError, "both of body argument and HTTPRequest#body set" if str and (@body or @body_stream)
|
188
|
+
self.body = str if str
|
189
|
+
if @body.nil? && @body_stream.nil? && @body_data.nil? && request_body_permitted?
|
190
|
+
self.body = ''
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
#
|
195
|
+
# write
|
196
|
+
#
|
197
|
+
|
198
|
+
def exec(sock, ver, path) #:nodoc: internal use only
|
199
|
+
if @body
|
200
|
+
send_request_with_body sock, ver, path, @body
|
201
|
+
elsif @body_stream
|
202
|
+
send_request_with_body_stream sock, ver, path, @body_stream
|
203
|
+
elsif @body_data
|
204
|
+
send_request_with_body_data sock, ver, path, @body_data
|
205
|
+
else
|
206
|
+
write_header sock, ver, path
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
def update_uri(addr, port, ssl) # :nodoc: internal use only
|
211
|
+
# reflect the connection and @path to @uri
|
212
|
+
return unless @uri
|
213
|
+
|
214
|
+
if ssl
|
215
|
+
scheme = 'https'
|
216
|
+
klass = URI::HTTPS
|
217
|
+
else
|
218
|
+
scheme = 'http'
|
219
|
+
klass = URI::HTTP
|
220
|
+
end
|
221
|
+
|
222
|
+
if host = self['host']
|
223
|
+
host.sub!(/:.*/m, '')
|
224
|
+
elsif host = @uri.host
|
225
|
+
else
|
226
|
+
host = addr
|
227
|
+
end
|
228
|
+
# convert the class of the URI
|
229
|
+
if @uri.is_a?(klass)
|
230
|
+
@uri.host = host
|
231
|
+
@uri.port = port
|
232
|
+
else
|
233
|
+
@uri = klass.new(
|
234
|
+
scheme, @uri.userinfo,
|
235
|
+
host, port, nil,
|
236
|
+
@uri.path, nil, @uri.query, nil)
|
237
|
+
end
|
238
|
+
end
|
239
|
+
|
240
|
+
private
|
241
|
+
|
242
|
+
class Chunker #:nodoc:
|
243
|
+
def initialize(sock)
|
244
|
+
@sock = sock
|
245
|
+
@prev = nil
|
246
|
+
end
|
247
|
+
|
248
|
+
def write(buf)
|
249
|
+
# avoid memcpy() of buf, buf can huge and eat memory bandwidth
|
250
|
+
rv = buf.bytesize
|
251
|
+
@sock.write("#{rv.to_s(16)}\r\n", buf, "\r\n")
|
252
|
+
rv
|
253
|
+
end
|
254
|
+
|
255
|
+
def finish
|
256
|
+
@sock.write("0\r\n\r\n")
|
257
|
+
end
|
258
|
+
end
|
259
|
+
|
260
|
+
def send_request_with_body(sock, ver, path, body)
|
261
|
+
self.content_length = body.bytesize
|
262
|
+
delete 'Transfer-Encoding'
|
263
|
+
supply_default_content_type
|
264
|
+
write_header sock, ver, path
|
265
|
+
wait_for_continue sock, ver if sock.continue_timeout
|
266
|
+
sock.write body
|
267
|
+
end
|
268
|
+
|
269
|
+
def send_request_with_body_stream(sock, ver, path, f)
|
270
|
+
unless content_length() or chunked?
|
271
|
+
raise ArgumentError,
|
272
|
+
"Content-Length not given and Transfer-Encoding is not `chunked'"
|
273
|
+
end
|
274
|
+
supply_default_content_type
|
275
|
+
write_header sock, ver, path
|
276
|
+
wait_for_continue sock, ver if sock.continue_timeout
|
277
|
+
if chunked?
|
278
|
+
chunker = Chunker.new(sock)
|
279
|
+
IO.copy_stream(f, chunker)
|
280
|
+
chunker.finish
|
281
|
+
else
|
282
|
+
IO.copy_stream(f, sock)
|
283
|
+
end
|
284
|
+
end
|
285
|
+
|
286
|
+
def send_request_with_body_data(sock, ver, path, params)
|
287
|
+
if /\Amultipart\/form-data\z/i !~ self.content_type
|
288
|
+
self.content_type = 'application/x-www-form-urlencoded'
|
289
|
+
return send_request_with_body(sock, ver, path, URI.encode_www_form(params))
|
290
|
+
end
|
291
|
+
|
292
|
+
opt = @form_option.dup
|
293
|
+
require 'securerandom' unless defined?(SecureRandom)
|
294
|
+
opt[:boundary] ||= SecureRandom.urlsafe_base64(40)
|
295
|
+
self.set_content_type(self.content_type, boundary: opt[:boundary])
|
296
|
+
if chunked?
|
297
|
+
write_header sock, ver, path
|
298
|
+
encode_multipart_form_data(sock, params, opt)
|
299
|
+
else
|
300
|
+
require 'tempfile'
|
301
|
+
file = Tempfile.new('multipart')
|
302
|
+
file.binmode
|
303
|
+
encode_multipart_form_data(file, params, opt)
|
304
|
+
file.rewind
|
305
|
+
self.content_length = file.size
|
306
|
+
write_header sock, ver, path
|
307
|
+
IO.copy_stream(file, sock)
|
308
|
+
file.close(true)
|
309
|
+
end
|
310
|
+
end
|
311
|
+
|
312
|
+
def encode_multipart_form_data(out, params, opt)
|
313
|
+
charset = opt[:charset]
|
314
|
+
boundary = opt[:boundary]
|
315
|
+
require 'securerandom' unless defined?(SecureRandom)
|
316
|
+
boundary ||= SecureRandom.urlsafe_base64(40)
|
317
|
+
chunked_p = chunked?
|
318
|
+
|
319
|
+
buf = +''
|
320
|
+
params.each do |key, value, h={}|
|
321
|
+
key = quote_string(key, charset)
|
322
|
+
filename =
|
323
|
+
h.key?(:filename) ? h[:filename] :
|
324
|
+
value.respond_to?(:to_path) ? File.basename(value.to_path) :
|
325
|
+
nil
|
326
|
+
|
327
|
+
buf << "--#{boundary}\r\n"
|
328
|
+
if filename
|
329
|
+
filename = quote_string(filename, charset)
|
330
|
+
type = h[:content_type] || 'application/octet-stream'
|
331
|
+
buf << "Content-Disposition: form-data; " \
|
332
|
+
"name=\"#{key}\"; filename=\"#{filename}\"\r\n" \
|
333
|
+
"Content-Type: #{type}\r\n\r\n"
|
334
|
+
if !out.respond_to?(:write) || !value.respond_to?(:read)
|
335
|
+
# if +out+ is not an IO or +value+ is not an IO
|
336
|
+
buf << (value.respond_to?(:read) ? value.read : value)
|
337
|
+
elsif value.respond_to?(:size) && chunked_p
|
338
|
+
# if +out+ is an IO and +value+ is a File, use IO.copy_stream
|
339
|
+
flush_buffer(out, buf, chunked_p)
|
340
|
+
out << "%x\r\n" % value.size if chunked_p
|
341
|
+
IO.copy_stream(value, out)
|
342
|
+
out << "\r\n" if chunked_p
|
343
|
+
else
|
344
|
+
# +out+ is an IO, and +value+ is not a File but an IO
|
345
|
+
flush_buffer(out, buf, chunked_p)
|
346
|
+
1 while flush_buffer(out, value.read(4096), chunked_p)
|
347
|
+
end
|
348
|
+
else
|
349
|
+
# non-file field:
|
350
|
+
# HTML5 says, "The parts of the generated multipart/form-data
|
351
|
+
# resource that correspond to non-file fields must not have a
|
352
|
+
# Content-Type header specified."
|
353
|
+
buf << "Content-Disposition: form-data; name=\"#{key}\"\r\n\r\n"
|
354
|
+
buf << (value.respond_to?(:read) ? value.read : value)
|
355
|
+
end
|
356
|
+
buf << "\r\n"
|
357
|
+
end
|
358
|
+
buf << "--#{boundary}--\r\n"
|
359
|
+
flush_buffer(out, buf, chunked_p)
|
360
|
+
out << "0\r\n\r\n" if chunked_p
|
361
|
+
end
|
362
|
+
|
363
|
+
def quote_string(str, charset)
|
364
|
+
str = str.encode(charset, fallback:->(c){'&#%d;'%c.encode("UTF-8").ord}) if charset
|
365
|
+
str.gsub(/[\\"]/, '\\\\\&')
|
366
|
+
end
|
367
|
+
|
368
|
+
def flush_buffer(out, buf, chunked_p)
|
369
|
+
return unless buf
|
370
|
+
out << "%x\r\n"%buf.bytesize if chunked_p
|
371
|
+
out << buf
|
372
|
+
out << "\r\n" if chunked_p
|
373
|
+
buf.clear
|
374
|
+
end
|
375
|
+
|
376
|
+
def supply_default_content_type
|
377
|
+
return if content_type()
|
378
|
+
warn 'net/http: Content-Type did not set; using application/x-www-form-urlencoded', uplevel: 1 if $VERBOSE
|
379
|
+
set_content_type 'application/x-www-form-urlencoded'
|
380
|
+
end
|
381
|
+
|
382
|
+
##
|
383
|
+
# Waits up to the continue timeout for a response from the server provided
|
384
|
+
# we're speaking HTTP 1.1 and are expecting a 100-continue response.
|
385
|
+
|
386
|
+
def wait_for_continue(sock, ver)
|
387
|
+
if ver >= '1.1' and @header['expect'] and
|
388
|
+
@header['expect'].include?('100-continue')
|
389
|
+
if sock.io.to_io.wait_readable(sock.continue_timeout)
|
390
|
+
res = Gem::Net::HTTPResponse.read_new(sock)
|
391
|
+
unless res.kind_of?(Gem::Net::HTTPContinue)
|
392
|
+
res.decode_content = @decode_content
|
393
|
+
throw :response, res
|
394
|
+
end
|
395
|
+
end
|
396
|
+
end
|
397
|
+
end
|
398
|
+
|
399
|
+
def write_header(sock, ver, path)
|
400
|
+
reqline = "#{@method} #{path} HTTP/#{ver}"
|
401
|
+
if /[\r\n]/ =~ reqline
|
402
|
+
raise ArgumentError, "A Request-Line must not contain CR or LF"
|
403
|
+
end
|
404
|
+
buf = +''
|
405
|
+
buf << reqline << "\r\n"
|
406
|
+
each_capitalized do |k,v|
|
407
|
+
buf << "#{k}: #{v}\r\n"
|
408
|
+
end
|
409
|
+
buf << "\r\n"
|
410
|
+
sock.write buf
|
411
|
+
end
|
412
|
+
|
413
|
+
end
|
414
|
+
|