README.md

# About

> 🚨 Currently beta grade software, I wouldn't recommend usage in production systems, or your personal projects for the matter 😂

A concurrent task scheduler, intended to maximize through put of
predefined tasks with clear dependencies on each other to run in
parallel where possible. Whilst providing a means to rollback
with as little pain as possible.

## Installation

If [available in Hex](https://hex.pm/docs/publish), the package can be installed
by adding `kira` to your list of dependencies in `mix.exs`:

```elixir
def deps do
  [
    {:kira, "~> 0.1.1"}
  ]
end
```

Documentation can be generated with [ExDoc](https://github.com/elixir-lang/ex_doc)
and published on [HexDocs](https://hexdocs.pm). Once published, the docs can
be found at [https://hexdocs.pm/kira](https://hexdocs.pm/kira).

## Example

```ex
require Kira
require Logger

task_a = %Kira.Branch{
  name: :get_a,
  apply: fn (config, deps) ->
    Logger.info(inspect(config))
    {:ok, 2}
  end,
}

task_b = %Kira.Branch{
  name: :get_b,
  apply: fn (config, deps) ->
    Logger.info(inspect(config))
    {:ok, 3}
  end,
}

task_c = %Kira.Branch{
  name: :get_c,
  dependencies: [:get_a, :get_b],
  apply: fn (config, deps) ->
    Logger.info(inspect(config))
    {:ok, deps[:get_a] + deps[:get_b]}
  end,
}

tasks = [task_a, task_b, task_c]
{:ok, results} = Kira.run_tasks(:my_config, tasks)
Logger.info(inspect(results))

# Should log
# 1: :my_config
# 2: :my_config
# 3: :my_config
# 4: %{ :get_a => 2, :get_b => 3, :get_c => 5 }
```