class Tar::FileReader::Line
Public Class Methods
new(file, *args)
click to toggle source
# File lib/tar/file_reader/line.rb, line 11 def initialize(file, *args) @file = file @skip = nil case args.size when 0 use_default_separator use_default_limit when 1 extract_separator_or_limit(*args) when 2 extract_separator(args.first) extract_limit(args.last) else raise ArgumentError, "wrong number of arguments (given #{args.size}, expected 0..2)", drop_internal_frames(caller) end end
Public Instance Methods
read()
click to toggle source
# File lib/tar/file_reader/line.rb, line 29 def read return @file.read if read_to_eof? skip_newlines if @skip line = read_line skip_newlines if @skip line end
Private Instance Methods
drop_internal_frames(stacktrace)
click to toggle source
# File lib/tar/file_reader/line.rb, line 61 def drop_internal_frames(stacktrace) stacktrace.drop_while { |frame| frame.include?("in `new'") } end
encoding()
click to toggle source
# File lib/tar/file_reader/line.rb, line 57 def encoding @file.internal_encoding || @file.external_encoding end
extract_limit(limit)
click to toggle source
# File lib/tar/file_reader/line.rb, line 95 def extract_limit(limit) if limit.nil? use_default_limit else @limit = limit.to_int use_default_limit if @limit.negative? end end
extract_separator(separator)
click to toggle source
# File lib/tar/file_reader/line.rb, line 83 def extract_separator(separator) case separator when nil @separator = nil when "" @separator = "\n\n".encode(encoding) @skip = "\n".encode(encoding) else @separator = separator.to_str.encode(encoding) end end
extract_separator_or_limit(separator_or_limit)
click to toggle source
# File lib/tar/file_reader/line.rb, line 73 def extract_separator_or_limit(separator_or_limit) if separator_or_limit.respond_to?(:to_int) use_default_separator extract_limit(separator_or_limit) else extract_separator(separator_or_limit) use_default_limit end end
reached_limit?(line)
click to toggle source
# File lib/tar/file_reader/line.rb, line 116 def reached_limit?(line) @limit && line.bytesize >= @limit end
reached_separator?(line)
click to toggle source
# File lib/tar/file_reader/line.rb, line 112 def reached_separator?(line) @separator && line.end_with?(@separator) end
read_line()
click to toggle source
# File lib/tar/file_reader/line.rb, line 50 def read_line line = String.new(encoding: encoding) line << @file.getc until stop_reading?(line) @file.lineno += 1 if reached_separator?(line) line end
read_to_eof?()
click to toggle source
# File lib/tar/file_reader/line.rb, line 104 def read_to_eof? @separator.nil? && @limit.nil? end
skip_newlines()
click to toggle source
# File lib/tar/file_reader/line.rb, line 40 def skip_newlines until @file.eof? char = @file.getc if char != @skip @file.ungetc char break end end end
stop_reading?(line)
click to toggle source
# File lib/tar/file_reader/line.rb, line 108 def stop_reading?(line) reached_separator?(line) || reached_limit?(line) || @file.eof? end
use_default_limit()
click to toggle source
# File lib/tar/file_reader/line.rb, line 69 def use_default_limit @limit = nil end
use_default_separator()
click to toggle source
# File lib/tar/file_reader/line.rb, line 65 def use_default_separator @separator = $INPUT_RECORD_SEPARATOR end