csv 3.0.0 → 3.2.8

Sign up to get free protection for your applications and to get access to all the features.
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