module Admin::LeaderboardHelper # Turns "SE" into the flag emoji by mapping each letter onto its regional # indicator symbol. Cheaper than shipping 34 flag SVGs for one admin screen, # and it degrades to the two letters wherever the font has no flag. def country_flag(country_code) code = country_code.to_s.upcase return "" unless code.match?(/\A[A-Z]{2}\z/) code.codepoints.map { |c| (c - 65 + 0x1F1E6) }.pack("U*") end def leaderboard_country_name(country_code) t("countries.#{country_code.to_s.downcase}", default: country_code.to_s.upcase) end # The badge types the API emits, named the way the brief describes them. def badge_type_label(type) { "new_players" => "New players", "encouragement" => "Encouragement", "participation" => "Participation" }[type.to_s] || type.to_s.humanize end # How long the published payload still has before the next API call # recomputes it. The cache entry carries no expiry we can read back, so this # is derived from when it was built. def leaderboard_cache_age(updated_at) return nil if updated_at.blank? Time.current - updated_at end end