Module: Wright::DSL
- Defined in:
- lib/wright/dsl.rb
Overview
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
Class Method Summary collapse
-
.register_resource(resource_class) ⇒ Object
Public: Register a class as a resource.
-
.yield_resource(resource_class, name) {|r| ... } ⇒ Object
Internal: Instantiate a resource_class object and perform its default action.
Class Method Details
.register_resource(resource_class) ⇒ Object
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.
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 = nil, &block| this_module.yield_resource(resource_class, name, &block) end end |
.yield_resource(resource_class, name) {|r| ... } ⇒ Object
Internal: Instantiate a resource_class object and perform its default action.
Implicitly invoking a block from within another block does not work: blog.sidu.in/2007/11/ruby-blocks-gotchas.html
Returns nothing.
56 57 58 59 60 61 |
# File 'lib/wright/dsl.rb', line 56 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 |