diff options
Diffstat (limited to 'lib/dsl.rb')
| -rw-r--r-- | lib/dsl.rb | 21 |
1 files changed, 21 insertions, 0 deletions
@@ -46,6 +46,27 @@ module RCM @scheduled << @@objs[obj.id] = obj end + + private + + # Shared helper for all file-system keyword registrations. + # Returns the keyword symbol when called without a path (used by the + # Chained DSL to identify resource types without creating an object). + # Otherwise guards on @conds_met, instantiates klass, lets the caller + # configure the object, registers it, and returns it. + # + # The block is always yielded — callers that accept an optional DSL + # block must guard for nil themselves inside the closure, e.g. + # register_keyword(Touch, :touch, path) { |t| t.instance_eval(&block) if block } + def register_keyword(klass, name, path) + return name if path.nil? + return unless @conds_met + + obj = klass.new(path) + yield obj + self << obj + obj + end end end |
