csvreader 1.2.1 → 1.2.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.
- checksums.yaml +5 -5
- data/{HISTORY.md → CHANGELOG.md} +3 -3
- data/Manifest.txt +13 -12
- data/README.md +682 -677
- data/Rakefile +33 -26
- data/{test/data → datasets}/beer.csv +0 -0
- data/{test/data → datasets}/beer11.csv +0 -0
- data/{test/data → datasets}/cars11.csv +10 -10
- data/{test/data → datasets}/cities11.csv +12 -12
- data/{test/data → datasets}/customers11.csv +13 -13
- data/{test/data → datasets}/iris.attrib.csv +25 -25
- data/{test/data → datasets}/iris11.csv +163 -163
- data/{test/data → datasets}/lcc.attrib.csv +14 -14
- data/{test/data → datasets}/shakespeare.csv +9 -9
- data/{test/data → datasets}/test.csv +0 -0
- data/lib/csvreader/base.rb +36 -2
- data/lib/csvreader/buffer.rb +0 -1
- data/lib/csvreader/builder.rb +0 -1
- data/lib/csvreader/converter.rb +0 -1
- data/lib/csvreader/parser.rb +32 -33
- data/lib/csvreader/parser_fixed.rb +105 -106
- data/lib/csvreader/parser_json.rb +23 -5
- data/lib/csvreader/parser_std.rb +582 -534
- data/lib/csvreader/parser_strict.rb +290 -291
- data/lib/csvreader/parser_tab.rb +22 -62
- data/lib/csvreader/parser_table.rb +122 -123
- data/lib/csvreader/parser_yaml.rb +23 -0
- data/lib/csvreader/reader.rb +2 -3
- data/lib/csvreader/reader_hash.rb +3 -2
- data/lib/csvreader/version.rb +30 -32
- data/lib/csvreader.rb +0 -1
- data/test/helper.rb +1 -1
- data/test/test_parser_autofix.rb +28 -0
- data/test/test_parser_formats.rb +66 -66
- data/test/test_parser_java.rb +208 -208
- metadata +72 -25
- data/LICENSE.md +0 -116
data/test/test_parser_java.rb
CHANGED
@@ -1,208 +1,208 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
###
|
4
|
-
# to run use
|
5
|
-
# ruby -I ./lib -I ./test test/test_parser_java.rb
|
6
|
-
|
7
|
-
|
8
|
-
require 'helper'
|
9
|
-
|
10
|
-
##########################
|
11
|
-
# try some tests from apache java (commons) csv reader
|
12
|
-
# see https://github.com/apache/commons-csv/blob/master/src/test/java/org/apache/commons/csv/LexerTest.java
|
13
|
-
|
14
|
-
|
15
|
-
class TestParserJava < MiniTest::Test
|
16
|
-
|
17
|
-
|
18
|
-
LF = "\n" ## \n == ASCII 0x0A (hex) 10 (dec) = LF (Newline/line feed)
|
19
|
-
CR = "\r" ## \r == ASCII 0x0D (hex) 13 (dec) = CR (Carriage return)
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
def parser
|
24
|
-
CsvReader::Parser
|
25
|
-
end
|
26
|
-
|
27
|
-
def test_surrounding_spaces_are_deleted
|
28
|
-
assert_equal [["noSpaces",
|
29
|
-
"leadingSpaces",
|
30
|
-
"trailingSpaces",
|
31
|
-
"surroundingSpaces",
|
32
|
-
"",
|
33
|
-
"",
|
34
|
-
""]], parser.default.parse( "noSpaces, leadingSpaces,trailingSpaces , surroundingSpaces , ,," )
|
35
|
-
end
|
36
|
-
|
37
|
-
|
38
|
-
def test_surrounding_tabs_are_deleted
|
39
|
-
assert_equal [["noTabs",
|
40
|
-
"leadingTab",
|
41
|
-
"trailingTab",
|
42
|
-
"surroundingTabs",
|
43
|
-
"",
|
44
|
-
"",
|
45
|
-
""]], parser.default.parse( "noTabs,\tleadingTab,trailingTab\t,\tsurroundingTabs\t,\t\t,," )
|
46
|
-
end
|
47
|
-
|
48
|
-
def test_ignore_empty_lines
|
49
|
-
assert_equal [[ "first", "line", "" ],
|
50
|
-
[ "second", "line" ],
|
51
|
-
[ "third line" ],
|
52
|
-
[ "last", "line" ]],
|
53
|
-
parser.default.parse( "first,line,\n" + "\n" + "\n" +
|
54
|
-
"second,line\n" + "\n" + "\n" +
|
55
|
-
"third line \n" + "\n" + "\n" +
|
56
|
-
"last, line \n" + "\n" + "\n" + "\n" )
|
57
|
-
end
|
58
|
-
|
59
|
-
|
60
|
-
def test_comments
|
61
|
-
assert_equal [["first", "line", "" ],
|
62
|
-
["second", "line", "tokenWith#no-comment" ],
|
63
|
-
["third", "line"
|
64
|
-
parser.default.parse( "first,line,\n" +
|
65
|
-
"second,line,tokenWith#no-comment\n" +
|
66
|
-
"# comment line \n" +
|
67
|
-
"third,line
|
68
|
-
"# penultimate comment\n" +
|
69
|
-
"# Final comment\n" )
|
70
|
-
end
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
def test_comments_and_empty_lines
|
77
|
-
parser.strict.comment = '#'
|
78
|
-
|
79
|
-
assert_equal [[ "1", "2", "3", "" ], ## 1
|
80
|
-
[ "" ], ## 1b
|
81
|
-
[ "" ], ## 1c
|
82
|
-
[ "a", "b x", "c#no-comment" ], ## 2
|
83
|
-
[ "" ], ## 4
|
84
|
-
[ "" ], ## 4b
|
85
|
-
[ "d", "e", "#no-comment" ], ## 5
|
86
|
-
[ "" ], ## 5b
|
87
|
-
[ "" ], ## 5c
|
88
|
-
[ "" ], ## 6b
|
89
|
-
[ "" ] ## 6c
|
90
|
-
],
|
91
|
-
parser.strict.parse(
|
92
|
-
"1,2,3,\n" + ## 1
|
93
|
-
"\n" + ## 1b
|
94
|
-
"\n" + ## 1c
|
95
|
-
"a,b x,c#no-comment\n" + ## 2
|
96
|
-
"#foo\n" + ## 3
|
97
|
-
"\n" + ## 4
|
98
|
-
"\n" + ## 4b
|
99
|
-
"d,e,#no-comment\n" + ## 5
|
100
|
-
"\n" + ## 5b
|
101
|
-
"\n" + ## 5c
|
102
|
-
"# penultimate comment\n" + ## 6
|
103
|
-
"\n" + ## 6b
|
104
|
-
"\n" + ## 6c
|
105
|
-
"# Final comment\n" ## 7
|
106
|
-
)
|
107
|
-
|
108
|
-
parser.strict.comment = false ## reset to defaults
|
109
|
-
end
|
110
|
-
|
111
|
-
|
112
|
-
def test_backslash_with_escaping
|
113
|
-
## simple token with escaping enabled
|
114
|
-
assert_equal [[ "a", ",", "b\\" ],
|
115
|
-
[ ",", "\nc", "d\r" ],
|
116
|
-
[ "e" ]], parser.default.parse( "a,\\,,b\\\\\n" +
|
117
|
-
"\\,,\\\nc,d\\\r\n" +
|
118
|
-
"e" )
|
119
|
-
|
120
|
-
|
121
|
-
parser.strict.escape = "\\"
|
122
|
-
assert_equal [[ "a", ",", "b\\" ],
|
123
|
-
[ ",", "\nc", "d\r" ],
|
124
|
-
[ "e" ]], parser.strict.parse( "a,\\,,b\\\\\n" +
|
125
|
-
"\\,,\\\nc,d\\\r\n" +
|
126
|
-
"e" )
|
127
|
-
parser.strict.escape = false
|
128
|
-
end
|
129
|
-
|
130
|
-
|
131
|
-
def test_backslash_without_escaping
|
132
|
-
## simple token with escaping not enabled
|
133
|
-
assert_equal [[ "a",
|
134
|
-
"\\", ## an unquoted single backslash is not an escape char
|
135
|
-
"",
|
136
|
-
"b\\" ## an unquoted single backslash is not an escape char
|
137
|
-
],
|
138
|
-
[ "\\", "", "" ]], parser.strict.parse( "a,\\,,b\\\n" +
|
139
|
-
"\\,," )
|
140
|
-
|
141
|
-
end
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
def test_next_token4
|
146
|
-
## encapsulator tokenizer (single line)
|
147
|
-
assert_equal [[ "a", "foo", "b" ],
|
148
|
-
[ "a", " foo", "b" ],
|
149
|
-
[ "a", "foo ", "b" ],
|
150
|
-
[ "a", " foo ", "b" ]],
|
151
|
-
parser.default.parse( "a,\"foo\",b\n" +
|
152
|
-
"a, \" foo\",b\n" +
|
153
|
-
"a,\"foo \" ,b\n" +
|
154
|
-
"a, \" foo \" ,b" )
|
155
|
-
end
|
156
|
-
|
157
|
-
|
158
|
-
def test_next_token5
|
159
|
-
## encapsulator tokenizer (multi line, delimiter in string)
|
160
|
-
assert_equal [[ "a", "foo\n", "b" ],
|
161
|
-
[ "foo\n baar ,,," ],
|
162
|
-
[ "\n\t \n" ]],
|
163
|
-
parser.default.parse( "a,\"foo\n\",b\n" +
|
164
|
-
"\"foo\n baar ,,,\"\n" +
|
165
|
-
"\"\n\t \n\"" )
|
166
|
-
end
|
167
|
-
|
168
|
-
|
169
|
-
def test_separator_is_tab
|
170
|
-
parser.strict.sep = "\t"
|
171
|
-
assert_equal [["one",
|
172
|
-
"two",
|
173
|
-
"",
|
174
|
-
"four ",
|
175
|
-
" five",
|
176
|
-
" six" ]], parser.strict.parse( "one\ttwo\t\tfour \t five\t six" )
|
177
|
-
parser.strict.sep = "," ## reset back to comma
|
178
|
-
end
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
def test_escaped_cr
|
184
|
-
assert_equal [[ "character" + CR + "Escaped" ]],
|
185
|
-
parser.default.parse( "character\\" + CR + "Escaped" )
|
186
|
-
end
|
187
|
-
|
188
|
-
|
189
|
-
def test_cr
|
190
|
-
assert_equal [[ "character" ],
|
191
|
-
[ "NotEscaped" ]],
|
192
|
-
parser.default.parse( "character" + CR + "NotEscaped" )
|
193
|
-
end
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
def test_escaped_lf
|
198
|
-
assert_equal [[ "character" + LF + "Escaped" ]],
|
199
|
-
parser.default.parse( "character\\" + LF + "Escaped" )
|
200
|
-
end
|
201
|
-
|
202
|
-
def test_lf
|
203
|
-
assert_equal [[ "character" ],
|
204
|
-
[ "NotEscaped" ]],
|
205
|
-
parser.default.parse( "character" + LF + "NotEscaped" )
|
206
|
-
end
|
207
|
-
|
208
|
-
end # class TestParserJava
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
###
|
4
|
+
# to run use
|
5
|
+
# ruby -I ./lib -I ./test test/test_parser_java.rb
|
6
|
+
|
7
|
+
|
8
|
+
require 'helper'
|
9
|
+
|
10
|
+
##########################
|
11
|
+
# try some tests from apache java (commons) csv reader
|
12
|
+
# see https://github.com/apache/commons-csv/blob/master/src/test/java/org/apache/commons/csv/LexerTest.java
|
13
|
+
|
14
|
+
|
15
|
+
class TestParserJava < MiniTest::Test
|
16
|
+
|
17
|
+
|
18
|
+
LF = "\n" ## \n == ASCII 0x0A (hex) 10 (dec) = LF (Newline/line feed)
|
19
|
+
CR = "\r" ## \r == ASCII 0x0D (hex) 13 (dec) = CR (Carriage return)
|
20
|
+
|
21
|
+
|
22
|
+
|
23
|
+
def parser
|
24
|
+
CsvReader::Parser
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_surrounding_spaces_are_deleted
|
28
|
+
assert_equal [["noSpaces",
|
29
|
+
"leadingSpaces",
|
30
|
+
"trailingSpaces",
|
31
|
+
"surroundingSpaces",
|
32
|
+
"",
|
33
|
+
"",
|
34
|
+
""]], parser.default.parse( "noSpaces, leadingSpaces,trailingSpaces , surroundingSpaces , ,," )
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
def test_surrounding_tabs_are_deleted
|
39
|
+
assert_equal [["noTabs",
|
40
|
+
"leadingTab",
|
41
|
+
"trailingTab",
|
42
|
+
"surroundingTabs",
|
43
|
+
"",
|
44
|
+
"",
|
45
|
+
""]], parser.default.parse( "noTabs,\tleadingTab,trailingTab\t,\tsurroundingTabs\t,\t\t,," )
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_ignore_empty_lines
|
49
|
+
assert_equal [[ "first", "line", "" ],
|
50
|
+
[ "second", "line" ],
|
51
|
+
[ "third line" ],
|
52
|
+
[ "last", "line" ]],
|
53
|
+
parser.default.parse( "first,line,\n" + "\n" + "\n" +
|
54
|
+
"second,line\n" + "\n" + "\n" +
|
55
|
+
"third line \n" + "\n" + "\n" +
|
56
|
+
"last, line \n" + "\n" + "\n" + "\n" )
|
57
|
+
end
|
58
|
+
|
59
|
+
|
60
|
+
def test_comments
|
61
|
+
assert_equal [["first", "line", "" ],
|
62
|
+
["second", "line", "tokenWith#no-comment" ],
|
63
|
+
["third", "line" ]],
|
64
|
+
parser.default.parse( "first,line,\n" +
|
65
|
+
"second,line,tokenWith#no-comment\n" +
|
66
|
+
"# comment line \n" +
|
67
|
+
"third,line #inline-end-of-line-comment\n" +
|
68
|
+
"# penultimate comment\n" +
|
69
|
+
"# Final comment\n" )
|
70
|
+
end
|
71
|
+
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
|
76
|
+
def test_comments_and_empty_lines
|
77
|
+
parser.strict.comment = '#'
|
78
|
+
|
79
|
+
assert_equal [[ "1", "2", "3", "" ], ## 1
|
80
|
+
[ "" ], ## 1b
|
81
|
+
[ "" ], ## 1c
|
82
|
+
[ "a", "b x", "c#no-comment" ], ## 2
|
83
|
+
[ "" ], ## 4
|
84
|
+
[ "" ], ## 4b
|
85
|
+
[ "d", "e", "#no-comment" ], ## 5
|
86
|
+
[ "" ], ## 5b
|
87
|
+
[ "" ], ## 5c
|
88
|
+
[ "" ], ## 6b
|
89
|
+
[ "" ] ## 6c
|
90
|
+
],
|
91
|
+
parser.strict.parse(
|
92
|
+
"1,2,3,\n" + ## 1
|
93
|
+
"\n" + ## 1b
|
94
|
+
"\n" + ## 1c
|
95
|
+
"a,b x,c#no-comment\n" + ## 2
|
96
|
+
"#foo\n" + ## 3
|
97
|
+
"\n" + ## 4
|
98
|
+
"\n" + ## 4b
|
99
|
+
"d,e,#no-comment\n" + ## 5
|
100
|
+
"\n" + ## 5b
|
101
|
+
"\n" + ## 5c
|
102
|
+
"# penultimate comment\n" + ## 6
|
103
|
+
"\n" + ## 6b
|
104
|
+
"\n" + ## 6c
|
105
|
+
"# Final comment\n" ## 7
|
106
|
+
)
|
107
|
+
|
108
|
+
parser.strict.comment = false ## reset to defaults
|
109
|
+
end
|
110
|
+
|
111
|
+
|
112
|
+
def test_backslash_with_escaping
|
113
|
+
## simple token with escaping enabled
|
114
|
+
assert_equal [[ "a", ",", "b\\" ],
|
115
|
+
[ ",", "\nc", "d\r" ],
|
116
|
+
[ "e" ]], parser.default.parse( "a,\\,,b\\\\\n" +
|
117
|
+
"\\,,\\\nc,d\\\r\n" +
|
118
|
+
"e" )
|
119
|
+
|
120
|
+
|
121
|
+
parser.strict.escape = "\\"
|
122
|
+
assert_equal [[ "a", ",", "b\\" ],
|
123
|
+
[ ",", "\nc", "d\r" ],
|
124
|
+
[ "e" ]], parser.strict.parse( "a,\\,,b\\\\\n" +
|
125
|
+
"\\,,\\\nc,d\\\r\n" +
|
126
|
+
"e" )
|
127
|
+
parser.strict.escape = false
|
128
|
+
end
|
129
|
+
|
130
|
+
|
131
|
+
def test_backslash_without_escaping
|
132
|
+
## simple token with escaping not enabled
|
133
|
+
assert_equal [[ "a",
|
134
|
+
"\\", ## an unquoted single backslash is not an escape char
|
135
|
+
"",
|
136
|
+
"b\\" ## an unquoted single backslash is not an escape char
|
137
|
+
],
|
138
|
+
[ "\\", "", "" ]], parser.strict.parse( "a,\\,,b\\\n" +
|
139
|
+
"\\,," )
|
140
|
+
|
141
|
+
end
|
142
|
+
|
143
|
+
|
144
|
+
|
145
|
+
def test_next_token4
|
146
|
+
## encapsulator tokenizer (single line)
|
147
|
+
assert_equal [[ "a", "foo", "b" ],
|
148
|
+
[ "a", " foo", "b" ],
|
149
|
+
[ "a", "foo ", "b" ],
|
150
|
+
[ "a", " foo ", "b" ]],
|
151
|
+
parser.default.parse( "a,\"foo\",b\n" +
|
152
|
+
"a, \" foo\",b\n" +
|
153
|
+
"a,\"foo \" ,b\n" +
|
154
|
+
"a, \" foo \" ,b" )
|
155
|
+
end
|
156
|
+
|
157
|
+
|
158
|
+
def test_next_token5
|
159
|
+
## encapsulator tokenizer (multi line, delimiter in string)
|
160
|
+
assert_equal [[ "a", "foo\n", "b" ],
|
161
|
+
[ "foo\n baar ,,," ],
|
162
|
+
[ "\n\t \n" ]],
|
163
|
+
parser.default.parse( "a,\"foo\n\",b\n" +
|
164
|
+
"\"foo\n baar ,,,\"\n" +
|
165
|
+
"\"\n\t \n\"" )
|
166
|
+
end
|
167
|
+
|
168
|
+
|
169
|
+
def test_separator_is_tab
|
170
|
+
parser.strict.sep = "\t"
|
171
|
+
assert_equal [["one",
|
172
|
+
"two",
|
173
|
+
"",
|
174
|
+
"four ",
|
175
|
+
" five",
|
176
|
+
" six" ]], parser.strict.parse( "one\ttwo\t\tfour \t five\t six" )
|
177
|
+
parser.strict.sep = "," ## reset back to comma
|
178
|
+
end
|
179
|
+
|
180
|
+
|
181
|
+
|
182
|
+
|
183
|
+
def test_escaped_cr
|
184
|
+
assert_equal [[ "character" + CR + "Escaped" ]],
|
185
|
+
parser.default.parse( "character\\" + CR + "Escaped" )
|
186
|
+
end
|
187
|
+
|
188
|
+
|
189
|
+
def test_cr
|
190
|
+
assert_equal [[ "character" ],
|
191
|
+
[ "NotEscaped" ]],
|
192
|
+
parser.default.parse( "character" + CR + "NotEscaped" )
|
193
|
+
end
|
194
|
+
|
195
|
+
|
196
|
+
|
197
|
+
def test_escaped_lf
|
198
|
+
assert_equal [[ "character" + LF + "Escaped" ]],
|
199
|
+
parser.default.parse( "character\\" + LF + "Escaped" )
|
200
|
+
end
|
201
|
+
|
202
|
+
def test_lf
|
203
|
+
assert_equal [[ "character" ],
|
204
|
+
[ "NotEscaped" ]],
|
205
|
+
parser.default.parse( "character" + LF + "NotEscaped" )
|
206
|
+
end
|
207
|
+
|
208
|
+
end # class TestParserJava
|
metadata
CHANGED
@@ -1,59 +1,115 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: csvreader
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gerald Bauer
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-10-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: tabreader
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.0.1
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.0.1
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: csvyaml
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.1.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.1.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: csvjson
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 1.0.0
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.0.0
|
13
55
|
- !ruby/object:Gem::Dependency
|
14
56
|
name: rdoc
|
15
57
|
requirement: !ruby/object:Gem::Requirement
|
16
58
|
requirements:
|
17
|
-
- - "
|
59
|
+
- - ">="
|
18
60
|
- !ruby/object:Gem::Version
|
19
61
|
version: '4.0'
|
62
|
+
- - "<"
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: '7'
|
20
65
|
type: :development
|
21
66
|
prerelease: false
|
22
67
|
version_requirements: !ruby/object:Gem::Requirement
|
23
68
|
requirements:
|
24
|
-
- - "
|
69
|
+
- - ">="
|
25
70
|
- !ruby/object:Gem::Version
|
26
71
|
version: '4.0'
|
72
|
+
- - "<"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '7'
|
27
75
|
- !ruby/object:Gem::Dependency
|
28
76
|
name: hoe
|
29
77
|
requirement: !ruby/object:Gem::Requirement
|
30
78
|
requirements:
|
31
79
|
- - "~>"
|
32
80
|
- !ruby/object:Gem::Version
|
33
|
-
version: '3.
|
81
|
+
version: '3.22'
|
34
82
|
type: :development
|
35
83
|
prerelease: false
|
36
84
|
version_requirements: !ruby/object:Gem::Requirement
|
37
85
|
requirements:
|
38
86
|
- - "~>"
|
39
87
|
- !ruby/object:Gem::Version
|
40
|
-
version: '3.
|
88
|
+
version: '3.22'
|
41
89
|
description: csvreader - read tabular data in the comma-separated values (csv) format
|
42
90
|
the right way (uses best practices out-of-the-box with zero-configuration)
|
43
91
|
email: wwwmake@googlegroups.com
|
44
92
|
executables: []
|
45
93
|
extensions: []
|
46
94
|
extra_rdoc_files:
|
47
|
-
-
|
48
|
-
- LICENSE.md
|
95
|
+
- CHANGELOG.md
|
49
96
|
- Manifest.txt
|
50
97
|
- README.md
|
51
98
|
files:
|
52
|
-
-
|
53
|
-
- LICENSE.md
|
99
|
+
- CHANGELOG.md
|
54
100
|
- Manifest.txt
|
55
101
|
- README.md
|
56
102
|
- Rakefile
|
103
|
+
- datasets/beer.csv
|
104
|
+
- datasets/beer11.csv
|
105
|
+
- datasets/cars11.csv
|
106
|
+
- datasets/cities11.csv
|
107
|
+
- datasets/customers11.csv
|
108
|
+
- datasets/iris.attrib.csv
|
109
|
+
- datasets/iris11.csv
|
110
|
+
- datasets/lcc.attrib.csv
|
111
|
+
- datasets/shakespeare.csv
|
112
|
+
- datasets/test.csv
|
57
113
|
- lib/csvreader.rb
|
58
114
|
- lib/csvreader/base.rb
|
59
115
|
- lib/csvreader/buffer.rb
|
@@ -66,23 +122,15 @@ files:
|
|
66
122
|
- lib/csvreader/parser_strict.rb
|
67
123
|
- lib/csvreader/parser_tab.rb
|
68
124
|
- lib/csvreader/parser_table.rb
|
125
|
+
- lib/csvreader/parser_yaml.rb
|
69
126
|
- lib/csvreader/reader.rb
|
70
127
|
- lib/csvreader/reader_hash.rb
|
71
128
|
- lib/csvreader/version.rb
|
72
|
-
- test/data/beer.csv
|
73
|
-
- test/data/beer11.csv
|
74
|
-
- test/data/cars11.csv
|
75
|
-
- test/data/cities11.csv
|
76
|
-
- test/data/customers11.csv
|
77
|
-
- test/data/iris.attrib.csv
|
78
|
-
- test/data/iris11.csv
|
79
|
-
- test/data/lcc.attrib.csv
|
80
|
-
- test/data/shakespeare.csv
|
81
|
-
- test/data/test.csv
|
82
129
|
- test/helper.rb
|
83
130
|
- test/test_buffer.rb
|
84
131
|
- test/test_converter.rb
|
85
132
|
- test/test_parser.rb
|
133
|
+
- test/test_parser_autofix.rb
|
86
134
|
- test/test_parser_directive.rb
|
87
135
|
- test/test_parser_fixed.rb
|
88
136
|
- test/test_parser_formats.rb
|
@@ -103,7 +151,7 @@ homepage: https://github.com/csvreader/csvreader
|
|
103
151
|
licenses:
|
104
152
|
- Public Domain
|
105
153
|
metadata: {}
|
106
|
-
post_install_message:
|
154
|
+
post_install_message:
|
107
155
|
rdoc_options:
|
108
156
|
- "--main"
|
109
157
|
- README.md
|
@@ -120,9 +168,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
120
168
|
- !ruby/object:Gem::Version
|
121
169
|
version: '0'
|
122
170
|
requirements: []
|
123
|
-
|
124
|
-
|
125
|
-
signing_key:
|
171
|
+
rubygems_version: 3.1.4
|
172
|
+
signing_key:
|
126
173
|
specification_version: 4
|
127
174
|
summary: csvreader - read tabular data in the comma-separated values (csv) format
|
128
175
|
the right way (uses best practices out-of-the-box with zero-configuration)
|