diff options
author | danielsdeleo <dan@opscode.com> | 2013-02-24 12:16:55 -0800 |
---|---|---|
committer | danielsdeleo <dan@opscode.com> | 2013-02-27 11:12:15 -0800 |
commit | 06322ffb233dc608cc14b8b50e45a13cbddee17b (patch) | |
tree | 78a754ddd148e7a7aafa8895dbf7c56b4cc905ec /lib/chef/provider/package/rubygems.rb | |
parent | e7320c43a9a3ba039ec86bf82b9a17cf7feec07e (diff) | |
download | chef-06322ffb233dc608cc14b8b50e45a13cbddee17b.tar.gz |
[CHEF-3933] use rubygems 2.0 files/classes/methods
* rubygems/format file removed
* Gem::Package replaces functionality in Gem::Format
* Gem.sources returns a SourceList which must be coerced to array
Diffstat (limited to 'lib/chef/provider/package/rubygems.rb')
-rw-r--r-- | lib/chef/provider/package/rubygems.rb | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/lib/chef/provider/package/rubygems.rb b/lib/chef/provider/package/rubygems.rb index e60d73ab62..2a778fdb14 100644 --- a/lib/chef/provider/package/rubygems.rb +++ b/lib/chef/provider/package/rubygems.rb @@ -31,7 +31,14 @@ require 'rubygems/version' require 'rubygems/dependency' require 'rubygems/spec_fetcher' require 'rubygems/platform' -require 'rubygems/format' + +# Compatibility note: Rubygems 2.0 removes rubygems/format in favor of +# rubygems/package. +begin + require 'rubygems/format' +rescue LoadError + require 'rubygems/package' +end require 'rubygems/dependency_installer' require 'rubygems/uninstaller' require 'rubygems/specification' @@ -106,6 +113,22 @@ class Chef end ## + # Extracts the gemspec from a (on-disk) gem package. + # === Returns + # Gem::Specification + # + #-- + # Compatibility note: Rubygems 1.x uses Gem::Format, 2.0 moved this + # code into Gem::Package. + def spec_from_file(file) + if defined?(Gem::Format) + Gem::Format.from_file_by_path(source).spec + else + Gem::Package.new(file).spec + end + end + + ## # Determines the candidate version for a gem from a .gem file on disk # and checks if it matches the version contraints in +gem_dependency+ # === Returns @@ -114,7 +137,7 @@ class Chef # nil returns nil if the gem on disk doesn't match the # version constraints for +gem_dependency+ def candidate_version_from_file(gem_dependency, source) - spec = Gem::Format.from_file_by_path(source).spec + spec = spec_from_file(source) if spec.satisfies_requirement?(gem_dependency) logger.debug {"#{@new_resource} found candidate gem version #{spec.version} from local gem package #{source}"} spec.version @@ -152,7 +175,7 @@ class Chef logger.debug { "#{@new_resource} found gem #{spec.name} version #{version} for platform #{spec.platform} from #{spec_with_source[1]}" } version else - source_list = sources.compact.empty? ? "[#{Gem.sources.join(', ')}]" : "[#{sources.join(', ')}]" + source_list = sources.compact.empty? ? "[#{Gem.sources.to_a.join(', ')}]" : "[#{sources.join(', ')}]" logger.warn { "#{@new_resource} failed to find gem #{gem_dependency} from #{source_list}" } nil end |