Packages
honeydew
1.0.0-rc6
1.5.0
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.0
1.2.8
1.2.7
1.2.6
1.2.5
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.1.6
1.1.5
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
1.0.0-rc7
1.0.0-rc6
1.0.0-rc5
1.0.0-rc4
1.0.0-rc3
1.0.0-rc2
1.0.0-rc1
0.0.11
0.0.10
0.0.9
0.0.8
0.0.7
0.0.6
0.0.5
0.0.4
0.0.3
0.0.2
0.0.1
Pluggable local/clusterable job queue focused on safety.
Current section
Files
Jump to
Current section
Files
lib/honeydew/job.ex
defmodule Honeydew.Job do
require Record
# :private needs to be first, the mnesia queue's ordering depends on it
@fields [:private, # queue's private state
:failure_private, # failure mode's private state
:task,
:from, # if the requester wants the result, here's where to send it
:result,
:by, # node last processed the job
:queue,
:monitor]
@kv Enum.map(@fields, &{&1, nil})
defstruct @kv
Record.defrecord :job, @kv
@match_spec @fields |> Enum.map(&{&1, :_}) |> Enum.into(%{})
def fields, do: @fields
vars = @fields |> Enum.map(&Macro.var(&1, __MODULE__))
vars_keyword_list = Enum.zip(@fields, vars)
def to_record(%{unquote_splicing(vars_keyword_list)}, name) do
{name, unquote_splicing(vars)}
end
def to_record({_name, unquote_splicing(vars)}, name) do
{name, unquote_splicing(vars)}
end
def to_record({_name, unquote_splicing(vars)}) do
{:job, unquote_splicing(vars)}
end
def from_record({_name, unquote_splicing(vars)}) do
%__MODULE__{unquote_splicing(vars_keyword_list)}
end
def match_spec(map, name) do
@match_spec
|> Map.merge(map)
|> Honeydew.Job.to_record(name)
end
end