Sha256: 48b8775b58917a1b7515508094ced978ab51465044976e997514b74386a3e962

Contents?: true

Size: 945 Bytes

Versions: 4

Compression:

Stored size: 945 Bytes

Contents

# frozen_string_literal: true

module Plurimath
  module Formatter
    module Numbers
      class Integer
        attr_reader :format, :separator, :groups

        def initialize(symbols = {})
          @groups    = Array(symbols[:group_digits] || 3)
          @separator = symbols[:group] || ','
        end

        def apply(number, options = {})
          format_groups(number)
        end

        def format_groups(string)
          return string if groups.empty?

          tokens = []

          tokens << chop_group(string, groups.first)
          string = string[0...-tokens.first.size]

          until string.empty?
            tokens << chop_group(string, groups.last)
            string = string[0...-tokens.last.size]
          end

          tokens.compact.reverse.join(separator)
        end

        def chop_group(string, size)
          string.slice([string.size - size, 0].max, size)
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
plurimath-0.8.24 lib/plurimath/formatter/numbers/integer.rb
plurimath-0.8.23 lib/plurimath/formatter/numbers/integer.rb
plurimath-0.8.22 lib/plurimath/formatter/numbers/integer.rb
plurimath-0.8.21 lib/plurimath/formatter/numbers/integer.rb