diff options
| author | Paul Buetow <paul@buetow.org> | 2024-12-06 23:50:13 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2024-12-06 23:50:13 +0200 |
| commit | 36c00a4509e745e4b29b1194faca4dca830a9b95 (patch) | |
| tree | 4f1a2c47db34ed38ea89c5631e01b5ea3c6b2e13 /lib | |
| parent | 7686fe830946ae36957501f1656bb429c694b09e (diff) | |
more on this
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/autorequire/file.rb | 37 | ||||
| -rw-r--r-- | lib/autorequire/log.rb | 11 | ||||
| -rw-r--r-- | lib/autorequire/options.rb | 4 | ||||
| -rw-r--r-- | lib/rcm.rb | 11 |
4 files changed, 49 insertions, 14 deletions
diff --git a/lib/autorequire/file.rb b/lib/autorequire/file.rb index 3233015..35df33f 100644 --- a/lib/autorequire/file.rb +++ b/lib/autorequire/file.rb @@ -1,30 +1,48 @@ +require 'erb' require 'fileutils' + +require_relative 'options' require_relative 'log' module RCM # Managing files class File - attr_reader :path + 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 + def create_parent_directory @create_parent = true + self end - def to_s - @path + 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}" @@ -32,10 +50,19 @@ module RCM end info "Creating file #{@path}" + debug content if option :debug + tmp_path = "#{@path}.tmp" - ::File.write(tmp_path, @content) + ::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 diff --git a/lib/autorequire/log.rb b/lib/autorequire/log.rb index 0fe9ea9..67ff321 100644 --- a/lib/autorequire/log.rb +++ b/lib/autorequire/log.rb @@ -5,15 +5,20 @@ module RCM @@logger = Logger.new(STDOUT) def info(message) - @@logger.info("#{self.class}(#{self}): #{message}") + @@logger.info("#{id} => #{message}") end def warn(message) - @@logger.warn("#{self.class}(#{self}): #{message}") + @@logger.warn("#{id} => #{message}") + end + + def fatal_exit(message) + @@logger.fatal("#{id} => #{message}") + exit 2 end def debug(message) - @@logger.debug("#{self.class}(#{self}): #{message}") + @@logger.debug("#{id} => #{message}") end end end diff --git a/lib/autorequire/options.rb b/lib/autorequire/options.rb index de54888..c3950ca 100644 --- a/lib/autorequire/options.rb +++ b/lib/autorequire/options.rb @@ -4,14 +4,14 @@ module RCM # Command line options module Options @@options = { - verbose: false + 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-]verbose', 'run verbosely') { |v| @@options[:verbose] = v } + opts.on('-v', '--[no-]debug', 'debug output') { |v| @@options[:debug] = v } end.parse!(after_double_dash) def option(key) @@ -4,6 +4,8 @@ Dir["#{Dir.pwd}/lib/autorequire/*.rb"].each { |m| require m } module RCM # Here all starts class RCM + attr_reader :id + @@rcm_counter = 0 include Config @@ -11,10 +13,10 @@ module RCM include Log def initialize - @objs = [] + @id = "#{self.class}(#{@@rcm_counter})" + @objs = {} @conds_met = true @@rcm_counter += 1 - @number = @@rcm_counter end def to_s @@ -22,11 +24,12 @@ module RCM end def do! - @objs.each(&:do!) + @objs.each_value(&:do!) end def <<(obj) - @objs << obj + fatal_exit "Object #{obj.id} already declared!" if @objs.key?(obj.id) + @objs[obj.id] = obj end end end |
