Class: RQRCodeCore::QRSegment

Inherits:
Object
  • Object
show all
Defined in:
lib/rqrcode_core/qrcode/qr_segment.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

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

Returns a new instance of QRSegment.



7
8
9
10
11
12
13
14
15
16
17
18
19
# 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 explicitly 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

Instance Attribute Details

#dataObject (readonly)

Returns the value of attribute data.



5
6
7
# File 'lib/rqrcode_core/qrcode/qr_segment.rb', line 5

def data
  @data
end

#modeObject (readonly)

Returns the value of attribute mode.



5
6
7
# File 'lib/rqrcode_core/qrcode/qr_segment.rb', line 5

def mode
  @mode
end

Instance Method Details

#content_sizeObject



29
30
31
32
33
34
35
36
37
38
39
40
# 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) ⇒ Object



25
26
27
# 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) ⇒ Object



21
22
23
# File 'lib/rqrcode_core/qrcode/qr_segment.rb', line 21

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

#writerObject



42
43
44
45
46
47
48
49
50
51
52
53
# 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