Current section

8 Versions

Jump to

Compare versions

5 files changed
+48 additions
-14 deletions
  @@ -5,7 +5,7 @@ Conqueuer (pronounced like conquer) is a non-persistent Elixir work queue.
5 5
6 6 ### Documentation and Information
7 7
8 - The [docs](http://hexdocs.pm/conqueuer/0.1.1/Conqueuer.html) can be found on the
8 + The [docs](http://hexdocs.pm/conqueuer/0.2.0/Conqueuer.html) can be found on the
9 9 hexdocs website and [further information](https://hex.pm/packages/conqueuer) on the
10 10 hex website.
11 11
  @@ -17,7 +17,7 @@ Conqueuer can be installed like:
17 17 1. Add test to your list of dependencies in `mix.exs`:
18 18
19 19 def deps do
20 - [{:conqueuer, "~> 0.1.1"}]
20 + [{:conqueuer, "~> 0.2.0"}]
21 21 end
22 22
23 23 2. Ensure test is started before your application:
  @@ -20,4 +20,4 @@
20 20 [{<<"app">>,<<"poolboy">>},
21 21 {<<"optional">>,false},
22 22 {<<"requirement">>,<<"~> 1.5">>}]}]}.
23 - {<<"version">>,<<"0.1.1">>}.
23 + {<<"version">>,<<"0.2.0">>}.
  @@ -68,13 +68,9 @@ defmodule Conqueuer do
68 68 def start(_type, _args) do
69 69 import Supervisor.Spec, warn: false
70 70
71 - children = [
72 - supervisor(MyApp.ResolversPoolSupervisor, [[], [name: :ResolversPoolSupervisor]]),
73 - worker(Conqueuer.Queue, [[], [name: :ResolversQueue]]),
74 - worker(Conqueuer.Foreman, [[name: :resolvers], [name: :ResolversForeman]])
75 - ]
71 + children = Conqueuer.child_specs(:resolvers, MyApp.ResolversPoolSupervisor)
76 72
77 - opts = [ strategy: :one_for_one, name: MyApp.Supervisor ]
73 + opts = [strategy: :one_for_one, name: Test.Supervisor]
78 74 Supervisor.start_link(children, opts)
79 75 end
80 76 end
  @@ -92,10 +88,44 @@ defmodule Conqueuer do
92 88 Queues the `args` for the work to be performed to the `name` worker queue.
93 89 """
94 90 def work( name, args \\ nil ) do
95 - {foreman_name, queue_name} = Util.infer_conqueuer_collaborator_names( name )
91 + {foreman_name, queue_name} = Util.infer_conqueuer_collaborator_names(name)
96 92
97 - Conqueuer.Queue.enqueue( queue_name, args )
98 - Conqueuer.Foreman.work_arrived( foreman_name )
93 + Conqueuer.Queue.enqueue(queue_name, args)
94 + Conqueuer.Foreman.work_arrived(foreman_name)
95 + end
96 +
97 + @doc """
98 + Generates the child process specs for a Conqueuer work queue. Expects the
99 + name of the pool and module of the pool supervisor.
100 +
101 + Manual way:
102 +
103 + children = [
104 + supervisor(MyApp.ResolversPoolSupervisor, [[], [name: :ResolversPoolSupervisor]]),
105 + worker(Conqueuer.Queue, [[], [name: :ResolversQueue]]),
106 + worker(Conqueuer.Foreman, [[name: :resolvers], [name: :ResolversForeman]])
107 + ]
108 +
109 + opts = [strategy: :one_for_one, name: MyApp.Supervisor]
110 + Supervisor.start_link(children, opts)
111 +
112 + Using the helper:
113 +
114 + children = Conqueuer.child_specs( :resolvers, Test.PoolSupervisor )
115 +
116 + opts = [strategy: :one_for_one, name: Test.Supervisor]
117 + Supervisor.start_link(children, opts)
118 + """
119 + def child_specs(pool_name, pool_supervisor_module) do
120 + import Supervisor.Spec, warn: false
121 +
122 + {foreman, pool, pool_supervisor, queue} = Util.infer_collaborator_names(pool_name)
123 +
124 + [
125 + supervisor(pool_supervisor_module, [[], [name: pool_supervisor]]),
126 + worker(Conqueuer.Queue, [[], [name: queue]]),
127 + worker(Conqueuer.Foreman, [[name: pool_name], [name: foreman]])
128 + ]
99 129 end
100 130
101 131 end
  @@ -1,7 +1,7 @@
1 1 defmodule Conqueuer.Util do
2 2
3 3 def infer_collaborator_names( name ) do
4 - {infer_foreman_name( name ), infer_pool_name( name ), infer_queue_name( name )}
4 + {infer_foreman_name( name ), infer_pool_name( name ), infer_pool_supervisor_name( name ), infer_queue_name( name )}
5 5 end
6 6
7 7 def infer_conqueuer_collaborator_names( name ) do
  @@ -16,6 +16,10 @@ defmodule Conqueuer.Util do
16 16 (infer_base_name( name ) <> "Foreman") |> String.to_atom
17 17 end
18 18
19 + def infer_pool_supervisor_name( name ) do
20 + (infer_base_name( name ) <> "PoolSupervisor") |> String.to_atom
21 + end
22 +
19 23 def infer_pool_name( name ) do
20 24 name
21 25 end
  @@ -3,7 +3,7 @@ defmodule Conqueuer.Mixfile do
3 3
4 4 def project do
5 5 [app: :conqueuer,
6 - version: "0.1.1",
6 + version: "0.2.0",
7 7 elixir: "~> 1.1",
8 8 build_embedded: Mix.env == :prod,
9 9 preferred_cli_env: [espec: :test],