class Worktree::TabCompletion::ProjectDirCompletion

Public Class Methods

new(base_compl) click to toggle source
# File lib/worktree/tab_completion/project_dir_completion.rb, line 6
def initialize(base_compl)
  @base_compl = base_compl.to_s.strip
  if @base_compl.starts_with?('~')
    @replace_home = true
    @base_compl = "#{ENV['HOME']}/#{@base_compl[1..-1]}"
  end
end

Public Instance Methods

list() click to toggle source
# File lib/worktree/tab_completion/project_dir_completion.rb, line 14
def list
  if File.directory?(@base_compl)
    base_dir = @base_compl
  else
    # remove tail
    if @base_compl.starts_with?('/')
      if @base_compl.split('/').size == 2
        base_dir = '/'
      else
        base_dir = @base_compl.split('/')[0..-2].join('/')
      end
    else
      base_dir = @base_compl.split('/')[0..-2].join('/')
    end
  end

  base_dir = base_dir.presence || '.'

  # select only folders
  Dir.entries(base_dir.presence).
    select { |f| File.directory? "#{base_dir.chomp('/')}/#{f}" }.
    reject { |d| d == '.' || d == '..' }.
    map do |d|
      if @replace_home
        b = "~#{base_dir[ENV['HOME'].size+1..-1]}"
        "#{b.chomp('/')}/#{d}"
      elsif base_dir == '.'
        d
      else
        b = base_dir
        "#{b.chomp('/')}/#{d}"
      end
    end
end