From 29554013c62ee754e426f7a63a38ed62e10a6f2b Mon Sep 17 00:00:00 2001 From: tyler-ball Date: Wed, 11 Feb 2015 07:51:07 -0800 Subject: Finishing tests for https://github.com/chef/chef/pull/2338, fixes https://github.com/chef/chef/issues/1974 --- lib/chef/knife/core/generic_presenter.rb | 7 +++++-- spec/unit/knife/core/ui_spec.rb | 12 ++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/lib/chef/knife/core/generic_presenter.rb b/lib/chef/knife/core/generic_presenter.rb index a1aeadb0f3..f3ea0f0d6c 100644 --- a/lib/chef/knife/core/generic_presenter.rb +++ b/lib/chef/knife/core/generic_presenter.rb @@ -178,10 +178,13 @@ class Chef nested_value_spec.split(".").each do |attr| if data.nil? nil # don't get no method error on nil - elsif data.respond_to?(attr.to_sym) - data = data.send(attr.to_sym) + # Must check :[] before attr because spec can include + # `keys` - want the key named `keys`, not a list of + # available keys. elsif data.respond_to?(:[]) data = data[attr] + elsif data.respond_to?(attr.to_sym) + data = data.send(attr.to_sym) else data = begin data.send(attr.to_sym) diff --git a/spec/unit/knife/core/ui_spec.rb b/spec/unit/knife/core/ui_spec.rb index 83fff4c082..ac42ad6dd6 100644 --- a/spec/unit/knife/core/ui_spec.rb +++ b/spec/unit/knife/core/ui_spec.rb @@ -356,6 +356,18 @@ EOM @ui.config[:attribute] = ["gi", "hi"] expect(@ui.format_for_display(input)).to eq({ "sample-data-bag-item" => { "gi" => "go", "hi"=> "ho" } }) end + + it "should handle attributes named the same as methods" do + input = { "keys" => "values", "hi" => "ho", "id" => "sample-data-bag-item" } + @ui.config[:attribute] = "keys" + expect(@ui.format_for_display(input)).to eq({ "sample-data-bag-item" => { "keys" => "values" } }) + end + + it "should handle nested attributes named the same as methods" do + input = { "keys" => {"keys" => "values"}, "hi" => "ho", "id" => "sample-data-bag-item" } + @ui.config[:attribute] = "keys.keys" + expect(@ui.format_for_display(input)).to eq({ "sample-data-bag-item" => { "keys.keys" => "values" } }) + end end describe "with --run-list passed" do -- cgit v1.2.1