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