From baa2eb2a48ff6448dbf92463442dbf3e67b1b4c1 Mon Sep 17 00:00:00 2001 From: Boon Low Date: Mon, 4 Mar 2024 17:14:45 +0000 Subject: [PATCH] `Options` to facilitate opts concerns of source, sink implementation --- lib/stow/{source/extras.ex => options.ex} | 3 ++- lib/stow/plug/source.ex | 10 +++++----- lib/stow/source.ex | 8 ++++---- test/stow/pipeline/source_sink_test.exs | 2 +- test/stow/plug/source_test.exs | 4 ++-- 5 files changed, 14 insertions(+), 13 deletions(-) rename lib/stow/{source/extras.ex => options.ex} (80%) diff --git a/lib/stow/source/extras.ex b/lib/stow/options.ex similarity index 80% rename from lib/stow/source/extras.ex rename to lib/stow/options.ex index 71b24d9..e5d9510 100644 --- a/lib/stow/source/extras.ex +++ b/lib/stow/options.ex @@ -1,6 +1,7 @@ -defmodule Stow.Source.Extras do +defmodule Stow.Options do @moduledoc false alias Stow.Http.Headers + defstruct headers: %Headers{} @type t :: %__MODULE__{headers: Headers.t()} end diff --git a/lib/stow/plug/source.ex b/lib/stow/plug/source.ex index 882f2bb..ec23749 100644 --- a/lib/stow/plug/source.ex +++ b/lib/stow/plug/source.ex @@ -8,7 +8,7 @@ defmodule Stow.Plug.Source do import Plug.Conn, only: [halt: 1, resp: 3] import Utils, only: [fetch_uri: 2, put_headers: 3, set_uri_params: 2, update_private: 3] - @plug_opts [:uri, :extras] + @plug_opts [:uri, :options] @schemes ["http", "https"] @impl true @@ -37,13 +37,13 @@ defmodule Stow.Plug.Source do defp get_req_headers(conn, opts) do fetch_headers(conn.private.stow.source, :req) || - fetch_headers(Keyword.get(opts, :extras), :req) || [] + fetch_headers(Keyword.get(opts, :options), :req) || [] end # to fix: refactor this to the plug utils module defp fetch_headers(nil, _type), do: nil - defp fetch_headers(%Source{extras: %{headers: %{req: h}}}, :req) when h != [], do: h - defp fetch_headers(%Source{extras: %{headers: %{resp: h}}}, :resp) when h != [], do: h + defp fetch_headers(%Source{options: %{headers: %{req: h}}}, :req) when h != [], do: h + defp fetch_headers(%Source{options: %{headers: %{resp: h}}}, :resp) when h != [], do: h defp fetch_headers(%{headers: %{req: h}}, :req) when h != [], do: h defp fetch_headers(%{headers: %{resp: h}}, :resp) when h != [], do: h defp fetch_headers(%{}, _), do: nil @@ -54,7 +54,7 @@ defmodule Stow.Plug.Source do |> Macro.camelize() |> then(fn source -> Module.concat(Source, source) end) |> apply(:get, [conn, opts |> Keyword.drop(@plug_opts)]) - |> update_conn(conn, uri, fetch_headers(Keyword.get(opts, :extras), :resp) || []) + |> update_conn(conn, uri, fetch_headers(Keyword.get(opts, :options), :resp) || []) end defp normalise_scheme_name(scheme) when scheme in [:http, :https], do: "http" diff --git a/lib/stow/source.ex b/lib/stow/source.ex index 19f5d62..bf79464 100644 --- a/lib/stow/source.ex +++ b/lib/stow/source.ex @@ -5,13 +5,13 @@ defmodule Stow.Source do alias Stow.Http.Client, as: HttpClient alias Stow.Http.Headers - alias Stow.Source.Extras + alias Stow.Options - defstruct [:uri, :status, extras: %Extras{}] + defstruct [:uri, :status, options: %Options{}] @type t :: %__MODULE__{ uri: binary() | nil, - extras: Extras.t(), + options: Options.t(), status: nil | :ok | {:error, term()} } @@ -23,7 +23,7 @@ defmodule Stow.Source do def new(uri, headers \\ []) do %__MODULE__{ uri: uri, - extras: %Extras{ + options: %Options{ headers: %Headers{ req: Keyword.get(headers, :req_headers, []), resp: Keyword.get(headers, :resp_headers, []) diff --git a/test/stow/pipeline/source_sink_test.exs b/test/stow/pipeline/source_sink_test.exs index 302e6c1..f20a80c 100644 --- a/test/stow/pipeline/source_sink_test.exs +++ b/test/stow/pipeline/source_sink_test.exs @@ -89,7 +89,7 @@ defmodule Stow.Pipeline.SourceSinkTest do source: %Source{ status: :ok, uri: ^src_uri, - extras: %{headers: %{req: [], resp: []}} + options: %{headers: %{req: [], resp: []}} }, sink: %Sink{uri: ^sink_uri, status: :ok} } = conn.private.stow diff --git a/test/stow/plug/source_test.exs b/test/stow/plug/source_test.exs index 1376168..82909a5 100644 --- a/test/stow/plug/source_test.exs +++ b/test/stow/plug/source_test.exs @@ -16,7 +16,7 @@ defmodule Stow.Plug.SourceTest do plug(Source, uri: "http://localhost/path/to/source?foo=bar", - extras: %{ + options: %{ headers: %{ req: [{"accept", "text/html"}, {"accept-charset", "utf-8"}], resp: [{"server", "apache/2.4.1 (unix)"}, {"cache-control", "max-age=604800"}] @@ -60,7 +60,7 @@ defmodule Stow.Plug.SourceTest do conn = Source.call(conn, uri: uri, - extras: %{ + options: %{ headers: %{ req: context.req_headers, resp: context.resp_headers