2.0.0 Released
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.