summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Burkholder <pburkholder@chef.io>2015-03-24 11:13:22 -0400
committerBryan McLellan <btm@chef.io>2015-03-27 13:35:42 -0700
commit312253ebfd88ac57b8433c2f859690068fe7cb14 (patch)
treef19a8014978274dcc0f09da41197d3d463b8707a
parent36f040b73d99f0b5aae5bdab716ffa1aac060266 (diff)
downloadchef-312253ebfd88ac57b8433c2f859690068fe7cb14.tar.gz
Clearing sources works for string options
-rw-r--r--lib/chef/provider/package/rubygems.rb5
-rw-r--r--lib/chef/resource/gem_package.rb5
-rw-r--r--spec/unit/provider/package/rubygems_spec.rb10
3 files changed, 18 insertions, 2 deletions
diff --git a/lib/chef/provider/package/rubygems.rb b/lib/chef/provider/package/rubygems.rb
index d152db1926..c53aa8934a 100644
--- a/lib/chef/provider/package/rubygems.rb
+++ b/lib/chef/provider/package/rubygems.rb
@@ -538,8 +538,9 @@ class Chef
def install_via_gem_command(name, version)
if @new_resource.source =~ /\.gem$/i
name = @new_resource.source
-# elsif source_is_remote?
-# src = @new_resource.source && " --source=#{@new_resource.source}"
+ elsif @new_resource.clear_sources
+ src = ' --clear-sources'
+ src << (@new_resource.source && " --source=#{@new_resource.source}" || '')
else
src = @new_resource.source && " --source=#{@new_resource.source} --source=https://rubygems.org"
end
diff --git a/lib/chef/resource/gem_package.rb b/lib/chef/resource/gem_package.rb
index 631aa13f56..0e838ca040 100644
--- a/lib/chef/resource/gem_package.rb
+++ b/lib/chef/resource/gem_package.rb
@@ -27,12 +27,17 @@ class Chef
def initialize(name, run_context=nil)
super
@resource_name = :gem_package
+ @clear_sources = false
end
def source(arg=nil)
set_or_return(:source, arg, :kind_of => [ String, Array ])
end
+ def clear_sources(arg=nil)
+ set_or_return(:clear_sources, arg, :kind_of => [ TrueClass, FalseClass ])
+ end
+
# Sets a custom gem_binary to run for gem commands.
def gem_binary(gem_cmd=nil)
set_or_return(:gem_binary,gem_cmd,:kind_of => [ String ])
diff --git a/spec/unit/provider/package/rubygems_spec.rb b/spec/unit/provider/package/rubygems_spec.rb
index b2ec482541..380572499c 100644
--- a/spec/unit/provider/package/rubygems_spec.rb
+++ b/spec/unit/provider/package/rubygems_spec.rb
@@ -556,6 +556,16 @@ describe Chef::Provider::Package::Rubygems do
expect(@new_resource).to be_updated_by_last_action
end
+ it "installs the gem with cleared sources and explict source when specified" do
+ @new_resource.gem_binary('/foo/bar')
+ @new_resource.source('http://mirror.ops.rhcloud.com/mirror/ruby')
+ @new_resource.clear_sources(true)
+ expected ="/foo/bar install rspec-core -q --no-rdoc --no-ri -v \"#{@spec_version}\" --clear-sources --source=#{@new_resource.source}"
+ expect(@provider).to receive(:shell_out!).with(expected, :env => nil)
+ @provider.run_action(:install)
+ expect(@new_resource).to be_updated_by_last_action
+ end
+
context "when no version is given" do
let(:target_version) { nil }