Sha256: ee0d116616bef08b4713969fcda8009ce12b492aba01a4a5aa5cef57eb0b2d45

Contents?: true

Size: 1.79 KB

Versions: 2

Compression:

Stored size: 1.79 KB

Contents

require 'wright/util'

module Wright
  # Public: 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
  module DSL
    # Public: Register a class as a resource.
    #
    # Creates a resource method in the DSL module. Uses the
    # snake-cased class name as method name.
    #
    # resource_class - The resource class. Usually a subclass of
    #                  Wright::Resource. Will be initialized with the
    #                  resource's name as an argument.
    #
    # Returns nothing.
    def self.register_resource(resource_class)
      method_name = Util.class_to_resource_name(resource_class)
      this_module = self
      define_method(method_name) do |name = nil, &block|
        this_module.yield_resource(resource_class, name, &block)
      end
    end

    # Internal: Instantiate a resource_class object and perform its
    # default action.
    #
    # Implicitly invoking a block from within another block does not
    # work: http://blog.sidu.in/2007/11/ruby-blocks-gotchas.html
    #
    # Returns nothing.
    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
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
wright-0.1.1 lib/wright/dsl.rb
wright-0.1.0 lib/wright/dsl.rb