class Siba::FileHelper

Public Class Methods

change_file(path_to_file, &block) click to toggle source

Used to replace text in file Example:

change_file("/path") do |file_text|
  file_text.gsub "one", "two"
end
# File lib/siba/helpers/file_helper.rb, line 38
def change_file(path_to_file, &block)
  file_text = Siba::FileHelper.read path_to_file
  file_text = block.call file_text
  Siba::FileHelper.write path_to_file, file_text
end
dir_empty?(dir) click to toggle source
# File lib/siba/helpers/file_helper.rb, line 8
def dir_empty?(dir)
  entries(dir).empty?
end
dirs(dir) click to toggle source

Retuns an array containing names of sub-directories located in the dir

# File lib/siba/helpers/file_helper.rb, line 50
def dirs(dir)
  entries(dir).select do |entry|
    siba_file.file_directory?(File.join(dir,entry))
  end
end
dirs_count(dir) click to toggle source
# File lib/siba/helpers/file_helper.rb, line 12
def dirs_count(dir)
  dirs(dir).size
end
dirs_same?(dir1, dir2) click to toggle source

Raises error if dirs are not identical

# File lib/siba/helpers/file_helper.rb, line 64
def dirs_same?(dir1, dir2)
  dir1_entries = siba_file.dir_entries dir1
  dir2_entries = siba_file.dir_entries dir2
  diff1 = (dir1_entries - dir2_entries).map{|i| File.join(dir1,i)}
  diff2 = (dir2_entries - dir1_entries).map{|i| File.join(dir2,i)}
  diff = diff1 + diff2
  msg = "The directories '#{File.basename(dir1)}' and '#{File.basename(dir2)}' are different: "
  raise Siba::Error, "#{msg}#{diff.take(10).join(', ')}" unless diff.empty?

  # compare files and directories
  dir1_entries.each do |dir|
    next if dir == "." || dir == ".."
    sub_dir1_entry = File.join dir1, dir
    sub_dir2_entry = File.join dir2, dir

    # compare files
    if siba_file.file_file? sub_dir1_entry
      raise "#{msg}'#{sub_dir2_entry}' is not a file" unless siba_file.file_file? sub_dir2_entry
      unless siba_file.file_utils_compare_file sub_dir1_entry, sub_dir2_entry
        raise Siba::Error, "#{msg}'#{sub_dir1_entry}' and '#{sub_dir2_entry}' files are different."
      end
    end

    # compare permissions
    if (siba_file.file_stat(sub_dir1_entry).mode % 01000) != (siba_file.file_stat(sub_dir2_entry).mode % 01000)
      raise Siba::Error, "#{msg}'#{sub_dir1_entry}' and '#{sub_dir2_entry}' entries have different permissions."
    end

    # compare sub-dirs
    if siba_file.file_directory? sub_dir1_entry
      raise Siba::Error, "#{msg}'#{sub_dir2_entry}' is not a directory" unless siba_file.file_directory? sub_dir2_entry
      dirs_same? sub_dir1_entry, sub_dir2_entry
    end
  end
end
entries(dir) click to toggle source

Retuns an array containing all dir entires except ‘.’ and ‘..’ dirs

# File lib/siba/helpers/file_helper.rb, line 45
def entries(dir)
  siba_file.dir_entries(dir) - %w{ . .. }
end
files(dir) click to toggle source

Retuns an array containing names of files located in the dir

# File lib/siba/helpers/file_helper.rb, line 57
def files(dir)
  entries(dir).select do |entry|
    siba_file.file_file?(File.join(dir,entry))
  end
end
read(file) click to toggle source

Reads a file in UTF-8 encoding

# File lib/siba/helpers/file_helper.rb, line 17
def read(file)
  str = File.read file, { open_args: ["r:bom|utf-8"]}
  unless str.valid_encoding?
    raise Siba::Error, "Incorrect file encoding. Please save the options with UTF-8 encoding."
  end
  str
end
write(file, data) click to toggle source

Write to file in UTF-8 encoding

# File lib/siba/helpers/file_helper.rb, line 26
def write(file, data)
  siba_file.file_utils_remove_entry_secure file if siba_file.file_file? file
  siba_file.file_open(file, "w:utf-8") do |file|
    file << data
  end
end