# class Chef::Resource::LWRPBase

## Chef::Resource::LWRPBase¶ ↑

Base class for LWRP resources. Adds DSL sugar on top of Chef::Resource, so attributes, default action, etc. can be defined with pleasing syntax.

### Constants

NULL_ARG

### Public Class Methods

actions(*action_names) click to toggle source

Adds `action_names` to the list of valid actions for this resource.

    # File lib/chef/resource/lwrp_base.rb, line 100
    def self.actions(*action_names)
      valid_actions.push(*action_names)
    end

attribute(attr_name, validation_opts={}) click to toggle source

Define an attribute on this resource, including optional validation parameters.

    # File lib/chef/resource/lwrp_base.rb, line 75
          def self.attribute(attr_name, validation_opts={})
            # Ruby 1.8 doesn't support default arguments to blocks, but we have to
            # use define_method with a block to capture +validation_opts+.
            # Workaround this by defining two methods :(
            class_eval("          def #{attr_name}(arg=nil)
                _set_or_return_#{attr_name}(arg)
              end
    ", __FILE__, __LINE__)

            define_method("_set_or_return_#{attr_name.to_s}".to_sym) do |arg|
              set_or_return(attr_name.to_sym, arg, validation_opts)
            end
          end

build_from_file(cookbook_name, filename, run_context) click to toggle source

Evaluates the LWRP resource file and instantiates a new Resource class.

    # File lib/chef/resource/lwrp_base.rb, line 37
    def self.build_from_file(cookbook_name, filename, run_context)
      rname = filename_to_qualified_string(cookbook_name, filename)

      # Add log entry if we override an existing light-weight resource.
      class_name = convert_to_class_name(rname)
      if Resource.strict_const_defined?(class_name)
        old_class = Resource.send(:remove_const, class_name)
        # CHEF-3432 -- Chef::Resource keeps a list of subclasses; need to
        # remove old ones from the list when replacing.
        resource_classes.delete(old_class)
        Chef::Log.info("#{class_name} light-weight resource already initialized -- overriding!")
      end

      resource_class = Class.new(self)

      resource_class.resource_name = rname
      resource_class.run_context = run_context
      resource_class.class_from_file(filename)

      Chef::Resource.const_set(class_name, resource_class)
      Chef::Log.debug("Loaded contents of #{filename} into a resource named #{rname} defined in Chef::Resource::#{class_name}")

      resource_class
    end

default_action(action_name=NULL_ARG) click to toggle source

Sets the default action

    # File lib/chef/resource/lwrp_base.rb, line 91
    def self.default_action(action_name=NULL_ARG)
      unless action_name.equal?(NULL_ARG)
        valid_actions.push(action_name)
        @default_action = action_name
      end
      @default_action
    end

new(name, run_context=nil) click to toggle source

Default initializer. Sets the default action and allowed actions.

Calls superclass method Chef::Resource.new

    # File lib/chef/resource/lwrp_base.rb, line 123
    def initialize(name, run_context=nil)
      super(name, run_context)
      @resource_name = self.class.resource_name.to_sym
      @action = self.class.default_action
      allowed_actions.push(self.class.valid_actions).flatten!
    end

node() click to toggle source

    # File lib/chef/resource/lwrp_base.rb, line 118
    def self.node
      run_context.node
    end

resource_name() click to toggle source

Returns the resource snake_case name

    # File lib/chef/resource/lwrp_base.rb, line 69
    def self.resource_name
      @resource_name
    end

resource_name=(resource_name) click to toggle source

Set the resource snake_case name. Should only be called via build_from_file.

    # File lib/chef/resource/lwrp_base.rb, line 64
    def self.resource_name=(resource_name)
      @resource_name = resource_name
    end

run_context() click to toggle source

    # File lib/chef/resource/lwrp_base.rb, line 114
    def self.run_context
      @run_context
    end

run_context=(run_context) click to toggle source

Set the run context on the class. Used to provide access to the node during class definition.

    # File lib/chef/resource/lwrp_base.rb, line 110
    def self.run_context=(run_context)
      @run_context = run_context
    end

valid_actions() click to toggle source

    # File lib/chef/resource/lwrp_base.rb, line 104
    def self.valid_actions
      @valid_actions ||= []
    end