Aura.Common (Aura v0.9.3)

View Source

Common capabilities across all Aura services

๐Ÿ“– Resources

Summary

Types

A human-readable name for this API key

The path parameter of the request

An email address associated with this record

Name of the Hex organization

Name of the package

The version of a release

The name of the repository

A unique, human-readable ID for a user

Functions

Determines a api_path/0 by investigating opts for a :repo or :org key, representing a Aura.Model.HexRepo or a Aura.Model.HexOrganization.

Implements Hex API's pagination mechanism by returning a Stream.resource/3

Types

api_key_name()

@type api_key_name() :: String.t()

A human-readable name for this API key

๐Ÿ’ป Examples

 "my_computer"

api_path()

@type api_path() :: String.t()

The path parameter of the request

email()

@type email() :: String.t()

An email address associated with this record

๐Ÿ’ป Examples

"hello@example.com"

org_name()

@type org_name() :: String.t()

Name of the Hex organization

๐Ÿ’ป Examples

"my_org"

๐Ÿ‘€ See Also

package_name()

@type package_name() :: String.t()

Name of the package

๐Ÿ’ป Examples

"plug"

release_version()

@type release_version() :: String.t()

The version of a release

๐Ÿ’ป Examples

"1.2.3"

repo_name()

@type repo_name() :: String.t()

The name of the repository

๐Ÿ’ป Examples

"hexpm"

username()

@type username() :: String.t()

A unique, human-readable ID for a user

๐Ÿ’ป Examples

  "camatcode"

Functions

determine_path(opts, path)

@spec determine_path(opts :: [any()], path :: api_path()) :: {api_path(), [any()]}

Determines a api_path/0 by investigating opts for a :repo or :org key, representing a Aura.Model.HexRepo or a Aura.Model.HexOrganization.

If present, path will be modified to scope solely to that repo or org, otherwise the path is unmodified.

๐Ÿท๏ธ Params

  • path :: api_path/0
  • opts :: option parameters used to modify requests

โคต๏ธ Returns

โœ… On Success

  {path, opts}

๐Ÿ’ป Examples

iex> alias Aura.Common
iex> alias Aura.Model.HexPackage
iex> opts = [repo_url: "http://localhost:4000/api", repo: "hexpm", page: 2, sort: :total_downloads]
iex> {_path, _opts} = Common.determine_path(opts, "/packages")
{"/repos/hexpm/packages", [repo_url: "http://localhost:4000/api", page: 2, sort: :total_downloads]}
iex> opts = [repo_url: "http://localhost:4000/api", org: "my_org", page: 2]
iex> {_path, _opts} = Common.determine_path(opts, "/keys")
{"/orgs/my_org/keys", [repo_url: "http://localhost:4000/api", page: 2]}

stream_paginate(path, build_func, opts)

@spec stream_paginate(
  path :: api_path(),
  build_func :: (map() -> map()),
  opts :: list()
) ::
  Enumerable.t()

Implements Hex API's pagination mechanism by returning a Stream.resource/3

๐Ÿท๏ธ Params

  • path :: api_path/0
  • opts :: option parameters used to modify requests
  • build_func :: a function that takes in a map and returns a struct representing what's being paginated

โคต๏ธ Returns

โœ… On Success

  a `Stream.resource/3`

๐Ÿ’ป Examples

iex> alias Aura.Common
iex> alias Aura.Model.HexPackage
iex> opts = [repo_url: "http://localhost:4000/api", repo: "hexpm", page: 2, sort: :total_downloads]
iex> {path, opts} = Common.determine_path(opts, "/packages")
iex> packages = Common.stream_paginate(path, &HexPackage.build/1, opts)
iex> Enum.empty?(packages)
false