[ruby-dev:50191] Re: glass:r59428 (trunk): csv.rb: use keyword parameters
From:
Masaki Matsushita <glass.saga@...>
Date:
2017-07-28 07:55:00 UTC
List:
ruby-dev #50191
=E6=9D=BE=E4=B8=8B (glass)=E3=81=A7=E3=81=99=E3=80=82
=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88=E9=A0=82=E3=81=8D=E3=81=82=E3=82=8A=E3=
=81=8C=E3=81=A8=E3=81=86=E3=81=94=E3=81=96=E3=81=84=E3=81=BE=E3=81=99=E3=80=
=82
r59437=E3=81=A7=E3=81=94=E6=8C=87=E6=91=98=E9=A0=82=E3=81=84=E3=81=9F=E7=82=
=B9=E3=82=92=E4=BF=AE=E6=AD=A3=E3=81=97=E3=81=A6=E3=80=81=E3=81=84=E3=81=8F=
=E3=81=A4=E3=81=8B=E3=83=86=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0=E3=
=81=97=E3=81=BE=E3=81=97=E3=81=9F=E3=80=82
Unknown options=E3=81=AB=E3=81=A4=E3=81=84=E3=81=A6=E3=81=AF=E3=82=AD=E3=83=
=BC=E3=83=AF=E3=83=BC=E3=83=89=E5=BC=95=E6=95=B0=E3=81=A8=E3=81=97=E3=81=A6=
=E6=A4=9C=E6=9F=BB=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=97=E3=
=81=A6=E3=81=84=E3=81=BE=E3=81=99=E3=80=82
=E6=9D=BE=E4=B8=8B
2017-07-27 23:30 GMT+09:00 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>:
> =E8=A5=BF=E5=B1=B1=E5=92=8C=E5=BA=83=E3=81=A7=E3=81=99=E3=80=82
>
> On Thu, 27 Jul 2017 18:53:58 +0900,
> glass@ruby-lang.org wrote:
>>
>> glass 2017-07-27 18:53:58 +0900 (Thu, 27 Jul 2017)
>>
>> New Revision: 59428
>>
>> https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=3Drevision&revision=
=3D59428
>>
>> Log:
>> csv.rb: use keyword parameters
>>
>> * lib/csv.rb: usb keyword parameters to receive options
>>
>> * test/csv/test_features.rb: remove a test for checking options
>>
>> Modified files:
>> trunk/lib/csv.rb
>> trunk/test/csv/test_features.rb
>
> =E3=81=AE=E5=B7=AE=E5=88=86=E3=82=92=E3=81=BF=E3=81=A6=E6=B0=97=E3=81=AB=
=E3=81=AA=E3=81=A3=E3=81=9F=E7=82=B9=E3=82=92=E9=80=81=E3=81=A3=E3=81=A6=E3=
=81=8A=E3=81=8D=E3=81=BE=E3=81=99=E3=80=82
>
>> # :call-seq:
>> - # filter( options =3D Hash.new ) { |row| ... }
>> - # filter( input, options =3D Hash.new ) { |row| ... }
>> - # filter( input, output, options =3D Hash.new ) { |row| ... }
>> + # filter( **options ) { |row| ... }
>> + # filter( input, **options ) { |row| ... }
>> + # filter( input, output, **options ) { |row| ... }
>
> =E3=81=A8=E3=81=82=E3=82=8B=E3=81=AE=E3=81=AB=E3=80=81
>
>> - def self.filter(*args)
>> + def self.filter(input, output=3Dnil, **options)
>
> =E3=81=A8=E3=81=AA=E3=81=A3=E3=81=A6=E3=81=84=E3=81=A6 input =E3=81=8C=E5=
=BF=85=E9=A0=88=E5=BC=95=E6=95=B0=E3=81=AB=E3=81=AA=E3=81=A3=E3=81=A6=E3=81=
=97=E3=81=BE=E3=81=A3=E3=81=A6=E3=81=84=E3=81=BE=E3=81=99=E3=80=82
>
> % ruby -vr csv -e 'CSV.filter' < /dev/null
> ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-darwin15]
> % ruby -vr csv -e 'CSV.filter' < /dev/null
> ruby 2.5.0dev (2017-07-27 trunk 59435) [x86_64-darwin16]
> Traceback (most recent call last):
> 1: from -e:1:in `<main>'
> /Users/kazu/.rbenv/versions/git/lib/ruby/2.5.0/csv.rb:1102:in `filter': w=
rong number of arguments (given 0, expected 1..2) (ArgumentError)
>
>> - def self.generate_line(row, options =3D Hash.new)
>> - options =3D {row_sep: $INPUT_RECORD_SEPARATOR}.merge(options)
>> - encoding =3D options.delete(:encoding)
>> - str =3D String.new
>> + def self.generate_line(row, encoding: nil, **options)
>> + options[:row_sep] ||=3D $INPUT_RECORD_SEPARATOR
>> + str =3D String.new
>
> row_sep =E3=81=8C=E5=81=BD=E3=81=AE=E6=99=82=E3=81=AB=E7=84=A1=E8=A6=96=
=E3=81=95=E3=82=8C=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=AA=E3=81=A3=E3=
=81=9F=E3=82=88=E3=81=86=E3=81=A7=E3=81=99=E3=81=8C=E3=80=81=E6=84=8F=E5=9B=
=B3=E7=9A=84=E3=81=A7=E3=81=97=E3=82=87=E3=81=86=E3=81=8B?
>
> % ruby -vr csv -e 'p CSV.generate_line(%w"1 2", row_sep: nil)'
> ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-darwin15]
> "1,2"
> % ruby -vr csv -e 'p CSV.generate_line(%w"1 2", row_sep: nil)'
> ruby 2.5.0dev (2017-07-27 trunk 59435) [x86_64-darwin16]
> "1,2\n"
>
>> - def self.open(*args)
>> - # find the +options+ Hash
>> - options =3D if args.last.is_a? Hash then args.pop else Hash.new end
>> + def self.open(*args, **options)
>> # wrap a File opened with the remaining +args+ with no newline
>> # decorator
>> - file_opts =3D {universal_newline: false}.merge(options)
>> + file_opts =3D options.dup
>> + file_opts[:universal_newline] ||=3D false
>
> open =E3=81=AE universal_newline =E3=81=8C=E9=80=9A=E3=82=8B=E3=82=88=E3=
=81=86=E3=81=AB=E3=81=AA=E3=81=A3=E3=81=9F=E3=82=88=E3=81=86=E3=81=A7=E3=81=
=99=E3=81=8C=E3=80=81
> initialize =E3=81=A7 Unknown options =E3=81=AB=E3=81=AA=E3=82=89=E3=81=AA=
=E3=81=8F=E3=81=AA=E3=81=A3=E3=81=9F=E3=81=AE=E3=81=AF=E6=84=8F=E5=9B=B3=E7=
=9A=84=E3=81=A7=E3=81=97=E3=82=87=E3=81=86=E3=81=8B?
> (=E3=83=86=E3=82=B9=E3=83=88=E3=81=AE=E6=96=B9=E3=81=A7 test_unknown_opti=
ons =E3=82=92=E6=B6=88=E3=81=97=E3=81=A6=E3=81=84=E3=82=8B=E3=81=AE=E3=81=
=A7=E6=84=8F=E5=9B=B3=E7=9A=84=E3=81=A3=E3=81=BD=E3=81=84?)
>
> % echo -en 'foo,bar\r\n1,2\n' > /tmp/foo.csv
> % ruby -vr csv -e 'p CSV.open("/tmp/foo.csv", universal_newline: true, &=
:read)'
> ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-darwin15]
> /Users/kazu/.rbenv/versions/2.3.3/lib/ruby/2.3.0/csv.rb:1548:in `initiali=
ze': Unknown options: universal_newline. (ArgumentError)
> from /Users/kazu/.rbenv/versions/2.3.3/lib/ruby/2.3.0/csv.rb:1273=
:in `new'
> from /Users/kazu/.rbenv/versions/2.3.3/lib/ruby/2.3.0/csv.rb:1273=
:in `open'
> from -e:1:in `<main>'
> % ruby -vr csv -e 'p CSV.open("/tmp/foo.csv", universal_newline: true, &=
:read)'
> ruby 2.5.0dev (2017-07-27 trunk 59435) [x86_64-darwin16]
> [["foo", "bar"], ["1", "2"]]
> % ruby -vr csv -e 'p CSV.new("/tmp/foo.csv", universal_newline: true)'
> ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-darwin15]
> /Users/kazu/.rbenv/versions/2.3.3/lib/ruby/2.3.0/csv.rb:1548:in `initiali=
ze': Unknown options: universal_newline. (ArgumentError)
> from -e:1:in `new'
> from -e:1:in `<main>'
> % ruby -vr csv -e 'p CSV.new("/tmp/foo.csv", universal_newline: true)'
> ruby 2.5.0dev (2017-07-27 trunk 59435) [x86_64-darwin16]
> <#CSV io_type:StringIO encoding:UTF-8 lineno:0 col_sep:"," row_sep:"\n" q=
uote_char:"\"">
>
>> - file_opts =3D {encoding: Encoding.default_external}.merge(file_op=
ts)
>> + file_opts[:encoding] ||=3D Encoding.default_external
>
> =E3=81=93=E3=81=93=E3=82=82=E5=81=BD=E3=81=AE=E6=99=82=E3=81=AB=E9=9D=9E=
=E4=BA=92=E6=8F=9B=E3=81=8C=E7=99=BA=E7=94=9F=E3=81=97=E3=81=9D=E3=81=86=E3=
=81=A7=E3=81=99=E3=81=8C=E3=80=81=E6=84=8F=E5=9B=B3=E7=9A=84=E3=81=A7=E3=81=
=97=E3=82=87=E3=81=86=E3=81=8B?
>
>> + encoding, =3D encoding.split(":") if encoding.is_a?(String)
>
> split(":", 2) =E3=81=AB=E3=81=99=E3=82=8B=E3=81=A8=E8=89=AF=E3=81=95=E3=
=81=9D=E3=81=86=E3=81=A7=E3=81=99=E3=80=82
>
>
> --
> |ZnZ(=E3=82=BC=E3=83=83=E3=83=88 =E3=82=A8=E3=83=8C =E3=82=BC=E3=83=83=E3=
=83=88)
> |=E8=A5=BF=E5=B1=B1=E5=92=8C=E5=BA=83(Kazuhiro NISHIYAMA)