class Mats::Stream

Attributes

optpsr[RW]

Public Class Methods

new() click to toggle source
# File lib/mats.rb, line 10
def initialize
  @out_encode = false
  @optpsr = OptionParser.new
  @optpsr.on('-m', 'output as msgpack encode') { |v| @out_encode = true }
  @argv = []
end

Public Instance Methods

exec(obj) click to toggle source
# File lib/mats.rb, line 80
def exec(obj)
  raise 'exec(obj) must be implemented'
end
read_io(io) click to toggle source
# File lib/mats.rb, line 31
def read_io(io)
  u = MessagePack::Unpacker.new(io)
  begin
    u.each {|obj| exec(obj) }
  rescue EOFError
    # ignore
  rescue Interrupt
    return
  end
end
read_stream(files=nil) click to toggle source
# File lib/mats.rb, line 42
def read_stream(files=nil)
  if files == nil or files.size == 0
    read_io(STDIN)
  else
    f_list = Array.new
    if files.instance_of? String
      f_list << files
    else
      f_list += files
    end

    f_list.each do |fpath|
      if File.directory?(fpath)
        Find.find(fpath) do |file|
          next if File.directory?(file)
          read_io(File.open(file, 'r'))
        end
      else
        read_io(File.open(fpath, 'r'))
      end 
    end
  end
end
run(cmd_argv, range = nil) click to toggle source
# File lib/mats.rb, line 17
def run(cmd_argv, range = nil)
  args = @optpsr.parse(cmd_argv)

  unless range.nil?
    raise "Not enough arguments" if args.size < range.last + 1
    @argv = args.slice!(range)
  end

  setup(@argv)
  read_stream(args)
  teardown
end
setup(argv) click to toggle source
# File lib/mats.rb, line 76
def setup(argv)
  raise 'setup(argv) must be implemented' if argv.size > 0
end
teardown() click to toggle source
# File lib/mats.rb, line 84
def teardown; end
write_stream(obj) click to toggle source
# File lib/mats.rb, line 66
def write_stream(obj)
  if @out_encode == false
    pp obj
  else
    STDOUT.write(obj.to_msgpack)
  end
  rescue Errno::EPIPE => e ;      
end