Sha256: 81cc3d8a98217b769a152df7c16f7aea942284182010dccf9f6756c7670787a3

Contents?: true

Size: 1.36 KB

Versions: 2

Compression:

Stored size: 1.36 KB

Contents

require 'fileutils'

class Trash
  attr_reader :errors
  attr_accessor :trash_can
  
  def initialize(options = {})
    @trash_can = options[:trash_can].nil? ? "#{ENV['HOME']}/.Trash" : 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, "#{@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.split(path).last
    file_extension = File.extname(path)

    return file_name unless File.exists?("#{@trash_can}/#{file_name}")

    if File.directory? path
      unique_file_name_finder { |c| "#{file_name}#{"%02d" % c}" }
    else
      unique_file_name_finder { |c| "#{file_name.gsub(file_extension, "#{"%02d" % c}#{file_extension}")}" }
    end
  end
  
  def unique_file_name_finder
    count = 1
    while File.exists?("#{@trash_can}/#{yield(count)}")
      count += 1
    end
    return yield(count)
  end
  
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
trash-0.2.1 lib/trash.rb
trash-0.2.0 lib/trash.rb