class MassRenamer::Filesystem_Driver

Public Class Methods

new(ask: , dry:, verbose:, no_delete:, force: @ask = ask) click to toggle source
# File lib/mass_renamer/driver.rb, line 8
def initialize ask: , dry:, verbose:, no_delete:, force:
  @ask = ask
  @dry = dry
  @verbose = verbose
  @no_delete = no_delete
  @force = force
end

Public Instance Methods

ask(msg, from, to = nil) click to toggle source
# File lib/mass_renamer/driver.rb, line 16
def ask msg, from, to = nil
  print "#{msg} '#{from}'#{to ? " -> '#{to}'" : '' }? [YN]: "
  gets.chomp.downcase == ?y
end
copy!(from, to) click to toggle source
# File lib/mass_renamer/driver.rb, line 55
def copy! from, to
  begin
    puts "cp -r '#{from}' '#{to}'" if @dry or @verbose
    if @ask
      return unless ask("Copy", from, to)
    end
    return if @dry
    if File.exist?(to) and not @force
      case overwrite(to)
      when :abort
        exit 1
      when :no
        return
      when :yes
      end
    end
    FileUtils.mkdir_p File.dirname(to)
    FileUtils.copy_entry from, to, preserve: true, remove_destination: true
  rescue StandardError => e
    STDERR.puts "copy '#{from}' -> '#{to}' failed: #{e.message}"
    raise
  end
end
move!(from, to) click to toggle source
# File lib/mass_renamer/driver.rb, line 79
def move! from, to
  begin
    puts "mv '#{from}' '#{to}'" if @dry or @verbose
    if @ask
      return unless ask("Move", from, to)
    end
    return if @dry
    if File.exist?(to) and not @force
      case overwrite(to)
      when :abort
        exit 1
      when :no
        return
      when :yes
      end
    end
    FileUtils.mkdir_p File.dirname(to)
    File.rename from, to
  rescue StandardError => e
    STDERR.puts "move '#{from}' -> '#{to}' failed: #{e.message}"
    raise
  end
end
overwrite(to) click to toggle source
# File lib/mass_renamer/driver.rb, line 21
def overwrite to
  loop do
    print "Overwrite #{to}? [Y(es)/N(o)/A(bort)]: "
    case gets.chomp.downcase
    when ?a
      puts "Aborting."
      return :abort
    when ?y
      return :yes
    when ?n
      puts "Not overwriting, skipping."
      return :no
    else
      puts "Unexpected answer, try again."
    end
  end

end
remove!(from) click to toggle source
# File lib/mass_renamer/driver.rb, line 40
def remove! from
  raise "Deletes were disables." if @no_delete
  begin
    puts "rm -r '#{from}'" if @dry or @verbose
    if @ask
      return unless ask("Remove file", from)
    end
    return if @dry
    FileUtils.remove_entry from
  rescue StandardError => e
    STDERR.puts "remove of '#{from}' failed: #{e.message}"
    raise
  end
end