diff options
Diffstat (limited to 'lib/powerdnsex/models/zone.ex')
-rw-r--r-- | lib/powerdnsex/models/zone.ex | 28 |
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 |