rubygems-update 3.4.21 → 3.5.0
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 +132 -2
- data/Manifest.txt +39 -221
- data/README.md +1 -3
- data/bundler/CHANGELOG.md +74 -0
- data/bundler/README.md +1 -2
- 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 +245 -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 +31 -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 +43 -16
- data/bundler/lib/bundler/dependency.rb +16 -12
- data/bundler/lib/bundler/digest.rb +2 -2
- data/bundler/lib/bundler/dsl.rb +43 -25
- data/bundler/lib/bundler/endpoint_specification.rb +6 -2
- data/bundler/lib/bundler/env.rb +1 -3
- data/bundler/lib/bundler/errors.rb +58 -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 +12 -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 +10 -10
- 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 +28 -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/index.rb +8 -0
- data/bundler/lib/bundler/plugin/installer.rb +1 -1
- data/bundler/lib/bundler/plugin.rb +12 -5
- 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 +27 -54
- data/bundler/lib/bundler/rubygems_gem_installer.rb +23 -58
- 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 +22 -14
- data/bundler/lib/bundler/source/git.rb +4 -3
- data/bundler/lib/bundler/source/metadata.rb +16 -16
- 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 +43 -12
- 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/newgem.gemspec.tt +1 -1
- data/bundler/lib/bundler/templates/newgem/standard.yml.tt +1 -1
- data/bundler/lib/bundler/ui/shell.rb +2 -2
- 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/lib/fileutils.rb +8 -20
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +4 -3
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +23 -11
- 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 +36 -36
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +3 -2
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +8 -10
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +15 -4
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +15 -15
- data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +140 -14
- data/bundler/lib/bundler/vendor/thor/lib/thor/command.rb +13 -4
- data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +4 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +16 -25
- data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/invocation.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/nested_context.rb +2 -2
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +20 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +33 -17
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +27 -8
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +44 -6
- data/bundler/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +2 -2
- data/bundler/lib/bundler/vendor/thor/lib/thor/runner.rb +40 -30
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +26 -150
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +4 -46
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/column_printer.rb +29 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +3 -45
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/lcs_diff.rb +49 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +134 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/terminal.rb +42 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/wrapped_printer.rb +38 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +8 -7
- data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor.rb +155 -8
- data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +3 -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 +9 -4
- data/bundler/lib/bundler.rb +38 -35
- 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 +15 -17
- data/lib/rubygems/command_manager.rb +5 -4
- data/lib/rubygems/commands/build_command.rb +2 -2
- data/lib/rubygems/commands/cert_command.rb +2 -3
- 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 +5 -5
- data/lib/rubygems/commands/dependency_command.rb +4 -5
- data/lib/rubygems/commands/environment_command.rb +3 -5
- 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 +4 -4
- 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 +33 -36
- 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 +13 -14
- data/lib/rubygems/commands/unpack_command.rb +7 -7
- data/lib/rubygems/commands/update_command.rb +11 -13
- 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 +7 -7
- data/lib/rubygems/core_ext/kernel_gem.rb +0 -2
- data/lib/rubygems/core_ext/kernel_require.rb +20 -49
- 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 +30 -31
- data/lib/rubygems/dependency_list.rb +1 -1
- data/lib/rubygems/deprecate.rb +16 -15
- data/lib/rubygems/doctor.rb +6 -6
- 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 +2 -4
- data/lib/rubygems/ext/rake_builder.rb +1 -1
- 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 +66 -45
- data/lib/rubygems/installer_uninstaller_utils.rb +0 -2
- data/lib/rubygems/local_remote_options.rb +8 -11
- data/lib/rubygems/name_tuple.rb +7 -9
- data/lib/rubygems/net/http.rb +3 -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/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/digest_io.rb +1 -1
- 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 +14 -5
- data/lib/rubygems/package/tar_writer.rb +20 -18
- data/lib/rubygems/package.rb +28 -27
- data/lib/rubygems/package_task.rb +2 -2
- data/lib/rubygems/path_support.rb +10 -11
- data/lib/rubygems/platform.rb +65 -48
- data/lib/rubygems/query_utils.rb +7 -9
- data/lib/rubygems/remote_fetcher.rb +17 -17
- 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 +120 -123
- 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/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.rb +6 -13
- 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 +4 -4
- 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 +7 -9
- 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 +5 -5
- data/lib/rubygems/spec_fetcher.rb +31 -31
- data/lib/rubygems/specification.rb +145 -150
- data/lib/rubygems/specification_policy.rb +61 -31
- data/lib/rubygems/stub_specification.rb +4 -5
- data/lib/rubygems/text.rb +1 -2
- 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 +9 -11
- data/lib/rubygems/update_suggestion.rb +5 -18
- data/lib/rubygems/uri_formatter.rb +1 -1
- data/lib/rubygems/user_interaction.rb +17 -23
- data/lib/rubygems/util/licenses.rb +113 -35
- data/lib/rubygems/util/list.rb +3 -1
- data/lib/rubygems/util.rb +2 -4
- data/lib/rubygems/validator.rb +6 -4
- data/lib/rubygems/version.rb +35 -29
- data/lib/rubygems/version_option.rb +2 -5
- data/lib/rubygems/yaml_serializer.rb +9 -4
- data/lib/rubygems.rb +42 -42
- data/rubygems-update.gemspec +4 -4
- data/setup.rb +2 -2
- metadata +43 -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 -522
- 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 -135
- 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,6 +13,8 @@ require_relative "stub_specification"
|
|
13
13
|
require_relative "platform"
|
14
14
|
require_relative "util/list"
|
15
15
|
|
16
|
+
require "rbconfig"
|
17
|
+
|
16
18
|
##
|
17
19
|
# The Specification class contains the information for a gem. Typically
|
18
20
|
# defined in a .gemspec file or a Rakefile, and looks like this:
|
@@ -106,7 +108,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
106
108
|
@load_cache = {} # :nodoc:
|
107
109
|
@load_cache_mutex = Thread::Mutex.new
|
108
110
|
|
109
|
-
VALID_NAME_PATTERN = /\A[a-zA-Z0-9\.\-\_]+\z
|
111
|
+
VALID_NAME_PATTERN = /\A[a-zA-Z0-9\.\-\_]+\z/ # :nodoc:
|
110
112
|
|
111
113
|
# :startdoc:
|
112
114
|
|
@@ -125,35 +127,35 @@ class Gem::Specification < Gem::BasicSpecification
|
|
125
127
|
# Map of attribute names to default values.
|
126
128
|
|
127
129
|
@@default_value = {
|
128
|
-
:
|
129
|
-
:
|
130
|
-
:
|
131
|
-
:
|
132
|
-
:
|
133
|
-
:
|
134
|
-
:
|
135
|
-
:
|
136
|
-
:
|
137
|
-
:
|
138
|
-
:
|
139
|
-
:
|
140
|
-
:
|
141
|
-
:
|
142
|
-
:
|
143
|
-
:
|
144
|
-
:
|
145
|
-
:
|
146
|
-
:
|
147
|
-
:
|
148
|
-
:
|
149
|
-
:
|
150
|
-
:
|
151
|
-
:
|
152
|
-
:
|
153
|
-
:
|
154
|
-
:
|
155
|
-
:
|
156
|
-
:
|
130
|
+
authors: [],
|
131
|
+
autorequire: nil,
|
132
|
+
bindir: "bin",
|
133
|
+
cert_chain: [],
|
134
|
+
date: nil,
|
135
|
+
dependencies: [],
|
136
|
+
description: nil,
|
137
|
+
email: nil,
|
138
|
+
executables: [],
|
139
|
+
extensions: [],
|
140
|
+
extra_rdoc_files: [],
|
141
|
+
files: [],
|
142
|
+
homepage: nil,
|
143
|
+
licenses: [],
|
144
|
+
metadata: {},
|
145
|
+
name: nil,
|
146
|
+
platform: Gem::Platform::RUBY,
|
147
|
+
post_install_message: nil,
|
148
|
+
rdoc_options: [],
|
149
|
+
require_paths: ["lib"],
|
150
|
+
required_ruby_version: Gem::Requirement.default,
|
151
|
+
required_rubygems_version: Gem::Requirement.default,
|
152
|
+
requirements: [],
|
153
|
+
rubygems_version: Gem::VERSION,
|
154
|
+
signing_key: nil,
|
155
|
+
specification_version: CURRENT_SPECIFICATION_VERSION,
|
156
|
+
summary: nil,
|
157
|
+
test_files: [],
|
158
|
+
version: nil,
|
157
159
|
}.freeze
|
158
160
|
|
159
161
|
# rubocop:disable Style/MutableConstant
|
@@ -162,19 +164,17 @@ class Gem::Specification < Gem::BasicSpecification
|
|
162
164
|
|
163
165
|
@@default_value.each do |k,v|
|
164
166
|
INITIALIZE_CODE_FOR_DEFAULTS[k] = case v
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
else
|
172
|
-
"default_value(:#{k}).dup"
|
167
|
+
when [], {}, true, false, nil, Numeric, Symbol
|
168
|
+
v.inspect
|
169
|
+
when String
|
170
|
+
v.dump
|
171
|
+
else
|
172
|
+
"default_value(:#{k}).dup"
|
173
173
|
end
|
174
174
|
end
|
175
175
|
|
176
|
-
@@attributes = @@default_value.keys.sort_by
|
177
|
-
@@array_attributes = @@default_value.reject {|
|
176
|
+
@@attributes = @@default_value.keys.sort_by(&:to_s)
|
177
|
+
@@array_attributes = @@default_value.reject {|_k,v| v != [] }.keys
|
178
178
|
@@nil_attributes, @@non_nil_attributes = @@default_value.keys.partition do |k|
|
179
179
|
@@default_value[k].nil?
|
180
180
|
end
|
@@ -263,8 +263,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
263
263
|
@test_files,
|
264
264
|
add_bindir(@executables),
|
265
265
|
@extra_rdoc_files,
|
266
|
-
@extensions
|
267
|
-
].flatten.compact.uniq.sort
|
266
|
+
@extensions].flatten.compact.uniq.sort
|
268
267
|
end
|
269
268
|
|
270
269
|
##
|
@@ -503,8 +502,6 @@ class Gem::Specification < Gem::BasicSpecification
|
|
503
502
|
@platform = @new_platform.to_s
|
504
503
|
|
505
504
|
invalidate_memoized_attributes
|
506
|
-
|
507
|
-
@new_platform
|
508
505
|
end
|
509
506
|
|
510
507
|
##
|
@@ -533,13 +530,6 @@ class Gem::Specification < Gem::BasicSpecification
|
|
533
530
|
|
534
531
|
attr_reader :required_rubygems_version
|
535
532
|
|
536
|
-
##
|
537
|
-
# The version of RubyGems used to create this gem.
|
538
|
-
#
|
539
|
-
# Do not set this, it is set automatically when the gem is packaged.
|
540
|
-
|
541
|
-
attr_accessor :rubygems_version
|
542
|
-
|
543
533
|
##
|
544
534
|
# The key used to sign this gem. See Gem::Security for details.
|
545
535
|
|
@@ -578,7 +568,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
578
568
|
##
|
579
569
|
# Executables included in the gem.
|
580
570
|
#
|
581
|
-
# For example, the rake gem has rake as an executable. You don
|
571
|
+
# For example, the rake gem has rake as an executable. You don't specify the
|
582
572
|
# full path (as in bin/rake); all application-style files are expected to be
|
583
573
|
# found in bindir. These files must be executable Ruby files. Files that
|
584
574
|
# use bash or other interpreters will not work.
|
@@ -599,7 +589,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
599
589
|
# extconf.rb-style files used to compile extensions.
|
600
590
|
#
|
601
591
|
# These files will be run when the gem is installed, causing the C (or
|
602
|
-
# whatever) code to be compiled on the user
|
592
|
+
# whatever) code to be compiled on the user's machine.
|
603
593
|
#
|
604
594
|
# Usage:
|
605
595
|
#
|
@@ -727,6 +717,21 @@ class Gem::Specification < Gem::BasicSpecification
|
|
727
717
|
@test_files = Array files
|
728
718
|
end
|
729
719
|
|
720
|
+
######################################################################
|
721
|
+
# :section: Read-only attributes
|
722
|
+
|
723
|
+
##
|
724
|
+
# The version of RubyGems used to create this gem.
|
725
|
+
|
726
|
+
attr_accessor :rubygems_version
|
727
|
+
|
728
|
+
##
|
729
|
+
# The path where this gem installs its extensions.
|
730
|
+
|
731
|
+
def extensions_dir
|
732
|
+
@extensions_dir ||= super
|
733
|
+
end
|
734
|
+
|
730
735
|
######################################################################
|
731
736
|
# :section: Specification internals
|
732
737
|
|
@@ -735,7 +740,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
735
740
|
|
736
741
|
attr_accessor :activated
|
737
742
|
|
738
|
-
|
743
|
+
alias_method :activated?, :activated
|
739
744
|
|
740
745
|
##
|
741
746
|
# Autorequire was used by old RubyGems to automatically require a file.
|
@@ -778,7 +783,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
778
783
|
def self.each_gemspec(dirs) # :nodoc:
|
779
784
|
dirs.each do |dir|
|
780
785
|
Gem::Util.glob_files_in_dir("*.gemspec", dir).each do |path|
|
781
|
-
yield path
|
786
|
+
yield path
|
782
787
|
end
|
783
788
|
end
|
784
789
|
end
|
@@ -857,7 +862,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
857
862
|
installed_stubs = installed_stubs(Gem::Specification.dirs, pattern)
|
858
863
|
installed_stubs.select! {|s| Gem::Platform.match_spec? s } if match_platform
|
859
864
|
stubs = installed_stubs + default_stubs(pattern)
|
860
|
-
stubs = stubs.uniq
|
865
|
+
stubs = stubs.uniq(&:full_name)
|
861
866
|
_resort!(stubs)
|
862
867
|
stubs
|
863
868
|
end
|
@@ -938,7 +943,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
938
943
|
# Return full names of all specs in sorted order.
|
939
944
|
|
940
945
|
def self.all_names
|
941
|
-
|
946
|
+
_all.map(&:full_name)
|
942
947
|
end
|
943
948
|
|
944
949
|
##
|
@@ -964,7 +969,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
964
969
|
|
965
970
|
def self.dirs
|
966
971
|
@@dirs ||= Gem.path.collect do |dir|
|
967
|
-
File.join dir
|
972
|
+
File.join dir, "specifications"
|
968
973
|
end
|
969
974
|
end
|
970
975
|
|
@@ -973,7 +978,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
973
978
|
# this resets the list of known specs.
|
974
979
|
|
975
980
|
def self.dirs=(dirs)
|
976
|
-
|
981
|
+
reset
|
977
982
|
|
978
983
|
@@dirs = Array(dirs).map {|dir| File.join dir, "specifications" }
|
979
984
|
end
|
@@ -987,7 +992,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
987
992
|
def self.each
|
988
993
|
return enum_for(:each) unless block_given?
|
989
994
|
|
990
|
-
|
995
|
+
_all.each do |x|
|
991
996
|
yield x
|
992
997
|
end
|
993
998
|
end
|
@@ -1033,9 +1038,10 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1033
1038
|
|
1034
1039
|
def self.find_by_path(path)
|
1035
1040
|
path = path.dup.freeze
|
1036
|
-
spec = @@spec_with_requirable_file[path] ||=
|
1041
|
+
spec = @@spec_with_requirable_file[path] ||= stubs.find do |s|
|
1037
1042
|
s.contains_requirable_file? path
|
1038
|
-
end || NOT_FOUND
|
1043
|
+
end || NOT_FOUND
|
1044
|
+
|
1039
1045
|
spec.to_spec
|
1040
1046
|
end
|
1041
1047
|
|
@@ -1052,9 +1058,10 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1052
1058
|
end
|
1053
1059
|
|
1054
1060
|
def self.find_active_stub_by_path(path)
|
1055
|
-
stub = @@active_stub_with_requirable_file[path] ||=
|
1061
|
+
stub = @@active_stub_with_requirable_file[path] ||= stubs.find do |s|
|
1056
1062
|
s.activated? && s.contains_requirable_file?(path)
|
1057
|
-
end || NOT_FOUND
|
1063
|
+
end || NOT_FOUND
|
1064
|
+
|
1058
1065
|
stub.this
|
1059
1066
|
end
|
1060
1067
|
|
@@ -1071,7 +1078,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1071
1078
|
|
1072
1079
|
def self.find_in_unresolved_tree(path)
|
1073
1080
|
unresolved_specs.each do |spec|
|
1074
|
-
spec.traverse do |
|
1081
|
+
spec.traverse do |_from_spec, _dep, to_spec, trail|
|
1075
1082
|
if to_spec.has_conflicts? || to_spec.conficts_when_loaded_with?(trail)
|
1076
1083
|
:next
|
1077
1084
|
else
|
@@ -1084,7 +1091,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1084
1091
|
end
|
1085
1092
|
|
1086
1093
|
def self.unresolved_specs
|
1087
|
-
unresolved_deps.values.map
|
1094
|
+
unresolved_deps.values.map(&:to_specs).flatten
|
1088
1095
|
end
|
1089
1096
|
private_class_method :unresolved_specs
|
1090
1097
|
|
@@ -1136,12 +1143,14 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1136
1143
|
result = {}
|
1137
1144
|
|
1138
1145
|
specs.reverse_each do |spec|
|
1139
|
-
|
1146
|
+
unless prerelease
|
1147
|
+
next if spec.version.prerelease?
|
1148
|
+
end
|
1140
1149
|
|
1141
1150
|
result[spec.name] = spec
|
1142
1151
|
end
|
1143
1152
|
|
1144
|
-
result.map(&:last).flatten.sort_by
|
1153
|
+
result.map(&:last).flatten.sort_by(&:name)
|
1145
1154
|
end
|
1146
1155
|
|
1147
1156
|
##
|
@@ -1150,36 +1159,33 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1150
1159
|
def self.load(file)
|
1151
1160
|
return unless file
|
1152
1161
|
|
1153
|
-
|
1154
|
-
return
|
1162
|
+
spec = @load_cache_mutex.synchronize { @load_cache[file] }
|
1163
|
+
return spec if spec
|
1155
1164
|
|
1156
|
-
file = file.dup.tap(&Gem::UNTAINT)
|
1157
1165
|
return unless File.file?(file)
|
1158
1166
|
|
1159
1167
|
code = Gem.open_file(file, "r:UTF-8:-", &:read)
|
1160
1168
|
|
1161
|
-
code.tap(&Gem::UNTAINT)
|
1162
|
-
|
1163
1169
|
begin
|
1164
|
-
|
1170
|
+
spec = eval code, binding, file
|
1165
1171
|
|
1166
|
-
if Gem::Specification ===
|
1167
|
-
|
1172
|
+
if Gem::Specification === spec
|
1173
|
+
spec.loaded_from = File.expand_path file.to_s
|
1168
1174
|
@load_cache_mutex.synchronize do
|
1169
1175
|
prev = @load_cache[file]
|
1170
1176
|
if prev
|
1171
|
-
|
1177
|
+
spec = prev
|
1172
1178
|
else
|
1173
|
-
@load_cache[file] =
|
1179
|
+
@load_cache[file] = spec
|
1174
1180
|
end
|
1175
1181
|
end
|
1176
|
-
return
|
1182
|
+
return spec
|
1177
1183
|
end
|
1178
1184
|
|
1179
|
-
warn "[#{file}] isn't a Gem::Specification (#{
|
1185
|
+
warn "[#{file}] isn't a Gem::Specification (#{spec.class} instead)."
|
1180
1186
|
rescue SignalException, SystemExit
|
1181
1187
|
raise
|
1182
|
-
rescue SyntaxError,
|
1188
|
+
rescue SyntaxError, StandardError => e
|
1183
1189
|
warn "Invalid gemspec in [#{file}]: #{e}"
|
1184
1190
|
end
|
1185
1191
|
|
@@ -1267,7 +1273,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1267
1273
|
|
1268
1274
|
def self.reset
|
1269
1275
|
@@dirs = nil
|
1270
|
-
Gem.pre_reset_hooks.each
|
1276
|
+
Gem.pre_reset_hooks.each(&:call)
|
1271
1277
|
clear_specs
|
1272
1278
|
clear_load_cache
|
1273
1279
|
unresolved = unresolved_deps
|
@@ -1286,7 +1292,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1286
1292
|
warn "Please report a bug if this causes problems."
|
1287
1293
|
unresolved.clear
|
1288
1294
|
end
|
1289
|
-
Gem.post_reset_hooks.each
|
1295
|
+
Gem.post_reset_hooks.each(&:call)
|
1290
1296
|
end
|
1291
1297
|
|
1292
1298
|
# DOC: This method needs documented or nodoc'd
|
@@ -1299,12 +1305,13 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1299
1305
|
|
1300
1306
|
def self._load(str)
|
1301
1307
|
Gem.load_yaml
|
1308
|
+
Gem.load_safe_marshal
|
1302
1309
|
|
1303
1310
|
yaml_set = false
|
1304
1311
|
retry_count = 0
|
1305
1312
|
|
1306
1313
|
array = begin
|
1307
|
-
|
1314
|
+
Gem::SafeMarshal.safe_load str
|
1308
1315
|
rescue ArgumentError => e
|
1309
1316
|
# Avoid an infinite retry loop when the argument error has nothing to do
|
1310
1317
|
# with the classes not being defined.
|
@@ -1434,7 +1441,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1434
1441
|
# there are conflicts upon activation.
|
1435
1442
|
|
1436
1443
|
def activate
|
1437
|
-
other = Gem.loaded_specs[
|
1444
|
+
other = Gem.loaded_specs[name]
|
1438
1445
|
if other
|
1439
1446
|
check_version_conflict other
|
1440
1447
|
return false
|
@@ -1445,11 +1452,11 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1445
1452
|
activate_dependencies
|
1446
1453
|
add_self_to_load_path
|
1447
1454
|
|
1448
|
-
Gem.loaded_specs[
|
1455
|
+
Gem.loaded_specs[name] = self
|
1449
1456
|
@activated = true
|
1450
1457
|
@loaded = true
|
1451
1458
|
|
1452
|
-
|
1459
|
+
true
|
1453
1460
|
end
|
1454
1461
|
|
1455
1462
|
##
|
@@ -1460,7 +1467,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1460
1467
|
def activate_dependencies
|
1461
1468
|
unresolved = Gem::Specification.unresolved_deps
|
1462
1469
|
|
1463
|
-
|
1470
|
+
runtime_dependencies.each do |spec_dep|
|
1464
1471
|
if loaded = Gem.loaded_specs[spec_dep.name]
|
1465
1472
|
next if spec_dep.matches_spec? loaded
|
1466
1473
|
|
@@ -1474,7 +1481,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1474
1481
|
begin
|
1475
1482
|
specs = spec_dep.to_specs
|
1476
1483
|
rescue Gem::MissingSpecError => e
|
1477
|
-
raise Gem::MissingSpecError.new(e.name, e.requirement, "at: #{
|
1484
|
+
raise Gem::MissingSpecError.new(e.name, e.requirement, "at: #{spec_file}")
|
1478
1485
|
end
|
1479
1486
|
|
1480
1487
|
if specs.size == 1
|
@@ -1520,7 +1527,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1520
1527
|
def sanitize_string(string)
|
1521
1528
|
return string unless string
|
1522
1529
|
|
1523
|
-
# HACK the #to_s is in here because RSpec has an Array of Arrays of
|
1530
|
+
# HACK: the #to_s is in here because RSpec has an Array of Arrays of
|
1524
1531
|
# Strings for authors. Need a way to disallow bad values on gemspec
|
1525
1532
|
# generation. (Probably won't happen.)
|
1526
1533
|
string.to_s
|
@@ -1539,7 +1546,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1539
1546
|
executables
|
1540
1547
|
end
|
1541
1548
|
rescue StandardError
|
1542
|
-
|
1549
|
+
nil
|
1543
1550
|
end
|
1544
1551
|
|
1545
1552
|
##
|
@@ -1564,7 +1571,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1564
1571
|
|
1565
1572
|
private :add_dependency_with_type
|
1566
1573
|
|
1567
|
-
|
1574
|
+
alias_method :add_dependency, :add_runtime_dependency
|
1568
1575
|
|
1569
1576
|
##
|
1570
1577
|
# Adds this spec's require paths to LOAD_PATH, in the proper location.
|
@@ -1616,7 +1623,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1616
1623
|
def build_args
|
1617
1624
|
if File.exist? build_info_file
|
1618
1625
|
build_info = File.readlines build_info_file
|
1619
|
-
build_info = build_info.map
|
1626
|
+
build_info = build_info.map(&:strip)
|
1620
1627
|
build_info.delete ""
|
1621
1628
|
build_info
|
1622
1629
|
else
|
@@ -1693,7 +1700,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1693
1700
|
|
1694
1701
|
def conflicts
|
1695
1702
|
conflicts = {}
|
1696
|
-
|
1703
|
+
runtime_dependencies.each do |dep|
|
1697
1704
|
spec = Gem.loaded_specs[dep.name]
|
1698
1705
|
if spec && !spec.satisfies_requirement?(dep)
|
1699
1706
|
(conflicts[spec] ||= []) << dep
|
@@ -1709,7 +1716,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1709
1716
|
|
1710
1717
|
def conficts_when_loaded_with?(list_of_specs) # :nodoc:
|
1711
1718
|
result = list_of_specs.any? do |spec|
|
1712
|
-
spec.
|
1719
|
+
spec.runtime_dependencies.any? {|dep| (dep.name == name) && !satisfies_requirement?(dep) }
|
1713
1720
|
end
|
1714
1721
|
result
|
1715
1722
|
end
|
@@ -1719,14 +1726,12 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1719
1726
|
|
1720
1727
|
def has_conflicts?
|
1721
1728
|
return true unless Gem.env_requirement(name).satisfied_by?(version)
|
1722
|
-
|
1723
|
-
|
1724
|
-
|
1725
|
-
spec && !spec.satisfies_requirement?(dep)
|
1726
|
-
else
|
1727
|
-
false
|
1728
|
-
end
|
1729
|
+
runtime_dependencies.any? do |dep|
|
1730
|
+
spec = Gem.loaded_specs[dep.name]
|
1731
|
+
spec && !spec.satisfies_requirement?(dep)
|
1729
1732
|
end
|
1733
|
+
rescue ArgumentError => e
|
1734
|
+
raise e, "#{name} #{version}: #{e.message}"
|
1730
1735
|
end
|
1731
1736
|
|
1732
1737
|
# The date this gem was created.
|
@@ -1750,7 +1755,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1750
1755
|
/\A
|
1751
1756
|
(\d{4})-(\d{2})-(\d{2})
|
1752
1757
|
(\s+ \d{2}:\d{2}:\d{2}\.\d+ \s* (Z | [-+]\d\d:\d\d) )?
|
1753
|
-
\Z/x
|
1758
|
+
\Z/x
|
1754
1759
|
|
1755
1760
|
##
|
1756
1761
|
# The date this gem was created
|
@@ -1762,17 +1767,17 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1762
1767
|
# This is the cleanest, most-readable, faster-than-using-Date
|
1763
1768
|
# way to do it.
|
1764
1769
|
@date = case date
|
1765
|
-
|
1766
|
-
|
1767
|
-
|
1768
|
-
|
1769
|
-
|
1770
|
-
|
1771
|
-
|
1772
|
-
|
1773
|
-
|
1774
|
-
|
1775
|
-
|
1770
|
+
when String then
|
1771
|
+
if DateTimeFormat =~ date
|
1772
|
+
Time.utc($1.to_i, $2.to_i, $3.to_i)
|
1773
|
+
else
|
1774
|
+
raise(Gem::InvalidSpecificationException,
|
1775
|
+
"invalid date format in specification: #{date.inspect}")
|
1776
|
+
end
|
1777
|
+
when Time, DateLike then
|
1778
|
+
Time.utc(date.year, date.month, date.day)
|
1779
|
+
else
|
1780
|
+
TODAY
|
1776
1781
|
end
|
1777
1782
|
end
|
1778
1783
|
|
@@ -1822,7 +1827,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1822
1827
|
Gem::Specification.each do |spec|
|
1823
1828
|
deps = check_dev ? spec.dependencies : spec.runtime_dependencies
|
1824
1829
|
deps.each do |dep|
|
1825
|
-
next unless
|
1830
|
+
next unless satisfies_requirement?(dep)
|
1826
1831
|
sats = []
|
1827
1832
|
find_all_satisfiers(dep) do |sat|
|
1828
1833
|
sats << sat
|
@@ -1837,7 +1842,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1837
1842
|
# Returns all specs that matches this spec's runtime dependencies.
|
1838
1843
|
|
1839
1844
|
def dependent_specs
|
1840
|
-
runtime_dependencies.map
|
1845
|
+
runtime_dependencies.map(&:to_specs).flatten
|
1841
1846
|
end
|
1842
1847
|
|
1843
1848
|
##
|
@@ -1878,12 +1883,12 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1878
1883
|
coder.add "name", @name
|
1879
1884
|
coder.add "version", @version
|
1880
1885
|
platform = case @original_platform
|
1881
|
-
|
1882
|
-
|
1883
|
-
|
1884
|
-
|
1885
|
-
|
1886
|
-
|
1886
|
+
when nil, "" then
|
1887
|
+
"ruby"
|
1888
|
+
when String then
|
1889
|
+
@original_platform
|
1890
|
+
else
|
1891
|
+
@original_platform.to_s
|
1887
1892
|
end
|
1888
1893
|
coder.add "platform", platform
|
1889
1894
|
|
@@ -2006,7 +2011,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2006
2011
|
end
|
2007
2012
|
rubygems_deprecate :has_rdoc=
|
2008
2013
|
|
2009
|
-
|
2014
|
+
alias_method :has_rdoc?, :has_rdoc # :nodoc:
|
2010
2015
|
rubygems_deprecate :has_rdoc?
|
2011
2016
|
|
2012
2017
|
##
|
@@ -2017,7 +2022,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2017
2022
|
end
|
2018
2023
|
|
2019
2024
|
# :stopdoc:
|
2020
|
-
|
2025
|
+
alias_method :has_test_suite?, :has_unit_tests?
|
2021
2026
|
# :startdoc:
|
2022
2027
|
|
2023
2028
|
def hash # :nodoc:
|
@@ -2264,8 +2269,8 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2264
2269
|
attributes.unshift :name
|
2265
2270
|
|
2266
2271
|
attributes.each do |attr_name|
|
2267
|
-
current_value =
|
2268
|
-
current_value = current_value.sort if
|
2272
|
+
current_value = send attr_name
|
2273
|
+
current_value = current_value.sort if [:files, :test_files].include? attr_name
|
2269
2274
|
next unless current_value != default_value(attr_name) ||
|
2270
2275
|
self.class.required_attribute?(attr_name)
|
2271
2276
|
|
@@ -2289,7 +2294,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2289
2294
|
# that is already loaded (+other+)
|
2290
2295
|
|
2291
2296
|
def check_version_conflict(other) # :nodoc:
|
2292
|
-
return if
|
2297
|
+
return if version == other.version
|
2293
2298
|
|
2294
2299
|
# This gem is already loaded. If the currently loaded gem is not in the
|
2295
2300
|
# list of candidate gems, then we have a version conflict.
|
@@ -2297,7 +2302,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2297
2302
|
msg = "can't activate #{full_name}, already activated #{other.full_name}"
|
2298
2303
|
|
2299
2304
|
e = Gem::LoadError.new msg
|
2300
|
-
e.name =
|
2305
|
+
e.name = name
|
2301
2306
|
|
2302
2307
|
raise e
|
2303
2308
|
end
|
@@ -2389,7 +2394,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2389
2394
|
# True if this gem has the same attributes as +other+.
|
2390
2395
|
|
2391
2396
|
def same_attributes?(spec)
|
2392
|
-
@@attributes.all? {|name,
|
2397
|
+
@@attributes.all? {|name, _default| send(name) == spec.send(name) }
|
2393
2398
|
end
|
2394
2399
|
|
2395
2400
|
private :same_attributes?
|
@@ -2398,8 +2403,8 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2398
2403
|
# Checks if this specification meets the requirement of +dependency+.
|
2399
2404
|
|
2400
2405
|
def satisfies_requirement?(dependency)
|
2401
|
-
|
2402
|
-
|
2406
|
+
@name == dependency.name &&
|
2407
|
+
dependency.requirement.satisfied_by?(@version)
|
2403
2408
|
end
|
2404
2409
|
|
2405
2410
|
##
|
@@ -2526,7 +2531,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2526
2531
|
|
2527
2532
|
@@attributes.each do |attr_name|
|
2528
2533
|
next if handled.include? attr_name
|
2529
|
-
current_value =
|
2534
|
+
current_value = send(attr_name)
|
2530
2535
|
if current_value != default_value(attr_name) || self.class.required_attribute?(attr_name)
|
2531
2536
|
result << " s.#{attr_name} = #{ruby_code current_value}"
|
2532
2537
|
end
|
@@ -2609,10 +2614,9 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2609
2614
|
def traverse(trail = [], visited = {}, &block)
|
2610
2615
|
trail.push(self)
|
2611
2616
|
begin
|
2612
|
-
|
2613
|
-
next unless dep.runtime?
|
2617
|
+
runtime_dependencies.each do |dep|
|
2614
2618
|
dep.matching_specs(true).each do |dep_spec|
|
2615
|
-
next if visited.
|
2619
|
+
next if visited.key?(dep_spec)
|
2616
2620
|
visited[dep_spec] = true
|
2617
2621
|
trail.push(dep_spec)
|
2618
2622
|
begin
|
@@ -2670,22 +2674,13 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2670
2674
|
rubygems_deprecate :validate_permissions
|
2671
2675
|
|
2672
2676
|
##
|
2673
|
-
# Set the version to +version
|
2674
|
-
# required_rubygems_version if +version+ indicates it is a
|
2675
|
-
# prerelease.
|
2677
|
+
# Set the version to +version+.
|
2676
2678
|
|
2677
2679
|
def version=(version)
|
2678
2680
|
@version = Gem::Version.create(version)
|
2679
2681
|
return if @version.nil?
|
2680
2682
|
|
2681
|
-
# skip to set required_ruby_version when pre-released rubygems.
|
2682
|
-
# It caused to raise CircularDependencyError
|
2683
|
-
if @version.prerelease? && (@name.nil? || @name.strip != "rubygems")
|
2684
|
-
self.required_rubygems_version = "> 1.3.1"
|
2685
|
-
end
|
2686
2683
|
invalidate_memoized_attributes
|
2687
|
-
|
2688
|
-
return @version
|
2689
2684
|
end
|
2690
2685
|
|
2691
2686
|
def stubbed?
|
@@ -2697,9 +2692,9 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2697
2692
|
case ivar
|
2698
2693
|
when "date"
|
2699
2694
|
# Force Date to go through the extra coerce logic in date=
|
2700
|
-
self.date = val
|
2695
|
+
self.date = val
|
2701
2696
|
else
|
2702
|
-
instance_variable_set "@#{ivar}", val
|
2697
|
+
instance_variable_set "@#{ivar}", val
|
2703
2698
|
end
|
2704
2699
|
end
|
2705
2700
|
|
@@ -2716,11 +2711,11 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2716
2711
|
end
|
2717
2712
|
|
2718
2713
|
nil_attributes.each do |attribute|
|
2719
|
-
default =
|
2714
|
+
default = default_value attribute
|
2720
2715
|
|
2721
2716
|
value = case default
|
2722
|
-
|
2723
|
-
|
2717
|
+
when Time, Numeric, Symbol, true, false, nil then default
|
2718
|
+
else default.dup
|
2724
2719
|
end
|
2725
2720
|
|
2726
2721
|
instance_variable_set "@#{attribute}", value
|