2025-12-28 11:33:35 -05:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
|
|
module Users
|
|
|
|
|
module DigestsHelper
|
2026-01-04 11:51:10 -05:00
|
|
|
PROGRESS_COLORS = %w[
|
|
|
|
|
progress-primary progress-secondary progress-accent
|
|
|
|
|
progress-info progress-success progress-warning
|
|
|
|
|
].freeze
|
|
|
|
|
|
|
|
|
|
def progress_color_for_index(index)
|
|
|
|
|
PROGRESS_COLORS[index % PROGRESS_COLORS.length]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def city_progress_value(city_count, max_cities)
|
|
|
|
|
return 0 unless max_cities&.positive?
|
|
|
|
|
|
|
|
|
|
(city_count.to_f / max_cities * 100).round
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def max_cities_count(toponyms)
|
|
|
|
|
return 0 if toponyms.blank?
|
|
|
|
|
|
|
|
|
|
toponyms.map { |country| country['cities']&.length || 0 }.max
|
|
|
|
|
end
|
|
|
|
|
|
2025-12-28 11:33:35 -05:00
|
|
|
def distance_with_unit(distance_meters, unit)
|
|
|
|
|
value = Users::Digest.convert_distance(distance_meters, unit).round
|
|
|
|
|
"#{number_with_delimiter(value)} #{unit}"
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def distance_comparison_text(distance_meters)
|
|
|
|
|
distance_km = distance_meters.to_f / 1000
|
|
|
|
|
|
|
|
|
|
if distance_km >= Users::Digest::MOON_DISTANCE_KM
|
|
|
|
|
percentage = ((distance_km / Users::Digest::MOON_DISTANCE_KM) * 100).round(1)
|
|
|
|
|
"That's #{percentage}% of the distance to the Moon!"
|
|
|
|
|
else
|
|
|
|
|
percentage = ((distance_km / Users::Digest::EARTH_CIRCUMFERENCE_KM) * 100).round(1)
|
|
|
|
|
"That's #{percentage}% of Earth's circumference!"
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def format_time_spent(minutes)
|
|
|
|
|
return "#{minutes} minutes" if minutes < 60
|
|
|
|
|
|
|
|
|
|
hours = minutes / 60
|
|
|
|
|
remaining_minutes = minutes % 60
|
|
|
|
|
|
|
|
|
|
if hours < 24
|
|
|
|
|
"#{hours}h #{remaining_minutes}m"
|
|
|
|
|
else
|
|
|
|
|
days = hours / 24
|
|
|
|
|
remaining_hours = hours % 24
|
|
|
|
|
"#{days}d #{remaining_hours}h"
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def yoy_change_class(change)
|
|
|
|
|
return '' if change.nil?
|
|
|
|
|
|
|
|
|
|
change.negative? ? 'negative' : 'positive'
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def yoy_change_text(change)
|
|
|
|
|
return '' if change.nil?
|
|
|
|
|
|
|
|
|
|
prefix = change.positive? ? '+' : ''
|
|
|
|
|
"#{prefix}#{change}%"
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|