Sha256: 74e1acc0b73573a05585b5ea9f359652cb450ac9e86b1a58112ad876ba7ff0b0

Contents?: true

Size: 976 Bytes

Versions: 10

Compression:

Stored size: 976 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)
      @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_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

10 entries across 10 versions & 1 rubygems

Version Path
crawler_detect-0.1.10 lib/rack/crawler_detect.rb
crawler_detect-0.1.9 lib/rack/crawler_detect.rb
crawler_detect-0.1.8 lib/rack/crawler_detect.rb
crawler_detect-0.1.7 lib/rack/crawler_detect.rb
crawler_detect-0.1.6 lib/rack/crawler_detect.rb
crawler_detect-0.1.5 lib/rack/crawler_detect.rb
crawler_detect-0.1.4 lib/rack/crawler_detect.rb
crawler_detect-0.1.3 lib/rack/crawler_detect.rb
crawler_detect-0.1.2 lib/rack/crawler_detect.rb
crawler_detect-0.1.1 lib/rack/crawler_detect.rb