module Poise::Helpers::ResourceName::ClassMethods

@!classmethods

Public Instance Methods

dsl_name() click to toggle source

Used by Resource#to_text to find the human name for the resource.

@api private

# File lib/poise/helpers/resource_name.rb, line 94
def dsl_name
  resource_name.to_s
end
included(klass) click to toggle source
Calls superclass method
# File lib/poise/helpers/resource_name.rb, line 98
def included(klass)
  super
  klass.extend(ClassMethods)
end
provides(name, *args, &block) click to toggle source

Set the DSL name for the the resource class.

@param name [Symbol] Name of the resource. @return [void] @example

class MyResource < Chef::Resource
  include Poise::Resource::ResourceName
  provides(:my_resource)
end
Calls superclass method
# File lib/poise/helpers/resource_name.rb, line 54
def provides(name, *args, &block)
  # 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(name, *args, &block) if defined?(super)
end
resource_name(auto=true) click to toggle source

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.

@param auto [Boolean] Try to auto-detect based on class name. @return [Symbol]

Calls superclass method
# File lib/poise/helpers/resource_name.rb, line 74
def resource_name(auto=true)
  # In 12.4+ we need to proxy through the super class for setting.
  return super(auto) if defined?(super) && (auto.is_a?(Symbol) || auto.is_a?(String))
  return @provides_name unless auto
  @provides_name || if name
    mode = if name.start_with?('Chef::Resource')
      [name, 'Chef::Resource']
    else
      [name.split('::').last]
    end
    Chef::Mixin::ConvertToClassName.convert_to_snake_case(*mode).to_sym
  elsif defined?(super)
    # No name on 12.4+ probably means this is an LWRP, use super().
    super()
  end
end