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