diff options
| -rw-r--r-- | lib/dsl.rb | 5 | ||||
| -rw-r--r-- | lib/dslkeywords/package.rb | 13 | ||||
| -rw-r--r-- | test/lib/dslkeywords/duplicate_test.rb | 14 |
3 files changed, 31 insertions, 1 deletions
@@ -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 |
