summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/dsl.rb5
-rw-r--r--lib/dslkeywords/package.rb13
-rw-r--r--test/lib/dslkeywords/duplicate_test.rb14
3 files changed, 31 insertions, 1 deletions
diff --git a/lib/dsl.rb b/lib/dsl.rb
index b9062e5..353bb15 100644
--- a/lib/dsl.rb
+++ b/lib/dsl.rb
@@ -23,6 +23,8 @@ module RCM
include Options
include Log
+ class DuplicateResource < StandardError; end
+
def initialize(reset)
DSL.reset! if reset
@id = "dsl(#{@@rcm_counter += 1})"
@@ -35,7 +37,8 @@ module RCM
def evaluate! = @scheduled.each(&:evaluate!)
def <<(obj)
- fatal_exit "Object #{obj.id} already declared!" if @@objs.key?(obj.id)
+ raise DuplicateResource, "#{obj.id} already declared!" if @@objs.key?(obj.id)
+
@scheduled << @@objs[obj.id] = obj
end
end
diff --git a/lib/dslkeywords/package.rb b/lib/dslkeywords/package.rb
index b28ed50..86903cf 100644
--- a/lib/dslkeywords/package.rb
+++ b/lib/dslkeywords/package.rb
@@ -4,12 +4,25 @@ require 'fileutils'
require_relative 'resource'
module RCM
+ class DNFPackageManager
+ def installed?(pkg) = false
+ def install(pkg) = `dnf install -y "#{pkg}"` unless installed?(pkg)
+ def update(pkg) = `dnf update -y "#{pkg}"`
+ def remove(pkg) = `dnf remove -y "#{pkg}"` if installed?(pkg)
+ end
+
# Managing packages
class Package < Resource
attr_reader :path
+ class UnsupportedOS < StandardError; end
+
def initialize(name)
super(name)
+ raise UnsupportedOS, 'OS is not supported' unless File.file?('/etc/fedora-release')
+
+ @manager = DNFPackageManager.new
+
@name = name
end
diff --git a/test/lib/dslkeywords/duplicate_test.rb b/test/lib/dslkeywords/duplicate_test.rb
new file mode 100644
index 0000000..e3662f3
--- /dev/null
+++ b/test/lib/dslkeywords/duplicate_test.rb
@@ -0,0 +1,14 @@
+require 'minitest/autorun'
+require 'fileutils'
+require_relative '../../../lib/dsl'
+
+class RCMDuplicateTest < Minitest::Test
+ def test_duplicate_definitioin
+ assert_raises(RCM::DSL::DuplicateResource) do
+ configure_from_scratch do
+ notify :foo
+ notify :foo
+ end
+ end
+ end
+end