From 7c23b27007ca62ff545411aa3d1200fce4eec8c9 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Fri, 6 Dec 2024 23:52:43 +0200 Subject: refactor --- lib/autorequire/config.rb | 18 ---------- lib/autorequire/file.rb | 78 -------------------------------------------- lib/autorequire/log.rb | 24 -------------- lib/autorequire/only_when.rb | 37 --------------------- lib/autorequire/options.rb | 23 ------------- lib/config.rb | 18 ++++++++++ lib/dslkeywords/file.rb | 78 ++++++++++++++++++++++++++++++++++++++++++++ lib/dslkeywords/only_when.rb | 37 +++++++++++++++++++++ lib/log.rb | 24 ++++++++++++++ lib/options.rb | 23 +++++++++++++ lib/rcm.rb | 8 +++-- 11 files changed, 186 insertions(+), 182 deletions(-) delete mode 100644 lib/autorequire/config.rb delete mode 100644 lib/autorequire/file.rb delete mode 100644 lib/autorequire/log.rb delete mode 100644 lib/autorequire/only_when.rb delete mode 100644 lib/autorequire/options.rb create mode 100644 lib/config.rb create mode 100644 lib/dslkeywords/file.rb create mode 100644 lib/dslkeywords/only_when.rb create mode 100644 lib/log.rb create mode 100644 lib/options.rb (limited to 'lib') diff --git a/lib/autorequire/config.rb b/lib/autorequire/config.rb deleted file mode 100644 index b9dc5ac..0000000 --- a/lib/autorequire/config.rb +++ /dev/null @@ -1,18 +0,0 @@ -require 'toml' - -module RCM - # Configuration - module Config - @@config = File.exist?('config.toml') ? TOML.load_file('config.toml') : {} - - def config(key) - raise "No such config key: #{key}" unless @@config.key?(key) - - @@config[key] - end - - def dump_config - p @@config - end - end -end diff --git a/lib/autorequire/file.rb b/lib/autorequire/file.rb deleted file mode 100644 index 35df33f..0000000 --- a/lib/autorequire/file.rb +++ /dev/null @@ -1,78 +0,0 @@ -require 'erb' -require 'fileutils' - -require_relative 'options' -require_relative 'log' - -module RCM - # Managing files - class File - attr_reader :id, :path - - include Options - include Log - - def initialize(path) - @id = "#{self.class}(#{path})" - @path = path - end - - def to_s - id - end - - def content(content = nil) - content.nil? ? @content : @content = content - end - - def create_parent_directory - @create_parent = true - self - end - - def from_file(...) - @from_file = true - self - end - - def from_template(...) - @from_template = true - self - end - - def do! - content = file_content - - dirname = ::File.dirname(@path) - if !::File.directory?(dirname) && @create_parent - info "Creating parent directory #{parent}" - FileUtils.mkdir_p(dirname) - end - - info "Creating file #{@path}" - debug content if option :debug - - tmp_path = "#{@path}.tmp" - ::File.write(tmp_path, content) - ::File.rename(tmp_path, @path) - end - - private - - def file_content - content = @from_file ? ::File.read(@content) : @content - @from_template ? ERB.new(content).result : content - end - end - - # Add file keyword to the DSL - class RCM - def file(path, &block) - return unless @conds_met - - f = File.new(path) - f.instance_eval(&block) - self << f - end - end -end diff --git a/lib/autorequire/log.rb b/lib/autorequire/log.rb deleted file mode 100644 index 67ff321..0000000 --- a/lib/autorequire/log.rb +++ /dev/null @@ -1,24 +0,0 @@ -require 'logger' - -module RCM - module Log - @@logger = Logger.new(STDOUT) - - def info(message) - @@logger.info("#{id} => #{message}") - end - - def warn(message) - @@logger.warn("#{id} => #{message}") - end - - def fatal_exit(message) - @@logger.fatal("#{id} => #{message}") - exit 2 - end - - def debug(message) - @@logger.debug("#{id} => #{message}") - end - end -end diff --git a/lib/autorequire/only_when.rb b/lib/autorequire/only_when.rb deleted file mode 100644 index 2700bee..0000000 --- a/lib/autorequire/only_when.rb +++ /dev/null @@ -1,37 +0,0 @@ -module RCM - # OnlyWhen (e.g. run on host foo) - class OnlyWhen - require 'socket' - - def initialize - @conds = {} - end - - def is(arg) - arg - end - - def method_missing(method_name, *args, &block) - @conds[method_name] = args.first - end - - def respond_to_missing? - true - end - - def met? - return false if @conds.key?(:hostname) && Socket.gethostname != @conds[:hostname].to_s - - true - end - end - - # Add 'only_when' to DSL - class RCM - def only_when(&block) - conds = OnlyWhen.new - conds.instance_eval(&block) - @conds_met = conds.met? - end - end -end diff --git a/lib/autorequire/options.rb b/lib/autorequire/options.rb deleted file mode 100644 index c3950ca..0000000 --- a/lib/autorequire/options.rb +++ /dev/null @@ -1,23 +0,0 @@ -require 'optparse' - -module RCM - # Command line options - module Options - @@options = { - debug: false - } - - after_double_dash = ARGV.slice_before('--').to_a.last.drop(1) - - OptionParser.new do |opts| - opts.banner = 'Usage: rake [task] -- [options]' - opts.on('-v', '--[no-]debug', 'debug output') { |v| @@options[:debug] = v } - end.parse!(after_double_dash) - - def option(key) - raise "No such option: #{key}" unless @@options.key?(key) - - @@options[key] - end - end -end diff --git a/lib/config.rb b/lib/config.rb new file mode 100644 index 0000000..b9dc5ac --- /dev/null +++ b/lib/config.rb @@ -0,0 +1,18 @@ +require 'toml' + +module RCM + # Configuration + module Config + @@config = File.exist?('config.toml') ? TOML.load_file('config.toml') : {} + + def config(key) + raise "No such config key: #{key}" unless @@config.key?(key) + + @@config[key] + end + + def dump_config + p @@config + end + end +end diff --git a/lib/dslkeywords/file.rb b/lib/dslkeywords/file.rb new file mode 100644 index 0000000..a22e52f --- /dev/null +++ b/lib/dslkeywords/file.rb @@ -0,0 +1,78 @@ +require 'erb' +require 'fileutils' + +require_relative '../options' +require_relative '../log' + +module RCM + # Managing files + class File + attr_reader :id, :path + + include Options + include Log + + def initialize(path) + @id = "#{self.class}(#{path})" + @path = path + end + + def to_s + id + end + + def content(content = nil) + content.nil? ? @content : @content = content + end + + def create_parent_directory + @create_parent = true + self + end + + def from_file(...) + @from_file = true + self + end + + def from_template(...) + @from_template = true + self + end + + def do! + content = file_content + + dirname = ::File.dirname(@path) + if !::File.directory?(dirname) && @create_parent + info "Creating parent directory #{parent}" + FileUtils.mkdir_p(dirname) + end + + info "Creating file #{@path}" + debug content if option :debug + + tmp_path = "#{@path}.tmp" + ::File.write(tmp_path, content) + ::File.rename(tmp_path, @path) + end + + private + + def file_content + content = @from_file ? ::File.read(@content) : @content + @from_template ? ERB.new(content).result : content + end + end + + # Add file keyword to the DSL + class RCM + def file(path, &block) + return unless @conds_met + + f = File.new(path) + f.instance_eval(&block) + self << f + end + end +end diff --git a/lib/dslkeywords/only_when.rb b/lib/dslkeywords/only_when.rb new file mode 100644 index 0000000..2700bee --- /dev/null +++ b/lib/dslkeywords/only_when.rb @@ -0,0 +1,37 @@ +module RCM + # OnlyWhen (e.g. run on host foo) + class OnlyWhen + require 'socket' + + def initialize + @conds = {} + end + + def is(arg) + arg + end + + def method_missing(method_name, *args, &block) + @conds[method_name] = args.first + end + + def respond_to_missing? + true + end + + def met? + return false if @conds.key?(:hostname) && Socket.gethostname != @conds[:hostname].to_s + + true + end + end + + # Add 'only_when' to DSL + class RCM + def only_when(&block) + conds = OnlyWhen.new + conds.instance_eval(&block) + @conds_met = conds.met? + end + end +end diff --git a/lib/log.rb b/lib/log.rb new file mode 100644 index 0000000..67ff321 --- /dev/null +++ b/lib/log.rb @@ -0,0 +1,24 @@ +require 'logger' + +module RCM + module Log + @@logger = Logger.new(STDOUT) + + def info(message) + @@logger.info("#{id} => #{message}") + end + + def warn(message) + @@logger.warn("#{id} => #{message}") + end + + def fatal_exit(message) + @@logger.fatal("#{id} => #{message}") + exit 2 + end + + def debug(message) + @@logger.debug("#{id} => #{message}") + end + end +end diff --git a/lib/options.rb b/lib/options.rb new file mode 100644 index 0000000..c3950ca --- /dev/null +++ b/lib/options.rb @@ -0,0 +1,23 @@ +require 'optparse' + +module RCM + # Command line options + module Options + @@options = { + debug: false + } + + after_double_dash = ARGV.slice_before('--').to_a.last.drop(1) + + OptionParser.new do |opts| + opts.banner = 'Usage: rake [task] -- [options]' + opts.on('-v', '--[no-]debug', 'debug output') { |v| @@options[:debug] = v } + end.parse!(after_double_dash) + + def option(key) + raise "No such option: #{key}" unless @@options.key?(key) + + @@options[key] + end + end +end diff --git a/lib/rcm.rb b/lib/rcm.rb index 1f45c39..e341405 100644 --- a/lib/rcm.rb +++ b/lib/rcm.rb @@ -1,11 +1,15 @@ -Dir["#{Dir.pwd}/lib/autorequire/*.rb"].each { |m| require m } +require_relative 'config' +require_relative 'options' +require_relative 'log' + +Dir["#{Dir.pwd}/lib/dslkeywords/*.rb"].each { |m| require m } # Ruby Configiration Management system module RCM # Here all starts class RCM attr_reader :id - + @@rcm_counter = 0 include Config -- cgit v1.2.3