summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/dslkeywords/file.rb48
1 files changed, 26 insertions, 22 deletions
diff --git a/lib/dslkeywords/file.rb b/lib/dslkeywords/file.rb
index 51e241e..3476079 100644
--- a/lib/dslkeywords/file.rb
+++ b/lib/dslkeywords/file.rb
@@ -7,26 +7,24 @@ require_relative 'resource'
module RCM
# Backup the file on change
module FileBackup
- def backup!(path, checksum)
- backup_dir = "#{::File.dirname(path)}/.rcm"
+ def backup!(file_path, checksum)
+ backup_dir = "#{::File.dirname(file_path)}/.rcm"
Dir.mkdir(backup_dir) unless ::File.directory?(backup_dir)
- backup_path = "#{backup_dir}/#{::File.basename(path)}.#{checksum}"
+ backup_path = "#{backup_dir}/#{::File.basename(file_path)}.#{checksum}"
return if ::File.exist?(backup_path)
- info("Backing up #{path} -> #{backup_path}")
- ::File.rename(path, backup_path)
+ info("Backing up #{file_path} -> #{backup_path}")
+ ::File.rename(file_path, backup_path)
end
end
# Managing files
class File < Resource
- attr_reader :path
-
include FileBackup
- def initialize(path)
- super(path)
- @path = path
+ def initialize(file_path)
+ super(file_path)
+ @file_path = file_path
end
def content(text = nil)
@@ -40,6 +38,12 @@ module RCM
def from_template = @from_template = true
def ensure_line(line) = @ensure_line = line
+ def path(file_path = nil)
+ return @file_path if file_path.nil?
+
+ @file_path = file_path
+ end
+
def evaluate!
return unless super
return evaluate_ensure_line! unless @ensure_line.nil?
@@ -50,39 +54,39 @@ module RCM
private
def evaluate_ensure_line!
- return write_content!(@ensure_line) unless ::File.file?(@path)
- return if ::File.readlines(@path, chomp: true).include?(@ensure_line)
+ return write_content!(@ensure_line) unless ::File.file?(@file_path)
+ return if ::File.readlines(@file_path, chomp: true).include?(@ensure_line)
- ::File.open(@path, 'a') do |fd|
+ ::File.open(@file_path, 'a') do |fd|
fd.puts(@ensure_line)
end
end
def write_content!(text)
- info "Managing file #{@path}"
+ info "Managing file #{@file_path}"
create_parent_directory!
debug text if option :debug
- tmp_path = "#{@path}.tmp"
+ tmp_path = "#{@file_path}.tmp"
::File.write(tmp_path, text)
- if ::File.file?(@path)
- checksum = Digest::SHA256.file(@path).hexdigest
+ if ::File.file?(@file_path)
+ checksum = Digest::SHA256.file(@file_path).hexdigest
tmp_checksum = Digest::SHA256.file(tmp_path).hexdigest
if tmp_checksum == checksum
::File.delete(tmp_path) # File has not changed, not doing anything
return
end
- backup!(@path, checksum) # File changed, backup!
+ backup!(@file_path, checksum) # File changed, backup!
end
- ::File.rename(tmp_path, @path)
+ ::File.rename(tmp_path, @file_path)
end
def create_parent_directory!
- dirname = ::File.dirname(@path)
+ dirname = ::File.dirname(@file_path)
return unless !::File.directory?(dirname) && @create_parent
info "Creating parent directory #{dirname}"
@@ -97,10 +101,10 @@ module RCM
# Add file keyword to the DSL
class DSL
- def file(path, &block)
+ def file(file_path, &block)
return unless @conds_met
- f = File.new(path)
+ f = File.new(file_path)
f.content(f.instance_eval(&block))
self << f
f