Sha256: 89e2d373cca0eb2301a515992b08d2327ea15d0a9bab778822bb4c0788d19781

Contents?: true

Size: 1.43 KB

Versions: 1

Compression:

Stored size: 1.43 KB

Contents

require 'fileutils'

class Trash
  attr_reader :errors
  attr_accessor :trash_can
  def initialize(options = {:trash_can => File.join(ENV['HOME'], ".Trash")})
    @trash_can = options[:trash_can]
    create_trash_can_if_absent
    @errors = []
  end

  def has_trash_can?
    File.directory? @trash_can
  end

  def throw_out(*paths)
    paths.each do |path|
      path = File.expand_path(path)
      if File.exist? path
        FileUtils.mv(path, File.join(@trash_can, unique_file_name(path)))
      else
        add_error "#{path} does not exist.  Please check the file path."
        return 1
      end
    end

    return 0
  end

  def add_error(error)
    @errors << error
  end

  private

  def create_trash_can_if_absent
    FileUtils.mkdir_p(@trash_can) unless has_trash_can?
  end

  def unique_file_name(path)
    file_name      = File.basename(path)
    file_extension = File.extname(path)
    file_name_without_extension = File.basename(path, ".*")

    return file_name unless file_in_trash?(file_name)

    if File.directory? path
      unique_file_name_finder { |c| "#{file_name}#{"%02d" % c}" }
    else
      unique_file_name_finder { |c| "#{file_name_without_extension}#{"%02d" % c}#{file_extension}" }
    end
  end

  def unique_file_name_finder
    count = 1
    while file_in_trash?(yield(count))
      count += 1
    end
    return yield(count)
  end
  
  def file_in_trash?(name)
    File.exist?(File.join(@trash_can, name))
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
trash-0.3.0 lib/trash.rb