module Wright::DSL

Includable Wright script DSL.

Contains resource methods for all registered resources.

@example

# define a new resource at runtime
class KitchenSink < Wright::Resource; end

# register the resource
Wright::DSL.register_resource KitchenSink

extend Wright::DSL

kitchen_sink "I don't do anything"

# resource methods accept blocks
kitchen_sink 'I am sooo useful' do |k|
  puts k.name
end
# output: I am sooo useful

# save resource for later use
a_sink_to_remember = kitchen_sink 'Me too, me too!'
a_sink_to_remember.class
# => KitchenSink

Public Class Methods

register_resource(resource_class) click to toggle source

Registers a class as a resource.

Creates a resource method in the DSL module. Uses the snake-cased class name as method name.

Typically resource_class is a subclass of {Resource}. It is initialized with the resource's name and the attribute hash as arguments.

@param resource_class [Class] the resource class @return [void]

# File lib/wright/dsl.rb, line 80
def self.register_resource(resource_class)
  method_name = Wright::Util.class_to_resource_name(resource_class)
  this_module = self
  define_method(method_name) do |name, args = {}, &block|
    this_module.yield_resource(resource_class, name, args, &block)
  end
end
yield_resource(resource_class, name, args) { |r| ... } click to toggle source

@api private Instantiates a resource and performs its default action.

Implicitly invoking a block from within another block does not work: blog.sidu.in/2007/11/ruby-blocks-gotchas.html

@param resource_class [Class] the resource class @param name [String] the name of the resource object @param args [Hash<Symbol, Object] the attribute hash of the resource

@yield [Resource] the resource @return [void]

# File lib/wright/dsl.rb, line 100
def self.yield_resource(resource_class, name, args)
  r = resource_class.new(name, args)
  yield(r) if block_given?
  r.run_action if r.respond_to?(:run_action)
  r
end

Public Instance Methods

util() click to toggle source

Supplies access to various useful helper methods. @return [Wright::DSL::Util] a utility helper

# File lib/wright/dsl.rb, line 65
def util
  Wright::DSL::Util.new
end