bloodbath

The Bloodbath Erlang library provides convenient access to the Bloodbath API from applications written in the Erlang and Elixir language. This library will eventually be moved here.

Project Structure

bloodbath_erl/
   src/
      bloodbath.erl
      bloodbath_configuration.erl
      bloodbath_event.erl
      bloodbath_rest_adapter.erl
      bloodbath_threading.erl
      bloodbath_verbose.erl
   test/
      bloodbath_test.erl
   rebar.config
   README.md

Installation

Erlang

Bloodbath can be installed as a dependency in your Erlang project by adding the following to your rebar.config file:

{deps, [
    {bloodbath, "1.0.0"}
]}.

After updating your dependencies, run rebar3 compile to download and compile the dependencies.

Elixir

To use Bloodbath in your Elixir project, add the following to your mix.exs file:

defp deps do
  [
    {:bloodbath, "~> 1.0.0"}
  ]
end

After updating your dependencies, run mix deps.get to download and compile the dependencies.

Usage

Erlang

Once you have added Bloodbath to your dependencies, you can use it in your application as follows:

-module(myapp).
-compile(export_all).

-include_lib("bloodbath/include/bloodbath.hrl").

schedule_event() ->
    ok = application:start(bloodbath),
    Event = #{<<"scheduled_for">> => calendar:universal_time() + {0, 0, 1, 0, 0, 0},
              <<"headers">> => #{},
              <<"method">> => <<"post">>,
              <<"body">> => <<"some body content">>,
              <<"endpoint">> => <<"https://api.acme.com/path">>},
    {ok, Result} = bloodbath_event:schedule(Event),
    io:format("Scheduled event: ~p~n", [Result]).

list_events() ->
    ok = application:start(bloodbath),
    {ok, Result} = bloodbath_event:list(),
    io:format("List of events: ~p~n", [Result]).

find_event(EventId) ->
    ok = application:start(bloodbath),
    {ok, Result} = bloodbath_event:find(EventId),
    io:format("Found event with ID ~p: ~p~n", [EventId, Result]).

cancel_event(EventId) ->
    ok = application:start(bloodbath),
    {ok, Result} = bloodbath_event:cancel(EventId),
    io:format("Cancelled event with ID ~p: ~p~n", [EventId, Result]).

You can then use the functions in your application as follows:

myapp:schedule_event(),
myapp:list_events(),
myapp:find_event("b7ccff..."),
myapp:cancel_event("b7ccff...").

Make sure to replace "b7ccff..." with the actual ID of an event you want to find or cancel.

Elixir

To use Bloodbath in your Elixir application, you can create a module like this:

defmodule MyApp do
  require Bloodbath

  def schedule_event do
    :ok = :application.ensure_all_started(:bloodbath)

    event = %{
      "scheduled_for" => DateTime.add(DateTime.utc_now(), 60, :second),
      "headers" => %{},
      "method" => "post",
      "body" => "some body content",
      "endpoint" => "https://api.acme.com/path"
    }

    {:ok, result} = Bloodbath.schedule_event(event)
    IO.inspect(result, label: "Scheduled event")
  end

  def list_events do
    :ok = :application.ensure_all_started(:bloodbath)
    {:ok, result} = Bloodbath.list_events()
    IO.inspect(result, label: "List of events")
  end

  def find_event(event_id) do
    :ok = :application.ensure_all_started(:bloodbath)
    {:ok, result} = Bloodbath.find_event(event_id)
    IO.inspect(result, label: "Found event with ID #{event_id}")
  end

  def cancel_event(event_id) do
    :ok = :application.ensure_all_started(:bloodbath)
    {:ok, result} = Bloodbath.cancel_event(event_id)
    IO.inspect(result, label: "Cancelled event with ID #{event_id}")
  end
end

You can then use the functions in your application as follows:

MyApp.schedule_event()
MyApp.list_events()
MyApp.find_event("b7ccff...")
MyApp.cancel_event("b7ccff...")

Make sure to replace "b7ccff..." with the actual ID of an event you want to find or cancel.

Conclusion

Bloodbath is a powerful library that simplifies event scheduling and management. This README should have given you an idea of how to use it in your Erlang application. For more information, see the official documentation.