Skip to content

jashmenn/basket

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Basket

Easily process and sort a directory of files.

Example:

Basket.process("orders") do |file|
  puts "we are processing #{file}"
end

Assuming there are number of files in orders/inbox

  • each file is mv‘d to orders/pending

  • the block is called on each file

  • the file is mv‘d to orders/archive

See Basket#process for a list of all the options.

Install:

gem install jashmenn-basket --source http://gems.github.com

More examples:

The output folder can be conditional based on the output of the block, as in the following example. In this case the default names of the folders are success and fail based on the return value of the block being true or false.

$:.unshift File.dirname(__FILE__) + "/../lib"
require 'basket'
def log(*args); p args; end

Basket.process("orders", :conditional => true, :logdev => "/dev/null") do |file, i|
  if i % 2 == 0
    log :success, file
    true # returning true mv's file to +success+
  else
    log :fail, file
    false # returning false mv's file to +faile+
  end
end

You can create arbitrary baskets for the output. If you specify :other then the files are not mv‘d automatically. You must call the appropriate bang method on the file. For example:

$:.unshift File.dirname(__FILE__) + "/../lib"
require 'basket'
def log(*args); p args; end

Basket.process("orders", :inbox => "new", :pending => "work", :other => %w{good bad unknown}) do |file, i|
  case i % 3 
  when 0 
    log :good, file
    file.good! # mv's file to "orders/good"
  when 1
    log :bad, file
    file.bad!
  when 2
    log :unknown, file
    file.unknown!
  end
end

Baskets has (experimental) built-in support for doing parallel processing using forkoff. Example:

$:.unshift File.dirname(__FILE__) + "/../lib"
require 'basket'
def log(*args); p args; end

# want to be able to process in parallel
Basket.process("orders", :workers => 4) do |file|
  log $$, :processing, file
end

About

Easily process and sort a directory of files.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages