Class: QrCodeMaker::QRSegment

Inherits:
Object
  • Object
show all
Defined in:
lib/qr_code_maker/encoder.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(data:, mode: nil) ⇒ QRSegment

Returns a new instance of QRSegment.



611
612
613
614
615
616
617
618
619
620
621
622
# File 'lib/qr_code_maker/encoder.rb', line 611

def initialize(data:, mode: nil)
  @data = data
  @mode = QRMODE_NAME.dig(mode&.to_sym)

  @mode ||= if QRNumeric.valid_data?(@data)
    QRMODE_NAME[:number]
  elsif QRAlphanumeric.valid_data?(@data)
    QRMODE_NAME[:alphanumeric]
  else
    QRMODE_NAME[:byte_8bit]
  end
end

Instance Attribute Details

#dataObject (readonly)

Returns the value of attribute data.



609
610
611
# File 'lib/qr_code_maker/encoder.rb', line 609

def data
  @data
end

#modeObject (readonly)

Returns the value of attribute mode.



609
610
611
# File 'lib/qr_code_maker/encoder.rb', line 609

def mode
  @mode
end

Instance Method Details

#content_sizeObject



632
633
634
635
636
637
638
639
640
641
642
643
# File 'lib/qr_code_maker/encoder.rb', line 632

def content_size
  chunk_size, bit_length, extra = case mode
  when :mode_number
    [3, QRNumeric.const_get(:NUMBER_LENGTH)[3], QRNumeric.const_get(: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) ⇒ Object



628
629
630
# File 'lib/qr_code_maker/encoder.rb', line 628

def header_size(version)
  QRUtil.get_length_in_bits(QRMODE[mode], version)
end

#size(version) ⇒ Object



624
625
626
# File 'lib/qr_code_maker/encoder.rb', line 624

def size(version)
  4 + header_size(version) + content_size
end

#writerObject



645
646
647
648
649
650
651
652
653
654
655
656
# File 'lib/qr_code_maker/encoder.rb', line 645

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