together v0.5.0 Together

Group actions that can be handled / responded to later together

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

Start Together.Supervisor to use it

Start with application configs

supervisor(Together.Supervisor, [])

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, ...])

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

Functions

cancel(name, id)
cancel(binary | GenServer.server, term) :: :ok | :error

cancels queued action for the given id

process(name, id, func)
process(binary | GenServer.server, term, (... -> any)) ::
  :ok |
  no_return

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

process(name, id, m, f, a)
process(binary | GenServer.server, term, module, atom, list) ::
  :ok |
  no_return

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