class Rouge::Guesser
def self.guess(guessers, lexers)
def self.guess(guessers, lexers) original_size = lexers.size guessers.each do |g| new_lexers = case g when Guesser then g.filter(lexers) when proc { |x| x.respond_to? :call } then g.call(lexers) else raise "bad guesser: #{g}" end lexers = new_lexers && new_lexers.any? ? new_lexers : lexers end # if we haven't filtered the input at *all*, # then we have no idea what language it is, # so we bail and return []. lexers.size < original_size ? lexers : [] end
def collect_best(lexers, opts={}, &scorer)
def collect_best(lexers, opts={}, &scorer) best = [] best_score = opts[:threshold] lexers.each do |lexer| score = scorer.call(lexer) next if score.nil? if best_score.nil? || score > best_score best_score = score best = [lexer] elsif score == best_score best << lexer end end best end
def filter(lexers)
def filter(lexers) raise 'abstract' end