Sha256: 95e1a93d1998bcbd171a40c27e4ea361ac01a8eb5dd1a4f1e16362e83471a408

Contents?: true

Size: 1.83 KB

Versions: 2

Compression:

Stored size: 1.83 KB

Contents

#!/usr/bin/env ruby
require 'optparse'

$LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
require 'pru'

usage = nil
options = {}

OptionParser.new do |opts|
  opts.banner = <<BANNER
Pipeable Ruby

Use ruby in your pipes, forget about grep / sed / awk / wc ...

Map works on each line as String
Reduce works on all lines as Array (optional or via -r)

Usage:
    something | pru 'map'
    something | pru 'map' 'reduce'
    something | pru '' 'reduce'
    something | pru --reduce 'reduce'

Options:
BANNER
  opts.on("-r", "--reduce CODE","reduce via CODE") {|code| options[:reduce] = code }
  opts.separator ''
  opts.on('-I', '--libdir DIR', 'Add DIR to load path') { |dir| $LOAD_PATH << dir }
  opts.on('--require LIB', 'Require LIB (also comma-separated)') { |lib|
    begin
      require 'rubygems'
    rescue LoadError
    end
    lib.split(',').each{|l| require l }
  }
  opts.on('-i', '--inplace-edit FILE', 'Edit FILE inplace') { |file| options[:file] = file }
  opts.separator ''
  opts.on("-h", "--help","Show this.") { puts opts; exit }
  opts.on('-v', '--version','Show Version'){ puts Pru::VERSION; exit}
  usage = opts
end.parse!

if ARGV.empty? and options.empty? # no arguments -> show usage
  puts usage
  exit
end

abort "Too many arguments, see --help" if ARGV.size > 2

map, reduce = ARGV
reduce ||= options[:reduce]
map = 'true' if not map or map.empty?

if options[:file]
  output_lines = []
  input = File.read(options[:file])
  newline = input[/\r\n|\r|\n/]
else
  input = $stdin
end

collector = lambda{|line|
  output_lines ? output_lines << line : puts(line)
}

if reduce
  results = []
  Pru.map(input, map){|out| results << out }
  collector.call Pru.reduce(results, reduce)
else
  Pru.map(input, map){|out| collector.call out }
end

if options[:file]
  File.open(options[:file], 'w'){|f| f.write output_lines.join(newline) }
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
pru-0.1.7 bin/pru
pru-0.1.6 bin/pru