summaryrefslogtreecommitdiff
path: root/lib/csv.rb
AgeCommit message (Collapse)Author
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
2019-07-14[ruby/csv] add document of strip (#88)hayashiyoshino
* add document of strip * modify typo https://github.com/ruby/csv/commit/de0257dc31
2019-07-14[ruby/csv] Don't raise on eof?Kouhei Sutou
GitHub: fix #86 Reported by krororo. Thanks!!! https://github.com/ruby/csv/commit/5a8d9d9297
2019-04-14Import CSV 3.0.8kou
This includes performance improvements and backward incompatibility fixes. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67560 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2019-01-25Upgrade CSV to 3.0.4kou
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66922 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-12-23Import CSV 3.0.2kou
This includes performance improvement especially writing. Writing is about 2 times faster. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66507 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-09-05Merge csv-3.0.0 from ruby/csv repository.hsbt
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64638 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-05-09Merge csv-1.0.2 from upstream.hsbt
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63364 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-03-18Improve CSV performancewatson1978
If it will not use special variables (like $1, $&, $`...), it can improve the performance by using Regexp#match? or String#match? instead of Regexp#=~ or String#=~. This patch is same idea as https://github.com/ruby/ruby/pull/1836 [Fix GH-1842] ## Environment * OS : Ubuntu 17.10 * Compiler : gcc version 7.2.0 * CPU : Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz * Memory : 16 GB ## TL;DR Methods | Before | After | Speed up ----------- | ------ | ------ | -------- CSV.foreach | 44.825 | 48.201 | 7.5% CSV#shift | 45.200 | 49.584 | 9.7% CSV.read | 42.968 | 46.853 | 9.0% CSV.table | 10.933 | 11.277 | 3.1% ## Before ``` Calculating ------------------------------------- CSV.foreach 44.825 (± 0.0%) i/s - 228.000 in 5.086576s CSV#shift 45.200 (± 0.0%) i/s - 228.000 in 5.044297s CSV.read 42.968 (± 0.0%) i/s - 216.000 in 5.027504s CSV.table 10.933 (± 0.0%) i/s - 55.000 in 5.031098s ``` ## After ``` Calculating ------------------------------------- CSV.foreach 48.201 (± 0.0%) i/s - 244.000 in 5.062256s CSV#shift 49.584 (± 0.0%) i/s - 248.000 in 5.001652s CSV.read 46.853 (± 0.0%) i/s - 236.000 in 5.037044s CSV.table 11.277 (± 0.0%) i/s - 57.000 in 5.054694s ``` ## Benchmark code ```ruby require 'csv' require 'benchmark/ips' CSV.open("/tmp/file.csv", "w") do |csv| csv << ["player", "gameA", "gameB"] 1000.times do csv << ['"Alice"', "84.0", "79.5"] csv << ['"Bob"', "20.0", "56.5"] end end Benchmark.ips do |x| x.report "CSV.foreach" do CSV.foreach("/tmp/file.csv") do |row| end end x.report "CSV#shift" do CSV.open("/tmp/file.csv") do |csv| while line = csv.shift end end end x.report "CSV.read" do CSV.read("/tmp/file.csv") end x.report "CSV.table" do CSV.table("/tmp/file.csv") end end ``` git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62806 b2dd03c8-39d4-4d8f-98ff-823fe69b080e