summaryrefslogtreecommitdiff
path: root/lib/powerdnsex.ex
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.ex
parentWIP - Add elixir GenServer (diff)
[WIP] GenServer refactoring
Diffstat (limited to 'lib/powerdnsex.ex')
-rw-r--r--lib/powerdnsex.ex71
1 files changed, 53 insertions, 18 deletions
diff --git a/lib/powerdnsex.ex b/lib/powerdnsex.ex
index 7152417..104bd50 100644
--- a/lib/powerdnsex.ex
+++ b/lib/powerdnsex.ex
@@ -1,47 +1,75 @@
defmodule PowerDNSex do
- @default_server "localhost"
- use PowerDNSex.ServerSetup
+ use Application
+
+ alias PowerDNSex.{Server, Config, Models.Zone, Models.Error}
+
+ @name :PowerDNSex
+
+ def start(_,_), do: start()
+
+ @spec start() :: GenServer.on_start
+ @doc false
+ def start() do
+ import Supervisor.Spec
+
+ children = [worker(Server, [@name])]
+ options = [strategy: :one_for_one, name: :"#{@name}.Supervisor"]
+
+ try do
+ Config.valid?
+
+ case Supervisor.start_link(children, options) do
+ {:ok, pid} -> {:ok, pid}
+ {:error, {:already_started, pid}} -> {:ok, pid}
+ other -> other
+ end
+ rescue
+ error -> {:error, error}
+ end
+ end
- alias PowerDNSex.Managers.{ZonesManager, RecordsManager}
- alias PowerDNSex.Models.Zone
+ @default_server "localhost"
- ###
- # Zones
- ###
+ #########
+ # Zones #
+ #########
- @spec create_zone(Zone.t, String.t) :: :ok | {:error, String.t}
+ @spec create_zone(Zone.t, String.t) :: Zone.t | Error.t
@doc """
Create a new Zone on PowerDNS
"""
def create_zone(%Zone{} = zone, server_name \\ @default_server) do
- ZonesManager.create(zone, server_name)
+ call({:create_zone, zone, server_name})
end
+
@spec show_zone(Zone.t, String.t) :: :ok | {:error, String.t}
@doc """
Show / Retrive info of the specific Zone
"""
def show_zone(%Zone{} = zone, server_name \\ @default_server) do
- ZonesManager.show(zone, server_name)
+ call({:show_zone, zone, server_name})
end
+
@spec delete_zone(Zone.t, String.t) :: :ok | {:error, String.t}
@doc """
Delete specific Zone on PowerDNS
"""
def delete_zone(%Zone{} = zone, server_name \\ @default_server) do
- ZonesManager.delete(zone, server_name)
+ call({:delete_zone, zone, server_name})
end
- ###
- # Records
- ###
+ ###########
+ # Records #
+ ###########
+
@spec create_record(Zone.t, struct) :: :ok | {:error, String.t}
@doc """
Create a new Record for the given Zone
"""
def create_record(%Zone{} = zone, %{} = rrset_attrs) do
- RecordsManager.create(zone, rrset_attrs)
+ call({:create_record, zone, rrset_attrs})
end
@spec show_record(Zone.t, struct) :: :ok | {:error, String.t}
@@ -49,7 +77,7 @@ defmodule PowerDNSex do
Show / Retrive info of the specific Record of the given Zone
"""
def show_record(%Zone{} = zone, %{} = rrset_attrs) do
- RecordsManager.show(zone, rrset_attrs)
+ call({:show_record, zone, rrset_attrs})
end
@spec update_record(Zone.t, struct) :: :ok | {:error, String.t}
@@ -57,7 +85,7 @@ defmodule PowerDNSex do
Update Record of the given Zone
"""
def update_record(%Zone{} = zone, %{} = rrset_attrs) do
- RecordsManager.update(zone, rrset_attrs)
+ call({:update_record, zone, rrset_attrs})
end
@spec delete_record(Zone.t, struct) :: :ok | {:error, String.t}
@@ -65,6 +93,13 @@ defmodule PowerDNSex do
Delete specific Record of given Zone
"""
def delete_record(%Zone{} = zone, %{} = rrset_attrs) do
- RecordsManager.delete(zone, rrset_attrs)
+ call({:delete_record, zone, rrset_attrs})
end
+
+ ###########
+ # Private #
+ ###########
+
+ defp call(params), do: GenServer.call(@name, params)
+
end