Sha256: 6b954e48105a538dbd12005e35b837bf7c1bac80f65071b7fdc1a0464c2139f4

Contents?: true

Size: 1 KB

Versions: 3

Compression:

Stored size: 1 KB

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)
      @env = env
      set_env_variables!
      @app.call(@env)
    end

    private

      def set_env_variables!
        return @env unless user_agent
        detector = ::CrawlerDetect::Detector.new(user_agent)
        @env["rack.crawler_detect"] = {
          is_crawler:   detector.is_crawler?,
          crawler_name: detector.crawler_name,
        }
      end

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

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

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
crawler_detect-0.1.0 lib/rack/crawler_detect.rb
crawler_detect-0.0.3 lib/rack/crawler_detect.rb
crawler_detect-0.0.2 lib/rack/crawler_detect.rb