Class: FilePathList
- Inherits:
-
Object
- Object
- FilePathList
- Includes:
- Enumerable, ArrayMethods
- Defined in:
- lib/filepath/filepathlist.rb
Defined Under Namespace
Modules: ArrayMethods
Constant Summary collapse
- SEPARATOR =
':'.freeze
Instance Method Summary collapse
- #*(other_list) ⇒ Object
- #+(extra_entries) ⇒ Object
- #-(others) ⇒ Object
- #/(extra_path) ⇒ Object
- #<<(extra_path) ⇒ Object
- #==(other) ⇒ Object
-
#as_path_list ⇒ FilePathList
The path list itself.
- #directories ⇒ Object
- #exclude(pattern = nil, &block) ⇒ Object
- #files ⇒ Object
-
#initialize(raw_entries = nil) ⇒ FilePathList
constructor
A new instance of FilePathList.
- #links ⇒ Object
- #remove_common_segments ⇒ Object
- #select(pattern = nil, &block) ⇒ Object
- #select_entries(type) ⇒ Object
- #to_a ⇒ Object
- #to_s ⇒ Object
Constructor Details
#initialize(raw_entries = nil) ⇒ FilePathList
Returns a new instance of FilePathList.
10 11 12 13 |
# File 'lib/filepath/filepathlist.rb', line 10 def initialize(raw_entries = nil) raw_entries ||= [] @entries = raw_entries.map { |e| e.as_path } end |
Instance Method Details
#*(other_list) ⇒ Object
68 69 70 71 72 73 74 75 |
# File 'lib/filepath/filepathlist.rb', line 68 def *(other_list) if !other_list.is_a? FilePathList other_list = FilePathList.new(Array(other_list)) end other_entries = other_list.entries paths = @entries.product(other_entries).map { |p1, p2| p1 / p2 } return FilePathList.new(paths) end |
#+(extra_entries) ⇒ Object
36 37 38 |
# File 'lib/filepath/filepathlist.rb', line 36 def +(extra_entries) return FilePathList.new(@entries + extra_entries.to_a) end |
#-(others) ⇒ Object
40 41 42 43 44 |
# File 'lib/filepath/filepathlist.rb', line 40 def -(others) remaining_entries = @entries - others.as_path_list.to_a return FilePathList.new(remaining_entries) end |
#/(extra_path) ⇒ Object
32 33 34 |
# File 'lib/filepath/filepathlist.rb', line 32 def /(extra_path) return self.map { |path| path / extra_path } end |
#<<(extra_path) ⇒ Object
64 65 66 |
# File 'lib/filepath/filepathlist.rb', line 64 def <<(extra_path) return FilePathList.new(@entries + [extra_path.as_path]) end |
#==(other) ⇒ Object
120 121 122 |
# File 'lib/filepath/filepathlist.rb', line 120 def ==(other) @entries == other.as_path_list.to_a end |
#as_path_list ⇒ FilePathList
Returns the path list itself.
102 103 104 |
# File 'lib/filepath/filepathlist.rb', line 102 def as_path_list self end |
#directories ⇒ Object
28 29 30 |
# File 'lib/filepath/filepathlist.rb', line 28 def directories return select_entries(:directory) end |
#exclude(pattern = nil, &block) ⇒ Object
46 47 48 49 50 51 52 |
# File 'lib/filepath/filepathlist.rb', line 46 def exclude(pattern = nil, &block) if block_given? select { |e| !block.call(e) } else select { |e| !(e =~ pattern) } end end |
#files ⇒ Object
20 21 22 |
# File 'lib/filepath/filepathlist.rb', line 20 def files return select_entries(:file) end |
#links ⇒ Object
24 25 26 |
# File 'lib/filepath/filepathlist.rb', line 24 def links return select_entries(:link) end |
#remove_common_segments ⇒ Object
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/filepath/filepathlist.rb', line 77 def remove_common_segments all_segs = @entries.map(&:segments) max_length = all_segs.map(&:length).min idx_different = nil (0..max_length).each do |i| segment = all_segs.first[i] different = all_segs.any? { |segs| segs[i] != segment } if different idx_different = i break end end idx_different ||= max_length remaining_segs = all_segs.map { |segs| segs[idx_different..-1] } return FilePathList.new(remaining_segs) end |
#select(pattern = nil, &block) ⇒ Object
54 55 56 57 58 59 60 61 62 |
# File 'lib/filepath/filepathlist.rb', line 54 def select(pattern = nil, &block) if !block_given? block = proc { |e| e =~ pattern } end remaining_entries = @entries.select { |e| block.call(e) } return FilePathList.new(remaining_entries) end |
#select_entries(type) ⇒ Object
15 16 17 18 |
# File 'lib/filepath/filepathlist.rb', line 15 def select_entries(type) raw_entries = @entries.delete_if { |e| !e.send(type.to_s + '?') } return FilePathList.new(raw_entries) end |
#to_a ⇒ Object
106 107 108 |
# File 'lib/filepath/filepathlist.rb', line 106 def to_a @entries end |
#to_s ⇒ Object
110 111 112 |
# File 'lib/filepath/filepathlist.rb', line 110 def to_s @to_s ||= @entries.map(&:to_str).join(SEPARATOR) end |