1+ # frozen_string_literal: true
2+
3+ # Serializes ScrimRequest records for API responses, including org summaries.
14class ScrimRequestSerializer < Blueprinter ::Base
25 identifier :id
36
@@ -24,9 +27,9 @@ class ScrimRequestSerializer < Blueprinter::Base
2427
2528 class << self
2629 TIER_SCORE = {
27- 'CHALLENGER' => 9 , 'GRANDMASTER' => 8 , 'MASTER' => 7 ,
28- 'DIAMOND' => 6 , 'EMERALD' => 5 , 'PLATINUM' => 4 ,
29- 'GOLD' => 3 , 'SILVER' => 2 , 'BRONZE' => 1
30+ 'CHALLENGER' => 9 , 'GRANDMASTER' => 8 , 'MASTER' => 7 ,
31+ 'DIAMOND' => 6 , 'EMERALD' => 5 , 'PLATINUM' => 4 ,
32+ 'GOLD' => 3 , 'SILVER' => 2 , 'BRONZE' => 1
3033 } . freeze
3134
3235 TIER_LABEL = {
@@ -35,33 +38,36 @@ class << self
3538 3 => 'Gold' , 2 => 'Silver' , 1 => 'Bronze' , 0 => 'Iron'
3639 } . freeze
3740
38- def serialize_org ( org )
41+ def serialize_org ( org ) # rubocop:disable Metrics/MethodLength
3942 players = org . players . active . select ( :summoner_name , :role , :solo_queue_tier )
40-
41- scores = players . map { |p | TIER_SCORE [ p . solo_queue_tier . to_s . upcase ] || 0 }
42- avg_score = scores . empty? ? 0 : ( scores . sum . to_f / scores . size ) . round
43- avg_tier = TIER_LABEL [ avg_score ] || 'Iron'
43+ avg_tier = compute_avg_tier ( players )
4444
4545 {
46- id : org . id ,
47- name : org . name ,
48- slug : org . slug ,
49- region : org . region ,
50- tier : org . tier ,
46+ id : org . id ,
47+ name : org . name ,
48+ slug : org . slug ,
49+ region : org . region ,
50+ tier : org . tier ,
5151 public_tagline : org . public_tagline ,
5252 discord_server : org . discord_invite_url ,
53- scrims_won : org . scrims_won || 0 ,
54- scrims_lost : org . scrims_lost || 0 ,
55- total_scrims : org . total_scrims || 0 ,
56- avg_tier : avg_tier ,
57- roster : players . map do |p |
58- {
59- summoner_name : p . summoner_name ,
60- role : p . role ,
61- tier : p . solo_queue_tier
62- }
63- end
53+ scrims_won : 0 ,
54+ scrims_lost : 0 ,
55+ total_scrims : 0 ,
56+ avg_tier : avg_tier ,
57+ roster : serialize_roster ( players )
6458 }
6559 end
60+
61+ private
62+
63+ def compute_avg_tier ( players )
64+ scores = players . map { |p | TIER_SCORE [ p . solo_queue_tier . to_s . upcase ] || 0 }
65+ avg_score = scores . empty? ? 0 : ( scores . sum . to_f / scores . size ) . round
66+ TIER_LABEL [ avg_score ] || 'Iron'
67+ end
68+
69+ def serialize_roster ( players )
70+ players . map { |p | { summoner_name : p . summoner_name , role : p . role , tier : p . solo_queue_tier } }
71+ end
6672 end
6773end
0 commit comments