summaryrefslogtreecommitdiff
path: root/lib/powerdnsex/models/resource_record_set.ex
diff options
context:
space:
mode:
Diffstat (limited to 'lib/powerdnsex/models/resource_record_set.ex')
-rw-r--r--lib/powerdnsex/models/resource_record_set.ex40
1 files changed, 40 insertions, 0 deletions
diff --git a/lib/powerdnsex/models/resource_record_set.ex b/lib/powerdnsex/models/resource_record_set.ex
new file mode 100644
index 0000000..f4338a2
--- /dev/null
+++ b/lib/powerdnsex/models/resource_record_set.ex
@@ -0,0 +1,40 @@
+defmodule PowerDNSex.Models.ResourceRecordSet do
+
+ alias PowerDNSex.Models.Record
+
+ defstruct [:name, :type, :ttl, :records, :changetype]
+
+ def build(rrset_attrs) when is_map(rrset_attrs) do
+ rrset = %__MODULE__{}
+
+ rrset
+ |> Map.keys
+ |> Enum.reduce(rrset, &(set_attrs(&2, &1, rrset_attrs)))
+ end
+
+ def as_body(%__MODULE__{} = rrset) do
+ %{ rrsets: [
+ %{
+ name: rrset.name,
+ type: rrset.type,
+ ttl: rrset.ttl,
+ changetype: rrset.changetype,
+ records: Record.as_body(rrset.records)
+ }
+ ]}
+ |> Poison.encode!
+ end
+
+ defp set_attrs(rrset, attr_name, attrs) do
+ if Map.has_key?(attrs, attr_name) do
+ attr_value = case attr_name do
+ :records -> Record.build(Map.fetch!(attrs, attr_name))
+ _ -> Map.fetch!(attrs, attr_name)
+ end
+
+ %{ rrset | attr_name => attr_value }
+ else
+ rrset
+ end
+ end
+end