Packages
upstream
1.6.8
2.1.4
2.1.3
2.1.2
2.1.1
2.1.0
2.0.7
2.0.6
2.0.5
2.0.4
2.0.3
2.0.2
2.0.0
1.8.2
1.8.1
1.7.2
1.7.1
1.7.0
1.6.14
1.6.13
1.6.12
1.6.11
1.6.10
1.6.9
1.6.8
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.12
1.5.11
1.5.11-dev-3
1.5.11-dev-2
1.5.11-dev-1
1.5.11-dev
1.5.10
1.5.9
1.5.8
1.5.7
1.5.6
1.5.5
1.5.2
1.5.1
1.5.0
1.4.12
1.4.9
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.7
1.3.5
1.3.4
1.3.3
1.3.2
1.3.1
1.3.0
1.2.3
1.2.1
Upstream is for integrating into projects that need to do large file uploads to B2 service. It integrates tightly with Backblaze B2 for now, with plans to support Amazon S3.
Current section
Files
Jump to
Current section
Files
lib/upstream/b2/base.ex
defmodule Upstream.B2.Base do
@moduledoc """
Base B2 module for using in the api call definitions
simply call `use Upstream.B2` in the module and define the url, header, body
and use the module to make the calls.
"""
defmacro __using__(_) do
quote do
alias Upstream.Request
alias Upstream.B2.{
Url,
Account
}
@behaviour unquote(__MODULE__)
@spec call(Keyword.t()) :: {:ok | :error, %__MODULE__{} | struct}
def call(options \\ []) do
url_option = Keyword.get(options, :url, nil)
header_option = Keyword.get(options, :header, nil)
body_option = Keyword.get(options, :body, nil)
request_options = Keyword.get(options, :options, [])
Request.post(
%__MODULE__{},
url(url_option),
process_body(body(body_option)),
header(header_option),
request_options
)
end
def header(nil), do: header()
def header, do: [Account.authorization_header()]
def body(nil), do: %{}
defp process_body(%{} = body), do: Poison.encode!(body)
defp process_body(body), do: body
defoverridable header: 0, body: 1
end
end
@callback url(nil | String.t() | map | none) :: String.t()
@callback body(nil | String.t() | map | any) :: map | any
@callback header(nil | String.t() | map | none) :: List.t()
end