summaryrefslogtreecommitdiff
path: root/lib/csv.rb
AgeCommit message (Collapse)Author
2024-01-22Extract csvHiroshi SHIBATA
2023-10-03[ruby/csv] [DOC] Fix broken linksBurdette Lamar
(https://github.com/ruby/csv/pull/283) https://github.com/ruby/csv/commit/af64a15b2f
2023-10-03[ruby/csv] Add CSV::InvalidEncodingErrorKosuke Shibata
(https://github.com/ruby/csv/pull/287) To handle encoding errors in CSV parsing with the appropriate error class https://github.com/ruby/csv/commit/68b44887e5
2023-05-25[ruby/csv] All Enumerable based methods consume the same lines with other ↵Sutou Kouhei
methods This may have a performance penalty. We should benchmark this. GitHub: fix https://github.com/ruby/csv/pull/260 Reported by Lhoussaine Ghallou. Thanks!!! https://github.com/ruby/csv/commit/acc05116c5 Notes: Merged: https://github.com/ruby/ruby/pull/7851
2023-05-25[ruby/csv] CSV#read consumes the same lines with other methods like CSV#shiftSutou Kouhei
GitHub: fix https://github.com/ruby/csv/pull/258 Reported by Lhoussaine Ghallou. Thanks!!! https://github.com/ruby/csv/commit/71e6d24e28 Notes: Merged: https://github.com/ruby/ruby/pull/7851
2023-02-21[ruby/csv] Use https links instead of httpVivek Bharath Akupatni
(https://github.com/ruby/csv/pull/274) https://github.com/ruby/csv/commit/e2a06929a8
2022-12-09Merge csv-3.2.6Hiroshi SHIBATA
Notes: Merged: https://github.com/ruby/ruby/pull/6890
2021-12-24[ruby/csv] Add handling for ambiguous parsing options ↵adamroyjones
(https://github.com/ruby/csv/pull/226) GitHub: fix GH-225 With Ruby 3.0.2 and csv 3.2.1, the file ```ruby require "csv" File.open("example.tsv", "w") { |f| f.puts("foo\t\tbar") } CSV.read("example.tsv", col_sep: "\t", strip: true) ``` produces the error ``` lib/csv/parser.rb:935:in `parse_quotable_robust': TODO: Meaningful message in line 1. (CSV::MalformedCSVError) ``` However, the CSV in this example is not malformed; instead, ambiguous options were provided to the parser. It is not obvious (to me) whether the string should be parsed as - `["foo\t\tbar"]`, - `["foo", "bar"]`, - `["foo", "", "bar"]`, or - `["foo", nil, "bar"]`. This commit adds code that raises an exception when this situation is encountered. Specifically, it checks if the column separator either ends with or starts with the characters that would be stripped away. This commit also adds unit tests and updates the documentation. https://github.com/ruby/csv/commit/cc317dd42d Notes: Merged: https://github.com/ruby/ruby/pull/5336
2021-10-24[ruby/csv] Add support for Ractor (https://github.com/ruby/csv/pull/218)rm155
https://github.com/ruby/csv/commit/a802690e11 Notes: Merged: https://github.com/ruby/ruby/pull/5010
2021-10-24[ruby/csv] CSV(): Add support for Ruby 3 (https://github.com/ruby/csv/pull/215)Anthony Hernandez
The implementation of the `CSV` shortcut method is broken in Ruby 3 for calls that look like this: ```ruby CSV(write_stream, col_sep: "|", headers: headers, write_headers: true) do |csv| ... end ``` The above will result in the following error when the `CSV` method attempts to pass on arguments to `CSV#instance`: ``` ArgumentError: wrong number of arguments (given 2, expected 0..1) ``` The issue is due to the changes in Ruby 3 relating to positional & keyword arguments. This commit updates the `CSV()` shortcut implementation to work with Ruby 3, and also updates the documentation for the shortcut method. https://github.com/ruby/csv/commit/310dee45fa Notes: Merged: https://github.com/ruby/ruby/pull/5010
2021-10-24[ruby/csv] Use "\n" for the default row separator on Ruby 3.0 or laterSutou Kouhei
https://github.com/ruby/csv/commit/1f9cbc170e Notes: Merged: https://github.com/ruby/ruby/pull/5010
2021-10-24[ruby/csv] Resolve CSV::Converters and HeaderConverters lazySutou Kouhei
It's for Ractor. If you want to use the built-in converters, you should call Ractor.make_shareable(CSV::Converters) and/or Ractor.make_shareable(CSV::HeaderConverters). https://github.com/ruby/csv/commit/b0b1325d6b Notes: Merged: https://github.com/ruby/ruby/pull/5010
2021-10-24[ruby/csv] doc: Match text to the struct name ↵Vince
(https://github.com/ruby/csv/pull/217) https://github.com/ruby/csv/commit/744e41130c Notes: Merged: https://github.com/ruby/ruby/pull/5010
2020-12-27[ruby/csv] Fix typo [ci skip]Kenta Murata
https://github.com/ruby/csv/commit/117bcf311e
2020-11-24[ruby/csv] Clarify and correct RDoc for converters (#178)Burdette Lamar
https://github.com/ruby/csv/commit/f3e9586b34 Notes: Merged: https://github.com/ruby/ruby/pull/3804
2020-11-24[ruby/csv] Fix CSV.filter to preserve headers (#174)Burdette Lamar
Co-authored-by: Sutou Kouhei <kou@clear-code.com> https://github.com/ruby/csv/commit/203c5e0574 Notes: Merged: https://github.com/ruby/ruby/pull/3804
2020-11-24[ruby/csv] Add link to Wikipedia article Table (#167)Burdette Lamar
https://github.com/ruby/csv/commit/fe975c41d2 Notes: Merged: https://github.com/ruby/ruby/pull/3804
2020-07-21[ruby/csv] Move doc/* to doc/csv/* to work in ruby/ruby tooSutou Kouhei
https://github.com/ruby/csv/commit/910f8e0c5d
2020-07-20[ruby/csv] Enhanced RDoc for several methods (#158)Burdette Lamar
* Enhanced RDoc for several methods * Update lib/csv.rb Co-authored-by: Sutou Kouhei <kou@cozmixng.org> Co-authored-by: Sutou Kouhei <kou@cozmixng.org> https://github.com/ruby/csv/commit/72e8b00e51 Notes: Merged: https://github.com/ruby/ruby/pull/3335
2020-07-20[ruby/csv] CSV.generate_line: use the encoding of the first non ASCII field ↵Sutou Kouhei
as the expected encoding See also: https://github.com/ruby/stringio/issues/13#issuecomment-660543554 https://github.com/ruby/csv/commit/004cf49d18 Notes: Merged: https://github.com/ruby/ruby/pull/3332
2020-07-20[ruby/csv] RDoc for converters (#157)Burdette Lamar
* More on RDoc for converters * More on RDoc for converters * Fix indent Co-authored-by: Sutou Kouhei <kou@cozmixng.org> https://github.com/ruby/csv/commit/6044976160 Notes: Merged: https://github.com/ruby/ruby/pull/3332
2020-07-20[ruby/csv] Adding call-seq to methods RDoc (#155)Burdette Lamar
* Adding call-seq to methods RDoc Co-authored-by: Sutou Kouhei <kou@cozmixng.org> https://github.com/ruby/csv/commit/dbd860c1cd Notes: Merged: https://github.com/ruby/ruby/pull/3332
2020-07-20[ruby/csv] RDoc: summary lists for options (#154)Burdette Lamar
* RDoc: summary lists for options * Enhanced RDoc for certain attributes and instance methods * Enhanced RDoc for certain attributes and instance methods * Enhanced RDoc for certain attributes and instance methods * Enhanced RDoc for certain attributes and instance methods https://github.com/ruby/csv/commit/72d8a25dc9 Notes: Merged: https://github.com/ruby/ruby/pull/3332
2020-07-20[ruby/csv] RDoc remark about instance methods (#152)Burdette Lamar
https://github.com/ruby/csv/commit/76379bbe62 Notes: Merged: https://github.com/ruby/ruby/pull/3332
2020-07-20[ruby/csv] Revised introductory RDoc (#151)Burdette Lamar
https://github.com/ruby/csv/commit/60f6f1c28f Notes: Merged: https://github.com/ruby/ruby/pull/3332
2020-07-20[ruby/csv] Enhanced RDoc for filter (#149)Burdette Lamar
* Enhanced RDoc for filter * Correct return values for ::filter, ::foreach, ::parse * Enhanced RDoc for filter * Remove "returns nil"s Co-authored-by: Sutou Kouhei <kou@clear-code.com> https://github.com/ruby/csv/commit/2c347f9a3d Notes: Merged: https://github.com/ruby/ruby/pull/3332
2020-07-20[ruby/csv] Enhancements for RDoc (#148)Burdette Lamar
Co-authored-by: Sutou Kouhei <kou@cozmixng.org> https://github.com/ruby/csv/commit/25dd4cddbb Notes: Merged: https://github.com/ruby/ruby/pull/3332
2020-07-20[ruby/csv] Organize files in doc/ (#145)Burdette Lamar
https://github.com/ruby/csv/commit/bc9ea859b0 Notes: Merged: https://github.com/ruby/ruby/pull/3332
2020-07-20[ruby/csv] RDoc for parse_line (adds headers examples) (#143)Burdette Lamar
* RDoc for parse_line (adds headers examples) * RDoc for parse_line (adds headers examples) https://github.com/ruby/csv/commit/a161be928e Notes: Merged: https://github.com/ruby/ruby/pull/3332
2020-07-20[ruby/csv] Added headers to RDoc for CSV.foreach (#142)Burdette Lamar
* Added headers: to RDoc for CSV.foreach * Correct options remark for CSV.generate * Improve citation for option headers https://github.com/ruby/csv/commit/b01945ec3a Notes: Merged: https://github.com/ruby/ruby/pull/3332
2020-07-20[ruby/csv] Add headers cases to CSV.parse (#141)Burdette Lamar
* Add headers cases to CSV.parse * Adjust call-seq for CSV.parse * Update csv.rb https://github.com/ruby/csv/commit/848c760c43 Notes: Merged: https://github.com/ruby/ruby/pull/3332
2020-07-20[ruby/csv] doc: fix return value of open {} and use File.open {} (#139)Burdette Lamar
* Enhanced RDoc for CSV * Repair example code for foreach https://github.com/ruby/csv/commit/16b425eb37 Notes: Merged: https://github.com/ruby/ruby/pull/3332
2020-07-20[ruby/csv] Rdoc (#137)Burdette Lamar
Enhancements for open, parse, minor tweaks. https://github.com/ruby/csv/commit/35392f4e45 Notes: Merged: https://github.com/ruby/ruby/pull/3332
2020-07-20[ruby/csv] Add document for CSV.instance (#136)Burdette Lamar
Co-authored-by: Sutou Kouhei <kou@cozmixng.org> https://github.com/ruby/csv/commit/85e293c1ba Notes: Merged: https://github.com/ruby/ruby/pull/3332
2020-07-20[ruby/csv] Add RDoc links for delegated methods (#135)Burdette Lamar
https://github.com/ruby/csv/commit/1a4b96b418 Notes: Merged: https://github.com/ruby/ruby/pull/3332
2020-07-20[ruby/csv] Add `invalid: :replace` for `CSV.open` (#130)Koichi ITO
This PR adds `invalid: :replace` for `CSV.open`. It is a PR similar to #129. https://github.com/ruby/csv/commit/5bf687341c Notes: Merged: https://github.com/ruby/ruby/pull/3332
2020-07-20[ruby/csv] Add `undef: :replace` for `CSV.open` (#129)Koichi ITO
This PR adds `undef: :replace` option for `CSV.open`. `File.open` has `undef: :replace` option, but `CSV.open` does not. It would be convenient if `CSV.open` could have a shortcut by having `undef: :replace` option. https://github.com/ruby/csv/commit/cff8b18480 Notes: Merged: https://github.com/ruby/ruby/pull/3332
2020-07-20[ruby/csv] RDoc for foreach, generate (#127)Burdette Lamar
* Rdoc for foreach * Enhanced Rdoc for CSV.generate https://github.com/ruby/csv/commit/8c26c0ab1f Notes: Merged: https://github.com/ruby/ruby/pull/3332
2020-07-20[ruby/csv] Enhanced Rdoc (#124)Burdette Lamar
* Enhanced Rdoc for ::new * Rdoc for parse_line * More on parse_line * Make ::new neater with :call-seq: * Make better use of :call-seq: * Rdoc for generate_line * Respond to review https://github.com/ruby/csv/commit/0d42df39cb Notes: Merged: https://github.com/ruby/ruby/pull/3332
2020-07-20[ruby/csv] Don't drop stack trace in CSV.parse_lineSutou Kouhei
GitHub: fix GH-120 Reported by Kyle d'Oliveira. Thanks!!! https://github.com/ruby/csv/commit/2959483f90 Notes: Merged: https://github.com/ruby/ruby/pull/3332
2020-07-20[ruby/csv] Enhanced Rdoc for CSV (#122)Burdette Lamar
https://github.com/ruby/csv/commit/cd670595d5 Notes: Merged: https://github.com/ruby/ruby/pull/3332
2020-07-20[ruby/csv] Fix docs for :strip option (#114)TOMITA Masahiro
https://github.com/ruby/csv/commit/fb10925271 Notes: Merged: https://github.com/ruby/ruby/pull/3332
2020-07-20[ruby/csv] Ensuring StringIO's encoding in CSV.generate (#111)Seiei Miyagi
https://github.com/ruby/csv/commit/dbf55ef008 Notes: Merged: https://github.com/ruby/ruby/pull/3332
2019-10-12Import CSV 3.1.2 (#2547)Sutou Kouhei
Notes: Merged-By: kou <kou@clear-code.com>
2019-09-25Make rb_scan_args handle keywords more similar to Ruby methods (#2460)Jeremy Evans
Cfuncs that use rb_scan_args with the : entry suffer similar keyword argument separation issues that Ruby methods suffer if the cfuncs accept optional or variable arguments. This makes the following changes to : handling. * Treats as **kw, prompting keyword argument separation warnings if called with a positional hash. * Do not look for an option hash if empty keywords are provided. For backwards compatibility, treat an empty keyword splat as a empty mandatory positional hash argument, but emit a a warning, as this behavior will be removed in Ruby 3. The argument number check needs to be moved lower so it can correctly handle an empty positional argument being added. * If the last argument is nil and it is necessary to treat it as an option hash in order to make sure all arguments are processed, continue to treat the last argument as the option hash. Emit a warning in this case, as this behavior will be removed in Ruby 3. * If splitting the keyword hash into two hashes, issue a warning, as we will not be splitting hashes in Ruby 3. * If the keyword argument is required to fill a mandatory positional argument, continue to do so, but emit a warning as this behavior will be going away in Ruby 3. * If keyword arguments are provided and the last argument is not a hash, that indicates something wrong. This can happen if a cfunc is calling rb_scan_args multiple times, and providing arguments that were not passed to it from Ruby. Callers need to switch to the new rb_scan_args_kw function, which allows passing of whether keywords were provided. This commit fixes all warnings caused by the changes above. It switches some function calls to *_kw versions with appropriate kw_splat flags. If delegating arguments, RB_PASS_CALLED_KEYWORDS is used. If creating new arguments, RB_PASS_KEYWORDS is used if the last argument is a hash to be treated as keywords. In open_key_args in io.c, use rb_scan_args_kw. In this case, the arguments provided come from another C function, not Ruby. The last argument may or may not be a hash, so we can't set keyword argument mode. However, if it is a hash, we don't want to warn when treating it as keywords. In Ruby files, make sure to appropriately use keyword splats or literal keywords when calling Cfuncs that now issue keyword argument separation warnings through rb_scan_args. Also, make sure not to pass nil in place of an option hash. Work around Kernel#warn warnings due to problems in the Rubygems override of the method. There is an open pull request to fix these issues in Rubygems, but part of the Rubygems tests for their override fail on ruby-head due to rb_scan_args not recognizing empty keyword splats, which this commit fixes. Implementation wise, adding rb_scan_args_kw is kind of a pain, because rb_scan_args takes a variable number of arguments. In order to not duplicate all the code, the function internals need to be split into two functions taking a va_list, and to avoid passing in a ton of arguments, a single struct argument is used to handle the variables previously local to the function. Notes: Merged-By: jeremyevans <code@jeremyevans.net>
2019-08-30Fix keyword argument separation issues in libJeremy Evans
Mostly requires adding ** in either calls or method definitions. Notes: Merged: https://github.com/ruby/ruby/pull/2395
2019-08-13Fix a typo [ci skip]Kazuhiro NISHIYAMA
2019-07-25Fix a typo in inspectKazuhiro NISHIYAMA
2019-07-14[ruby/csv] add options doc :quote_empty (#89)kawa_tech
https://github.com/ruby/csv/commit/5ca8d79f60
2019-07-14[ruby/csv] Add options doc: :write_converters, :write_nil_value, ↵Masafumi Koba
:write_empty_value (#87) https://github.com/ruby/csv/commit/5923ee08b7