# frozen_string_literal: true # Core SVG data for grade insignia. # # This class should never need to be called directly. # @private class USPSFlags class Grades class Grade class << self def get(grade) return if grade.nil? raise USPSFlags::Errors::InvalidInsignia, "Unknown grade: #{grade}" unless valid_grades.include?(grade) send(grade) end def valid_grades %i[s p ap jn n sn] end def width(grade) case grade when :ap USPSFlags::Config::GRADE_SPACING * 2.25 + 100 when :jn USPSFlags::Config::GRADE_SPACING * 3 + 10 when :n USPSFlags::Config::GRADE_SPACING * 5 + 45 end end private def bar <<~SVG <rect x="0" y="0" width="100" height="35" fill="#{USPSFlags::Config::GOLD}" /> SVG end def star <<~SVG <g transform="scale(0.33) translate(0, 150)"> #{USPSFlags::Core::Icons::Star.new.svg.gsub('fill="#FFFFFF"', "fill=\"#{USPSFlags::Config::GOLD}\"")} </g> SVG end def s bar end def p <<~SVG #{bar} <g transform="translate(#{USPSFlags::Config::GRADE_SPACING})">#{bar}</g> SVG end def ap <<~SVG #{bar} <g transform="translate(#{USPSFlags::Config::GRADE_SPACING * 1.5 + 5})">#{star}</g> <g transform="translate(#{USPSFlags::Config::GRADE_SPACING * 2.25})">#{bar}</g> SVG end def jn <<~SVG <g transform="translate(60)"> #{star} <g transform="translate(#{USPSFlags::Config::GRADE_SPACING / 2 + 25})">#{bar}</g> <g transform="translate(#{USPSFlags::Config::GRADE_SPACING * 2 + 20})">#{star}</g> </g> SVG end def n <<~SVG <g transform="translate(60)"> #{star} <g transform="translate(#{USPSFlags::Config::GRADE_SPACING / 2 + 25})">#{bar}</g> <g transform="translate(#{USPSFlags::Config::GRADE_SPACING * 2 + 20})">#{star}</g> <g transform="translate(#{USPSFlags::Config::GRADE_SPACING * 3 - 10})">#{bar}</g> <g transform="translate(#{USPSFlags::Config::GRADE_SPACING * 4 + 50})">#{star}</g> </g> SVG end def sn box_width = USPSFlags::Grades::Grade.width(:n) + 60 <<~SVG <rect x="20" y="-10" width="#{box_width}" height="155" fill=\"none\" stroke-width=\"20\" stroke=\"#{USPSFlags::Config::GOLD}\" /> <g transform="translate(50, 50)"> #{n} </g> SVG end end end end end