Sha256: ec910ec6c686ecb62fe2da1ff055040080aa6dc62aec29427095df2bdb130938

Contents?: true

Size: 1.12 KB

Versions: 2

Compression:

Stored size: 1.12 KB

Contents

# frozen_string_literal: true

# Core SVG data for merit marks.
#
# This class should never need to be called directly.
# @private
class USPSFlags::Grades::MeritMarks
  class << self
    def get(number)
      return if number < 1

      svg = +''
      new_lines = 0

      top_row = number % 20
      svg << generate_top_row(top_row)
      number -= top_row

      number, new_lines, svg = add_row(number, new_lines, svg) while number > 0
      new_lines.times { svg << '</g>' }

      svg
    end

  private

    def add_row(number, new_lines, svg)
      number -= 20
      new_lines += 1
      svg << <<~SVG
        <g transform="translate(0,90)">
        #{generate_full_row}
      SVG

      [number, new_lines, svg]
    end

    def bar(offset = 0)
      <<~SVG
        <rect x="#{offset}" y="0" width="35" height="80" fill="#{USPSFlags::Config::GOLD}" />
      SVG
    end

    def generate_top_row(number)
      svg = +''

      number.times do |i|
        svg << bar(45 * i)
      end

      svg
    end

    def generate_full_row
      svg = +''

      20.times do |i|
        svg << bar(45 * i)
      end

      svg
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
usps_flags-grades-0.1.1 lib/usps_flags/grades/merit_marks.rb
usps_flags-grades-0.1.0 lib/usps_flags/grades/merit_marks.rb