Module: FileTransaction

Defined in:
lib/file-transaction.rb,
lib/file-transaction/version.rb

Constant Summary collapse

VERSION =
"1.0.0"

Class Method Summary collapse

Class Method Details

.copy_files(directory, target) ⇒ Object

Copies all contents of a directory instead of the directory itself.



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/file-transaction.rb', line 10

def self.copy_files(directory, target)
  if files_in(target).empty?
    FileUtils.cp_r(File.join(directory, "."), target)
  else
    relative_files_in(directory).each do |file|
      FileUtils.mkdir_p(File.join(target, file.dirname))
      begin
        FileUtils.cp(File.join(directory, file), File.join(target, file))
      rescue Errno::EACCES
        FileUtils.rm_rf(File.join(target, file))
        FileUtils.cp(File.join(directory, file), File.join(target, file))
      end
    end

    files_for_deletion = relative_files_in(target) - relative_files_in(directory)

    files_for_deletion.each do |file|
      FileUtils.rm(File.join(target, file))
    end
  end
end

.files_in(directory) ⇒ Object



34
35
36
37
# File 'lib/file-transaction.rb', line 34

def self.files_in(directory)
  Dir.glob(File.join(directory, "**", "*"), File::FNM_DOTMATCH)
    .reject { |file| file.end_with?(".") || file.end_with?("..") || File.directory?(file) }
end

.relative_files_in(directory) ⇒ Object



39
40
41
# File 'lib/file-transaction.rb', line 39

def self.relative_files_in(directory)
  files_in(directory).map { |file| Pathname.new(file).relative_path_from(directory) }
end