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:
parent
8d777b2cf8
commit
d879b54fd4
3 changed files with 22 additions and 38 deletions
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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 """
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue