Sha256: 651adb8c2a87d3cf7672ed2d020e057ad99d1625b1e750ed6b2bb4e46e053d48
Contents?: true
Size: 1.63 KB
Versions: 1
Compression:
Stored size: 1.63 KB
Contents
#!/usr/bin/env ruby autoload :Pru, 'pru' require 'optparse' usage = <<-EOS 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 -e/-f). Usage: something | pru 'map' ['reduce'] something | pru -e 'reduce' EOS options = {} OptionParser.new { |opts| opts.banner = usage opts.separator '' opts.separator 'Options:' opts.on('-m', '--map-file FILE', 'Map via FILE') { |file| options[:map] = Pru::Helper.load_file(file, :map) } opts.separator '' opts.on('-e', '--execute CODE', 'Reduce via CODE') { |code| options[:reduce] = code } opts.on('-f', '--reduce-file FILE', 'Reduce via FILE') { |file| options[:reduce] = Pru::Helper.load_file(file, :reduce) } opts.separator '' opts.separator 'Load options:' opts.on('-I', '--libdir LIBDIR', 'Include LIBDIR in the search path for required modules') { |dir| $LOAD_PATH << dir } opts.on('-r', '--require MODULE', 'Require MODULE before executing any code') { |mod| require mod } opts.separator '' opts.separator 'Generic options:' opts.on('-h', '--help', 'Print this help message and exit') { puts opts exit } opts.on('--version', 'Print program version and exit') { puts "#{File.basename($0)} v#{Pru::VERSION}" exit } }.parse! abort usage if ARGV.size > 2 map, reduce = ARGV map ||= options[:map] reduce ||= options[:reduce] map = 'true' if map.nil? || map.strip.empty? if reduce results = [] Pru.map($stdin, map) { |x| results << x } puts Pru.reduce(results, reduce) else Pru.map($stdin, map) { |x| puts x } end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
blackwinter-pru-0.1.4 | bin/pru |