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.ex32
1 files changed, 26 insertions, 6 deletions
diff --git a/lib/powerdnsex/models/resource_record_set.ex b/lib/powerdnsex/models/resource_record_set.ex
index a3bca8d..f4338a2 100644
--- a/lib/powerdnsex/models/resource_record_set.ex
+++ b/lib/powerdnsex/models/resource_record_set.ex
@@ -4,17 +4,37 @@ defmodule PowerDNSex.Models.ResourceRecordSet do
defstruct [:name, :type, :ttl, :records, :changetype]
- def as_body(%__MODULE__{} = record) do
+ 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: record.name,
- type: record.type,
- ttl: record.ttl,
- changetype: record.changetype,
- records: Record.as_body(record.content)
+ 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