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]

201
202
203
204
205
# File 'lib/active_support/evented_file_update_checker.rb', line 201

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]

208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
# File 'lib/active_support/evented_file_update_checker.rb', line 208

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]

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

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]

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

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

#xpath(path) ⇒ Object

[View source]

169
170
171
# File 'lib/active_support/evented_file_update_checker.rb', line 169

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