From 103a4678ce733aad061e72bb94af212d78e6e824 Mon Sep 17 00:00:00 2001 From: Diego Alves Date: Wed, 14 Sep 2016 20:30:44 -0300 Subject: adjust models and manager --- lib/powerdnsex/managers/records_manager.ex | 21 ++++++++++++++++----- lib/powerdnsex/models/record.ex | 22 +++++++++++++--------- lib/powerdnsex/models/resource_record_set.ex | 11 +++++++---- 3 files changed, 36 insertions(+), 18 deletions(-) diff --git a/lib/powerdnsex/managers/records_manager.ex b/lib/powerdnsex/managers/records_manager.ex index 876234f..c7c586d 100644 --- a/lib/powerdnsex/managers/records_manager.ex +++ b/lib/powerdnsex/managers/records_manager.ex @@ -8,7 +8,8 @@ defmodule PowerDNSex.Managers.RecordsManager do def create(%Zone{} = zone, %{} = rrset_attrs) do - rrset_attrs = Map.merge(rrset_attrs, %{changetype: "REPLACE"}) + rrset_attrs = Map.merge(rrset_attrs, %{"changetype" => "REPLACE"}) + IO.puts "RRSet create: #{inspect rrset_attrs}" patch(zone, rrset_attrs) end @@ -20,12 +21,12 @@ defmodule PowerDNSex.Managers.RecordsManager do end def update(%Zone{} = zone, %{} = rrset_attrs) do - rrset_attrs = Map.merge(rrset_attrs, %{changetype: "REPLACE"}) + rrset_attrs = Map.merge(rrset_attrs, %{"changetype" => "REPLACE"}) patch(zone, rrset_attrs) end def delete(%Zone{} = zone, %{} = rrset_attrs) do - rrset_attrs = Map.merge(rrset_attrs, %{changetype: "DELETE"}) + rrset_attrs = Map.merge(rrset_attrs, %{"changetype" => "DELETE"}) patch(zone, rrset_attrs) end @@ -35,8 +36,13 @@ defmodule PowerDNSex.Managers.RecordsManager do defp process_request_response(%Response{body: body, status_code: status}) do case status do - s when s < 300 -> :ok - s when s >= 300 -> body |> Poison.decode!(as: %Error{}) + s when s == 204 -> :ok + s when s < 300 -> + IO.puts "Response status: #{s}" + :ok + s when s >= 300 -> + error = Poison.decode!(body, as: %Error{}) + {:error, %{error | http_status_code: s} } end end @@ -45,6 +51,11 @@ defmodule PowerDNSex.Managers.RecordsManager do end defp patch(%Zone{} = zone, %{} = rrset_attrs) do + IO.puts "Patch rrset_attrs: #{inspect rrset_attrs}" + rrset_struct = RRSet.build(rrset_attrs) + IO.puts "[Patch] Struct: #{inspect rrset_struct}" + IO.puts "[Patch] Body: #{inspect RRSet.as_body(rrset_struct)}" + zone.url |> HttpClient.patch!(RRSet.as_body(RRSet.build(rrset_attrs))) |> process_request_response diff --git a/lib/powerdnsex/models/record.ex b/lib/powerdnsex/models/record.ex index 9ffc2b7..b334a9b 100644 --- a/lib/powerdnsex/models/record.ex +++ b/lib/powerdnsex/models/record.ex @@ -2,15 +2,7 @@ defmodule PowerDNSex.Models.Record do defstruct [:content, :disabled] def build(attrs) when is_list(attrs) do - Enum.reduce(attrs, [], &(&2 ++ [build(&1)])) - end - - def build(attrs) when is_tuple(attrs) do - %__MODULE__{content: elem(attrs, 0), disabled: elem(attrs, 1)} - end - - def build(attrs) when is_map(attrs) do - %__MODULE__{content: attrs.content, disabled: attrs.disabled} + Enum.reduce(attrs, [], &(&2 ++ [build_item(&1)])) end def as_body(nil), do: [] @@ -34,4 +26,16 @@ defmodule PowerDNSex.Models.Record do end) end) end + + ### + # PRIVATE + ### + + defp build_item(attrs) when is_tuple(attrs) do + %__MODULE__{content: elem(attrs, 0), disabled: elem(attrs, 1)} + end + + defp build_item(attrs) when is_map(attrs) do + %__MODULE__{content: attrs["content"], disabled: attrs["disabled"]} + end end diff --git a/lib/powerdnsex/models/resource_record_set.ex b/lib/powerdnsex/models/resource_record_set.ex index 9f248ab..89973a8 100644 --- a/lib/powerdnsex/models/resource_record_set.ex +++ b/lib/powerdnsex/models/resource_record_set.ex @@ -4,7 +4,7 @@ defmodule PowerDNSex.Models.ResourceRecordSet do defstruct [:name, :type, :ttl, :records, :changetype] - def build(rrset_attrs) when is_map(rrset_attrs) do + def build(%{"records" => records} = rrset_attrs) when is_list(records) do rrset = %__MODULE__{} rrset @@ -13,6 +13,8 @@ defmodule PowerDNSex.Models.ResourceRecordSet do end def as_body(%__MODULE__{} = rrset) do + IO.puts "RRSet: #{inspect rrset}" + %{ rrsets: [ %{ name: rrset.name, @@ -42,13 +44,14 @@ defmodule PowerDNSex.Models.ResourceRecordSet do ### defp set_attrs(rrset, attr_name, attrs) do + if is_atom(attr_name), do: attr_name = Atom.to_string(attr_name) 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) + "records" -> Record.build(Map.fetch!(attrs, attr_name)) + _ -> Map.fetch!(attrs, attr_name) end - %{ rrset | attr_name => attr_value } + %{ rrset | String.to_atom(attr_name) => attr_value } else rrset end -- cgit v1.2.3