Class: QRCode::Encoder::Segment

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

Overview

Base segment class - defaults to binary (8-bit byte) encoding

Direct Known Subclasses

AlphanumericSegment, NumericSegment

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(data) ⇒ Segment



17
18
19
# File 'lib/qrcode/encoder/segment.rb', line 17

def initialize(data)
  @data = data.to_s
end

Instance Attribute Details

#dataObject (readonly)

Returns the value of attribute data.



15
16
17
# File 'lib/qrcode/encoder/segment.rb', line 15

def data
  @data
end

Class Method Details

.build(data, mode: :auto) ⇒ Array<Segment>

Factory method to build segments from various data types



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/qrcode/encoder/segment.rb', line 49

def self.build(data, mode: :auto)
  case data
  when String
    [create_segment_for_data(data, mode)]
  when Array
    data.map do |item|
      case item
      when Hash
        create_segment_for_data(item[:data], item[:mode] || :auto)
      when String
        create_segment_for_data(item, mode)
      when Segment
        item
      else
        raise ArgumentError, "Array elements must be Strings, Hashes with :data key, or Segments"
      end
    end
  when Segment
    [data]
  else
    raise ArgumentError, "data must be a String, Segment, or Array"
  end
end

Instance Method Details

#bit_size(version) ⇒ Object



25
26
27
# File 'lib/qrcode/encoder/segment.rb', line 25

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

#content_sizeObject



33
34
35
# File 'lib/qrcode/encoder/segment.rb', line 33

def content_size
  @data.bytesize * 8
end

#header_size(version) ⇒ Object



29
30
31
# File 'lib/qrcode/encoder/segment.rb', line 29

def header_size(version)
  Encoder::Util.get_length_in_bits(MODE[mode], version)
end

#modeObject



21
22
23
# File 'lib/qrcode/encoder/segment.rb', line 21

def mode
  :mode_8bit_byte
end

#write(buffer) ⇒ Object



37
38
39
40
41
42
43
# File 'lib/qrcode/encoder/segment.rb', line 37

def write(buffer)
  buffer.byte_encoding_start(@data.bytesize)
  
  @data.each_byte do |b|
    buffer.put(b, 8)
  end
end