csv 3.0.0 → 3.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 878c0fd11ecaed5d4fb2ac420068c42b707a721144062ba7fe623002a13478be
4
- data.tar.gz: 007c48a609bcef16dba46b8f7aca667dbdcd3cb24f05a6b7f2470726dcfeea17
3
+ metadata.gz: 9e3a871d4d1958c763228c4b8d702c3cb272017934a37927e87b6ef7a86959bc
4
+ data.tar.gz: 39effdc25704e1e1f312c55d8461b3f5cce0eac7c2262ba21302783527004aae
5
5
  SHA512:
6
- metadata.gz: 4daffd50dd28082465a243e17f77eeb8ccd1c6727c9094eeb3f0fcaaa05426949f7e3103fa84fdad87e27e1e493365f13d4491000d8ac61a006094ff2be2602a
7
- data.tar.gz: adc33341e6dd75c8d8ab343343fd8d455b7e048e081a2e22992f54397c42b3a70a4c78561fc871324b4424ed562a1fc9e59da4a12a56ff7ade2d3161195c3deb
6
+ metadata.gz: 83fa32fa7ceccb2a9287e3de846df483ae13088edbc5bb1dcaf9a27b74bbfb7da151334c85c8a146baa325cc4f39dbcc87c32f954ee0fbc41786816ab9a80716
7
+ data.tar.gz: 2a054323b17fa11a6febecb0060613f5b5bc339e4014fd6d1dd95ebcbb88bb72a85c8a3201d06b02c7cbb5134852838676de7b15525e6a261e1f7d6a7927cfa4
data/NEWS.md ADDED
@@ -0,0 +1,377 @@
1
+ # News
2
+
3
+ ## 3.1.0 - 2019-04-17
4
+
5
+ ### Fixes
6
+
7
+ * Fixed a backward incompatibility bug that `CSV#eof?` may raises an
8
+ error.
9
+ [GitHub#86][Reported by krororo]
10
+
11
+ ### Thanks
12
+
13
+ * krororo
14
+
15
+ ## 3.0.9 - 2019-04-15
16
+
17
+ ### Fixes
18
+
19
+ * Fixed a test for Windows.
20
+
21
+ ## 3.0.8 - 2019-04-11
22
+
23
+ ### Fixes
24
+
25
+ * Fixed a bug that `strip: String` doesn't work.
26
+
27
+ ## 3.0.7 - 2019-04-08
28
+
29
+ ### Improvements
30
+
31
+ * Improve parse performance 1.5x by introducing loose parser.
32
+
33
+ ### Fixes
34
+
35
+ * Fix performance regression in 3.0.5.
36
+
37
+ * Fix a bug that `CSV#line` returns wrong value when you
38
+ use `quote_char: nil`.
39
+
40
+ ## 3.0.6 - 2019-03-30
41
+
42
+ ### Improvements
43
+
44
+ * `CSV.foreach`: Added support for `mode`.
45
+
46
+ ## 3.0.5 - 2019-03-24
47
+
48
+ ### Improvements
49
+
50
+ * Added `:liberal_parsing => {backslash_quote: true}` option.
51
+ [GitHub#74][Patch by 284km]
52
+
53
+ * Added `:write_converters` option.
54
+ [GitHub#73][Patch by Danillo Souza]
55
+
56
+ * Added `:write_nil_value` option.
57
+
58
+ * Added `:write_empty_value` option.
59
+
60
+ * Improved invalid byte line number detection.
61
+ [GitHub#78][Patch by Alyssa Ross]
62
+
63
+ * Added `quote_char: nil` optimization.
64
+ [GitHub#79][Patch by 284km]
65
+
66
+ * Improved error message.
67
+ [GitHub#81][Patch by Andrés Torres]
68
+
69
+ * Improved IO-like implementation for `StringIO` data.
70
+ [GitHub#80][Patch by Genadi Samokovarov]
71
+
72
+ * Added `:strip` option.
73
+ [GitHub#58]
74
+
75
+ ### Fixes
76
+
77
+ * Fixed a compatibility bug that `CSV#each` doesn't care `CSV#shift`.
78
+ [GitHub#76][Patch by Alyssa Ross]
79
+
80
+ * Fixed a compatibility bug that `CSV#eof?` doesn't care `CSV#each`
81
+ and `CSV#shift`.
82
+ [GitHub#77][Reported by Chi Leung]
83
+
84
+ * Fixed a compatibility bug that invalid line isn't ignored.
85
+ [GitHub#82][Reported by krororo]
86
+
87
+ * Fixed a bug that `:skip_lines` doesn't work with multibyte characters data.
88
+ [GitHub#83][Reported by ff2248]
89
+
90
+ ### Thanks
91
+
92
+ * Alyssa Ross
93
+
94
+ * 284km
95
+
96
+ * Chi Leung
97
+
98
+ * Danillo Souza
99
+
100
+ * Andrés Torres
101
+
102
+ * Genadi Samokovarov
103
+
104
+ * krororo
105
+
106
+ * ff2248
107
+
108
+ ## 3.0.4 - 2019-01-25
109
+
110
+ ### Improvements
111
+
112
+ * Removed duplicated `CSV::Row#include?` implementations.
113
+ [GitHub#69][Patch by Max Schwenk]
114
+
115
+ * Removed duplicated `CSV::Row#header?` implementations.
116
+ [GitHub#70][Patch by Max Schwenk]
117
+
118
+ ### Fixes
119
+
120
+ * Fixed a typo in document.
121
+ [GitHub#72][Patch by Artur Beljajev]
122
+
123
+ * Fixed a compatibility bug when row headers are changed.
124
+ [GitHub#71][Reported by tomoyuki kosaka]
125
+
126
+ ### Thanks
127
+
128
+ * Max Schwenk
129
+
130
+ * Artur Beljajev
131
+
132
+ * tomoyuki kosaka
133
+
134
+ ## 3.0.3 - 2019-01-12
135
+
136
+ ### Improvements
137
+
138
+ * Migrated benchmark tool to benchmark-driver from benchmark-ips.
139
+ [GitHub#57][Patch by 284km]
140
+
141
+ * Added `liberal_parsing: {double_quote_outside_quote: true}` parse
142
+ option.
143
+ [GitHub#66][Reported by Watson]
144
+
145
+ * Added `quote_empty:` write option.
146
+ [GitHub#35][Reported by Dave Myron]
147
+
148
+ ### Fixes
149
+
150
+ * Fixed a compatibility bug that `CSV.generate` always return
151
+ `ASCII-8BIT` encoding string.
152
+ [GitHub#63][Patch by Watson]
153
+
154
+ * Fixed a compatibility bug that `CSV.parse("", headers: true)`
155
+ doesn't return `CSV::Table`.
156
+ [GitHub#64][Reported by Watson][Patch by 284km]
157
+
158
+ * Fixed a compatibility bug that multiple-characters column
159
+ separator doesn't work.
160
+ [GitHub#67][Reported by Jesse Reiss]
161
+
162
+ * Fixed a compatibility bug that double `#each` parse twice.
163
+ [GitHub#68][Reported by Max Schwenk]
164
+
165
+ ### Thanks
166
+
167
+ * Watson
168
+
169
+ * 284km
170
+
171
+ * Jesse Reiss
172
+
173
+ * Dave Myron
174
+
175
+ * Max Schwenk
176
+
177
+ ## 3.0.2 - 2018-12-23
178
+
179
+ ### Improvements
180
+
181
+ * Changed to use strscan in parser.
182
+ [GitHub#52][Patch by 284km]
183
+
184
+ * Improves CSV write performance.
185
+ 3.0.2 will be about 2 times faster than 3.0.1.
186
+
187
+ * Improves CSV parse performance for complex case.
188
+ 3.0.2 will be about 2 times faster than 3.0.1.
189
+
190
+ ### Fixes
191
+
192
+ * Fixed a parse error bug for new line only input with `headers` option.
193
+ [GitHub#53][Reported by Chris Beer]
194
+
195
+ * Fixed some typos in document.
196
+ [GitHub#54][Patch by Victor Shepelev]
197
+
198
+ ### Thanks
199
+
200
+ * 284km
201
+
202
+ * Chris Beer
203
+
204
+ * Victor Shepelev
205
+
206
+ ## 3.0.1 - 2018-12-07
207
+
208
+ ### Improvements
209
+
210
+ * Added a test.
211
+ [GitHub#38][Patch by 284km]
212
+
213
+ * `CSV::Row#dup`: Changed to duplicate internal data.
214
+ [GitHub#39][Reported by André Guimarães Sakata]
215
+
216
+ * Documented `:nil_value` and `:empty_value` options.
217
+ [GitHub#41][Patch by OwlWorks]
218
+
219
+ * Added support for separator detection for non-seekable inputs.
220
+ [GitHub#45][Patch by Ilmari Karonen]
221
+
222
+ * Removed needless code.
223
+ [GitHub#48][Patch by Espartaco Palma]
224
+
225
+ * Added support for parsing header only CSV with `headers: true`.
226
+ [GitHub#47][Patch by Kazuma Shibasaka]
227
+
228
+ * Added support for coverage report in CI.
229
+ [GitHub#48][Patch by Espartaco Palma]
230
+
231
+ * Improved auto CR row separator detection.
232
+ [GitHub#51][Reported by Yuki Kurihara]
233
+
234
+ ### Fixes
235
+
236
+ * Fixed a typo in document.
237
+ [GitHub#40][Patch by Marcus Stollsteimer]
238
+
239
+ ### Thanks
240
+
241
+ * 284km
242
+
243
+ * André Guimarães Sakata
244
+
245
+ * Marcus Stollsteimer
246
+
247
+ * OwlWorks
248
+
249
+ * Ilmari Karonen
250
+
251
+ * Espartaco Palma
252
+
253
+ * Kazuma Shibasaka
254
+
255
+ * Yuki Kurihara
256
+
257
+ ## 3.0.0 - 2018-06-06
258
+
259
+ ### Fixes
260
+
261
+ * Fixed a bug that header isn't returned for empty row.
262
+ [GitHub#37][Patch by Grace Lee]
263
+
264
+ ### Thanks
265
+
266
+ * Grace Lee
267
+
268
+ ## 1.0.2 - 2018-05-03
269
+
270
+ ### Improvements
271
+
272
+ * Split file for CSV::VERSION
273
+
274
+ * Code cleanup: Split csv.rb into a more manageable structure
275
+ [GitHub#19][Patch by Espartaco Palma]
276
+ [GitHub#20][Patch by Steven Daniels]
277
+
278
+ * Use CSV::MalformedCSVError for invalid encoding line
279
+ [GitHub#26][Reported by deepj]
280
+
281
+ * Support implicit Row <-> Array conversion
282
+ [Bug #10013][ruby-core:63582][Reported by Dawid Janczak]
283
+
284
+ * Update class docs
285
+ [GitHub#32][Patch by zverok]
286
+
287
+ * Add `Row#each_pair`
288
+ [GitHub#33][Patch by zverok]
289
+
290
+ * Improve CSV performance
291
+ [GitHub#30][Patch by Watson]
292
+
293
+ * Add :nil_value and :empty_value option
294
+
295
+ ### Fixes
296
+
297
+ * Fix a bug that "bom|utf-8" doesn't work
298
+ [GitHub#23][Reported by Pavel Lobashov]
299
+
300
+ * `CSV::Row#to_h`, `#to_hash`: uses the same value as `Row#[]`
301
+ [Bug #14482][Reported by tomoya ishida]
302
+
303
+ * Make row separator detection more robust
304
+ [GitHub#25][Reported by deepj]
305
+
306
+ * Fix a bug that too much separator when col_sep is `" "`
307
+ [Bug #8784][ruby-core:63582][Reported by Sylvain Laperche]
308
+
309
+ ### Thanks
310
+
311
+ * Espartaco Palma
312
+
313
+ * Steven Daniels
314
+
315
+ * deepj
316
+
317
+ * Dawid Janczak
318
+
319
+ * zverok
320
+
321
+ * Watson
322
+
323
+ * Pavel Lobashov
324
+
325
+ * tomoya ishida
326
+
327
+ * Sylvain Laperche
328
+
329
+ * Ryunosuke Sato
330
+
331
+ ## 1.0.1 - 2018-02-09
332
+
333
+ ### Improvements
334
+
335
+ * `CSV::Table#delete`: Added bulk delete support. You can delete
336
+ multiple rows and columns at once.
337
+ [GitHub#4][Patch by Vladislav]
338
+
339
+ * Updated Gem description.
340
+ [GitHub#11][Patch by Marcus Stollsteimer]
341
+
342
+ * Code cleanup.
343
+ [GitHub#12][Patch by Marcus Stollsteimer]
344
+ [GitHub#14][Patch by Steven Daniels]
345
+ [GitHub#18][Patch by takkanm]
346
+
347
+ * `CSV::Table#dig`: Added.
348
+ [GitHub#15][Patch by Tomohiro Ogoke]
349
+
350
+ * `CSV::Row#dig`: Added.
351
+ [GitHub#15][Patch by Tomohiro Ogoke]
352
+
353
+ * Added ISO 8601 support to date time converter.
354
+ [GitHub#16]
355
+
356
+ ### Fixes
357
+
358
+ * Fixed wrong `CSV::VERSION`.
359
+ [GitHub#10][Reported by Marcus Stollsteimer]
360
+
361
+ * `CSV.generate`: Fixed a regression bug that `String` argument is
362
+ ignored.
363
+ [GitHub#13][Patch by pavel]
364
+
365
+ ### Thanks
366
+
367
+ * Vladislav
368
+
369
+ * Marcus Stollsteimer
370
+
371
+ * Steven Daniels
372
+
373
+ * takkanm
374
+
375
+ * Tomohiro Ogoke
376
+
377
+ * pavel
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # CSV
2
2
 
3
3
  [![Build Status](https://travis-ci.org/ruby/csv.svg?branch=master)](https://travis-ci.org/ruby/csv)
4
+ [![Test Coverage](https://api.codeclimate.com/v1/badges/321fa39e510a0abd0369/test_coverage)](https://codeclimate.com/github/ruby/csv/test_coverage)
4
5
 
5
6
  This library provides a complete interface to CSV files and data. It offers tools to enable you to read and write to and from Strings or IO objects, as needed.
6
7
 
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This provides String#delete_suffix? for Ruby 2.4.
4
+ unless String.method_defined?(:delete_suffix)
5
+ class CSV
6
+ module DeleteSuffix
7
+ refine String do
8
+ def delete_suffix(suffix)
9
+ if end_with?(suffix)
10
+ self[0...-suffix.size]
11
+ else
12
+ self
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CSV
4
+ class FieldsConverter
5
+ include Enumerable
6
+
7
+ def initialize(options={})
8
+ @converters = []
9
+ @nil_value = options[:nil_value]
10
+ @empty_value = options[:empty_value]
11
+ @empty_value_is_empty_string = (@empty_value == "")
12
+ @accept_nil = options[:accept_nil]
13
+ @builtin_converters = options[:builtin_converters]
14
+ @need_static_convert = need_static_convert?
15
+ end
16
+
17
+ def add_converter(name=nil, &converter)
18
+ if name.nil? # custom converter
19
+ @converters << converter
20
+ else # named converter
21
+ combo = @builtin_converters[name]
22
+ case combo
23
+ when Array # combo converter
24
+ combo.each do |sub_name|
25
+ add_converter(sub_name)
26
+ end
27
+ else # individual named converter
28
+ @converters << combo
29
+ end
30
+ end
31
+ end
32
+
33
+ def each(&block)
34
+ @converters.each(&block)
35
+ end
36
+
37
+ def empty?
38
+ @converters.empty?
39
+ end
40
+
41
+ def convert(fields, headers, lineno)
42
+ return fields unless need_convert?
43
+
44
+ fields.collect.with_index do |field, index|
45
+ if field.nil?
46
+ field = @nil_value
47
+ elsif field.empty?
48
+ field = @empty_value unless @empty_value_is_empty_string
49
+ end
50
+ @converters.each do |converter|
51
+ break if field.nil? and @accept_nil
52
+ if converter.arity == 1 # straight field converter
53
+ field = converter[field]
54
+ else # FieldInfo converter
55
+ if headers
56
+ header = headers[index]
57
+ else
58
+ header = nil
59
+ end
60
+ field = converter[field, FieldInfo.new(index, lineno, header)]
61
+ end
62
+ break unless field.is_a?(String) # short-circuit pipeline for speed
63
+ end
64
+ field # final state of each field, converted or original
65
+ end
66
+ end
67
+
68
+ private
69
+ def need_static_convert?
70
+ not (@nil_value.nil? and @empty_value_is_empty_string)
71
+ end
72
+
73
+ def need_convert?
74
+ @need_static_convert or
75
+ (not @converters.empty?)
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This provides String#match? and Regexp#match? for Ruby 2.3.
4
+ unless String.method_defined?(:match?)
5
+ class CSV
6
+ module MatchP
7
+ refine String do
8
+ def match?(pattern)
9
+ self =~ pattern
10
+ end
11
+ end
12
+
13
+ refine Regexp do
14
+ def match?(string)
15
+ self =~ string
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end