summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/dsl.rb3
-rw-r--r--lib/dslkeywords/file.rb4
-rw-r--r--lib/dslkeywords/keyword.rb2
-rw-r--r--lib/dslkeywords/notify.rb32
-rw-r--r--lib/dslkeywords/resource.rb31
5 files changed, 68 insertions, 4 deletions
diff --git a/lib/dsl.rb b/lib/dsl.rb
index f3ccfc3..caed790 100644
--- a/lib/dsl.rb
+++ b/lib/dsl.rb
@@ -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