fastercsv 1.4.0 → 1.5.5
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/CHANGELOG +37 -0
- data/INSTALL +4 -6
- data/LICENSE +2 -0
- data/Rakefile +5 -6
- data/examples/shortcut_interface.rb +1 -1
- data/lib/faster_csv.rb +1814 -1786
- data/lib/fastercsv.rb +1 -1
- data/test/line_endings.gz +0 -0
- data/test/tc_csv_parsing.rb +29 -2
- data/test/tc_csv_writing.rb +1 -1
- data/test/tc_data_converters.rb +1 -1
- data/test/tc_encodings.rb +1 -1
- data/test/tc_features.rb +1 -1
- data/test/tc_headers.rb +1 -1
- data/test/tc_interface.rb +18 -2
- data/test/tc_row.rb +1 -1
- data/test/tc_serialization.rb +1 -1
- data/test/tc_speed.rb +1 -1
- data/test/tc_table.rb +9 -1
- data/test/ts_all.rb +1 -1
- metadata +34 -32
- data/setup.rb +0 -1360
data/lib/fastercsv.rb
CHANGED
Binary file
|
data/test/tc_csv_parsing.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
# tc_csv_parsing.rb
|
4
4
|
#
|
5
5
|
# Created by James Edward Gray II on 2005-10-31.
|
6
|
-
# Copyright
|
6
|
+
# Copyright 2012 Gray Productions. All rights reserved.
|
7
7
|
|
8
8
|
require "test/unit"
|
9
9
|
|
@@ -108,6 +108,33 @@ class TestCSVParsing < Test::Unit::TestCase
|
|
108
108
|
#
|
109
109
|
assert_equal(Array.new, FasterCSV.parse_line("\n1,2,3\n"))
|
110
110
|
end
|
111
|
+
|
112
|
+
def test_rob_edge_cases
|
113
|
+
[ [%Q{"a\nb"}, ["a\nb"]],
|
114
|
+
[%Q{"\n\n\n"}, ["\n\n\n"]],
|
115
|
+
[%Q{a,"b\n\nc"}, ['a', "b\n\nc"]],
|
116
|
+
[%Q{,"\r\n"}, [nil,"\r\n"]],
|
117
|
+
[%Q{,"\r\n."}, [nil,"\r\n."]],
|
118
|
+
[%Q{"a\na","one newline"}, ["a\na", 'one newline']],
|
119
|
+
[%Q{"a\n\na","two newlines"}, ["a\n\na", 'two newlines']],
|
120
|
+
[%Q{"a\r\na","one CRLF"}, ["a\r\na", 'one CRLF']],
|
121
|
+
[%Q{"a\r\n\r\na","two CRLFs"}, ["a\r\n\r\na", 'two CRLFs']],
|
122
|
+
[%Q{with blank,"start\n\nfinish"\n}, ['with blank', "start\n\nfinish"]],
|
123
|
+
].each do |edge_case|
|
124
|
+
assert_equal(edge_case.last, FasterCSV.parse_line(edge_case.first))
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
def test_non_regex_edge_cases
|
129
|
+
# An early version of the non-regex parser fails this test
|
130
|
+
[["foo,\"foo,bar,baz,foo\",\"foo\"", ["foo", "foo,bar,baz,foo", "foo"]]].each do |edge_case|
|
131
|
+
assert_equal(edge_case.last, FasterCSV.parse_line(edge_case.first))
|
132
|
+
end
|
133
|
+
|
134
|
+
assert_raise(FasterCSV::MalformedCSVError) do
|
135
|
+
FasterCSV.parse_line("1,\"23\"4\"5\", 6")
|
136
|
+
end
|
137
|
+
end
|
111
138
|
|
112
139
|
def test_malformed_csv
|
113
140
|
assert_raise(FasterCSV::MalformedCSVError) do
|
@@ -158,7 +185,7 @@ class TestCSVParsing < Test::Unit::TestCase
|
|
158
185
|
assert_send([csv.lineno, :<, 4])
|
159
186
|
end
|
160
187
|
rescue FasterCSV::MalformedCSVError
|
161
|
-
assert_equal("Illegal quoting
|
188
|
+
assert_equal("Illegal quoting in line 4.", $!.message)
|
162
189
|
end
|
163
190
|
end
|
164
191
|
end
|
data/test/tc_csv_writing.rb
CHANGED
data/test/tc_data_converters.rb
CHANGED
data/test/tc_encodings.rb
CHANGED
data/test/tc_features.rb
CHANGED
data/test/tc_headers.rb
CHANGED
data/test/tc_interface.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
# tc_interface.rb
|
4
4
|
#
|
5
5
|
# Created by James Edward Gray II on 2005-11-14.
|
6
|
-
# Copyright
|
6
|
+
# Copyright 2012 Gray Productions. All rights reserved.
|
7
7
|
|
8
8
|
require "test/unit"
|
9
9
|
|
@@ -72,6 +72,11 @@ class TestFasterCSVInterface < Test::Unit::TestCase
|
|
72
72
|
assert_equal(%w{1 2 3}, row)
|
73
73
|
end
|
74
74
|
|
75
|
+
def test_parse_line_with_empty_lines
|
76
|
+
assert_equal(nil, FasterCSV.parse_line("")) # to signal eof
|
77
|
+
assert_equal(Array.new, FasterCSV.parse_line("\n1,2,3"))
|
78
|
+
end
|
79
|
+
|
75
80
|
def test_read_and_readlines
|
76
81
|
assert_equal( @expected,
|
77
82
|
FasterCSV.read(@path, :col_sep => "\t", :row_sep => "\r\n") )
|
@@ -103,6 +108,17 @@ class TestFasterCSVInterface < Test::Unit::TestCase
|
|
103
108
|
assert_equal(nil, csv.shift)
|
104
109
|
end
|
105
110
|
end
|
111
|
+
|
112
|
+
def test_long_line # ruby's regex parser may have problems with long rows
|
113
|
+
File.unlink(@path)
|
114
|
+
|
115
|
+
long_field_length = 2800
|
116
|
+
File.open(@path, "w") do |file|
|
117
|
+
file << "1\t2\t#{'3' * long_field_length}\r\n"
|
118
|
+
end
|
119
|
+
@expected = [%w{1 2} + ['3' * long_field_length]]
|
120
|
+
test_shift
|
121
|
+
end
|
106
122
|
|
107
123
|
### Test Write Interface ###
|
108
124
|
|
@@ -165,7 +181,7 @@ class TestFasterCSVInterface < Test::Unit::TestCase
|
|
165
181
|
csv << lines.first.keys
|
166
182
|
lines.each { |line| csv << line }
|
167
183
|
end
|
168
|
-
FasterCSV.open( @path, "
|
184
|
+
FasterCSV.open( @path, "r", :headers => true,
|
169
185
|
:converters => :all,
|
170
186
|
:header_converters => :symbol ) do |csv|
|
171
187
|
csv.each { |line| assert_equal(lines.shift, line.to_hash) }
|
data/test/tc_row.rb
CHANGED
data/test/tc_serialization.rb
CHANGED
data/test/tc_speed.rb
CHANGED
data/test/tc_table.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
# tc_table.rb
|
4
4
|
#
|
5
5
|
# Created by James Edward Gray II on 2006-02-24.
|
6
|
-
# Copyright
|
6
|
+
# Copyright 2012 Gray Productions. All rights reserved.
|
7
7
|
|
8
8
|
require "test/unit"
|
9
9
|
|
@@ -251,6 +251,8 @@ class TestFasterCSVTable < Test::Unit::TestCase
|
|
251
251
|
# with options
|
252
252
|
assert_equal( csv.gsub(",", "|").gsub("\n", "\r\n"),
|
253
253
|
@table.to_csv(:col_sep => "|", :row_sep => "\r\n") )
|
254
|
+
assert_equal( csv.to_a[1..-1].join,
|
255
|
+
@table.to_csv(:write_headers => false) )
|
254
256
|
|
255
257
|
# with headers
|
256
258
|
assert_equal(csv, @header_table.to_csv)
|
@@ -319,6 +321,12 @@ class TestFasterCSVTable < Test::Unit::TestCase
|
|
319
321
|
END_RESULT
|
320
322
|
end
|
321
323
|
|
324
|
+
def test_delete_with_blank_rows
|
325
|
+
data = "col1,col2\nra1,ra2\n\nrb1,rb2"
|
326
|
+
table = FasterCSV.parse(data, :headers => true)
|
327
|
+
assert_equal(["ra2", nil, "rb2"], table.delete("col2"))
|
328
|
+
end
|
329
|
+
|
322
330
|
def test_delete_if
|
323
331
|
######################
|
324
332
|
### Mixed/Row Mode ###
|
data/test/ts_all.rb
CHANGED
metadata
CHANGED
@@ -1,25 +1,28 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: fastercsv
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.5.5
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
|
-
authors:
|
7
|
+
authors:
|
7
8
|
- James Edward Gray II
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
|
12
|
-
date: 2008-09-10 00:00:00 -05:00
|
13
|
-
default_executable:
|
12
|
+
date: 2012-05-15 00:00:00.000000000 Z
|
14
13
|
dependencies: []
|
14
|
+
description: ! 'FasterCSV is intended as a complete replacement to the CSV standard
|
15
|
+
library. It
|
16
|
+
|
17
|
+
is significantly faster and smaller while still being pure Ruby code. It also
|
18
|
+
|
19
|
+
strives for a better interface.
|
15
20
|
|
16
|
-
|
21
|
+
'
|
17
22
|
email: james@grayproductions.net
|
18
23
|
executables: []
|
19
|
-
|
20
24
|
extensions: []
|
21
|
-
|
22
|
-
extra_rdoc_files:
|
25
|
+
extra_rdoc_files:
|
23
26
|
- AUTHORS
|
24
27
|
- COPYING
|
25
28
|
- README
|
@@ -27,7 +30,7 @@ extra_rdoc_files:
|
|
27
30
|
- TODO
|
28
31
|
- CHANGELOG
|
29
32
|
- LICENSE
|
30
|
-
files:
|
33
|
+
files:
|
31
34
|
- lib/faster_csv.rb
|
32
35
|
- lib/fastercsv.rb
|
33
36
|
- test/tc_csv_parsing.rb
|
@@ -51,7 +54,7 @@ files:
|
|
51
54
|
- test/test_data.csv
|
52
55
|
- examples/purchase.csv
|
53
56
|
- Rakefile
|
54
|
-
-
|
57
|
+
- test/line_endings.gz
|
55
58
|
- AUTHORS
|
56
59
|
- COPYING
|
57
60
|
- README
|
@@ -59,34 +62,33 @@ files:
|
|
59
62
|
- TODO
|
60
63
|
- CHANGELOG
|
61
64
|
- LICENSE
|
62
|
-
has_rdoc: true
|
63
65
|
homepage: http://fastercsv.rubyforge.org
|
66
|
+
licenses: []
|
64
67
|
post_install_message:
|
65
|
-
rdoc_options:
|
68
|
+
rdoc_options:
|
66
69
|
- --title
|
67
70
|
- FasterCSV Documentation
|
68
71
|
- --main
|
69
72
|
- README
|
70
|
-
require_paths:
|
73
|
+
require_paths:
|
71
74
|
- lib
|
72
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
75
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
76
|
+
none: false
|
77
|
+
requirements:
|
78
|
+
- - ! '>='
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '0'
|
81
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
82
|
+
none: false
|
83
|
+
requirements:
|
84
|
+
- - ! '>='
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0'
|
84
87
|
requirements: []
|
85
|
-
|
86
88
|
rubyforge_project: fastercsv
|
87
|
-
rubygems_version: 1.
|
89
|
+
rubygems_version: 1.8.24
|
88
90
|
signing_key:
|
89
|
-
specification_version:
|
91
|
+
specification_version: 3
|
90
92
|
summary: FasterCSV is CSV, but faster, smaller, and cleaner.
|
91
|
-
test_files:
|
93
|
+
test_files:
|
92
94
|
- test/ts_all.rb
|