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.
This commit is contained in:
Graham McIntire 2026-04-23 14:12:39 -05:00
parent 8d777b2cf8
commit d879b54fd4
No known key found for this signature in database
GPG key ID: F4ABF488E6029E59
3 changed files with 22 additions and 38 deletions

View file

@ -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()

View file

@ -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 """

View file

@ -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