Class: Trackdown::Providers::AutoProvider
- Inherits:
-
BaseProvider
- Object
- BaseProvider
- Trackdown::Providers::AutoProvider
- Defined in:
- lib/trackdown/providers/auto_provider.rb
Overview
Intelligent provider that automatically selects the best available provider Priority order:
-
Cloudflare (fastest, zero overhead, no external dependencies)
-
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
-
.available?(request: nil) ⇒ Boolean
Auto provider is available if at least one provider is available.
-
.locate(ip, request: nil) ⇒ LocationResult
Intelligently locate IP using the best available provider.
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
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
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 |