Sha256: 02b42f4504ca00afac783664bf58b9df435a936498de781ba0af41284949c782

Contents?: true

Size: 979 Bytes

Versions: 2

Compression:

Stored size: 979 Bytes

Contents

# frozen_string_literal: true

module Rack
  class CrawlerDetect
    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

    def call(env)
      set_env_variables!(env)
      @app.call(env)
    end

    private

      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

      def user_agent(env)
        user_agent_headers.map do |header|
          env[header]
        end.compact.join(" ")
      end

      def user_agent_headers
        ::CrawlerDetect::Library.get_array("headers")
      end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
crawler_detect-0.1.12 lib/rack/crawler_detect.rb
crawler_detect-0.1.11 lib/rack/crawler_detect.rb