class RQRCodeCore::QRSegment

Attributes

data[R]
mode[R]

Public Class Methods

new(data:, mode: nil) click to toggle source
# File lib/rqrcode_core/qrcode/qr_segment.rb, line 7
def initialize(data:, mode: nil)
  @data = data
  @mode = QRMODE_NAME.dig(mode&.to_sym)

  # If mode is not explicitely found choose mode according to data type
  @mode ||= if RQRCodeCore::QRNumeric.valid_data?(@data)
    QRMODE_NAME[:number]
  elsif QRAlphanumeric.valid_data?(@data)
    QRMODE_NAME[:alphanumeric]
  else
    QRMODE_NAME[:byte_8bit]
  end
end

Public Instance Methods

content_size() click to toggle source
# File lib/rqrcode_core/qrcode/qr_segment.rb, line 29
def content_size
  chunk_size, bit_length, extra = case mode
  when :mode_number
    [3, QRNumeric::NUMBER_LENGTH[3], QRNumeric::NUMBER_LENGTH[data_length % 3] || 0]
  when :mode_alpha_numk
    [2, 11, 6]
  when :mode_8bit_byte
    [1, 8, 0]
  end

  (data_length / chunk_size) * bit_length + ((data_length % chunk_size) == 0 ? 0 : extra)
end
header_size(version) click to toggle source
# File lib/rqrcode_core/qrcode/qr_segment.rb, line 25
def header_size(version)
  QRUtil.get_length_in_bits(QRMODE[mode], version)
end
size(version) click to toggle source
# File lib/rqrcode_core/qrcode/qr_segment.rb, line 21
def size(version)
  4 + header_size(version) + content_size
end
writer() click to toggle source
# File lib/rqrcode_core/qrcode/qr_segment.rb, line 42
def writer
  case mode
  when :mode_number
    QRNumeric.new(data)
  when :mode_alpha_numk
    QRAlphanumeric.new(data)
  when :mode_multi
    QRMulti.new(data)
  else
    QR8bitByte.new(data)
  end
end

Private Instance Methods

data_length() click to toggle source
# File lib/rqrcode_core/qrcode/qr_segment.rb, line 57
def data_length
  data.bytesize
end