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
|
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()
|
||||||
|
|
|
||||||
|
|
@ -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 """
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue