summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordanielsdeleo <dan@opscode.com>2013-02-24 12:16:55 -0800
committerdanielsdeleo <dan@opscode.com>2013-02-27 11:12:15 -0800
commit06322ffb233dc608cc14b8b50e45a13cbddee17b (patch)
tree78a754ddd148e7a7aafa8895dbf7c56b4cc905ec
parente7320c43a9a3ba039ec86bf82b9a17cf7feec07e (diff)
downloadchef-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
-rw-r--r--lib/chef/provider/package/rubygems.rb29
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