summaryrefslogtreecommitdiff
path: root/lib/powerdnsex/models/zone.ex
diff options
context:
space:
mode:
Diffstat (limited to 'lib/powerdnsex/models/zone.ex')
-rw-r--r--lib/powerdnsex/models/zone.ex28
1 files changed, 28 insertions, 0 deletions
diff --git a/lib/powerdnsex/models/zone.ex b/lib/powerdnsex/models/zone.ex
new file mode 100644
index 0000000..62a5a2a
--- /dev/null
+++ b/lib/powerdnsex/models/zone.ex
@@ -0,0 +1,28 @@
+defmodule PowerDNSex.Models.Zone do
+ @moduledoc """
+ Model for PowerDns zones, create and validate format
+ """
+
+ @body_attrs ~w(account dns kind masters name nameservers records serial
+ soa_edit soa_edit_api)a
+
+ defstruct name: nil, kind: "Native", masters: [], nameservers: [], rrsets: [],
+ account: nil, comments: [], dnssec: false, id: nil, last_check: 0,
+ notified_serial: 0, serial: nil, soa_edit: "", soa_edit_api: "",
+ url: nil
+
+ def as_body(%__MODULE__{} = zone) do
+ get_valid_attrs = fn({attr, value}, body) ->
+ if Enum.member?(@body_attrs, attr) do
+ Map.merge(body, %{attr => value})
+ else
+ body
+ end
+ end
+
+ zone
+ |> Map.from_struct
+ |> Enum.reduce(%{}, get_valid_attrs)
+ |> Poison.encode!
+ end
+end