summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Keiser <john@johnkeiser.com>2015-06-30 14:12:29 -0600
committerJohn Keiser <john@johnkeiser.com>2015-07-03 13:10:23 -0600
commit901f122c5a906b8f64e8ed1919674ffe9d839bf0 (patch)
treed0003f285b5058440e1c6216612b15256aaff6d9
parent88e90f48952d0776b2d2b5f641c3d1b08c1376bb (diff)
downloadchef-901f122c5a906b8f64e8ed1919674ffe9d839bf0.tar.gz
Bring set_or_return behavior back in line with what it used to be
-rw-r--r--lib/chef/mixin/params_validate.rb25
-rw-r--r--lib/chef/property.rb13
-rw-r--r--spec/unit/mixin/params_validate_spec.rb2
3 files changed, 26 insertions, 14 deletions
diff --git a/lib/chef/mixin/params_validate.rb b/lib/chef/mixin/params_validate.rb
index 1f335f6722..322caea474 100644
--- a/lib/chef/mixin/params_validate.rb
+++ b/lib/chef/mixin/params_validate.rb
@@ -119,7 +119,7 @@ class Chef
end
def set_or_return(symbol, value, validation)
- property = Property::NonDeprecatedNilGetter.new(name: symbol, **validation)
+ property = SetOrReturnProperty.new(name: symbol, **validation)
property.call(self, value)
end
@@ -441,6 +441,29 @@ class Chef
opts[key.to_sym] = instance_exec(opts[key], &coercer)
end
end
+
+ # Used by #set_or_return to avoid emitting a deprecation warning for
+ # "value nil" and to keep default stickiness working exactly the same
+ # @api private
+ class SetOrReturnProperty < Chef::Property
+ def get(resource)
+ value = super
+ # All values are sticky, frozen or not
+ if !is_set?(resource)
+ set_value(resource, value)
+ end
+ value
+ end
+
+ def call(resource, value=NOT_PASSED)
+ # setting to nil does a get
+ if value.nil? && !explicitly_accepts_nil?(resource)
+ get(resource)
+ else
+ super
+ end
+ end
+ end
end
end
end
diff --git a/lib/chef/property.rb b/lib/chef/property.rb
index 2eeec87f75..251789f49f 100644
--- a/lib/chef/property.rb
+++ b/lib/chef/property.rb
@@ -500,18 +500,5 @@ class Chef
end
value
end
-
- # Used by #set_or_return to avoid emitting a deprecation warning for
- # "value nil"
- # @api private
- class NonDeprecatedNilGetter < Property
- def call(resource, value=NOT_PASSED)
- if value.nil? && !explicitly_accepts_nil?(resource)
- get(resource)
- else
- super
- end
- end
- end
end
end
diff --git a/spec/unit/mixin/params_validate_spec.rb b/spec/unit/mixin/params_validate_spec.rb
index 85e1c1abab..2a38972f05 100644
--- a/spec/unit/mixin/params_validate_spec.rb
+++ b/spec/unit/mixin/params_validate_spec.rb
@@ -21,6 +21,8 @@ require 'spec_helper'
class TinyClass
include Chef::Mixin::ParamsValidate
+ attr_reader :name
+
def music(is_good=true)
is_good
end