From: kuwabara@... Date: 2018-01-29T05:54:02+00:00 Subject: [ruby-core:85211] [Ruby trunk Feature#14405] Add base option to Pathname.glob also Issue #14405 has been updated by pocke (Masataka Kuwabara). nobu (Nobuyoshi Nakada) wrote: > `Pathname` has `glob` instance method. > > ```ruby > p Pathname('lib').glob('i*.rb', 0) => [#, #] > ``` > > This looks brief enough. Definitely. I also noticed it after created this ticket. However I think `Pathname.glob` makes sense for two reasons. Firstly, I think `Pathname.glob` should have same interface as `Dir.glob`. For example, if they have the same interface, we can replace `Dir.glob` with `Pathname.glob` more easily. ``` # before Dir.glob('*', base: 'path/to/dir') # When I'd like to get pathnames: # If they don't have the same interface, I should rewrite the whole code. Pathname('path/to/dir').glob('*') # If they have the same interface, I'll just replace `Dir` with `Pathname` only. I think it is more easily. Pathname.glob('*', base: 'path/to/dir') ``` Secondly, I feel the `Pathname('path/to/dir')` is a subject in `Pathname('path/to/dir').glob('*')`, and `base: 'path/to/dir'` is not a subject in `Pathname.glob('*', base: 'path/to/dir')`. I guess a base directory is not a subject of the `glob` methods in many cases, so I'd like to use the keyword argument style in many cases. (������������������������������������������������������������������������������������������������������������������������ `Pathname('path/to/dir').glob('*')`���������`Pathname('path/to/dir')`������������������������������������������������������������`Pathname.glob('*', base: 'path/to/dir')`������������`base: 'path/to/dir'`��������������������������������������������������������� ���������������������������������base���������������������������������`glob`���������������������(������������������������������������������)������������������������������������������������������������keyword���������������������������������������������������) What do you think? ---------------------------------------- Feature #14405: Add base option to Pathname.glob also https://bugs.ruby-lang.org/issues/14405#change-69957 * Author: pocke (Masataka Kuwabara) * Status: Feedback * Priority: Normal * Assignee: * Target version: ---------------------------------------- `Dir.glob` has `base` option since Ruby 2.5. https://bugs.ruby-lang.org/issues/13056 However `Pathname.glob` does not have the option. I would like to use `base` option with `Pathname` class. But I feel `Dir.glob('*.rb', base: 'dir').map{|path|Pathname(path)}` is lengthy, so I'd like to add the option to `Pathname.glob`. This patch adds the option to `Pathname.glob` also. For example: ``` require 'pathname' p Pathname.glob('lib/i*.rb', 0) # => [#, #] p Dir.glob('i*.rb', 0, base: 'lib') # => ["irb.rb", "ipaddr.rb"] p Dir.glob('i*.rb', base: 'lib') # => ["irb.rb", "ipaddr.rb"] p Pathname.glob('i*.rb', 0, base: 'lib') # => [#, #] p Pathname.glob('i*.rb', base: 'lib') # => [#, #] p Pathname.glob('i*.rb', base: Pathname('lib')) # => [#, #] p Pathname.glob('i*.rb', base: Pathname(`pwd`.chomp) / 'lib') # => [#, #] p Pathname.glob('i*.rb', base: File.join(`pwd`.chomp, 'lib')) # => [#, #] Pathname.glob('i*.rb', foo: 'bar') rescue p $! # => # Pathname.glob('i*.rb', foo: 'bar') rescue p $!.backtrace # => ["<...>/test.rb:13:in `glob'", "<...>/test.rb:13:in `glob'", "<...>/test.rb:13:in `
'"] ``` If the patch is OK, I'll do the follwoing TODOs. - Add documentation - Add tests to here. https://github.com/ruby/ruby/blob/d891056e3a6232163e99636cfcbb7bbfe1291404/test/pathname/test_pathname.rb#L1231-L1241 ---Files-------------------------------- pathname-glob-base.patch (597 Bytes) -- https://bugs.ruby-lang.org/ Unsubscribe: