diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/dsl.rb | 3 | ||||
| -rw-r--r-- | lib/dslkeywords/file.rb | 4 | ||||
| -rw-r--r-- | lib/dslkeywords/keyword.rb | 2 | ||||
| -rw-r--r-- | lib/dslkeywords/notify.rb | 32 | ||||
| -rw-r--r-- | lib/dslkeywords/resource.rb | 31 |
5 files changed, 68 insertions, 4 deletions
@@ -4,6 +4,7 @@ require_relative 'log' require_relative 'dslkeywords/file' require_relative 'dslkeywords/only_when' +require_relative 'dslkeywords/notify' # Ruby Configiration Management system module RCM @@ -24,7 +25,7 @@ module RCM def initialize(reset) DSL.reset! if reset - @id = "DSL[#{@@rcm_counter += 1}]" + @id = "dsl[#{@@rcm_counter += 1}]" @conds_met = true @scheduled = [] yield self if block_given? diff --git a/lib/dslkeywords/file.rb b/lib/dslkeywords/file.rb index 50f753e..501b7c8 100644 --- a/lib/dslkeywords/file.rb +++ b/lib/dslkeywords/file.rb @@ -1,11 +1,11 @@ require 'erb' require 'fileutils' -require_relative 'keyword' +require_relative 'resource' module RCM # Managing files - class File < Keyword + class File < Resource attr_reader :path def initialize(path) diff --git a/lib/dslkeywords/keyword.rb b/lib/dslkeywords/keyword.rb index 33d03db..2696e41 100644 --- a/lib/dslkeywords/keyword.rb +++ b/lib/dslkeywords/keyword.rb @@ -9,7 +9,7 @@ module RCM include Options include Log - def initialize(name) = @id = "#{self.class.to_s.sub('RCM::', '')}[#{name}]" + def initialize(name) = @id = "#{self.class.to_s.sub('RCM::', '').downcase}['#{name}']" def to_s = @id end end diff --git a/lib/dslkeywords/notify.rb b/lib/dslkeywords/notify.rb new file mode 100644 index 0000000..c7d50d9 --- /dev/null +++ b/lib/dslkeywords/notify.rb @@ -0,0 +1,32 @@ +require 'erb' +require 'fileutils' + +require_relative 'resource' + +module RCM + # Only to print out something + class Notify < Resource + def initialize(message) + super(message) + @message = message + end + + def message(msg) + @message = msg unless msg.nil? + end + + def evaluate! = puts "#{id} => #{@message}" + end + + # Add notify keyword to the DSL + class DSL + def notify(message, &block) + return unless @conds_met + + n = Notify.new(message) + n.message(n.instance_eval(&block)) if block + self << n + n + end + end +end diff --git a/lib/dslkeywords/resource.rb b/lib/dslkeywords/resource.rb new file mode 100644 index 0000000..6612428 --- /dev/null +++ b/lib/dslkeywords/resource.rb @@ -0,0 +1,31 @@ +require_relative 'keyword' + +module RCM + # To track recource dependencies + module Dependency + # Only to have the resourcename[id] syntax available in the DSL + class SyntaxSugar + def initialize(name) + @name = name + end + + def [](other) = "#{@name}['#{other}']" + end + + def method_missing(method_name) = SyntaxSugar.new(method_name) + def respond_to_missing? = true + + def depends_on(*others) + @depends_on = {} if @depends_on.nil? + others.each do |other| + info "Registered dependency on #{other}" + @depends_on[other] = {} + end + end + end + + # A resource is something concrete to be managed, e.g. a file, or a CRON job. + class Resource < Keyword + include Dependency + end +end |
