diff options
Diffstat (limited to 'lib/autorequire')
| -rw-r--r-- | lib/autorequire/file.rb | 37 | ||||
| -rw-r--r-- | lib/autorequire/log.rb | 11 | ||||
| -rw-r--r-- | lib/autorequire/options.rb | 4 |
3 files changed, 42 insertions, 10 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) |
