diff options
| author | Markus Reiter | 2017-04-27 08:48:29 +0200 |
|---|---|---|
| committer | Markus Reiter | 2017-04-30 21:11:27 +0200 |
| commit | a16746906d463ce9e4dc129bc5a76b81585ee1dd (patch) | |
| tree | 02dfa56a4f8f4355389818121ac1e52ffca74f27 /Library/Homebrew/PATH.rb | |
| parent | e221d0481a8f6bc324c507ece8e698b5f41c2d07 (diff) | |
| download | brew-a16746906d463ce9e4dc129bc5a76b81585ee1dd.tar.bz2 | |
Add `PATH` class.
Diffstat (limited to 'Library/Homebrew/PATH.rb')
| -rw-r--r-- | Library/Homebrew/PATH.rb | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/Library/Homebrew/PATH.rb b/Library/Homebrew/PATH.rb new file mode 100644 index 000000000..d6b549a1e --- /dev/null +++ b/Library/Homebrew/PATH.rb @@ -0,0 +1,61 @@ +class PATH + def initialize(*paths) + @paths = parse(*paths) + end + + def prepend(*paths) + @paths.unshift(*parse(*paths)) + self + end + + def append(*paths) + @paths.concat(parse(*paths)) + self + end + + def to_ary + @paths + end + alias to_a to_ary + + def to_str + @paths.join(File::PATH_SEPARATOR) + end + alias to_s to_str + + def eql?(other) + if other.respond_to?(:to_ary) + return true if to_ary == other.to_ary + end + + if other.respond_to?(:to_str) + return true if to_str == other.to_str + end + + false + end + alias == eql? + + def empty? + @paths.empty? + end + + def inspect + "<PATH##{to_str}>" + end + + def validate + self.class.new(@paths.select(&File.method(:directory?))) + end + + private + + def parse(*paths) + paths + .flatten + .flat_map { |p| p.respond_to?(:to_str) ? p.to_str.split(File::PATH_SEPARATOR): p } + .compact + .map { |p| p.respond_to?(:to_path) ? p.to_path : p.to_str } + .uniq + end +end |
