Skip to content

2.0.0 Released

Eric Hodel

RubyGems 2.0 includes several new features and many breaking changes. Some of these changes will cause existing software to break. These changes are a result of improvements to the internals of RubyGems that make it more maintainable and improve APIs for RubyGems users.

If you are using bundler be sure to install a 1.3.0.prerelease version or newer. Older versions of bundler will not work with RubyGems 2.0.

Changes since RubyGems 1.8.25 (including past pre-releases):

Breaking changes:

  • Deprecated Gem.unresolved_deps in favor of Gem::Specification.unresolved_deps
  • Merged Gem::Builder into Gem::Package. Use Gem::Package.build(spec) instead of Gem::Builder.new(spec).build
  • Merged Gem::Format into Gem::Package. Use Gem::Package.new instead of Gem::Format.from_file_by_path
  • Moved Gem::OldFormat to Gem::Package::Old. Gem::Package will automatically detect old gems for you, so there is no need to refer to it.
  • Removed Gem::DocManager, replaced by Gem::RDoc and done_installing hook
  • Removed Gem::Package::TarInput in favor of Gem::Package
  • Removed Gem::Package::TarOutput in favor of Gem::Package
  • Removed Gem::RemoteFetcher#open_uri_or_path. (steveklabnik)
  • Removed Gem::SSL in favor of using OpenSSL directly
  • Removed Gem.loaded_path
  • Removed RSS generation from the gem indexer
  • Removed benchmark option from .gemrc
  • Removed broken YAML gemspec support in gem build
  • Removed support for Ruby 1.9.1
  • Removed many deprecated methods

Major enhancements:

  • Improved support for default gems shipping with ruby 2.0.0+
  • A gem can have arbitrary metadata through Gem::Specification#metadata
  • gem search now defaults to –remote and is anchored like gem list. Fixes #166
  • Added –document to replace –rdoc and –ri. Use –no-document to disable documentation, –document=rdoc to only generate rdoc.
  • Only ri-format documentation is generated by default.
  • gem server uses RDoc::Servlet from RDoc 4.0 to generate HTML documentation.
  • Add ability to install gems directly from a compatible gemdep file (Gemfile, Isolate, gem.deps.rb) gem install --file path
  • Add ability to load gem activation information from a gemdeps file (Gemfile, Isolate, gem.deps.rb). Set RUBYGEMS_GEMDEPS=path to have it loaded. Use - as the path to autodetect (current and parent directories are searched).

Minor enhancements:

  • Added gem check --doctor to clean up after failed uninstallation. Bug #419 by Erik Hollensbe
  • RubyGems no longer defaults to uninstalling gems if a dependency would be broken. Now you must manually say “yes”. Pull Request #406 by Shannon Skipper.
  • Gem::DependencyInstaller now passes build_args down to the installer. Pull Request #412 by Sam Rawlins.
  • Added a cmake builder. Pull request #265 by Allan Espinosa.
  • Removed rubyforge page from gem list output
  • Added –only-executables option to gem pristine. Fixes #326
  • Added -I flag for ‘gem query’ to exclude installed items
  • Added Gem.install(name, version=default) for interactive sessions
  • Added Gem::FilePermissionError#directory
  • Added Gem::rubygems_version which is like Gem::ruby_version
  • Added RUBYGEMS_HOST documentation to gem env
  • Added a post_installs hook that runs after Gem::DependencyInstaller finishes installing a set of gems
  • Added a usage method for Gem::Commands::OwnerCommand. (ffmike)
  • Added an optional type parameter to Gem::Specification#doc_dir.
  • Added announcements url and clarified how to file tickets
  • Added guidance for how to use rdoc and ri in setup command. (jjb)
  • Attempting to install multiple gems with –version is now an error. You can specify per-gem versions like rake:0.9.5
  • Clarified Gem::CommandManager example code to avoid multi load problems. (baroquebobcat)
  • Corrupt or bad cached specs are now re-downloaded. (cookrn)
  • Extension build arguments are saved from install and reused for pristine
  • If the OS allows it, documentation is built in a forked background process. (alexch)
  • Imported gem yank from the gemcutter gem. Fixes #177, #343
  • Packaged gems now contain and verify SHA1 checksums
  • Removed commas from gem update summary so you can paste it back to cleanup. (amatsuda)
  • RubyGems will now warn when building gems with prerelease dependencies. Fixes #255
  • The RUBYGEMS_HOST environment variable is used to determine appropriate API key for pushing or yanking gems
  • Uninstall is now performed in reverse topological order.
  • Users are told what to type when they try to uninstall a gem outside GEM_HOME
  • When building gems with non-world-readable files a warning is shown.

Bug fixes:

  • Gem.refresh now maintains the active gem list. Clearing the list would cause double-loads which would cause other bugs. Pull Request #427 by Jeremy Evans
  • RubyGems now refuses to read the gem push credentials file if it has insecure permissions. Pull Request #438 by Shannon Skipper
  • RubyGems now requires a local gem name to end in ‘.gem’. Issue #407 by Santiago Pastorino.
  • Do not allow old-format gems to be installed with a security policy that verifies data.
  • Gem installation will fail if RubyGems cannot load the specification from the gem. Bug #419 by Erik Hollensbe
  • RubyGems tests now run in FIPS mode. Issue #365 by Vít Ondruch
  • Only update the spec cache when we have permission. Ruby Bug #7509
  • gem install now ignores directories and non .gem files that match the gem to install. Bug #407 by Santiago Pastorino.
  • Added PID to setup bin_file while installing RubyGems to protect against errors. Fixes #328 by ConradIrwin
  • Added missing require in Gem::Uninstaller when format_executable is set. (sakuro)
  • Exact gem command name matches are now chosen even if a longer command overlaps the exact name
  • Fixed Gem.loaded_path? with a Pathname instance. (mattetti)
  • Fixed Gem::Dependency.new mismatch with rubygems.org checks
  • Fixed SecurityError in Gem::Specification.load when $SAFE=1. (ged)
  • Fixed SystemStackError with “gem list -r -a” on 1.9 (cldwalker)
  • Fixed gem owners command so that exceptions don’t stop the rest of the command from completing
  • Fixed gem unpack uninstalled_gem default version picker.
  • Fixed defunct rubyforge urls in gem command line help
  • Fixed documentation for the various hooks collections
  • Fixed documentation generation on setup when the gem directory does not exist. Fixes #253
  • Fixed documentation to reflect where defaults overrides are loaded from. (ferrous26)
  • Fixed editing of a Makefile with 8-bit characters. Fixes #181
  • Fixed gem loading issue caused by dependencies not resolving.
  • Fixed independent testing of test_gem_package_tar_output. Ruby Bug #4686 by Shota Fukumori
  • Fixed typo in uninstall message. (sandal)
  • Gem::Requirement#<=> returns nil on non-requirement arg.
  • Gem::Requirement.satisfied_by? raises ArgumentError if given a non-version argument
  • Gem::Version#initialize no longer modifies its parameter. (miaout17)
  • Group-writable permissions are now allowed for gem repositories. (ctcherry)
  • Memoized values in Gem::Specification are now reset the version or platform changes. Fixes #78
  • More specific errors are raised for bad requirements. (arsduo)
  • Removed reference to ‘sources’ gem in documentation
  • Removed unused block arguments to avoid creating Proc objects. (k-tsj)
  • RubyGems now asks before overwriting executable wrappers. Ruby Bug #1800
  • The bindir is now created with mkdir_p during install. (voxik)
  • URI scheme matching is no longer case-sensitive. Fixes #322
  • ext/builder now checks $MAKE as well as $make (okkez)

Changes since RubyGems 2.0.0.rc.2:

Bug fixes:

  • Gem.gzip and Gem.gunzip now return strings with BINARY encoding. Issue #450 by Jeremy Kemper
  • Fixed placement of executables with –user-install. Ruby bug #7779 by Jon Forums.
  • Fixed gem update with –user-install. Ruby bug #7779 by Jon Forums.
  • Fixed test_initialize_user_install for windows. Ruby bug #7885 by Luis Lavena.
  • Create extension destination directory before building extensions. Ruby Bug #7897 and patch by Kenta Murata.
  • Fixed verification of gems at LowSecurity due to missing signature. Thanks to André Arko.
HTTPS · blog.rubygems.org
← Home