From d879b54fd41566814e697f3dcf4824f497ef4153 Mon Sep 17 00:00:00 2001 From: Graham McIntire Date: Thu, 23 Apr 2026 14:12:39 -0500 Subject: [PATCH] refactor: replace more cond expressions with guarded clauses - CoordinateUtils.normalize_longitude / normalize_latitude: recursion and clamping move into the function head via numeric guards. - Shared.PacketUtils.map_label: dispatch on data_type + fallback via multi-clause helpers (map_label_for/2, prefer_name/2) instead of a three-branch cond with inner `if`s. - MapLive.DataBuilder.get_received_at: pattern-match the atom- and string-key packet shapes in the function head. No behavior change; all 1567 tests and 27 property checks still pass, dialyzer remains clean. --- lib/aprsme_web/live/map_live/data_builder.ex | 10 ++----- .../live/shared/coordinate_utils.ex | 21 +++----------- lib/aprsme_web/live/shared/packet_utils.ex | 29 ++++++++++--------- 3 files changed, 22 insertions(+), 38 deletions(-) diff --git a/lib/aprsme_web/live/map_live/data_builder.ex b/lib/aprsme_web/live/map_live/data_builder.ex index 497c99d..7889cf7 100644 --- a/lib/aprsme_web/live/map_live/data_builder.ex +++ b/lib/aprsme_web/live/map_live/data_builder.ex @@ -601,13 +601,9 @@ defmodule AprsmeWeb.MapLive.DataBuilder do end @spec get_received_at(map()) :: DateTime.t() | nil - defp get_received_at(packet) do - cond do - Map.has_key?(packet, :received_at) -> packet.received_at - Map.has_key?(packet, "received_at") -> packet["received_at"] - true -> nil - end - end + defp get_received_at(%{received_at: value}), do: value + defp get_received_at(%{"received_at" => value}), do: value + defp get_received_at(_packet), do: nil # Helper to get locale from socket @spec get_locale(Socket.t()) :: String.t() diff --git a/lib/aprsme_web/live/shared/coordinate_utils.ex b/lib/aprsme_web/live/shared/coordinate_utils.ex index 62ed338..333ce6c 100644 --- a/lib/aprsme_web/live/shared/coordinate_utils.ex +++ b/lib/aprsme_web/live/shared/coordinate_utils.ex @@ -90,15 +90,8 @@ defmodule AprsmeWeb.Live.Shared.CoordinateUtils do Normalize longitude to the -180 to 180 range. """ @spec normalize_longitude(number()) :: number() - def normalize_longitude(lon) when is_number(lon) do - # Wrap longitude to -180 to 180 range - cond do - lon > 180 -> normalize_longitude(lon - 360) - lon < -180 -> normalize_longitude(lon + 360) - true -> lon - end - end - + def normalize_longitude(lon) when is_number(lon) and lon > 180, do: normalize_longitude(lon - 360) + def normalize_longitude(lon) when is_number(lon) and lon < -180, do: normalize_longitude(lon + 360) def normalize_longitude(lon), do: lon @doc """ @@ -106,14 +99,8 @@ defmodule AprsmeWeb.Live.Shared.CoordinateUtils do Latitude cannot wrap, so we clamp to valid range. """ @spec normalize_latitude(number()) :: number() - def normalize_latitude(lat) when is_number(lat) do - cond do - lat > 90 -> 90.0 - lat < -90 -> -90.0 - true -> lat - end - end - + def normalize_latitude(lat) when is_number(lat) and lat > 90, do: 90.0 + def normalize_latitude(lat) when is_number(lat) and lat < -90, do: -90.0 def normalize_latitude(lat), do: lat @doc """ diff --git a/lib/aprsme_web/live/shared/packet_utils.ex b/lib/aprsme_web/live/shared/packet_utils.ex index dcfd399..b8153f4 100644 --- a/lib/aprsme_web/live/shared/packet_utils.ex +++ b/lib/aprsme_web/live/shared/packet_utils.ex @@ -246,22 +246,23 @@ defmodule AprsmeWeb.Live.Shared.PacketUtils do """ @spec map_label(map()) :: String.t() def map_label(packet) do - data_type = get_packet_field(packet, :data_type, "") - - cond do - data_type == "object" -> - object_name = get_packet_field(packet, :object_name, "") - if object_name == "", do: get_packet_field(packet, :sender, ""), else: object_name - - data_type == "item" -> - item_name = get_packet_field(packet, :item_name, "") - if item_name == "", do: get_packet_field(packet, :sender, ""), else: item_name - - true -> - get_packet_field(packet, :sender, "") - end + map_label_for(get_packet_field(packet, :data_type, ""), packet) end + defp map_label_for("object", packet) do + prefer_name(get_packet_field(packet, :object_name, ""), packet) + end + + defp map_label_for("item", packet) do + prefer_name(get_packet_field(packet, :item_name, ""), packet) + end + + defp map_label_for(_data_type, packet), do: get_packet_field(packet, :sender, "") + + # Use `name` when non-empty, otherwise fall back to the packet sender. + defp prefer_name("", packet), do: get_packet_field(packet, :sender, "") + defp prefer_name(name, _packet), do: name + defp non_empty_string?(value) when is_binary(value), do: String.trim(value) != "" defp non_empty_string?(_), do: false