class IPinfoMiddleware

Public Class Methods

new(app, cache_options = {}) click to toggle source
# File lib/ipinfo-rails.rb, line 7
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

Public Instance Methods

call(env) click to toggle source
# File lib/ipinfo-rails.rb, line 14
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 Instance Methods

is_bot(request) click to toggle source
# File lib/ipinfo-rails.rb, line 36
def is_bot(request)
    user_agent = request.user_agent.downcase
    user_agent.include?('bot') || user_agent.include?('spider')
end