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