Module: Wright::DSL

Defined in:
lib/wright/dsl.rb

Overview

Includable Wright script DSL.

Contains resource methods for all registered resources.

Examples:

# 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

Class Method Summary collapse

Class Method Details

.register_resource(resource_class) ⇒ void

This method returns an undefined value.

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 as an argument.

Parameters:

  • resource_class

    the resource class



41
42
43
44
45
46
47
# File 'lib/wright/dsl.rb', line 41

def self.register_resource(resource_class)
  method_name = Util.class_to_resource_name(resource_class)
  this_module = self
  define_method(method_name) do |name, &block|
    this_module.yield_resource(resource_class, name, &block)
  end
end

.yield_resource(resource_class, name) {|Resource| ... } ⇒ void

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

This method returns an undefined value.

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

Yields:



57
58
59
60
61
62
# File 'lib/wright/dsl.rb', line 57

def self.yield_resource(resource_class, name)
  r = resource_class.new(name)
  yield(r) if block_given?
  r.run_action if r.respond_to?(:run_action)
  r
end