Current section
Files
Jump to
Current section
Files
lib/ua_inspector.ex
defmodule UAInspector do
@moduledoc """
UAInspector - User agent parser library
"""
alias UAInspector.Database
alias UAInspector.Pool
alias UAInspector.Result
alias UAInspector.ShortCodeMap
@doc """
Checks if a user agent is a known bot.
"""
@spec bot?(String.t() | nil) :: boolean
defdelegate bot?(ua), to: Pool
@doc """
Checks if a user agent is a HbbTV and returns its version if so.
"""
@spec hbbtv?(String.t() | nil) :: false | String.t()
defdelegate hbbtv?(ua), to: Pool
@doc """
Parses a user agent.
"""
@spec parse(String.t() | nil) :: Result.t()
defdelegate parse(ua), to: Pool
@doc """
Parses a user agent without checking for bots.
"""
@spec parse_client(String.t() | nil) :: Result.t()
defdelegate parse_client(ua), to: Pool
@doc """
Checks if there is data to use in lookups.
The check is done against all currently available internal data tables.
An empty database is any of the lookup modules considered to be "not ready".
"""
@spec ready?() :: boolean
def ready? do
[
Database.Bots,
Database.BrowserEngines,
Database.Clients,
Database.DevicesHbbTV,
Database.DevicesRegular,
Database.OSs,
Database.VendorFragments,
ShortCodeMap.ClientBrowsers,
ShortCodeMap.DesktopFamilies,
ShortCodeMap.DeviceBrands,
ShortCodeMap.MobileBrowsers,
ShortCodeMap.OSFamilies,
ShortCodeMap.OSs
]
|> Enum.all?(fn database -> [] != database.list() end)
end
@doc """
Reloads all databases.
"""
@spec reload() :: :ok
def reload do
[
Database.Bots,
Database.BrowserEngines,
Database.Clients,
Database.DevicesHbbTV,
Database.DevicesRegular,
Database.OSs,
Database.VendorFragments,
ShortCodeMap.ClientBrowsers,
ShortCodeMap.DesktopFamilies,
ShortCodeMap.DeviceBrands,
ShortCodeMap.MobileBrowsers,
ShortCodeMap.OSFamilies,
ShortCodeMap.OSs
]
|> Enum.each(fn database -> GenServer.cast(database, :reload) end)
end
end