csv 3.0.0 → 3.2.8

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.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/NEWS.md +882 -0
  3. data/README.md +6 -3
  4. data/doc/csv/arguments/io.rdoc +5 -0
  5. data/doc/csv/options/common/col_sep.rdoc +57 -0
  6. data/doc/csv/options/common/quote_char.rdoc +42 -0
  7. data/doc/csv/options/common/row_sep.rdoc +91 -0
  8. data/doc/csv/options/generating/force_quotes.rdoc +17 -0
  9. data/doc/csv/options/generating/quote_empty.rdoc +12 -0
  10. data/doc/csv/options/generating/write_converters.rdoc +25 -0
  11. data/doc/csv/options/generating/write_empty_value.rdoc +15 -0
  12. data/doc/csv/options/generating/write_headers.rdoc +29 -0
  13. data/doc/csv/options/generating/write_nil_value.rdoc +14 -0
  14. data/doc/csv/options/parsing/converters.rdoc +46 -0
  15. data/doc/csv/options/parsing/empty_value.rdoc +13 -0
  16. data/doc/csv/options/parsing/field_size_limit.rdoc +39 -0
  17. data/doc/csv/options/parsing/header_converters.rdoc +43 -0
  18. data/doc/csv/options/parsing/headers.rdoc +63 -0
  19. data/doc/csv/options/parsing/liberal_parsing.rdoc +38 -0
  20. data/doc/csv/options/parsing/nil_value.rdoc +12 -0
  21. data/doc/csv/options/parsing/return_headers.rdoc +22 -0
  22. data/doc/csv/options/parsing/skip_blanks.rdoc +31 -0
  23. data/doc/csv/options/parsing/skip_lines.rdoc +37 -0
  24. data/doc/csv/options/parsing/strip.rdoc +15 -0
  25. data/doc/csv/options/parsing/unconverted_fields.rdoc +27 -0
  26. data/doc/csv/recipes/filtering.rdoc +158 -0
  27. data/doc/csv/recipes/generating.rdoc +298 -0
  28. data/doc/csv/recipes/parsing.rdoc +545 -0
  29. data/doc/csv/recipes/recipes.rdoc +6 -0
  30. data/lib/csv/core_ext/array.rb +1 -1
  31. data/lib/csv/core_ext/string.rb +1 -1
  32. data/lib/csv/fields_converter.rb +89 -0
  33. data/lib/csv/input_record_separator.rb +18 -0
  34. data/lib/csv/parser.rb +1288 -0
  35. data/lib/csv/row.rb +505 -136
  36. data/lib/csv/table.rb +791 -114
  37. data/lib/csv/version.rb +1 -1
  38. data/lib/csv/writer.rb +210 -0
  39. data/lib/csv.rb +2433 -1329
  40. metadata +66 -13
  41. data/news.md +0 -123
data/NEWS.md ADDED
@@ -0,0 +1,882 @@
1
+ # News
2
+
3
+ ## 3.2.8 - 2023-11-08
4
+
5
+ ### Improvements
6
+
7
+ * Added `CSV::InvalidEncodingError`.
8
+
9
+ Patch by Kosuke Shibata.
10
+
11
+ GH-287
12
+
13
+ ### Thanks
14
+
15
+ * Kosuke Shibata
16
+
17
+ ## 3.2.7 - 2023-06-26
18
+
19
+ ### Improvements
20
+
21
+ * Removed an unused internal variable.
22
+ [GH-273](https://github.com/ruby/csv/issues/273)
23
+ [Patch by Mau Magnaguagno]
24
+
25
+ * Changed to use `https://` instead of `http://` in documents.
26
+ [GH-274](https://github.com/ruby/csv/issues/274)
27
+ [Patch by Vivek Bharath Akupatni]
28
+
29
+ * Added prefix to a helper module in test.
30
+ [GH-278](https://github.com/ruby/csv/issues/278)
31
+ [Patch by Luke Gruber]
32
+
33
+ * Added a documentation for `liberal_parsing: {backslash_quotes: true}`.
34
+ [GH-280](https://github.com/ruby/csv/issues/280)
35
+ [Patch by Mark Schneider]
36
+
37
+ ### Fixes
38
+
39
+ * Fixed a wrong execution result in documents.
40
+ [GH-276](https://github.com/ruby/csv/issues/276)
41
+ [Patch by Yuki Tsujimoto]
42
+
43
+ * Fixed a bug that the same line is used multiple times.
44
+ [GH-279](https://github.com/ruby/csv/issues/279)
45
+ [Reported by Gabriel Nagy]
46
+
47
+ ### Thanks
48
+
49
+ * Mau Magnaguagno
50
+
51
+ * Vivek Bharath Akupatni
52
+
53
+ * Yuki Tsujimoto
54
+
55
+ * Luke Gruber
56
+
57
+ * Mark Schneider
58
+
59
+ * Gabriel Nagy
60
+
61
+ ## 3.2.6 - 2022-12-08
62
+
63
+ ### Improvements
64
+
65
+ * `CSV#read` consumes the same lines with other methods like
66
+ `CSV#shift`.
67
+ [[GitHub#258](https://github.com/ruby/csv/issues/258)]
68
+ [Reported by Lhoussaine Ghallou]
69
+
70
+ * All `Enumerable` based methods consume the same lines with other
71
+ methods. This may have a performance penalty.
72
+ [[GitHub#260](https://github.com/ruby/csv/issues/260)]
73
+ [Reported by Lhoussaine Ghallou]
74
+
75
+ * Simplify some implementations.
76
+ [[GitHub#262](https://github.com/ruby/csv/pull/262)]
77
+ [[GitHub#263](https://github.com/ruby/csv/pull/263)]
78
+ [Patch by Mau Magnaguagno]
79
+
80
+ ### Fixes
81
+
82
+ * Fixed `CSV.generate_lines` document.
83
+ [[GitHub#257](https://github.com/ruby/csv/pull/257)]
84
+ [Patch by Sampat Badhe]
85
+
86
+ ### Thanks
87
+
88
+ * Sampat Badhe
89
+
90
+ * Lhoussaine Ghallou
91
+
92
+ * Mau Magnaguagno
93
+
94
+ ## 3.2.5 - 2022-08-26
95
+
96
+ ### Improvements
97
+
98
+ * Added `CSV.generate_lines`.
99
+ [[GitHub#255](https://github.com/ruby/csv/issues/255)]
100
+ [Reported by OKURA Masafumi]
101
+ [[GitHub#256](https://github.com/ruby/csv/pull/256)]
102
+ [Patch by Eriko Sugiyama]
103
+
104
+ ### Thanks
105
+
106
+ * OKURA Masafumi
107
+
108
+ * Eriko Sugiyama
109
+
110
+ ## 3.2.4 - 2022-08-22
111
+
112
+ ### Improvements
113
+
114
+ * Cleaned up internal implementations.
115
+ [[GitHub#249](https://github.com/ruby/csv/pull/249)]
116
+ [[GitHub#250](https://github.com/ruby/csv/pull/250)]
117
+ [[GitHub#251](https://github.com/ruby/csv/pull/251)]
118
+ [Patch by Mau Magnaguagno]
119
+
120
+ * Added support for RFC 3339 style time.
121
+ [[GitHub#248](https://github.com/ruby/csv/pull/248)]
122
+ [Patch by Thierry Lambert]
123
+
124
+ * Added support for transcoding String CSV. Syntax is
125
+ `from-encoding:to-encoding`.
126
+ [[GitHub#254](https://github.com/ruby/csv/issues/254)]
127
+ [Reported by Richard Stueven]
128
+
129
+ * Added quoted information to `CSV::FieldInfo`.
130
+ [[GitHub#254](https://github.com/ruby/csv/pull/253)]
131
+ [Reported by Hirokazu SUZUKI]
132
+
133
+ ### Fixes
134
+
135
+ * Fixed a link in documents.
136
+ [[GitHub#244](https://github.com/ruby/csv/pull/244)]
137
+ [Patch by Peter Zhu]
138
+
139
+ ### Thanks
140
+
141
+ * Peter Zhu
142
+
143
+ * Mau Magnaguagno
144
+
145
+ * Thierry Lambert
146
+
147
+ * Richard Stueven
148
+
149
+ * Hirokazu SUZUKI
150
+
151
+ ## 3.2.3 - 2022-04-09
152
+
153
+ ### Improvements
154
+
155
+ * Added contents summary to `CSV::Table#inspect`.
156
+ [GitHub#229][Patch by Eriko Sugiyama]
157
+ [GitHub#235][Patch by Sampat Badhe]
158
+
159
+ * Suppressed `$INPUT_RECORD_SEPARATOR` deprecation warning by
160
+ `Warning.warn`.
161
+ [GitHub#233][Reported by Jean byroot Boussier]
162
+
163
+ * Improved error message for liberal parsing with quoted values.
164
+ [GitHub#231][Patch by Nikolay Rys]
165
+
166
+ * Fixed typos in documentation.
167
+ [GitHub#236][Patch by Sampat Badhe]
168
+
169
+ * Added `:max_field_size` option and deprecated `:field_size_limit` option.
170
+ [GitHub#238][Reported by Dan Buettner]
171
+
172
+ * Added `:symbol_raw` to built-in header converters.
173
+ [GitHub#237][Reported by taki]
174
+ [GitHub#239][Patch by Eriko Sugiyama]
175
+
176
+ ### Fixes
177
+
178
+ * Fixed a bug that some texts may be dropped unexpectedly.
179
+ [Bug #18245][ruby-core:105587][Reported by Hassan Abdul Rehman]
180
+
181
+ * Fixed a bug that `:field_size_limit` doesn't work with not complex row.
182
+ [GitHub#238][Reported by Dan Buettner]
183
+
184
+ ### Thanks
185
+
186
+ * Hassan Abdul Rehman
187
+
188
+ * Eriko Sugiyama
189
+
190
+ * Jean byroot Boussier
191
+
192
+ * Nikolay Rys
193
+
194
+ * Sampat Badhe
195
+
196
+ * Dan Buettner
197
+
198
+ * taki
199
+
200
+ ## 3.2.2 - 2021-12-24
201
+
202
+ ### Improvements
203
+
204
+ * Added a validation for invalid option combination.
205
+ [GitHub#225][Patch by adamroyjones]
206
+
207
+ * Improved documentation for developers.
208
+ [GitHub#227][Patch by Eriko Sugiyama]
209
+
210
+ ### Fixes
211
+
212
+ * Fixed a bug that all of `ARGF` contents may not be consumed.
213
+ [GitHub#228][Reported by Rafael Navaza]
214
+
215
+ ### Thanks
216
+
217
+ * adamroyjones
218
+
219
+ * Eriko Sugiyama
220
+
221
+ * Rafael Navaza
222
+
223
+ ## 3.2.1 - 2021-10-23
224
+
225
+ ### Improvements
226
+
227
+ * doc: Fixed wrong class name.
228
+ [GitHub#217][Patch by Vince]
229
+
230
+ * Changed to always use `"\n"` for the default row separator on Ruby
231
+ 3.0 or later because `$INPUT_RECORD_SEPARATOR` was deprecated
232
+ since Ruby 3.0.
233
+
234
+ * Added support for Ractor.
235
+ [GitHub#218][Patch by rm155]
236
+
237
+ * Users who want to use the built-in converters in non-main
238
+ Ractors need to call `Ractor.make_shareable(CSV::Converters)`
239
+ and/or `Ractor.make_shareable(CSV::HeaderConverters)` before
240
+ creating non-main Ractors.
241
+
242
+ ### Thanks
243
+
244
+ * Vince
245
+
246
+ * Joakim Antman
247
+
248
+ * rm155
249
+
250
+ ## 3.2.0 - 2021-06-06
251
+
252
+ ### Improvements
253
+
254
+ * `CSV.open`: Added support for `:newline` option.
255
+ [GitHub#198][Patch by Nobuyoshi Nakada]
256
+
257
+ * `CSV::Table#each`: Added support for column mode with duplicated
258
+ headers.
259
+ [GitHub#206][Reported by Yaroslav Berezovskiy]
260
+
261
+ * `Object#CSV`: Added support for Ruby 3.0.
262
+
263
+ * `CSV::Row`: Added support for pattern matching.
264
+ [GitHub#207][Patch by Kevin Newton]
265
+
266
+ ### Fixes
267
+
268
+ * Fixed typos in documentation.
269
+ [GitHub#196][GitHub#205][Patch by Sampat Badhe]
270
+
271
+ ### Thanks
272
+
273
+ * Sampat Badhe
274
+
275
+ * Nobuyoshi Nakada
276
+
277
+ * Yaroslav Berezovskiy
278
+
279
+ * Kevin Newton
280
+
281
+ ## 3.1.9 - 2020-11-23
282
+
283
+ ### Fixes
284
+
285
+ * Fixed a compatibility bug that the line to be processed by
286
+ `skip_lines:` has a row separator.
287
+ [GitHub#194][Reported by Josef Šimánek]
288
+
289
+ ### Thanks
290
+
291
+ * Josef Šimánek
292
+
293
+ ## 3.1.8 - 2020-11-18
294
+
295
+ ### Improvements
296
+
297
+ * Improved documentation.
298
+ [Patch by Burdette Lamar]
299
+
300
+ ### Thanks
301
+
302
+ * Burdette Lamar
303
+
304
+ ## 3.1.7 - 2020-08-04
305
+
306
+ ### Improvements
307
+
308
+ * Improved document.
309
+ [GitHub#158][GitHub#160][GitHub#161]
310
+ [Patch by Burdette Lamar]
311
+
312
+ * Updated required Ruby version to 2.5.0 or later.
313
+ [GitHub#159]
314
+ [Patch by Gabriel Nagy]
315
+
316
+ * Removed stringio 0.1.3 or later dependency.
317
+
318
+ ### Thanks
319
+
320
+ * Burdette Lamar
321
+
322
+ * Gabriel Nagy
323
+
324
+ ## 3.1.6 - 2020-07-20
325
+
326
+ ### Improvements
327
+
328
+ * Improved document.
329
+ [GitHub#127][GitHub#135][GitHub#136][GitHub#137][GitHub#139][GitHub#140]
330
+ [GitHub#141][GitHub#142][GitHub#143][GitHub#145][GitHub#146][GitHub#148]
331
+ [GitHub#148][GitHub#151][GitHub#152][GitHub#154][GitHub#155][GitHub#157]
332
+ [Patch by Burdette Lamar]
333
+
334
+ * `CSV.open`: Added support for `undef: :replace`.
335
+ [GitHub#129][Patch by Koichi ITO]
336
+
337
+ * `CSV.open`: Added support for `invalid: :replace`.
338
+ [GitHub#129][Patch by Koichi ITO]
339
+
340
+ * Don't run quotable check for invalid encoding field values.
341
+ [GitHub#131][Patch by Koichi ITO]
342
+
343
+ * Added support for specifying the target indexes and names to
344
+ `force_quotes:`.
345
+ [GitHub#153][Reported by Aleksandr]
346
+
347
+ * `CSV.generate`: Changed to use the encoding of the first non-ASCII
348
+ field rather than the encoding of ASCII only field.
349
+
350
+ * Changed to require the stringio gem 0.1.3 or later.
351
+
352
+ ### Thanks
353
+
354
+ * Burdette Lamar
355
+
356
+ * Koichi ITO
357
+
358
+ * Aleksandr
359
+
360
+ ## 3.1.5 - 2020-05-18
361
+
362
+ ### Improvements
363
+
364
+ * Improved document.
365
+ [GitHub#124][Patch by Burdette Lamar]
366
+
367
+ ### Fixes
368
+
369
+ * Added missing document files.
370
+ [GitHub#125][Reported by joast]
371
+
372
+ ### Thanks
373
+
374
+ * Burdette Lamar
375
+
376
+ * joast
377
+
378
+ ## 3.1.4 - 2020-05-17
379
+
380
+ ### Improvements
381
+
382
+ * Improved document.
383
+ [GitHub#122][Patch by Burdette Lamar]
384
+
385
+ * Stopped to dropping stack trace for exception caused by
386
+ `CSV.parse_line`.
387
+ [GitHub#120][Reported by Kyle d'Oliveira]
388
+
389
+ ### Fixes
390
+
391
+ * Fixed a bug that `:write_nil_value` or `:write_empty_value` don't
392
+ work with non `String` objects.
393
+ [GitHub#123][Reported by asm256]
394
+
395
+ ### Thanks
396
+
397
+ * Burdette Lamar
398
+
399
+ * asm256
400
+
401
+ * Kyle d'Oliveira
402
+
403
+ ## 3.1.3 - 2020-05-09
404
+
405
+ ### Improvements
406
+
407
+ * `CSV::Row#dup`: Copied deeply.
408
+ [GitHub#108][Patch by Jim Kane]
409
+
410
+ ### Fixes
411
+
412
+ * Fixed a infinite loop bug for zero length match `skip_lines`.
413
+ [GitHub#110][Patch by Mike MacDonald]
414
+
415
+ * `CSV.generate`: Fixed a bug that encoding isn't set correctly.
416
+ [GitHub#110][Patch by Seiei Miyagi]
417
+
418
+ * Fixed document for the `:strip` option.
419
+ [GitHub#114][Patch by TOMITA Masahiro]
420
+
421
+ * Fixed a parse bug when split charcter exists in middle of column
422
+ value.
423
+ [GitHub#115][Reported by TOMITA Masahiro]
424
+
425
+ ### Thanks
426
+
427
+ * Jim Kane
428
+
429
+ * Mike MacDonald
430
+
431
+ * Seiei Miyagi
432
+
433
+ * TOMITA Masahiro
434
+
435
+ ## 3.1.2 - 2019-10-12
436
+
437
+ ### Improvements
438
+
439
+ * Added `:col_sep` check.
440
+ [GitHub#94][Reported by Florent Beaurain]
441
+
442
+ * Suppressed warnings.
443
+ [GitHub#96][Patch by Nobuyoshi Nakada]
444
+
445
+ * Improved documentation.
446
+ [GitHub#101][GitHub#102][Patch by Vitor Oliveira]
447
+
448
+ ### Fixes
449
+
450
+ * Fixed a typo in documentation.
451
+ [GitHub#95][Patch by Yuji Yaginuma]
452
+
453
+ * Fixed a multibyte character handling bug.
454
+ [GitHub#97][Patch by koshigoe]
455
+
456
+ * Fixed typos in documentation.
457
+ [GitHub#100][Patch by Vitor Oliveira]
458
+
459
+ * Fixed a bug that seeked `StringIO` isn't accepted.
460
+ [GitHub#98][Patch by MATSUMOTO Katsuyoshi]
461
+
462
+ * Fixed a bug that `CSV.generate_line` doesn't work with
463
+ `Encoding.default_internal`.
464
+ [GitHub#105][Reported by David Rodríguez]
465
+
466
+ ### Thanks
467
+
468
+ * Florent Beaurain
469
+
470
+ * Yuji Yaginuma
471
+
472
+ * Nobuyoshi Nakada
473
+
474
+ * koshigoe
475
+
476
+ * Vitor Oliveira
477
+
478
+ * MATSUMOTO Katsuyoshi
479
+
480
+ * David Rodríguez
481
+
482
+ ## 3.1.1 - 2019-04-26
483
+
484
+ ### Improvements
485
+
486
+ * Added documentation for `strip` option.
487
+ [GitHub#88][Patch by hayashiyoshino]
488
+
489
+ * Added documentation for `write_converters`, `write_nil_value` and
490
+ `write_empty_value` options.
491
+ [GitHub#87][Patch by Masafumi Koba]
492
+
493
+ * Added documentation for `quote_empty` option.
494
+ [GitHub#89][Patch by kawa\_tech]
495
+
496
+ ### Fixes
497
+
498
+ * Fixed a bug that `strip; true` removes a newline.
499
+
500
+ ### Thanks
501
+
502
+ * hayashiyoshino
503
+
504
+ * Masafumi Koba
505
+
506
+ * kawa\_tech
507
+
508
+ ## 3.1.0 - 2019-04-17
509
+
510
+ ### Fixes
511
+
512
+ * Fixed a backward incompatibility bug that `CSV#eof?` may raises an
513
+ error.
514
+ [GitHub#86][Reported by krororo]
515
+
516
+ ### Thanks
517
+
518
+ * krororo
519
+
520
+ ## 3.0.9 - 2019-04-15
521
+
522
+ ### Fixes
523
+
524
+ * Fixed a test for Windows.
525
+
526
+ ## 3.0.8 - 2019-04-11
527
+
528
+ ### Fixes
529
+
530
+ * Fixed a bug that `strip: String` doesn't work.
531
+
532
+ ## 3.0.7 - 2019-04-08
533
+
534
+ ### Improvements
535
+
536
+ * Improve parse performance 1.5x by introducing loose parser.
537
+
538
+ ### Fixes
539
+
540
+ * Fix performance regression in 3.0.5.
541
+
542
+ * Fix a bug that `CSV#line` returns wrong value when you
543
+ use `quote_char: nil`.
544
+
545
+ ## 3.0.6 - 2019-03-30
546
+
547
+ ### Improvements
548
+
549
+ * `CSV.foreach`: Added support for `mode`.
550
+
551
+ ## 3.0.5 - 2019-03-24
552
+
553
+ ### Improvements
554
+
555
+ * Added `:liberal_parsing => {backslash_quote: true}` option.
556
+ [GitHub#74][Patch by 284km]
557
+
558
+ * Added `:write_converters` option.
559
+ [GitHub#73][Patch by Danillo Souza]
560
+
561
+ * Added `:write_nil_value` option.
562
+
563
+ * Added `:write_empty_value` option.
564
+
565
+ * Improved invalid byte line number detection.
566
+ [GitHub#78][Patch by Alyssa Ross]
567
+
568
+ * Added `quote_char: nil` optimization.
569
+ [GitHub#79][Patch by 284km]
570
+
571
+ * Improved error message.
572
+ [GitHub#81][Patch by Andrés Torres]
573
+
574
+ * Improved IO-like implementation for `StringIO` data.
575
+ [GitHub#80][Patch by Genadi Samokovarov]
576
+
577
+ * Added `:strip` option.
578
+ [GitHub#58]
579
+
580
+ ### Fixes
581
+
582
+ * Fixed a compatibility bug that `CSV#each` doesn't care `CSV#shift`.
583
+ [GitHub#76][Patch by Alyssa Ross]
584
+
585
+ * Fixed a compatibility bug that `CSV#eof?` doesn't care `CSV#each`
586
+ and `CSV#shift`.
587
+ [GitHub#77][Reported by Chi Leung]
588
+
589
+ * Fixed a compatibility bug that invalid line isn't ignored.
590
+ [GitHub#82][Reported by krororo]
591
+
592
+ * Fixed a bug that `:skip_lines` doesn't work with multibyte characters data.
593
+ [GitHub#83][Reported by ff2248]
594
+
595
+ ### Thanks
596
+
597
+ * Alyssa Ross
598
+
599
+ * 284km
600
+
601
+ * Chi Leung
602
+
603
+ * Danillo Souza
604
+
605
+ * Andrés Torres
606
+
607
+ * Genadi Samokovarov
608
+
609
+ * krororo
610
+
611
+ * ff2248
612
+
613
+ ## 3.0.4 - 2019-01-25
614
+
615
+ ### Improvements
616
+
617
+ * Removed duplicated `CSV::Row#include?` implementations.
618
+ [GitHub#69][Patch by Max Schwenk]
619
+
620
+ * Removed duplicated `CSV::Row#header?` implementations.
621
+ [GitHub#70][Patch by Max Schwenk]
622
+
623
+ ### Fixes
624
+
625
+ * Fixed a typo in document.
626
+ [GitHub#72][Patch by Artur Beljajev]
627
+
628
+ * Fixed a compatibility bug when row headers are changed.
629
+ [GitHub#71][Reported by tomoyuki kosaka]
630
+
631
+ ### Thanks
632
+
633
+ * Max Schwenk
634
+
635
+ * Artur Beljajev
636
+
637
+ * tomoyuki kosaka
638
+
639
+ ## 3.0.3 - 2019-01-12
640
+
641
+ ### Improvements
642
+
643
+ * Migrated benchmark tool to benchmark-driver from benchmark-ips.
644
+ [GitHub#57][Patch by 284km]
645
+
646
+ * Added `liberal_parsing: {double_quote_outside_quote: true}` parse
647
+ option.
648
+ [GitHub#66][Reported by Watson]
649
+
650
+ * Added `quote_empty:` write option.
651
+ [GitHub#35][Reported by Dave Myron]
652
+
653
+ ### Fixes
654
+
655
+ * Fixed a compatibility bug that `CSV.generate` always return
656
+ `ASCII-8BIT` encoding string.
657
+ [GitHub#63][Patch by Watson]
658
+
659
+ * Fixed a compatibility bug that `CSV.parse("", headers: true)`
660
+ doesn't return `CSV::Table`.
661
+ [GitHub#64][Reported by Watson][Patch by 284km]
662
+
663
+ * Fixed a compatibility bug that multiple-characters column
664
+ separator doesn't work.
665
+ [GitHub#67][Reported by Jesse Reiss]
666
+
667
+ * Fixed a compatibility bug that double `#each` parse twice.
668
+ [GitHub#68][Reported by Max Schwenk]
669
+
670
+ ### Thanks
671
+
672
+ * Watson
673
+
674
+ * 284km
675
+
676
+ * Jesse Reiss
677
+
678
+ * Dave Myron
679
+
680
+ * Max Schwenk
681
+
682
+ ## 3.0.2 - 2018-12-23
683
+
684
+ ### Improvements
685
+
686
+ * Changed to use strscan in parser.
687
+ [GitHub#52][Patch by 284km]
688
+
689
+ * Improves CSV write performance.
690
+ 3.0.2 will be about 2 times faster than 3.0.1.
691
+
692
+ * Improves CSV parse performance for complex case.
693
+ 3.0.2 will be about 2 times faster than 3.0.1.
694
+
695
+ ### Fixes
696
+
697
+ * Fixed a parse error bug for new line only input with `headers` option.
698
+ [GitHub#53][Reported by Chris Beer]
699
+
700
+ * Fixed some typos in document.
701
+ [GitHub#54][Patch by Victor Shepelev]
702
+
703
+ ### Thanks
704
+
705
+ * 284km
706
+
707
+ * Chris Beer
708
+
709
+ * Victor Shepelev
710
+
711
+ ## 3.0.1 - 2018-12-07
712
+
713
+ ### Improvements
714
+
715
+ * Added a test.
716
+ [GitHub#38][Patch by 284km]
717
+
718
+ * `CSV::Row#dup`: Changed to duplicate internal data.
719
+ [GitHub#39][Reported by André Guimarães Sakata]
720
+
721
+ * Documented `:nil_value` and `:empty_value` options.
722
+ [GitHub#41][Patch by OwlWorks]
723
+
724
+ * Added support for separator detection for non-seekable inputs.
725
+ [GitHub#45][Patch by Ilmari Karonen]
726
+
727
+ * Removed needless code.
728
+ [GitHub#48][Patch by Espartaco Palma]
729
+
730
+ * Added support for parsing header only CSV with `headers: true`.
731
+ [GitHub#47][Patch by Kazuma Shibasaka]
732
+
733
+ * Added support for coverage report in CI.
734
+ [GitHub#48][Patch by Espartaco Palma]
735
+
736
+ * Improved auto CR row separator detection.
737
+ [GitHub#51][Reported by Yuki Kurihara]
738
+
739
+ ### Fixes
740
+
741
+ * Fixed a typo in document.
742
+ [GitHub#40][Patch by Marcus Stollsteimer]
743
+
744
+ ### Thanks
745
+
746
+ * 284km
747
+
748
+ * André Guimarães Sakata
749
+
750
+ * Marcus Stollsteimer
751
+
752
+ * OwlWorks
753
+
754
+ * Ilmari Karonen
755
+
756
+ * Espartaco Palma
757
+
758
+ * Kazuma Shibasaka
759
+
760
+ * Yuki Kurihara
761
+
762
+ ## 3.0.0 - 2018-06-06
763
+
764
+ ### Fixes
765
+
766
+ * Fixed a bug that header isn't returned for empty row.
767
+ [GitHub#37][Patch by Grace Lee]
768
+
769
+ ### Thanks
770
+
771
+ * Grace Lee
772
+
773
+ ## 1.0.2 - 2018-05-03
774
+
775
+ ### Improvements
776
+
777
+ * Split file for CSV::VERSION
778
+
779
+ * Code cleanup: Split csv.rb into a more manageable structure
780
+ [GitHub#19][Patch by Espartaco Palma]
781
+ [GitHub#20][Patch by Steven Daniels]
782
+
783
+ * Use CSV::MalformedCSVError for invalid encoding line
784
+ [GitHub#26][Reported by deepj]
785
+
786
+ * Support implicit Row <-> Array conversion
787
+ [Bug #10013][ruby-core:63582][Reported by Dawid Janczak]
788
+
789
+ * Update class docs
790
+ [GitHub#32][Patch by zverok]
791
+
792
+ * Add `Row#each_pair`
793
+ [GitHub#33][Patch by zverok]
794
+
795
+ * Improve CSV performance
796
+ [GitHub#30][Patch by Watson]
797
+
798
+ * Add :nil_value and :empty_value option
799
+
800
+ ### Fixes
801
+
802
+ * Fix a bug that "bom|utf-8" doesn't work
803
+ [GitHub#23][Reported by Pavel Lobashov]
804
+
805
+ * `CSV::Row#to_h`, `#to_hash`: uses the same value as `Row#[]`
806
+ [Bug #14482][Reported by tomoya ishida]
807
+
808
+ * Make row separator detection more robust
809
+ [GitHub#25][Reported by deepj]
810
+
811
+ * Fix a bug that too much separator when col_sep is `" "`
812
+ [Bug #8784][ruby-core:63582][Reported by Sylvain Laperche]
813
+
814
+ ### Thanks
815
+
816
+ * Espartaco Palma
817
+
818
+ * Steven Daniels
819
+
820
+ * deepj
821
+
822
+ * Dawid Janczak
823
+
824
+ * zverok
825
+
826
+ * Watson
827
+
828
+ * Pavel Lobashov
829
+
830
+ * tomoya ishida
831
+
832
+ * Sylvain Laperche
833
+
834
+ * Ryunosuke Sato
835
+
836
+ ## 1.0.1 - 2018-02-09
837
+
838
+ ### Improvements
839
+
840
+ * `CSV::Table#delete`: Added bulk delete support. You can delete
841
+ multiple rows and columns at once.
842
+ [GitHub#4][Patch by Vladislav]
843
+
844
+ * Updated Gem description.
845
+ [GitHub#11][Patch by Marcus Stollsteimer]
846
+
847
+ * Code cleanup.
848
+ [GitHub#12][Patch by Marcus Stollsteimer]
849
+ [GitHub#14][Patch by Steven Daniels]
850
+ [GitHub#18][Patch by takkanm]
851
+
852
+ * `CSV::Table#dig`: Added.
853
+ [GitHub#15][Patch by Tomohiro Ogoke]
854
+
855
+ * `CSV::Row#dig`: Added.
856
+ [GitHub#15][Patch by Tomohiro Ogoke]
857
+
858
+ * Added ISO 8601 support to date time converter.
859
+ [GitHub#16]
860
+
861
+ ### Fixes
862
+
863
+ * Fixed wrong `CSV::VERSION`.
864
+ [GitHub#10][Reported by Marcus Stollsteimer]
865
+
866
+ * `CSV.generate`: Fixed a regression bug that `String` argument is
867
+ ignored.
868
+ [GitHub#13][Patch by pavel]
869
+
870
+ ### Thanks
871
+
872
+ * Vladislav
873
+
874
+ * Marcus Stollsteimer
875
+
876
+ * Steven Daniels
877
+
878
+ * takkanm
879
+
880
+ * Tomohiro Ogoke
881
+
882
+ * pavel