rcsv 0.0.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/.gitignore +8 -0
- data/COPYING.LESSER +458 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +18 -0
- data/LICENSE +30 -0
- data/README.md +148 -0
- data/Rakefile +18 -0
- data/bench.rb +32 -0
- data/ext/rcsv/csv.h +86 -0
- data/ext/rcsv/extconf.rb +3 -0
- data/ext/rcsv/libcsv.c +579 -0
- data/ext/rcsv/rcsv.c +365 -0
- data/ext/rcsv/test.rb +5 -0
- data/lib/lib_csv.rb +88 -0
- data/lib/rcsv.rb +91 -0
- data/lib/rcsv/version.rb +3 -0
- data/rcsv.gemspec +19 -0
- data/test/test_rcsv.csv +889 -0
- data/test/test_rcsv_raw_parse.rb +156 -0
- metadata +70 -0
@@ -0,0 +1,156 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'rcsv'
|
3
|
+
|
4
|
+
class RcsvTest < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
@csv_data = File.read('test/test_rcsv.csv')
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_rcsv
|
10
|
+
raw_parsed_csv_data = Rcsv.raw_parse(@csv_data)
|
11
|
+
|
12
|
+
assert_equal(raw_parsed_csv_data[0][2], 'EDADEDADEDADEDADEDADEDAD')
|
13
|
+
assert_equal(raw_parsed_csv_data[0][13], '$$$908080')
|
14
|
+
assert_equal(raw_parsed_csv_data[0][14], '"')
|
15
|
+
assert_equal(raw_parsed_csv_data[0][15], 'true/false')
|
16
|
+
assert_equal(raw_parsed_csv_data[0][16], nil)
|
17
|
+
assert_equal(raw_parsed_csv_data[9][2], nil)
|
18
|
+
assert_equal(raw_parsed_csv_data[3][6], '""C81E-=; **ECCB; .. 89')
|
19
|
+
assert_equal(raw_parsed_csv_data[888][13], 'Dallas, TX')
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_rcsv_col_sep
|
23
|
+
tsv_data = @csv_data.tr(",", "\t")
|
24
|
+
raw_parsed_tsv_data = Rcsv.raw_parse(tsv_data, :col_sep => "\t")
|
25
|
+
|
26
|
+
assert_equal(raw_parsed_tsv_data[0][2], 'EDADEDADEDADEDADEDADEDAD')
|
27
|
+
assert_equal(raw_parsed_tsv_data[0][13], '$$$908080')
|
28
|
+
assert_equal(raw_parsed_tsv_data[0][14], '"')
|
29
|
+
assert_equal(raw_parsed_tsv_data[0][15], 'true/false')
|
30
|
+
assert_equal(raw_parsed_tsv_data[0][16], nil)
|
31
|
+
assert_equal(raw_parsed_tsv_data[9][2], nil)
|
32
|
+
assert_equal(raw_parsed_tsv_data[3][6], '""C81E-=; **ECCB; .. 89')
|
33
|
+
assert_equal(raw_parsed_tsv_data[888][13], "Dallas\t TX")
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_broken_data
|
37
|
+
broken_data = @csv_data.sub(/"/, '')
|
38
|
+
|
39
|
+
assert_raise(Rcsv::ParseError) do
|
40
|
+
Rcsv.raw_parse(broken_data)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_broken_data_without_strict
|
45
|
+
broken_data = @csv_data.sub(/"/, '')
|
46
|
+
|
47
|
+
raw_parsed_csv_data = Rcsv.raw_parse(broken_data, :nostrict => true)
|
48
|
+
assert_equal(["DSAdsfksjh", "iii ooo iii", "EDADEDADEDADEDADEDADEDAD", "111 333 555", "NMLKTF", "---==---", "//", "###", "0000000000", "Asdad bvd qwert", ";'''sd", "@@@", "OCTZ", "$$$908080", "\",true/false\nC85A5B9F,85259637,,96,6838,1983-06-14,\"\"\"C4CA-=; **1679; .. 79", "210,11", "908e", "1281-03-09", "7257.4654049904275", "20efe749-50fe-4b6a-a603-7f9cd1dc6c6d", "3", "New York, NY", "u", "2.228169203286535", "t"], raw_parsed_csv_data.first)
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_only_rows
|
52
|
+
raw_parsed_csv_data = Rcsv.raw_parse(@csv_data, :only_rows => ['GBP'])
|
53
|
+
|
54
|
+
assert_equal(raw_parsed_csv_data[0][0], 'GBP')
|
55
|
+
assert_equal(raw_parsed_csv_data[-1][3], '15')
|
56
|
+
assert_equal(raw_parsed_csv_data.size, 3)
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_only_rows_with_nil_and_empty_string_filter
|
60
|
+
raw_parsed_csv_data = Rcsv.raw_parse(@csv_data, :only_rows => ['GBP', nil, '', '51'])
|
61
|
+
|
62
|
+
assert_equal(raw_parsed_csv_data[0][0], 'GBP')
|
63
|
+
assert_equal(raw_parsed_csv_data[0][2], nil)
|
64
|
+
assert_equal(raw_parsed_csv_data.size, 1)
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_only_rows_with_nil_beginning
|
68
|
+
raw_parsed_csv_data = Rcsv.raw_parse(@csv_data, :only_rows => [nil, nil, nil, '96', nil])
|
69
|
+
|
70
|
+
assert_equal(raw_parsed_csv_data[1][0], 'C3B87A6B')
|
71
|
+
assert_equal(raw_parsed_csv_data[0][2], nil)
|
72
|
+
assert_equal(raw_parsed_csv_data[3][3], '96')
|
73
|
+
assert_equal(raw_parsed_csv_data.size, 5)
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_row_defaults
|
77
|
+
raw_parsed_csv_data = Rcsv.raw_parse(@csv_data, :row_defaults => [nil, nil, :booya, nil, 'never ever'])
|
78
|
+
|
79
|
+
assert_equal(raw_parsed_csv_data[0][2], 'EDADEDADEDADEDADEDADEDAD')
|
80
|
+
assert_equal(raw_parsed_csv_data[1][2], :booya)
|
81
|
+
assert_equal(raw_parsed_csv_data[1][0], 'C85A5B9F')
|
82
|
+
assert_equal(raw_parsed_csv_data[2][4], '9134')
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_row_conversions
|
86
|
+
raw_parsed_csv_data = Rcsv.raw_parse(@csv_data.each_line.to_a[1..-1].join, # skipping string headers
|
87
|
+
:row_conversions => 'sisiisssssfsissf')
|
88
|
+
|
89
|
+
assert_equal(raw_parsed_csv_data[0][2], nil)
|
90
|
+
assert_equal(raw_parsed_csv_data[0][3], 96)
|
91
|
+
assert_equal(raw_parsed_csv_data[0][8], '908e')
|
92
|
+
assert_equal(raw_parsed_csv_data[1][15], -9.549296585513721)
|
93
|
+
assert_equal(raw_parsed_csv_data[3][5], '2015-12-22')
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_row_conversions_with_column_exclusions
|
97
|
+
raw_parsed_csv_data = Rcsv.raw_parse(@csv_data.each_line.to_a[1..-1].join, # skipping string headers
|
98
|
+
:row_conversions => 's f issss fsis fb')
|
99
|
+
|
100
|
+
assert_equal(raw_parsed_csv_data[0][1], nil)
|
101
|
+
assert_equal(raw_parsed_csv_data[0][2], 6838)
|
102
|
+
assert_equal(raw_parsed_csv_data[0][8], '20efe749-50fe-4b6a-a603-7f9cd1dc6c6d')
|
103
|
+
assert_equal(raw_parsed_csv_data[0][12], true)
|
104
|
+
assert_equal(raw_parsed_csv_data[0][13], nil)
|
105
|
+
assert_equal(raw_parsed_csv_data[4][3], '2020-12-09')
|
106
|
+
end
|
107
|
+
|
108
|
+
def test_offset_rows
|
109
|
+
raw_parsed_csv_data = Rcsv.raw_parse(@csv_data, :offset_rows => 51)
|
110
|
+
|
111
|
+
assert_equal('0FFDEA62', raw_parsed_csv_data[0][0])
|
112
|
+
assert_equal(889 - 51, raw_parsed_csv_data.count)
|
113
|
+
end
|
114
|
+
|
115
|
+
def test_rows_as_hash
|
116
|
+
raw_parsed_csv_data = Rcsv.raw_parse(@csv_data, :row_as_hash => true, :column_names => [
|
117
|
+
'DSAdsfksjh',
|
118
|
+
'iii ooo iii',
|
119
|
+
'EDADEDADEDADEDADEDADEDAD',
|
120
|
+
'111 333 555',
|
121
|
+
'NMLKTF',
|
122
|
+
'---==---',
|
123
|
+
'//',
|
124
|
+
'###',
|
125
|
+
'0000000000',
|
126
|
+
'Asdad bvd qwert',
|
127
|
+
";'''sd",
|
128
|
+
'@@@',
|
129
|
+
'OCTZ',
|
130
|
+
'$$$908080',
|
131
|
+
'"',
|
132
|
+
'noname',
|
133
|
+
'booleator'
|
134
|
+
])
|
135
|
+
|
136
|
+
assert_equal({
|
137
|
+
'DSAdsfksjh' => 'C85A5B9F',
|
138
|
+
'iii ooo iii' => '85259637',
|
139
|
+
'EDADEDADEDADEDADEDADEDAD' => nil,
|
140
|
+
'111 333 555' => '96',
|
141
|
+
'NMLKTF' => '6838',
|
142
|
+
'---==---' => '1983-06-14',
|
143
|
+
'//' => '""C4CA-=; **1679; .. 79',
|
144
|
+
'###' => '210,11',
|
145
|
+
'0000000000' => '908e',
|
146
|
+
'Asdad bvd qwert' => '1281-03-09',
|
147
|
+
";'''sd" => '7257.4654049904275',
|
148
|
+
'@@@' => '20efe749-50fe-4b6a-a603-7f9cd1dc6c6d',
|
149
|
+
'OCTZ' => '3',
|
150
|
+
'$$$908080' => "New York, NY",
|
151
|
+
'"' => 'u',
|
152
|
+
'noname' => '2.228169203286535',
|
153
|
+
'booleator' => 't'
|
154
|
+
}, raw_parsed_csv_data[1])
|
155
|
+
end
|
156
|
+
end
|
metadata
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rcsv
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.5
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Arthur Pirogovski
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-11-16 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: A libcsv-based CSV parser for Ruby
|
15
|
+
email:
|
16
|
+
- arthur@flyingtealeaf.com
|
17
|
+
executables: []
|
18
|
+
extensions:
|
19
|
+
- ext/rcsv/extconf.rb
|
20
|
+
extra_rdoc_files: []
|
21
|
+
files:
|
22
|
+
- .gitignore
|
23
|
+
- COPYING.LESSER
|
24
|
+
- Gemfile
|
25
|
+
- Gemfile.lock
|
26
|
+
- LICENSE
|
27
|
+
- README.md
|
28
|
+
- Rakefile
|
29
|
+
- bench.rb
|
30
|
+
- ext/rcsv/csv.h
|
31
|
+
- ext/rcsv/extconf.rb
|
32
|
+
- ext/rcsv/libcsv.c
|
33
|
+
- ext/rcsv/rcsv.c
|
34
|
+
- ext/rcsv/test.rb
|
35
|
+
- lib/lib_csv.rb
|
36
|
+
- lib/rcsv.rb
|
37
|
+
- lib/rcsv/version.rb
|
38
|
+
- rcsv.gemspec
|
39
|
+
- test/test_rcsv.csv
|
40
|
+
- test/test_rcsv_raw_parse.rb
|
41
|
+
homepage: http://github.com/fiksu/rcsv
|
42
|
+
licenses: []
|
43
|
+
post_install_message:
|
44
|
+
rdoc_options: []
|
45
|
+
require_paths:
|
46
|
+
- lib
|
47
|
+
- ext
|
48
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
55
|
+
none: false
|
56
|
+
requirements:
|
57
|
+
- - ! '>='
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '0'
|
60
|
+
requirements: []
|
61
|
+
rubyforge_project:
|
62
|
+
rubygems_version: 1.8.24
|
63
|
+
signing_key:
|
64
|
+
specification_version: 3
|
65
|
+
summary: Fast CSV parsing library for MRI based on libcsv. Supports type conversion,
|
66
|
+
non-strict parsing and basic filtering.
|
67
|
+
test_files:
|
68
|
+
- test/test_rcsv.csv
|
69
|
+
- test/test_rcsv_raw_parse.rb
|
70
|
+
has_rdoc:
|