diff options
author | John Keiser <john@johnkeiser.com> | 2015-09-22 22:39:41 -0700 |
---|---|---|
committer | John Keiser <john@johnkeiser.com> | 2015-09-22 22:50:28 -0700 |
commit | 71fc5c5650f8bd3ec819087d6a5ca7f4eaeb1158 (patch) | |
tree | 226bda12feeb960b147177a5150d1efee731bbc0 | |
parent | d8f7ca4d08f00db96fbf1e98a7f1ed763c7bab01 (diff) | |
download | chef-71fc5c5650f8bd3ec819087d6a5ca7f4eaeb1158.tar.gz |
Add deprecation warning for properties that specify default and name_propertyjk/default-ignoring
-rw-r--r-- | lib/chef/property.rb | 16 | ||||
-rw-r--r-- | lib/chef/resource.rb | 2 | ||||
-rw-r--r-- | spec/unit/property_spec.rb | 25 |
3 files changed, 30 insertions, 13 deletions
diff --git a/lib/chef/property.rb b/lib/chef/property.rb index 5b6a969d5f..7f42616bdd 100644 --- a/lib/chef/property.rb +++ b/lib/chef/property.rb @@ -86,22 +86,24 @@ class Chef # def initialize(**options) options.each { |k,v| options[k.to_sym] = v if k.is_a?(String) } + # Only pick the first of :default, :name_property and :name_attribute if # more than one is specified. - found_default = false + found_defaults = [] options.reject! do |k,v| if [ :name_property, :name_attribute, :default ].include?(k) - if found_default - true - else - found_default = true - false - end + found_defaults << k + # Reject all but the first default key you find + found_defaults.size > 1 else false end end + if found_defaults.size > 1 + Chef::Log.deprecation("Cannot specify keys #{found_defaults.join(", ")} together on property #{options[:name]}--only the first one (#{found_defaults[0]}) will be obeyed. Please pick one.", caller(5..5)[0]) + end options[:name_property] = options.delete(:name_attribute) if options.has_key?(:name_attribute) && !options.has_key?(:name_property) + @options = options options[:name] = options[:name].to_sym if options[:name] diff --git a/lib/chef/resource.rb b/lib/chef/resource.rb index 6c2f91ed8b..9e40fdccfd 100644 --- a/lib/chef/resource.rb +++ b/lib/chef/resource.rb @@ -782,6 +782,8 @@ class Chef def self.property(name, type=NOT_PASSED, **options) name = name.to_sym + options.each { |k,v| options[k.to_sym] = v if k.is_a?(String) } + options[:instance_variable_name] = :"@#{name}" if !options.has_key?(:instance_variable_name) options.merge!(name: name, declared_in: self) diff --git a/spec/unit/property_spec.rb b/spec/unit/property_spec.rb index 533f0f4e4d..369c065aaa 100644 --- a/spec/unit/property_spec.rb +++ b/spec/unit/property_spec.rb @@ -946,14 +946,27 @@ describe "Chef::Resource.property" do expect(resource.x).to eq 'blah' end end - with_property ":x, default: 10, #{name}: true" do - it "chooses default over #{name}" do - expect(resource.x).to eq 10 + context "default ordering deprecation warnings" do + it "emits a deprecation warning for property :x, default: 10, #{name}: true" do + expect { resource_class.property :x, :default => 10, name.to_sym => true }.to raise_error Chef::Exceptions::DeprecatedFeatureError, + /Cannot specify keys default, #{name} together on property x--only the first one \(default\) will be obeyed. Please pick one./ + end + it "emits a deprecation warning for property :x, #{name}: true, default: 10" do + expect { resource_class.property :x, name.to_sym => true, :default => 10 }.to raise_error Chef::Exceptions::DeprecatedFeatureError, + /Cannot specify keys #{name}, default together on property x--only the first one \(#{name}\) will be obeyed. Please pick one./ end end - with_property ":x, #{name}: true, default: 10" do - it "chooses #{name} over default" do - expect(resource.x).to eq 'blah' + context "default ordering" do + before { Chef::Config[:treat_deprecation_warnings_as_errors] = false } + with_property ":x, default: 10, #{name}: true" do + it "chooses default over #{name}" do + expect(resource.x).to eq 10 + end + end + with_property ":x, #{name}: true, default: 10" do + it "chooses #{name} over default" do + expect(resource.x).to eq 'blah' + end end end with_property ":x, #{name}: true, required: true" do |