ccashwell/is_crawler

View on GitHub
lib/crawler.rb

Summary

Maintainability
A
0 mins
Test Coverage
require 'yaml'

class Crawler < Struct.new(:name, :ua_string)
  DEFAULT = YAML.load(File.read(File.expand_path('../config/crawlers.yml', __FILE__)))["crawlers"].collect do |k,v|
    Crawler.new(k.to_sym, v)
  end

  CUSTOM = []

  class << self
    def all
      DEFAULT + CUSTOM
    end

    def matches_any? user_agent
      all.detect { |crawler| crawler.matches? user_agent } != nil
    end

    def which_crawler user_agent
      all.detect { |crawler| crawler.matches? user_agent }.name rescue nil
    end
  end

  def matches? user_agent
    user_agent.downcase.include? ua_string.downcase
  end
end