Class: Trackdown::Providers::AutoProvider

Inherits:
BaseProvider show all
Defined in:
lib/trackdown/providers/auto_provider.rb

Overview

Intelligent provider that automatically selects the best available provider Priority order:

  1. Cloudflare (fastest, zero overhead, no external dependencies)

  2. MaxMind (fallback when Cloudflare not available)

This is the recommended default for most applications

Constant Summary collapse

@@warned_no_providers =
false
@@warn_mutex =
Mutex.new

Class Method Summary collapse

Methods inherited from BaseProvider

get_country_name, get_emoji_flag

Class Method Details

.available?(request: nil) ⇒ Boolean

Auto provider is available if at least one provider is available

Returns:

  • (Boolean)


21
22
23
24
# File 'lib/trackdown/providers/auto_provider.rb', line 21

def available?(request: nil)
  CloudflareProvider.available?(request: request) ||
    MaxmindProvider.available?(request: request)
end

.locate(ip, request: nil) ⇒ LocationResult

Intelligently locate IP using the best available provider

Parameters:

  • ip (String)

    The IP address to locate

  • request (ActionDispatch::Request, nil) (defaults to: nil)

    Optional Rails request object

Returns:



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/trackdown/providers/auto_provider.rb', line 30

def locate(ip, request: nil)
  # Try Cloudflare first - it's instant and free!
  if CloudflareProvider.available?(request: request)
    return CloudflareProvider.locate(ip, request: request)
  end

  # Fall back to MaxMind if available
  if MaxmindProvider.available?(request: request)
    return MaxmindProvider.locate(ip, request: request)
  end

  # No providers available - fail gracefully with a warning
  warn_no_providers
  LocationResult.new(nil, 'Unknown', 'Unknown', '🏳️')
end