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.ex | |
parent | WIP - Add elixir GenServer (diff) |
[WIP] GenServer refactoring
Diffstat (limited to 'lib/powerdnsex.ex')
-rw-r--r-- | lib/powerdnsex.ex | 71 |
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 |