module Pronto::GolangSupport::FileFinder

Public Class Methods

root_level=(level) click to toggle source
# File lib/pronto/golang/file_finder.rb, line 6
def self.root_level=(level)
  @root_level = level
end
root_level?(path) click to toggle source
# File lib/pronto/golang/file_finder.rb, line 10
def self.root_level?(path)
  @root_level == path.to_s
end

Public Instance Methods

find_file_upwards(filename, start_dir, use_home: false) click to toggle source
# File lib/pronto/golang/file_finder.rb, line 14
def find_file_upwards(filename, start_dir, use_home: false)
  traverse_files_upwards(filename, start_dir, use_home) do |file|
    # minimize iteration for performance
    return file if file
  end
end
find_files_upwards(filename, start_dir, use_home: false) click to toggle source
# File lib/pronto/golang/file_finder.rb, line 21
def find_files_upwards(filename, start_dir, use_home: false)
  files = []
  traverse_files_upwards(filename, start_dir, use_home) do |file|
    files << file
  end
  files
end

Private Instance Methods

traverse_files_upwards(filename, start_dir, use_home) { |file| ... } click to toggle source
# File lib/pronto/golang/file_finder.rb, line 31
def traverse_files_upwards(filename, start_dir, use_home)
  Pathname.new(start_dir).expand_path.ascend do |dir|
    break if FileFinder.root_level?(dir)

    file = dir + filename
    yield(file.to_s) if file.exist?
  end

  return unless use_home && ENV.key?('HOME')

  file = File.join(Dir.home, filename)
  yield(file) if File.exist?(file)
end