diff options
| author | Paul Buetow <paul@buetow.org> | 2026-03-14 09:56:52 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-03-14 09:56:52 +0200 |
| commit | 818ed50e2a54b40ccf7a7771bebe0312dc01a8b5 (patch) | |
| tree | 16bfb301c1192a1d301d50388eb33a52ecdc7e69 /lib/dsl.rb | |
| parent | 63607f415c45a8670cd2eb4d346e448dceb5422f (diff) | |
Add agent-backed file processing DSL
Diffstat (limited to 'lib/dsl.rb')
| -rw-r--r-- | lib/dsl.rb | 30 |
1 files changed, 25 insertions, 5 deletions
@@ -1,8 +1,13 @@ +# frozen_string_literal: true + +# rubocop:disable Style/ClassVars require_relative 'config' require_relative 'options' require_relative 'log' require_relative 'chained' +require_relative 'dslkeywords/agent' +require_relative 'dslkeywords/prompt' require_relative 'dslkeywords/file' require_relative 'dslkeywords/symlink' require_relative 'dslkeywords/touch' @@ -29,6 +34,9 @@ module RCM include Chained class DuplicateResource < StandardError; end + class DuplicateDefinition < StandardError; end + class NoSuchAgentDefinition < StandardError; end + class NoSuchPromptDefinition < StandardError; end def initialize(reset) DSL.reset! if reset @@ -41,10 +49,20 @@ module RCM def to_s = @id def evaluate! = @scheduled.each(&:evaluate!) - def <<(obj) - raise DuplicateResource, "#{obj.id} already declared!" if @@objs.key?(obj.id) + def <<(obj) = register(obj) + + def register(obj, schedule: obj.is_a?(Resource), duplicate_error: DuplicateResource) + raise duplicate_error, "#{obj.id} already declared!" if @@objs.key?(obj.id) - @scheduled << @@objs[obj.id] = obj + @@objs[obj.id] = obj + @scheduled << obj if schedule + obj + end + + def object!(klass, name, error_class:, kind:) + @@objs.fetch(klass.id_for(name)) do + raise error_class, "No such #{kind} '#{name}'" + end end private @@ -63,13 +81,15 @@ module RCM return unless @conds_met obj = klass.new(path) + obj.dsl = self if obj.respond_to?(:dsl=) yield obj - self << obj - obj + register(obj) end end end +# rubocop:enable Style/ClassVars + def configure(reset: false, &block) # Parse ARGV and load config.toml each time configure is called so that # scripts and test suites that call configure multiple times always |
