summaryrefslogtreecommitdiff
path: root/lib/powerdnsex
diff options
context:
space:
mode:
authorTiago Freire <code.tiago.frire@locaweb.com.br>2016-08-26 19:55:32 -0300
committerTiago Freire <tcfonnet@gmail.com>2016-08-31 00:30:49 -0300
commit8beaa5452ce5245d460815ca1d6752167bdb4fd3 (patch)
tree43e054c46d963c4ca9d725d8dc7c9079e0394551 /lib/powerdnsex
parentWIP - Add elixir GenServer (diff)
[WIP] GenServer refactoring
Diffstat (limited to 'lib/powerdnsex')
-rw-r--r--lib/powerdnsex/config.ex2
-rw-r--r--lib/powerdnsex/gen_server/server.ex42
-rw-r--r--lib/powerdnsex/models/error.ex2
-rw-r--r--lib/powerdnsex/models/zone.ex2
-rw-r--r--lib/powerdnsex/server_setup.ex29
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