class Rack::CrawlerDetect

Rack-based interface to detect crawlers

@since 0.1.0

Public Class Methods

new(app, options = {}) click to toggle source
# File lib/rack/crawler_detect.rb, line 8
def initialize(app, options = {})
  Rack::Request::Helpers.module_eval do
    def is_crawler?
      env["rack.crawler_detect"][:is_crawler]
    end

    def crawler_name
      env["rack.crawler_detect"][:crawler_name]
    end
  end
  @app = app
end

Public Instance Methods

call(env) click to toggle source
# File lib/rack/crawler_detect.rb, line 21
def call(env)
  set_env_variables!(env)
  @app.call(env)
end
crawler_name() click to toggle source
# File lib/rack/crawler_detect.rb, line 14
def crawler_name
  env["rack.crawler_detect"][:crawler_name]
end
is_crawler?() click to toggle source
# File lib/rack/crawler_detect.rb, line 10
def is_crawler?
  env["rack.crawler_detect"][:is_crawler]
end

Private Instance Methods

set_env_variables!(env) click to toggle source
# File lib/rack/crawler_detect.rb, line 28
def set_env_variables!(env)
  ua = user_agent(env)
  return unless ua
  detector = ::CrawlerDetect::Detector.new(ua)
  env["rack.crawler_detect"] = {
    is_crawler:   detector.is_crawler?,
    crawler_name: detector.crawler_name
  }
end
user_agent(env) click to toggle source
# File lib/rack/crawler_detect.rb, line 38
def user_agent(env)
  user_agent_headers.map do |header|
    env[header]
  end.compact.join(" ")
end
user_agent_headers() click to toggle source
# File lib/rack/crawler_detect.rb, line 44
def user_agent_headers
  ::CrawlerDetect::Library.get_array("headers")
end