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 end
@spec get_received_at(map()) :: DateTime.t() | nil @spec get_received_at(map()) :: DateTime.t() | nil
defp get_received_at(packet) do defp get_received_at(%{received_at: value}), do: value
cond do defp get_received_at(%{"received_at" => value}), do: value
Map.has_key?(packet, :received_at) -> packet.received_at defp get_received_at(_packet), do: nil
Map.has_key?(packet, "received_at") -> packet["received_at"]
true -> nil
end
end
# Helper to get locale from socket # Helper to get locale from socket
@spec get_locale(Socket.t()) :: String.t() @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. Normalize longitude to the -180 to 180 range.
""" """
@spec normalize_longitude(number()) :: number() @spec normalize_longitude(number()) :: number()
def normalize_longitude(lon) when is_number(lon) do def normalize_longitude(lon) when is_number(lon) and lon > 180, do: normalize_longitude(lon - 360)
# Wrap longitude to -180 to 180 range def normalize_longitude(lon) when is_number(lon) and lon < -180, do: normalize_longitude(lon + 360)
cond do
lon > 180 -> normalize_longitude(lon - 360)
lon < -180 -> normalize_longitude(lon + 360)
true -> lon
end
end
def normalize_longitude(lon), do: lon def normalize_longitude(lon), do: lon
@doc """ @doc """
@ -106,14 +99,8 @@ defmodule AprsmeWeb.Live.Shared.CoordinateUtils do
Latitude cannot wrap, so we clamp to valid range. Latitude cannot wrap, so we clamp to valid range.
""" """
@spec normalize_latitude(number()) :: number() @spec normalize_latitude(number()) :: number()
def normalize_latitude(lat) when is_number(lat) do def normalize_latitude(lat) when is_number(lat) and lat > 90, do: 90.0
cond do def normalize_latitude(lat) when is_number(lat) and lat < -90, do: -90.0
lat > 90 -> 90.0
lat < -90 -> -90.0
true -> lat
end
end
def normalize_latitude(lat), do: lat def normalize_latitude(lat), do: lat
@doc """ @doc """

View file

@ -246,22 +246,23 @@ defmodule AprsmeWeb.Live.Shared.PacketUtils do
""" """
@spec map_label(map()) :: String.t() @spec map_label(map()) :: String.t()
def map_label(packet) do def map_label(packet) do
data_type = get_packet_field(packet, :data_type, "") map_label_for(get_packet_field(packet, :data_type, ""), packet)
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
end 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?(value) when is_binary(value), do: String.trim(value) != ""
defp non_empty_string?(_), do: false defp non_empty_string?(_), do: false