Class: CSV::Parser::InputsScanner
- Inherits:
-
Object
- Object
- CSV::Parser::InputsScanner
- Defined in:
- lib/csv/parser.rb
Instance Method Summary collapse
- #eos? ⇒ Boolean
-
#initialize(inputs, encoding, chunk_size: 8192) ⇒ InputsScanner
constructor
A new instance of InputsScanner.
- #keep_back ⇒ Object
- #keep_drop ⇒ Object
- #keep_end ⇒ Object
- #keep_start ⇒ Object
- #rest ⇒ Object
- #scan(pattern) ⇒ Object
- #scan_all(pattern) ⇒ Object
Constructor Details
#initialize(inputs, encoding, chunk_size: 8192) ⇒ InputsScanner
Returns a new instance of InputsScanner.
43 44 45 46 47 48 49 50 |
# File 'lib/csv/parser.rb', line 43 def initialize(inputs, encoding, chunk_size: 8192) @inputs = inputs.dup @encoding = encoding @chunk_size = chunk_size @last_scanner = @inputs.empty? @keeps = [] read_chunk end |
Instance Method Details
#eos? ⇒ Boolean
75 76 77 |
# File 'lib/csv/parser.rb', line 75 def eos? @scanner.eos? end |
#keep_back ⇒ Object
93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/csv/parser.rb', line 93 def keep_back start, buffer = @keeps.pop if buffer string = @scanner.string keep = string[start, string.size - start] if keep and not keep.empty? @inputs.unshift(StringIO.new(keep)) @last_scanner = false end @scanner = StringScanner.new(buffer) else @scanner.pos = start end end |
#keep_drop ⇒ Object
108 109 110 |
# File 'lib/csv/parser.rb', line 108 def keep_drop @keeps.pop end |
#keep_end ⇒ Object
83 84 85 86 87 88 89 90 91 |
# File 'lib/csv/parser.rb', line 83 def keep_end start, buffer = @keeps.pop keep = @scanner.string[start, @scanner.pos - start] if buffer buffer << keep keep = buffer end keep end |
#keep_start ⇒ Object
79 80 81 |
# File 'lib/csv/parser.rb', line 79 def keep_start @keeps.push([@scanner.pos, nil]) end |
#rest ⇒ Object
112 113 114 |
# File 'lib/csv/parser.rb', line 112 def rest @scanner.rest end |
#scan(pattern) ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/csv/parser.rb', line 52 def scan(pattern) value = @scanner.scan(pattern) return value if @last_scanner if value read_chunk if @scanner.eos? return value else nil end end |
#scan_all(pattern) ⇒ Object
64 65 66 67 68 69 70 71 72 73 |
# File 'lib/csv/parser.rb', line 64 def scan_all(pattern) value = @scanner.scan(pattern) return value if @last_scanner return nil if value.nil? while @scanner.eos? and read_chunk and (sub_value = @scanner.scan(pattern)) value << sub_value end value end |