diff options
author | Lamont Granquist <lamont@scriptkiddie.org> | 2015-02-05 19:39:36 -0800 |
---|---|---|
committer | Lamont Granquist <lamont@scriptkiddie.org> | 2015-02-05 19:39:36 -0800 |
commit | 738f8c273402a6be4956e3a11e7c30e49c70bde1 (patch) | |
tree | c60b6b3eb8927ed8be21072409e695b8bb8684d5 | |
parent | 2dd178e0929324514a4af28a3ccb51779a5b2d4b (diff) | |
parent | 689b88a0d5ad550abe55c6afb708f32b724d34fe (diff) | |
download | chef-738f8c273402a6be4956e3a11e7c30e49c70bde1.tar.gz |
Merge pull request #2869 from chef/lcg/array-name-deuglification
Lcg/array name deuglification
-rw-r--r-- | lib/chef/resource.rb | 17 | ||||
-rw-r--r-- | spec/unit/lwrp_spec.rb | 12 | ||||
-rw-r--r-- | spec/unit/provider/package/yum_spec.rb | 2 | ||||
-rw-r--r-- | spec/unit/provider/package_spec.rb | 2 | ||||
-rw-r--r-- | spec/unit/resource_spec.rb | 14 |
5 files changed, 31 insertions, 16 deletions
diff --git a/lib/chef/resource.rb b/lib/chef/resource.rb index 5a6f3ec037..ea220b6c70 100644 --- a/lib/chef/resource.rb +++ b/lib/chef/resource.rb @@ -91,7 +91,7 @@ class Chef # @param run_context The context of the Chef run. Corresponds to #run_context. # def initialize(name, run_context=nil) - @name = name + name(name) @run_context = run_context @noop = nil @before = nil @@ -133,13 +133,22 @@ class Chef # # This is also used in to_s to show the resource name, e.g. `execute[Vitruvius]`. # - # @param name [String] The name to set. + # This is also used for resource notifications and subscribes in the same manner. + # + # This will coerce any object into a string via #to_s. Arrays are a special case + # so that `package ["foo", "bar"]` becomes package[foo, bar] instead of the more + # awkward `package[["foo", "bar"]]` that #to_s would produce. + # + # @param name [Object] The name to set, typically a String or Array # @return [String] The name of this Resource. # def name(name=nil) if !name.nil? - raise ArgumentError, "name must be a string!" unless name.kind_of?(String) - @name = name + if name.is_a?(Array) + @name = name.join(', ') + else + @name = name.to_s + end end @name end diff --git a/spec/unit/lwrp_spec.rb b/spec/unit/lwrp_spec.rb index 64a2176e76..ec39174da6 100644 --- a/spec/unit/lwrp_spec.rb +++ b/spec/unit/lwrp_spec.rb @@ -341,8 +341,8 @@ describe "LWRP" do Chef::Runner.new(@run_context).converge expect(@run_context.resource_collection[0]).to eql(injector) - expect(@run_context.resource_collection[1].name).to eql(:prepared_thumbs) - expect(@run_context.resource_collection[2].name).to eql(:twiddled_thumbs) + expect(@run_context.resource_collection[1].name).to eql('prepared_thumbs') + expect(@run_context.resource_collection[2].name).to eql('twiddled_thumbs') expect(@run_context.resource_collection[3]).to eql(dummy) end @@ -365,12 +365,12 @@ describe "LWRP" do Chef::Runner.new(@run_context).converge expect(@run_context.resource_collection[0]).to eql(injector) - expect(@run_context.resource_collection[1].name).to eql(:prepared_thumbs) - expect(@run_context.resource_collection[2].name).to eql(:twiddled_thumbs) + expect(@run_context.resource_collection[1].name).to eql('prepared_thumbs') + expect(@run_context.resource_collection[2].name).to eql('twiddled_thumbs') expect(@run_context.resource_collection[3]).to eql(dummy) expect(@run_context.resource_collection[4]).to eql(injector2) - expect(@run_context.resource_collection[5].name).to eql(:prepared_eyes) - expect(@run_context.resource_collection[6].name).to eql(:dried_paint_watched) + expect(@run_context.resource_collection[5].name).to eql('prepared_eyes') + expect(@run_context.resource_collection[6].name).to eql('dried_paint_watched') end it "should properly handle a new_resource reference" do diff --git a/spec/unit/provider/package/yum_spec.rb b/spec/unit/provider/package/yum_spec.rb index 8b4c71ee0a..e5e32bc9c0 100644 --- a/spec/unit/provider/package/yum_spec.rb +++ b/spec/unit/provider/package/yum_spec.rb @@ -1888,7 +1888,7 @@ describe "Chef::Provider::Package::Yum - Multi" do describe "when loading the current system state" do it "should create a current resource with the name of the new_resource" do @provider.load_current_resource - expect(@provider.current_resource.name).to eq(['cups', 'vim']) + expect(@provider.current_resource.name).to eq('cups, vim') end it "should set the current resources package name to the new resources package name" do diff --git a/spec/unit/provider/package_spec.rb b/spec/unit/provider/package_spec.rb index 6a0cb695b0..1633d18f9d 100644 --- a/spec/unit/provider/package_spec.rb +++ b/spec/unit/provider/package_spec.rb @@ -539,7 +539,7 @@ describe "Chef::Provider::Package - Multi" do it "should upgrade the package if the current versions are not the candidate version" do @current_resource.version ['0.9', '6.1'] expect(@provider).to receive(:upgrade_package).with( - @new_resource.name, + @new_resource.package_name, @provider.candidate_version ).and_return(true) @provider.run_action(:upgrade) diff --git a/spec/unit/resource_spec.rb b/spec/unit/resource_spec.rb index 56c7401c92..8214021f65 100644 --- a/spec/unit/resource_spec.rb +++ b/spec/unit/resource_spec.rb @@ -194,12 +194,12 @@ describe Chef::Resource do expect(@resource.name).to eql("monkey") end - it "should not be valid without a name" do - expect { @resource.name false }.to raise_error(ArgumentError) + it "coerces arrays to names" do + expect(@resource.name ['a', 'b']).to eql('a, b') end - it "should always have a string for name" do - expect { @resource.name Hash.new }.to raise_error(ArgumentError) + it "should coerce objects to a string" do + expect(@resource.name Object.new).to be_a(String) end end @@ -258,6 +258,12 @@ describe Chef::Resource do expected_notification = Chef::Resource::Notification.new({:service => "apache"}, :restart, @resource) expect(@resource.delayed_notifications).to include(expected_notification) end + + it "notifies a resource with an array for its name via its prettified string name" do + @run_context.resource_collection << Chef::Resource::ZenMaster.new(["coffee", "tea"]) + @resource.notifies :reload, @run_context.resource_collection.find(:zen_master => "coffee, tea") + expect(@resource.delayed_notifications.detect{|e| e.resource.name == "coffee, tea" && e.action == :reload}).not_to be_nil + end end describe "subscribes" do |