Current section

Files

Jump to
exshopify lib shopify request.ex
Raw

lib/shopify/request.ex

defmodule Shopify.Request do
@type t :: %__MODULE__{
body: binary,
headers: [{binary, binary}],
method: atom,
url: binary
}
defstruct body: "",
headers: [],
method: nil,
url: nil
@default_headers [{"content-type", "application/json"}]
def new(operation, session, config) do
%__MODULE__{
body: decode_body(operation, config),
headers: build_headers(session),
method: operation.http_method,
url: build_url(operation, session, config)
}
end
defp decode_body(%{http_method: :get}, _config) do
""
end
defp decode_body(%{params: params}, config) do
case config.json_codec.decode(params) do
{:ok, body} ->
body
{:error, _reason} ->
""
end
end
defp build_headers(%Shopify.Session.Public{access_token: access_token}) do
[{"x-shopify-access-token", access_token}] ++ @default_headers
end
defp build_headers(_session) do
@default_headers
end
defp build_url(operation, session, config) do
%URI{
host: "#{session.shop_name}.#{config.host}",
path: "/#{operation.path}",
port: config.port,
scheme: config.scheme
}
|> put_query(operation)
|> URI.to_string()
end
defp put_query(uri, %{http_method: :get, params: params}) do
Map.put(uri, :query, URI.encode_query(params))
end
defp put_query(uri, _operation) do
uri
end
end