summaryrefslogtreecommitdiff
path: root/dir.rb
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2020-03-24 23:18:36 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2020-04-06 22:22:25 +0900
commit60e25e37d4db86249d3c25e03d96875eb98d9e43 (patch)
tree633c22e617837e0531f23350597c9aad35334265 /dir.rb
parent310054b240a511f888ec5092eb32fed29e4109c9 (diff)
Moved `Dir.glob` to dir.rb
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/3006
Diffstat (limited to 'dir.rb')
-rw-r--r--dir.rb93
1 files changed, 93 insertions, 0 deletions
diff --git a/dir.rb b/dir.rb
index e383c0ea9f..5784ce1b17 100644
--- a/dir.rb
+++ b/dir.rb
@@ -34,4 +34,97 @@ class Dir
def initialize(name, encoding: nil)
__builtin_dir_initialize(name, encoding)
end
+
+ # Dir.glob( pattern, [flags], [base: path] [, sort: true] ) -> array
+ # Dir.glob( pattern, [flags], [base: path] [, sort: true] ) { |filename| block } -> nil
+ #
+ # Expands +pattern+, which is a pattern string or an Array of pattern
+ # strings, and returns an array containing the matching filenames.
+ # If a block is given, calls the block once for each matching filename,
+ # passing the filename as a parameter to the block.
+ #
+ # The optional +base+ keyword argument specifies the base directory for
+ # interpreting relative pathnames instead of the current working directory.
+ # As the results are not prefixed with the base directory name in this
+ # case, you will need to prepend the base directory name if you want real
+ # paths.
+ #
+ # The results which matched single wildcard or character set are sorted in
+ # binary ascending order, unless false is given as the optional +sort+
+ # keyword argument. The order of an Array of pattern strings and braces
+ # are preserved.
+ #
+ # Note that the pattern is not a regexp, it's closer to a shell glob.
+ # See File::fnmatch for the meaning of the +flags+ parameter.
+ # Case sensitivity depends on your system (File::FNM_CASEFOLD is ignored).
+ #
+ # <code>*</code>::
+ # Matches any file. Can be restricted by other values in the glob.
+ # Equivalent to <code>/ .* /mx</code> in regexp.
+ #
+ # <code>*</code>:: Matches all files
+ # <code>c*</code>:: Matches all files beginning with <code>c</code>
+ # <code>*c</code>:: Matches all files ending with <code>c</code>
+ # <code>\*c\*</code>:: Match all files that have <code>c</code> in them
+ # (including at the beginning or end).
+ #
+ # Note, this will not match Unix-like hidden files (dotfiles). In order
+ # to include those in the match results, you must use the
+ # File::FNM_DOTMATCH flag or something like <code>"{*,.*}"</code>.
+ #
+ # <code>**</code>::
+ # Matches directories recursively.
+ #
+ # <code>?</code>::
+ # Matches any one character. Equivalent to <code>/.{1}/</code> in regexp.
+ #
+ # <code>[set]</code>::
+ # Matches any one character in +set+. Behaves exactly like character sets
+ # in Regexp, including set negation (<code>[^a-z]</code>).
+ #
+ # <code>{p,q}</code>::
+ # Matches either literal <code>p</code> or literal <code>q</code>.
+ # Equivalent to pattern alternation in regexp.
+ #
+ # Matching literals may be more than one character in length. More than
+ # two literals may be specified.
+ #
+ # <code> \\ </code>::
+ # Escapes the next metacharacter.
+ #
+ # Note that this means you cannot use backslash on windows as part of a
+ # glob, i.e. <code>Dir["c:\\foo*"]</code> will not work, use
+ # <code>Dir["c:/foo*"]</code> instead.
+ #
+ # Examples:
+ #
+ # Dir["config.?"] #=> ["config.h"]
+ # Dir.glob("config.?") #=> ["config.h"]
+ # Dir.glob("*.[a-z][a-z]") #=> ["main.rb"]
+ # Dir.glob("*.[^r]*") #=> ["config.h"]
+ # Dir.glob("*.{rb,h}") #=> ["main.rb", "config.h"]
+ # Dir.glob("*") #=> ["config.h", "main.rb"]
+ # Dir.glob("*", File::FNM_DOTMATCH) #=> [".", "..", "config.h", "main.rb"]
+ # Dir.glob(["*.rb", "*.h"]) #=> ["main.rb", "config.h"]
+ #
+ # rbfiles = File.join("**", "*.rb")
+ # Dir.glob(rbfiles) #=> ["main.rb",
+ # # "lib/song.rb",
+ # # "lib/song/karaoke.rb"]
+ #
+ # Dir.glob(rbfiles, base: "lib") #=> ["song.rb",
+ # # "song/karaoke.rb"]
+ #
+ # libdirs = File.join("**", "lib")
+ # Dir.glob(libdirs) #=> ["lib"]
+ #
+ # librbfiles = File.join("**", "lib", "**", "*.rb")
+ # Dir.glob(librbfiles) #=> ["lib/song.rb",
+ # # "lib/song/karaoke.rb"]
+ #
+ # librbfiles = File.join("**", "lib", "*.rb")
+ # Dir.glob(librbfiles) #=> ["lib/song.rb"]
+ def self.glob(pattern, _flags = 0, flags: _flags, base: nil, sort: true)
+ __builtin_dir_s_glob(pattern, flags, base, sort)
+ end
end