summaryrefslogtreecommitdiff
path: root/lib/chef/property.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/chef/property.rb')
-rw-r--r--lib/chef/property.rb20
1 files changed, 15 insertions, 5 deletions
diff --git a/lib/chef/property.rb b/lib/chef/property.rb
index 34fde05020..93e75e8810 100644
--- a/lib/chef/property.rb
+++ b/lib/chef/property.rb
@@ -128,7 +128,7 @@ class Chef
if options.key?(:name_attribute)
# If we have both name_attribute and name_property and they differ, raise an error
if options.key?(:name_property)
- raise ArgumentError, "name_attribute and name_property are functionally identical and both cannot be specified on a property at once. Use just one on property #{self}"
+ raise ArgumentError, "name_attribute and name_property are functionally identical and both cannot be specified on a property at once. Use just one on property #{self} of resource #{resource_name}"
end
# replace name_property with name_attribute in place
@@ -137,7 +137,7 @@ class Chef
end
if options.key?(:default) && options.key?(:name_property)
- raise ArgumentError, "A property cannot be both a name_property/name_attribute and have a default value. Use one or the other on property #{self}"
+ raise ArgumentError, "A property cannot be both a name_property/name_attribute and have a default value. Use one or the other on property #{self} of resource #{resource_name}"
end
# Recursively freeze the default if it isn't a lazy value.
@@ -406,7 +406,8 @@ class Chef
end
if value.nil? && required?
- raise Chef::Exceptions::ValidationFailed, "#{name} is a required property"
+ resource_str = resource_name ? " of the #{resource_name} resource" : ""
+ raise Chef::Exceptions::ValidationFailed, "#{name} is a required property#{resource_str}"
else
value
end
@@ -435,7 +436,8 @@ class Chef
end
if value.nil? && required?
- raise Chef::Exceptions::ValidationFailed, "#{name} is a required property"
+ resource_str = resource_name ? " of the #{resource_name} resource" : ""
+ raise Chef::Exceptions::ValidationFailed, "#{name} is a required property#{resource_str}"
else
value
end
@@ -546,6 +548,15 @@ class Chef
self.class.new(**options.merge(modified_options))
end
+ # Helper class for safely requesting a resource_name.
+ #
+ # @api private
+ def resource_name
+ if declared_in
+ declared_in.respond_to?(:resource_name) ? declared_in.resource_name : declared_in
+ end
+ end
+
#
# Emit the DSL for this property into the resource class (`declared_in`).
#
@@ -562,7 +573,6 @@ class Chef
# Object#hash method on the resource, and overriding that with a property will cause
# very confusing results.
if property_redefines_method?
- resource_name = declared_in.respond_to?(:resource_name) ? declared_in.resource_name : declared_in
raise ArgumentError, "Property `#{name}` of resource `#{resource_name}` overwrites an existing method. A different name should be used for this property."
end