Together (together v0.5.1)

Group actions that can be handled / responded to later together

what-for

What for?

  • group notifications to be sent in one email
    • cancel the previously queued email if another event happens within a short period (type: debounce)
  • make heavy operations happen less often, i.e. refresh some global statistics
    • allow only 1 operation per certain period (type: throttle)
  • protect some write api
    • additonally you can choose to use the first value in a period (keep: first)
    • or the last value in the period (keep: last)

how-to-use

How to use

Start Together.Supervisor to use it

start-with-application-configs

Start with application configs

supervisor(Together.Supervisor, [])

start-with-configs-passed-in

Start with configs passed in

supervisor(Together.Supervisor, [workers: ..., store: ...])

See Together.Supervisor for full configuration information

Make calls to the worker process:

Together.process(binary_name, "something_unique", some_func)
Together.process(pid, "some_unique_name_or_id", a_function)
Together.process(Together.Worker, "id", Module, :func, [arg1, arg2, ...])

Link to this section Summary

Functions

cancels queued action for the given id

put in a function under the id to be processed (invoked) later

put in an mfa under the id to be processed (applied) later

Link to this section Functions

Link to this function

cancel(name, id)

@spec cancel(binary() | GenServer.server(), term()) :: :ok | :error

cancels queued action for the given id

Link to this function

process(name, id, func)

@spec process(binary() | GenServer.server(), term(), (... -> any())) ::
  :ok | no_return()

put in a function under the id to be processed (invoked) later

Link to this function

process(name, id, m, f, a)

@spec process(binary() | GenServer.server(), term(), module(), atom(), list()) ::
  :ok | no_return()

put in an mfa under the id to be processed (applied) later