Sha256: 999e9d1acce7b6825e0c90b8dccae880e7dec6e84841844499cc5b5f5958c52b

Contents?: true

Size: 925 Bytes

Versions: 1

Compression:

Stored size: 925 Bytes

Contents

# frozen_string_literal: true

require 'rack'
require 'ipinfo'

class IPinfoMiddleware
    def initialize(app, cache_options = {})
        @app = app
        @token = cache_options.fetch(:token, nil)
        @ipinfo = IPinfo.create(@token, cache_options)
        @filter = cache_options.fetch(:filter, nil)
    end

    def call(env)
        env['called'] = 'yes'
        request = Rack::Request.new(env)

        filtered = if @filter.nil?
                       is_bot(request)
                   else
                       @filter.call(request)
                   end

        if filtered
            env['ipinfo'] = nil
        else
            ip = request.ip
            env['ipinfo'] = @ipinfo.details(ip)
        end

        @app.call(env)
    end

    private

    def is_bot(request)
        user_agent = request.user_agent.downcase
        user_agent.include?('bot') || user_agent.include?('spider')
    end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ipinfo-rails-1.0.0 lib/ipinfo-rails.rb