fasterer-csv 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. data/lib/fasterer_csv.rb +38 -22
  2. metadata +2 -2
@@ -119,7 +119,7 @@ module FastererCSV
119
119
  end
120
120
 
121
121
  def parse(data, quot = '~', sep = ',')
122
- q, s, row, column, inquot, clean, maybe, table, field = quot[0], sep[0], [], [], false, true, false, nil, true
122
+ q, s, row, column, inquot, clean, maybe, table, field, endline = quot[0], sep[0], [], [], false, true, false, nil, true, false
123
123
 
124
124
  data.each_byte do |c|
125
125
  next if c == ?\r
@@ -127,44 +127,56 @@ module FastererCSV
127
127
  if maybe && c == s
128
128
  row << column.join
129
129
  column.clear
130
- clean, inquot, maybe, field = true, false, false, true
130
+ clean, inquot, maybe, field, endline = true, false, false, true, false
131
131
  elsif maybe && c == ?\n && table.nil?
132
- row << column.join
132
+ row << column.join unless (column.empty? && endline)
133
133
  column.clear
134
- table = Table.new(row)
135
- row, clean, inquot, maybe, field = [], true, false, false, false
134
+ table = Table.new(row) unless row.empty?
135
+ row, clean, inquot, maybe, field, endline = [], true, false, false, false, true
136
136
  elsif maybe && c == ?\n
137
- row << column.join
137
+ row << column.join unless (column.empty? && endline)
138
138
  column.clear
139
- table << row
140
- row, clean, inquot, maybe, field = [], true, false, false, false
139
+ table << row unless row.empty?
140
+ row, clean, inquot, maybe, field, endline = [], true, false, false, false, true
141
141
  elsif clean && c == q
142
- inquot, clean = true, false
142
+ inquot, clean, endline = true, false, false
143
143
  elsif maybe && c == q
144
144
  column << c.chr
145
- clean, maybe = false, false
145
+ clean, maybe, endline = false, false, false
146
146
  elsif c == q
147
- maybe = true
147
+ maybe, endline = true, false
148
148
  elsif inquot
149
149
  column << c.chr
150
- clean = false
150
+ clean, endline = false, false
151
151
  elsif c == s
152
152
  row << (column.empty? ? nil : column.join)
153
153
  column.clear
154
- clean, field = true, true
154
+ clean, field, endline = true, true, false
155
155
  elsif c == ?\n && table.nil?
156
- row << (column.empty? ? nil : column.join)
156
+
157
+ if column.empty? && !endline
158
+ row << nil
159
+ elsif !column.empty?
160
+ row << column.join
161
+ end
162
+
157
163
  column.clear
158
- table = Table.new(row)
159
- row, clean, inquot, field = [], true, false, false
164
+ table = Table.new(row) unless row.empty?
165
+ row, clean, inquot, field, endline = [], true, false, false, true
160
166
  elsif c == ?\n
161
- row << (column.empty? ? nil : column.join)
167
+
168
+ if column.empty? && !endline
169
+ row << nil
170
+ elsif !column.empty?
171
+ row << column.join
172
+ end
173
+
162
174
  column.clear
163
- table << row
164
- row, clean, inquot, field = [], true, false, false
175
+ table << row unless row.empty?
176
+ row, clean, inquot, field, endline = [], true, false, false, true
165
177
  else
166
178
  column << c.chr
167
- clean = false
179
+ clean, endline = false, false
168
180
  end
169
181
  end
170
182
 
@@ -174,14 +186,18 @@ module FastererCSV
174
186
  else
175
187
  row << (column.empty? ? nil :column.join)
176
188
  end
177
- table << row
189
+ if table
190
+ table << row unless row.empty?
191
+ else
192
+ table = Table.new(row) unless row.empty?
193
+ end
178
194
  elsif field
179
195
  row << (column.empty? ? nil : column.join)
180
196
  end
181
197
 
182
198
  table.each do |line|
183
199
  yield(line)
184
- end if block_given?
200
+ end if table && block_given?
185
201
 
186
202
  table
187
203
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 2
9
- version: 0.0.2
8
+ - 3
9
+ version: 0.0.3
10
10
  platform: ruby
11
11
  authors:
12
12
  - Mason