Class: ActiveSupport::EventedFileUpdateChecker::PathHelper

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

Instance Method Summary collapse

Instance Method Details

#filter_out_descendants(dirs) ⇒ Object

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



190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
# File 'activesupport/lib/active_support/evented_file_update_checker.rb', line 190

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.



168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
# File 'activesupport/lib/active_support/evented_file_update_checker.rb', line 168

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



162
163
164
# File 'activesupport/lib/active_support/evented_file_update_checker.rb', line 162

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

#xpath(path) ⇒ Object



158
159
160
# File 'activesupport/lib/active_support/evented_file_update_checker.rb', line 158

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