Class: ActiveSupport::EventedFileUpdateChecker::PathHelper

Inherits:
Object
  • Object
show all
Defined in:
lib/active_support/evented_file_update_checker.rb

Instance Method Summary collapse

Instance Method Details

#existing_parent(dir) ⇒ Object

Returns the deepest existing ascendant, which could be the argument itself.

[View source]

171
172
173
174
175
# File 'lib/active_support/evented_file_update_checker.rb', line 171

def existing_parent(dir)
  dir.ascend do |ascendant|
    break ascendant if ascendant.directory?
  end
end

#filter_out_descendants(dirs) ⇒ Object

Filters out directories which are descendants of others in the collection (stable).

[View source]

178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
# File 'lib/active_support/evented_file_update_checker.rb', line 178

def filter_out_descendants(dirs)
  return dirs if dirs.length < 2

  dirs_sorted_by_nparts = dirs.sort_by { |dir| dir.each_filename.to_a.length }
  descendants = []

  until dirs_sorted_by_nparts.empty?
    dir = dirs_sorted_by_nparts.shift

    dirs_sorted_by_nparts.reject! do |possible_descendant|
      ascendant_of?(dir, possible_descendant) && descendants << possible_descendant
    end
  end

  # Array#- preserves order.
  dirs - descendants
end

#longest_common_subpath(paths) ⇒ Object

Given a collection of Pathname objects returns the longest subpath common to all of them, or nil if there is none.

[View source]

149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
# File 'lib/active_support/evented_file_update_checker.rb', line 149

def longest_common_subpath(paths)
  return if paths.empty?

  lcsp = Pathname.new(paths[0])

  paths[1..-1].each do |path|
    until ascendant_of?(lcsp, path)
      if lcsp.root?
        # If we get here a root directory is not an ascendant of path.
        # This may happen if there are paths in different drives on
        # Windows.
        return
      else
        lcsp = lcsp.parent
      end
    end
  end

  lcsp
end

#normalize_extension(ext) ⇒ Object

[View source]

143
144
145
# File 'lib/active_support/evented_file_update_checker.rb', line 143

def normalize_extension(ext)
  ext.to_s.sub(/\A\./, "")
end

#xpath(path) ⇒ Object

[View source]

139
140
141
# File 'lib/active_support/evented_file_update_checker.rb', line 139

def xpath(path)
  Pathname.new(path).expand_path
end