class Prj::Filter

Public Class Methods

new(letters, case_sensitive = true) click to toggle source
# File lib/prj/filter.rb, line 7
def initialize(letters, case_sensitive = true)
  @letters = letters.to_a
  @case_sensitive = case_sensitive
end

Public Instance Methods

distance(dir) click to toggle source
# File lib/prj/filter.rb, line 16
def distance(dir)
  scanner = StringScanner.new(dir)
  @letters.each do |letter|
    regexp = Regexp.new(".*?[#{letter}]", !@case_sensitive)
    scanner.scan(regexp) or return :no_score
  end
  scanner.pos - @letters.length
end
filter(directories) click to toggle source
# File lib/prj/filter.rb, line 12
def filter(directories)
  wrapped_with_score(directories).sort.map(&:to_s)
end

Private Instance Methods

wrapped_with_score(directories) click to toggle source
# File lib/prj/filter.rb, line 25
def wrapped_with_score(directories)
  directories.map { |d| DirWithScore.new(d, distance(d)) }.reject { |d| d.score == :no_score }
end