Remove mox in favour of built-in Req stubs
This commit is contained in:
+8
-6
@@ -1,9 +1,11 @@
|
||||
defmodule MusicBrainz do
|
||||
alias MusicBrainz.API
|
||||
|
||||
def search_release_group(query, opts \\ []) do
|
||||
limit = Keyword.get(opts, :limit, 20)
|
||||
offset = Keyword.get(opts, :offset, 0)
|
||||
|
||||
music_brainz_config().api.search_release_group(
|
||||
API.search_release_group(
|
||||
query,
|
||||
[limit: limit, offset: offset],
|
||||
music_brainz_config()
|
||||
@@ -11,23 +13,23 @@ defmodule MusicBrainz do
|
||||
end
|
||||
|
||||
def get_release_group(musicbrainz_id) do
|
||||
music_brainz_config().api.get_release_group(musicbrainz_id, music_brainz_config())
|
||||
API.get_release_group(musicbrainz_id, music_brainz_config())
|
||||
end
|
||||
|
||||
def get_releases(musicbrainz_id, opts) do
|
||||
music_brainz_config().api.get_releases(musicbrainz_id, opts, music_brainz_config())
|
||||
API.get_releases(musicbrainz_id, opts, music_brainz_config())
|
||||
end
|
||||
|
||||
def get_release(musicbrainz_id) do
|
||||
music_brainz_config().api.get_release(musicbrainz_id, music_brainz_config())
|
||||
API.get_release(musicbrainz_id, music_brainz_config())
|
||||
end
|
||||
|
||||
def search_release_by_barcode(barcode) do
|
||||
music_brainz_config().api.search_release_by_barcode(barcode, music_brainz_config())
|
||||
API.search_release_by_barcode(barcode, music_brainz_config())
|
||||
end
|
||||
|
||||
def get_cover_art(id_or_url) do
|
||||
music_brainz_config().api.get_cover_art(id_or_url, music_brainz_config())
|
||||
API.get_cover_art(id_or_url, music_brainz_config())
|
||||
end
|
||||
|
||||
defp music_brainz_config, do: MusicBrainz.Config.resolve(:music_library)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
defmodule MusicBrainz.APIImpl do
|
||||
defmodule MusicBrainz.API do
|
||||
@moduledoc """
|
||||
The original data from Obsidian maps records to MusicBrainz release groups, so we can leverage the MusicBrainz API to:
|
||||
|
||||
@@ -6,8 +6,6 @@ defmodule MusicBrainz.APIImpl do
|
||||
- Extend the metadata associated with existing records
|
||||
"""
|
||||
|
||||
@behaviour MusicBrainz.APIBehaviour
|
||||
|
||||
require Logger
|
||||
|
||||
alias MusicBrainz.{ReleaseGroupSearchResult, ReleaseSearchResult}
|
||||
@@ -208,7 +206,6 @@ defmodule MusicBrainz.APIImpl do
|
||||
}
|
||||
"""
|
||||
|
||||
@impl true
|
||||
def get_release_group(id, config) do
|
||||
config
|
||||
|> new_request()
|
||||
@@ -285,7 +282,6 @@ defmodule MusicBrainz.APIImpl do
|
||||
"title": "Clark (Soundtrack From the Netflix Series)"
|
||||
}
|
||||
"""
|
||||
@impl true
|
||||
def get_release(id, config) do
|
||||
config
|
||||
|> new_request()
|
||||
@@ -299,7 +295,6 @@ defmodule MusicBrainz.APIImpl do
|
||||
|> get_request()
|
||||
end
|
||||
|
||||
@impl true
|
||||
def get_releases(release_group_id, opts, config) do
|
||||
Keyword.validate!(opts, [:limit, :offset])
|
||||
|
||||
@@ -319,7 +314,6 @@ defmodule MusicBrainz.APIImpl do
|
||||
|> get_request()
|
||||
end
|
||||
|
||||
@impl true
|
||||
def search_release_by_barcode(barcode, config) do
|
||||
config
|
||||
|> new_request()
|
||||
@@ -436,7 +430,6 @@ defmodule MusicBrainz.APIImpl do
|
||||
]
|
||||
}
|
||||
"""
|
||||
@impl true
|
||||
def search_release_group(query, opts, config) do
|
||||
Keyword.validate!(opts, [:limit, :offset])
|
||||
|
||||
@@ -461,7 +454,6 @@ defmodule MusicBrainz.APIImpl do
|
||||
@doc """
|
||||
Uses the [cover art](https://musicbrainz.org/doc/Cover_Art_Archive/API) endpoint with the release group id to get the cover image.
|
||||
"""
|
||||
@impl true
|
||||
def get_cover_art({:musicbrainz_id, musicbrainz_id}, config) do
|
||||
url = "https://coverartarchive.org/release-group/#{musicbrainz_id}/front"
|
||||
|
||||
@@ -470,6 +462,7 @@ defmodule MusicBrainz.APIImpl do
|
||||
|
||||
def get_cover_art({:url, url}, config) do
|
||||
case Req.new(url: url, max_retries: 1, user_agent: config.user_agent)
|
||||
|> Req.Request.merge_options(config.req_options)
|
||||
|> Req.Request.append_request_steps(log_attempt: &log_attempt/1)
|
||||
|> Req.Request.append_response_steps(log_error: &log_error/1)
|
||||
|> get_request() do
|
||||
@@ -484,6 +477,7 @@ defmodule MusicBrainz.APIImpl do
|
||||
max_retries: 1,
|
||||
user_agent: config.user_agent
|
||||
)
|
||||
|> Req.Request.merge_options(config.req_options)
|
||||
|> Req.Request.append_request_steps(log_attempt: &log_attempt/1)
|
||||
end
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
defmodule MusicBrainz.APIBehaviour do
|
||||
@type musicbrainz_id :: String.t()
|
||||
@type config :: MusicBrainz.Config.t()
|
||||
@type limit :: pos_integer()
|
||||
@type barcode :: String.t()
|
||||
|
||||
@callback get_release_group(musicbrainz_id, config) :: {:ok, map()} | {:error, String.t()}
|
||||
|
||||
@callback get_releases(musicbrainz_id, limit, config) :: {:ok, map()} | {:error, String.t()}
|
||||
|
||||
@callback get_release(musicbrainz_id, config) :: {:ok, map()} | {:error, String.t()}
|
||||
|
||||
@callback search_release_group(String.t(), Keyword.t(), config) ::
|
||||
{:ok, [map()]} | {:error, String.t()}
|
||||
|
||||
@callback search_release_by_barcode(barcode, config) :: {:ok, [map()]} | {:error, String.t()}
|
||||
|
||||
@callback get_cover_art({:musicbrainz_id, musicbrainz_id()} | {:url, String.t()}, config) ::
|
||||
{:ok, binary()} | {:error, String.t()}
|
||||
end
|
||||
@@ -1,22 +1,23 @@
|
||||
defmodule MusicBrainz.Config do
|
||||
@type t :: %__MODULE__{
|
||||
api: module(),
|
||||
user_agent: String.t()
|
||||
user_agent: String.t(),
|
||||
req_options: Keyword.t()
|
||||
}
|
||||
|
||||
@enforce_keys [:api, :user_agent]
|
||||
defstruct api: MusicBrainz.APIImpl,
|
||||
user_agent: "change me"
|
||||
@enforce_keys [:user_agent]
|
||||
defstruct user_agent: "change me",
|
||||
req_options: []
|
||||
|
||||
@schema NimbleOptions.new!(
|
||||
api: [
|
||||
type: :atom,
|
||||
required: true
|
||||
],
|
||||
user_agent: [
|
||||
type: :string,
|
||||
required: false,
|
||||
default: "change me"
|
||||
],
|
||||
req_options: [
|
||||
type: :keyword_list,
|
||||
required: false,
|
||||
default: []
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user