UAInspector v2.0.0 UAInspector.Config View Source
Module to simplify access to configuration values with default values.
There should be no configuration required to start using :ua_inspector
if
you rely on the default values:
remote_database = "https://raw.githubusercontent.com/matomo-org/device-detector/master/regexes"
remote_shortcode = "https://raw.githubusercontent.com/matomo-org/device-detector/master"
config :ua_inspector,
database_path: Application.app_dir(:ua_inspector, "priv"),
http_opts: [],
remote_path: [
bot: remote_database,
browser_engine: remote_database <> "/client",
client: remote_database <> "/client",
device: remote_database <> "/device",
os: remote_database,
short_code_map: remote_shortcode,
vendor_fragment: remote_database
],
remote_release: "master",
startup_silent: false,
startup_sync: true,
yaml_file_reader: {:yamerl_constr, :file, [[:str_node_as_binary]]}
The default :database_path
is evaluated at runtime and not compiled into
a release!
How to Configure
There are two ways to change the configuration values with the preferred way depending on your environment and personal taste.
Static Configuration
If you can ensure the configuration are static and not dependent on i.e. the
server your application is running on, you can use a static approach by
modifying your config.exs
file:
config :ua_inspector,
database_path: "/path/to/ua_inspector/databases"
Dynamic Configuration
If a compile time configuration is not possible or does not match the usual approach taken in your application you can use a runtime approach.
This is done by defining an initializer module that will automatically be
called by UAInspector.Supervisor
upon startup/restart. The configuration
is expected to consist of a {mod, fun}
or {mod, fun, args}
tuple:
# {mod, fun}
config :ua_inspector,
init: {MyInitModule, :my_init_mf}
# {mod, fun, args}
config :ua_inspector,
init: {MyInitModule, :my_init_mfargs, [:foo, :bar]}
defmodule MyInitModule do
@spec my_init_mf() :: :ok
def my_init_mf(), do: my_init_mfargs(:foo, :bar)
@spec my_init_mfargs(atom, atom) :: :ok
def my_init_mfargs(:foo, :bar) do
priv_dir = Application.app_dir(:my_app, "priv")
Application.put_env(:ua_inspector, :database_path, priv_dir)
end
end
The function is required to always return :ok
.
Startup Behaviour
You can change this behaviour to have the application force an asynchronous database loading during the initial startup:
config :ua_inspector,
startup_sync: false
This can lead to the first parsing calls to work with an empty database and therefore not return the results you expect.
Starting Silently
When starting the application you will receive warnings if the database is not available. If you want to hide these messages you can configure the startup the be completely silent:
config :ua_inspector,
startup_silent: true
This will automatically be set when calling the mix download task.
Database Configuration
Configuring the database to use can be done using two related values:
:database_path
:remote_path
The :database_path
is the directory to look for when loading the databases.
It is also the place where UAInspector.Downloader
stores a downloaded copy.
For the time being the detailed list of database files is not configurable. This is a major caveat for personal database copies and short code mappings (they have additional path information appended to the base). This behaviour is subject to change.
The full configuration for remote paths contains the following values:
config :ua_inspector
remote_path: [
bot: "http://example.com",
browser_engine: "http://example.com",
client: "http://example.com",
device: "http://example.com",
os: "http://example.com",
short_code_map: "http://example.com",
vendor_fragment: "http://example.com"
]
Default Database Release Version
If you are using the default database the newest version from the "master"
branch will be used. You can also configure a different release to be used:
config :ua_inspector,
remote_release: "v1.0.0"
Download Configuration
Using the default configuration all download requests for your database files
are done using :hackney
. To pass custom
configuration values to hackney you can use the key :http_opts
:
config :ua_inspector,
http_opts: [proxy: "http://mycompanyproxy.com"]
Please see
:hackney.request/5
for a complete list of available options.
If you want to change the library used to download the databases you can
configure a module implementing the UAInspector.Downloader.Adapter
behaviour:
config :ua_inspector,
downloader_adapter: MyDownloaderAdapter
YAML File Reader Configuration
By default the library :yamerl
will
be used to read and decode the yaml database files. You can configure this
reader to be a custom module:
config :ua_inspector,
yaml_file_reader: {module, function}
config :ua_inspector,
yaml_file_reader: {module, function, extra_args}
The configured module will receive the file to read as the first argument with any optionally configured extra arguments after that.
Link to this section Summary
Functions
Returns the configured database path.
Returns the remote url of a database file.
Returns whether the remote database (at least one type) matches the default.
Returns the configured downloader adapter module.
Provides access to configuration values with optional environment lookup.
Calls the optionally configured init method.
Returns the {mod, fun, extra_args}
to be used when reading a yaml file.
Link to this section Functions
Returns the configured database path.
If the path is not defined the priv
dir of :ua_inspector
as returned by Application.app_dir(:ua_inspector, "priv")
will be used.
Returns the remote url of a database file.
default_remote_database?()
View Sourcedefault_remote_database?() :: boolean()
Returns whether the remote database (at least one type) matches the default.
Returns the configured downloader adapter module.
The modules is expected to adhere to the behaviour defined in
UAInspector.Downloader.Adapter
.
Provides access to configuration values with optional environment lookup.
Calls the optionally configured init method.
Returns the {mod, fun, extra_args}
to be used when reading a yaml file.