Class: Barby::Code25Interleaved

Inherits:
Code25 show all
Defined in:
lib/barby/barcode/code_25_interleaved.rb

Overview

Code 2 of 5 interleaved. Same as standard 2 of 5, but spaces are used for encoding as well as the bars. Each pair of numbers get interleaved, that is, the first is encoded in the bars and the second is encoded in the spaced. This means an interleaved 2/5 barcode must have an even number of digits.

Constant Summary collapse

START_ENCODING =
[N,N,N,N]
STOP_ENCODING =
[W,N,N]

Constants inherited from Code25

Barby::Code25::ENCODINGS, Barby::Code25::NARROW, Barby::Code25::WIDE

Instance Attribute Summary

Attributes inherited from Code25

#data, #include_checksum, #narrow_width, #space_width, #wide_width

Instance Method Summary collapse

Methods inherited from Code25

#characters, #characters_with_checksum, #checksum, #checksum_encoding, #data_encoding, #data_encoding_with_checksum, #digits, #digits_with_checksum, #encoding, #encoding_for, #encoding_for_bars, #encoding_for_bars_without_end_space, #even_and_odd_digits, #include_checksum?, #initialize, #narrow_encoding, #space_encoding, #to_s, #wide_encoding

Methods inherited from Barcode

#encoding, #method_missing, #outputter_class_for, #outputter_for, outputters, register_outputter, #to_s, #two_dimensional?

Constructor Details

This class inherits a constructor from Barby::Code25

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class Barby::Barcode

Instance Method Details

#digit_encodingsObject



29
30
31
32
# File 'lib/barby/barcode/code_25_interleaved.rb', line 29

def digit_encodings
  raise_invalid unless valid?
  digit_pairs.map{|p| encoding_for_pair(p) }
end

#digit_encodings_with_checksumObject



34
35
36
# File 'lib/barby/barcode/code_25_interleaved.rb', line 34

def digit_encodings_with_checksum
  digit_pairs_with_checksum.map{|p| encoding_for_pair(p) }
end

#digit_pairs(d = nil) ⇒ Object



16
17
18
19
20
21
22
# File 'lib/barby/barcode/code_25_interleaved.rb', line 16

def digit_pairs(d=nil)
  (d || digits).inject [] do |ary,d|
    ary << [] if !ary.last || ary.last.size == 2
    ary.last << d
    ary
  end
end

#digit_pairs_with_checksumObject



24
25
26
# File 'lib/barby/barcode/code_25_interleaved.rb', line 24

def digit_pairs_with_checksum
  digit_pairs(digits_with_checksum)
end

#encoding_for_interleaved(*bars_and_spaces) ⇒ Object

Encodes an array of interleaved W or N bars and spaces ex: [W,N,W,W,N,N] => “111011100010”



47
48
49
50
51
52
53
# File 'lib/barby/barcode/code_25_interleaved.rb', line 47

def encoding_for_interleaved(*bars_and_spaces)
  bar = false#starts with bar
  bars_and_spaces.flatten.inject '' do |enc,bar_or_space|
    bar = !bar
    enc << (bar ? '1' : '0') * (bar_or_space == WIDE ? wide_width : narrow_width)
  end
end

#encoding_for_pair(pair) ⇒ Object



39
40
41
42
# File 'lib/barby/barcode/code_25_interleaved.rb', line 39

def encoding_for_pair(pair)
  bars, spaces = ENCODINGS[pair.first], ENCODINGS[pair.last]
  encoding_for_interleaved(bars.zip(spaces))
end

#start_encodingObject



56
57
58
# File 'lib/barby/barcode/code_25_interleaved.rb', line 56

def start_encoding
  encoding_for_interleaved(START_ENCODING)
end

#stop_encodingObject



60
61
62
# File 'lib/barby/barcode/code_25_interleaved.rb', line 60

def stop_encoding
  encoding_for_interleaved(STOP_ENCODING)
end

#valid?Boolean

Returns:

  • (Boolean)


65
66
67
68
# File 'lib/barby/barcode/code_25_interleaved.rb', line 65

def valid?
  #                           When checksum is included, it's included when determining "evenness"
  super && digits.size % 2 == (include_checksum? ? 1 : 0)
end