diff options
author | Tiago Freire <code.tiago.frire@locaweb.com.br> | 2016-08-26 19:55:32 -0300 |
---|---|---|
committer | Tiago Freire <tcfonnet@gmail.com> | 2016-08-31 00:30:49 -0300 |
commit | 8beaa5452ce5245d460815ca1d6752167bdb4fd3 (patch) | |
tree | 43e054c46d963c4ca9d725d8dc7c9079e0394551 /lib/powerdnsex | |
parent | WIP - Add elixir GenServer (diff) |
[WIP] GenServer refactoring
Diffstat (limited to 'lib/powerdnsex')
-rw-r--r-- | lib/powerdnsex/config.ex | 2 | ||||
-rw-r--r-- | lib/powerdnsex/gen_server/server.ex | 42 | ||||
-rw-r--r-- | lib/powerdnsex/models/error.ex | 2 | ||||
-rw-r--r-- | lib/powerdnsex/models/zone.ex | 2 | ||||
-rw-r--r-- | lib/powerdnsex/server_setup.ex | 29 |
5 files changed, 48 insertions, 29 deletions
diff --git a/lib/powerdnsex/config.ex b/lib/powerdnsex/config.ex index 486ccb6..2cf55f1 100644 --- a/lib/powerdnsex/config.ex +++ b/lib/powerdnsex/config.ex @@ -20,6 +20,8 @@ defmodule PowerDNSex.Config do def powerdns_token, do: data.token + def valid?(), do: powerdns_url && powerdns_token + ### # Private ### diff --git a/lib/powerdnsex/gen_server/server.ex b/lib/powerdnsex/gen_server/server.ex new file mode 100644 index 0000000..52768b3 --- /dev/null +++ b/lib/powerdnsex/gen_server/server.ex @@ -0,0 +1,42 @@ +defmodule PowerDNSex.Server do + use GenServer + + alias PowerDNSex.Managers.{ZonesManager, RecordsManager} + alias PowerDNSex.Models.Zone + + def start_link(name) do + GenServer.start_link(__MODULE__, :ok, name: name) + end + + ### + # Zones + ### + + def handle_call({:create_zone, zone, server_name}, _from, state) do + {:reply, ZonesManager.create(zone, server_name), state} + end + + def handle_call({:show_zone, zone, server_name}, _from, state) do + {:reply, ZonesManager.show(zone, server_name), state} + end + + def handle_call({:delete_zone, zone, server_name}, _from, state) do + {:reply, ZonesManager.delete(zone, server_name), state} + end + + def handle_call({:create_record, zone, rrset_attrs}, _from, state) do + {:reply, RecordsManager.create(zone, rrset_attrs), state} + end + + def handle_call({:show_record, zone, rrset_attrs}, _from, state) do + {:reply, RecordsManager.show(zone, rrset_attrs), state} + end + + def handle_call({:update_record, zone, rrset_attrs}, _from, state) do + {:reply, RecordsManager.update(zone, rrset_attrs), state} + end + + def handle_call({:delete_record, zone, rrset_attrs}, _from, state) do + {:reply, RecordsManager.delete(zone, rrset_attrs), state} + end +end diff --git a/lib/powerdnsex/models/error.ex b/lib/powerdnsex/models/error.ex index 1cf9f62..d4b1183 100644 --- a/lib/powerdnsex/models/error.ex +++ b/lib/powerdnsex/models/error.ex @@ -1,3 +1,5 @@ defmodule PowerDNSex.Models.Error do defstruct [:error] + + @type t :: %__MODULE__{error: String.t} end diff --git a/lib/powerdnsex/models/zone.ex b/lib/powerdnsex/models/zone.ex index 62a5a2a..8620443 100644 --- a/lib/powerdnsex/models/zone.ex +++ b/lib/powerdnsex/models/zone.ex @@ -11,6 +11,8 @@ defmodule PowerDNSex.Models.Zone do notified_serial: 0, serial: nil, soa_edit: "", soa_edit_api: "", url: nil + @type t :: %__MODULE__{} + def as_body(%__MODULE__{} = zone) do get_valid_attrs = fn({attr, value}, body) -> if Enum.member?(@body_attrs, attr) do diff --git a/lib/powerdnsex/server_setup.ex b/lib/powerdnsex/server_setup.ex deleted file mode 100644 index 3b5cb14..0000000 --- a/lib/powerdnsex/server_setup.ex +++ /dev/null @@ -1,29 +0,0 @@ -defmodule PowerDNSex.ServerSetup do - defmacro __using__(opts \\ []) do - quote bind_quoted: [opts: opts] do - use Application - - @name opts[:process_name] || :PowerDNSex - @config opts[:config] - - @spec start(term, term) :: GenServer.on_start - def start(_, _), do: start - - @spec start() :: GenServer.on_start - @doc false - def start do - import Supervisor.Spec - - children = [worker(Server, [@name, @config])] - - options = [strategy: :one_for_one, name: :"#{@name}.Supervisor"] - - case Supervisor.start_link(children, options) do - {:ok, pid} -> {:ok, pid} - {:error, {:already_started, pid}} -> {:ok, pid} - other -> other - end - end - end - end -end |