fasterer-csv 0.0.12 → 0.0.14
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.
- data/lib/fasterer_csv.rb +16 -13
- metadata +3 -3
data/lib/fasterer_csv.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# Say hi to Rex for me!
|
2
|
-
|
3
1
|
require 'rubygems'
|
4
2
|
require 'stringio'
|
5
3
|
|
@@ -24,7 +22,7 @@ module FastererCSV
|
|
24
22
|
|
25
23
|
def <<(row)
|
26
24
|
@lines += 1
|
27
|
-
if row.
|
25
|
+
if !row.is_a?(Row)
|
28
26
|
row = Row.new(self, row, @lines)
|
29
27
|
end
|
30
28
|
if @headers.length != row.length
|
@@ -133,7 +131,7 @@ module FastererCSV
|
|
133
131
|
|
134
132
|
def [](*is)
|
135
133
|
is.each do |i|
|
136
|
-
val = if i.
|
134
|
+
val = if i.is_a? Fixnum
|
137
135
|
super
|
138
136
|
else
|
139
137
|
found = headers.index(Row::to_key(i))
|
@@ -145,7 +143,7 @@ module FastererCSV
|
|
145
143
|
end
|
146
144
|
|
147
145
|
def []=(key, val)
|
148
|
-
if key.
|
146
|
+
if key.is_a? Fixnum
|
149
147
|
super
|
150
148
|
else
|
151
149
|
key = Row::to_key(key)
|
@@ -162,7 +160,7 @@ module FastererCSV
|
|
162
160
|
end
|
163
161
|
|
164
162
|
def merge(row)
|
165
|
-
if row.
|
163
|
+
if row.is_a? Row
|
166
164
|
row.headers.each do |header|
|
167
165
|
self[header] = row[header]
|
168
166
|
end
|
@@ -335,27 +333,33 @@ module FastererCSV
|
|
335
333
|
end
|
336
334
|
|
337
335
|
def quot_row(row, q = '~', s = ',')
|
338
|
-
|
336
|
+
num_quot = /(?:[#{q}#{s}\n]|^\d+$)/
|
337
|
+
need_quot = /[#{q}#{s}\n]/
|
339
338
|
row.map do |val|
|
340
339
|
if val.nil?
|
341
340
|
""
|
342
|
-
elsif val.
|
341
|
+
elsif val.is_a? Numeric
|
343
342
|
val.to_s
|
344
343
|
else
|
344
|
+
quot = val.is_a?(Symbol) ? need_quot : num_quot
|
345
345
|
val = String(val)
|
346
346
|
if val.length == 0
|
347
|
-
|
347
|
+
q * 2
|
348
348
|
else
|
349
|
-
val[
|
349
|
+
val[quot] ? q + val.gsub(q, q * 2) + q : val
|
350
350
|
end
|
351
351
|
end
|
352
352
|
end.join(s) + "\n"
|
353
353
|
end
|
354
354
|
|
355
355
|
class IOWriter
|
356
|
-
def initialize(file, quot = '~', sep = ',') @io = file; @quot = quot; @sep = sep end
|
356
|
+
def initialize(file, quot = '~', sep = ',') @first = true; @io = file; @quot = quot; @sep = sep end
|
357
357
|
def <<(row)
|
358
|
-
raise "can only write arrays! #{row.class} #{row.inspect}" unless row.
|
358
|
+
raise "can only write arrays! #{row.class} #{row.inspect}" unless row.is_a? Array
|
359
|
+
if @first && row.is_a?(Row)
|
360
|
+
@first = false
|
361
|
+
self.<<(row.headers)
|
362
|
+
end
|
359
363
|
@io.syswrite FastererCSV::quot_row(row, @quot, @sep)
|
360
364
|
row
|
361
365
|
end
|
@@ -378,4 +382,3 @@ module FastererCSV
|
|
378
382
|
end
|
379
383
|
end
|
380
384
|
end
|
381
|
-
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fasterer-csv
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 3
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 14
|
10
|
+
version: 0.0.14
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Mason
|