Module: Poise::Helpers::ResourceName
- Included in:
- ChefspecMatchers, Resource
- Defined in:
- lib/poise/helpers/resource_name.rb
Overview
A resource mixin to automatically set @resource_name.
Class Method Summary collapse
-
.provides(name)
Set the DSL name for the the resource class.
-
.resource_name(auto = true) ⇒ Symbol
Retreive the DSL name for the resource class.
Instance Method Summary collapse
Class Method Details
.provides(name)
This method returns an undefined value.
Set the DSL name for the the resource class.
54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/poise/helpers/resource_name.rb', line 54 def provides(name) # Patch self.constantize so this can cope with anonymous classes. # This does require that the anonymous class define self.name though. if self.name && respond_to?(:constantize) old_constantize = instance_method(:constantize) define_singleton_method(:constantize) do |const_name| ( const_name == self.name ) ? self : old_constantize.bind(self).call(const_name) end end # Store the name for later. @provides_name = name # Call the original if present. The defined? is for old Chef. super if defined?(super) end |
.resource_name(auto = true) ⇒ Symbol
Retreive the DSL name for the resource class. If not set explicitly via provides this will try to auto-detect based on the class name.
74 75 76 77 78 79 80 81 |
# File 'lib/poise/helpers/resource_name.rb', line 74 def resource_name(auto=true) return @provides_name if @provides_name @provides_name || if name && name.start_with?('Chef::Resource') Chef::Mixin::ConvertToClassName.convert_to_snake_case(name, 'Chef::Resource').to_sym elsif name Chef::Mixin::ConvertToClassName.convert_to_snake_case(name.split('::').last).to_sym end end |
Instance Method Details
#initialize(*args) ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/poise/helpers/resource_name.rb', line 31 def initialize(*args) super # If provides() was explicitly set, unconditionally set @resource_name. # This helps when subclassing core Chef resources which set it # themselves in #initialize. if self.class.resource_name(false) @resource_name = self.class.resource_name else @resource_name ||= self.class.resource_name end end |