Module: Bovem::ShellMethods::Read
- Included in:
- Bovem::Shell
- Defined in:
- lib/bovem/shell.rb
Overview
Methods to find or check entries.
Instance Method Summary collapse
-
#check(path, *tests) ⇒ Object
Tests a path against a list of test.
-
#find(directories, patterns: [], extension_only: false, case_sensitive: false, &block) ⇒ Object
Find a list of files in directories matching given regexps or patterns.
Instance Method Details
#check(path, *tests) ⇒ Object
Tests a path against a list of test.
Valid tests are every method available in http://www.ruby-doc.org/core-2.3.0/FileTest.html (plus read
, write
, execute
, exec
, dir
).
Trailing question mark can be omitted. Unrecognized tests will make the check fail.
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/bovem/shell.rb', line 51 def check(path, *tests) path = path.ensure_string tests.ensure_array(no_duplicates: true, compact: true, flatten: true).all? do |test| # Adjust test name test = test.ensure_string.strip test = case test when "read" then "readable" when "write" then "writable" when "execute", "exec" then "executable" when "dir" then "directory" else test end # Execute test test += "?" if test !~ /\?$/ FileTest.respond_to?(test) ? FileTest.send(test, path) : nil end end |
#find(directories, patterns: [], extension_only: false, case_sensitive: false, &block) ⇒ Object
Find a list of files in directories matching given regexps or patterns.
You can also pass a block to perform matching. The block will receive a single argument and the path will be considered if return value is not falsey.
Inside the block, you can call Find.prune
to stop searching in the current directory.
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/bovem/shell.rb', line 84 def find(directories, patterns: [], extension_only: false, case_sensitive: false, &block) rv = [] directories = directories.ensure_array(no_duplicates: true, compact: true, flatten: true) { |d| File.(d.ensure_string) } patterns = normalize_patterns(patterns, extension_only, case_sensitive) directories.each do |directory| next unless check(directory, [:directory, :readable, :executable]) Find.find(directory) do |entry| found = patterns.blank? ? true : match_pattern(entry, patterns, extension_only, &block) rv << entry if found end end rv end |