CHANGELOG.md

# Changelog

## v2.0.0 (2022-07-26)

- Enhancements
    - Calling `RefInspector.parse/1` with an empty referer (`""` or `nil`) will now return the input as is in the result struct instead of previously returning `nil` for both inputs

- Bug fixes
    - The mix download task should no longer start unnecessary applications

- Backwards incompatible changes
    - Minimum required Elixir version is now `~> 1.9`
    - Several deprecated functions have been removed completely:
        - `RefInspector.Downloader.path_local/1`
        - `RefInspector.Downloader.path_remote/1`
        - `RefInspector.Downloader.read_remote/1`
        - `RefInspector.Downloader.README.path_local/0`
        - `RefInspector.Downloader.README.path_priv/0`
    - Startup is now done with a blocking database load by default

## v1.3.1 (2020-05-06)

- Bug fixes
    - Default remote URL for the referer parser database has been changed after upstream changes ([#3](https://github.com/elixir-inspector/ref_inspector/issues/3))

## v1.3.0 (2019-11-27)

- Bug fixes
    - Hosts are now matched more strict to match expectations ([#2](https://github.com/elixir-inspector/ref_inspector/issues/2))
        - `*.host` will still match `host`
        - `*host` (without a dot) will no longer match `host`
    - Paths are now matched more strict to match expectations ([#2](https://github.com/elixir-inspector/ref_inspector/issues/2))
        - `/some/folder` will still match `/some`
        - `/somefolder` (without a slash) will no longer match `/some`

## v1.2.0 (2019-08-03)

- Enhancements
    - Warnings when starting without a database available can be silenced

- Bug fixes
    - The mix download task now works properly with initializer modules

## v1.1.0 (2019-07-03)

- Enhancements
    - Configuring `startup_sync: true` allows you to ensure a synchronous database load is attempted before allowing to parse referers
    - Database entries are now stored in a single named table instead of using an intermediate reference table
    - Default configuration entries for files and urls are available through `RefInspector.Config.default_files/0` and `RefInspector.Config.default_urls/0`
    - Output of mix task `ref_inspector.download` can be prevented by passing `--quiet` upon invocation. This does NOT imply `--force` and will still ask for confirmation
    - Passing `async: false` to `RefInspector.reload/1` allows you to block your calling process until the reload has finished
    - The library used to download the database files can be changed by configuring a module implementing the `RefInspector.Downloader.Adapter` behaviour
    - The library used to read YAML files can be changed by using the `:yaml_file_reader` configuration

- Deprecations
    - Several functions are now declared internal and will result in a `Logger.info/1` message when called until they will be eventually removed:
        - `RefInspector.Downloader.path_local/1`
        - `RefInspector.Downloader.path_remote/1`
        - `RefInspector.Downloader.read_remote/1`
        - `RefInspector.Downloader.README.path_local/0`
        - `RefInspector.Downloader.README.path_priv/0`

## v1.0.0 (2018-11-24)

- Ownership has been transferred to the [`elixir-inspector`](https://github.com/elixir-inspector) organisation

- Enhancements
    - Documentation is now available inline (`@moduledoc`, ...) with the `README.md` file targeting the repository (development) instead of releases
    - Downloading the databases ensures hackney is started to allow calling `mix run --no-start -e "RefInspector.Downloader.download()"`
    - Initializer modules can be defined with additional arguments by using `{mod, fun, args}`
    - Parsing can now be performed on `URI.t()` referers
    - The default database path has been set to `Application.app_dir(:ref_inspector, "priv")`
    - The download mix task will now exit with code `1` if it aborts due to missing configuration

- Backwards incompatible changes
    - Internal parser process pooling has been removed. If you require pooling you need to manually wrap `RefInspector.parse/1`
    - Medium information in the result struct is now returned as a `String.t()` instead of an `atom`. The only exceptions are `:unknown` and `:internal` referers
    - Minimum required Elixir version is now `~> 1.5`
    - Support for `{:system, var}` configuration has been removed

## v0.20.0 (2018-07-22)

- Enhancements
    - Parsing speed has been improved and made more independent of database size
    - The configurable `:init` method will now be automatically executed when running the mix download task without manually ensuring the application is started

- Deprecations
    - Accessing the system environment by configuring `{:system, var}` or `{:system, var, default}` will now result in a `Logger.info/1` message and will stop working in a future release

- Backwards incompatible changes
    - The mix task alias `ref_inspector.yaml.download` has been removed
    - The reload alias `RefInspector.reload_databases/0` has been removed

## v0.19.0 (2018-02-13)

- Enhancements
    - Finding the data table is now done via a named lookup table instead of calling the database state server
    - Old data tables are deleted with a configurable delay after reloading to avoid race conditions (and the resulting empty lookup responses)
    - If you need to check if the database is loaded (i.e. "no longer empty") you can use `RefInspector.ready?/0`

## v0.18.0 (2017-12-31)

- Enhancements
    - Download task name has been shortened to `ref_inspector.download`
    - Reloading the database if part of the configuration is missing or broken (database path / database files) will issue a warning while resuming operation with an empty database

- Deprecations
    - The reload method `RefInspector.reload_databases/0` has been renamed to `RefInspector.reload/0`
    - The mix task `ref_inspector.yaml.download` has been renamed. The alias in place will be removed in a future version

- Bug fixes
    - ETS tables are now properly cleaned after reload

## v0.17.0 (2017-11-15)

- Enhancements
    - All databases can be reloaded (asynchronously) using `RefInspector.reload_databases/0`
    - Configuration can be done on supervisor (re-) start by setting a `{mod, fun}` tuple for the config key `:init`. This method will be called without arguments
    - When using the mix download task with a default remote configuration an information README file is placed next to the downloaded file(s)

- Soft deprecations (no warnings)
    - Support for `{:system, "ENV_VARIABLE"}` configuration has been removed from the documentation. It will eventually be removed completely after a proper deprecation phase

## v0.16.0 (2017-09-24)

- Backwards incompatible changes
    - Minimum required Elixir version is now `~> 1.3`

## v0.15.0 (2017-09-12)

- Enhancements
    - Supervision can now be done without starting the application
    - The database downloader has been promoted to a directly usable module

## v0.14.0 (2017-05-31)

- Enhancements
    - Empty referers (`""` or `nil`) now return a result without performing an actual lookup
    - System environment configuration can set an optional default value to be used if the environment variable is unset

- Bug fixes
    - Properly handles `nil` values passed to the lookup

- Backwards incompatible changes
    - Support for single `:remote_url` download configuration has been removed

## v0.13.0 (2016-11-19)

- Enhancements
    - Downloaded files can be automatically stored under a custom filename differing from the URL basename
    - Multiple files can be configured for download

- Deprecations
    - Configuring a single `:remote_url` for download has been deprecated

## v0.12.0 (2016-09-22)

- Enhancements
    - Multiple databases can be configured to load during startup. Lookups are done in order until a match is found

- Backwards incompatible changes
    - Downloaded databases are stored under the basename of the remote file instead of the filename of the "first configured database"
    - Support for `:yaml` as database configuration has been removed

## v0.11.0 (2016-09-07)

- Enhancements
    - Remote URL of database file is now configurable

- Deprecations
    - Configuring a single `:yaml` as the database has been deprecated

- Backwards incompatible changes
    - Support for loading a database file at runtime using `RefInspector.load/1` has been removed

## v0.10.0 (2016-08-19)

- Enhancements
    - Database download is done using hackney in order to prepare an upcoming auto-update feature
    - If the initial load of the database (during process initialisation) fails a message will be sent through `Logger.info/1`

- Backwards incompatible changes
    - Downloads are now done using `:hackney` instead of `mix`. This may force you to manually reconfigure the client
    - Minimum required Elixir version is now `~> 1.2`
    - Minimum required Erlang version is now `~> 18.0`

## v0.9.0 (2016-03-30)

- Enhancements
    - Database is reloaded if the storage process gets restarted
    - Path can be configured by accessing the system environment
    - Referer database can be reloaded using `RefInspector.load/1`

- Backwards incompatible changes
    - Reloading the database drops previously loaded (unconfigured) entries

## v0.8.0 (2015-07-18)

- Enhancements
    - Domains to be detected as `:internal` can be configured

## v0.7.0 (2015-06-01)

- Enhancements
    - Dependencies not used in production builds are marked as optional
    - Displays expanded download path for `mix ref_inspector.yaml.download`
    - Verification script now automatically downloads database file
    - Worker pool options are no longer defined at compile time

- Backwards incompatible changes
    - Pool configuration is now expected to be a `Keyword.t()`

## v0.6.0 (2015-04-03)

- Initial Release