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.
@@ -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", "#no-comment" ]],
64
- parser.default.parse( "first,line,\n" +
65
- "second,line,tokenWith#no-comment\n" +
66
- "# comment line \n" +
67
- "third,line,#no-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
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.1
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: 2018-11-06 00:00:00.000000000 Z
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.16'
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.16'
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
- - HISTORY.md
48
- - LICENSE.md
95
+ - CHANGELOG.md
49
96
  - Manifest.txt
50
97
  - README.md
51
98
  files:
52
- - HISTORY.md
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
- rubyforge_project:
124
- rubygems_version: 2.5.2
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)