Module: Base24

Defined in:
lib/base24.rb,
lib/base24/version.rb

Defined Under Namespace

Classes: Error

Constant Summary collapse

VERSION =
"0.1.0"

Class Method Summary collapse

Class Method Details

.decode24(data) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/base24.rb', line 27

def self.decode24(data)
  raise "Data size must be multiple of 7" if data.size % 7 != 0

  data.chars.each_slice(7).reduce([]) do |result, chars|
    value =
      chars.reduce(0) do |value, char|
        idx = DECODE_MAP[char]
        raise "Invalid character" if idx.nil?
        value * ASIZE + idx
      end
    mask = 0xFF
    b0 = (value & (mask << 24)) >> 24
    b1 = (value & (mask << 16)) >> 16
    b2 = (value & (mask << 8)) >> 8
    b3 = value & mask

    result + [b0, b1, b2, b3]
  end.pack('C*')
end

.encode24(data) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/base24.rb', line 6

def self.encode24(data)
  raise "Data size must be multiple of 4" if data.size % 4 != 0

  data.unpack('C*').each_slice(4).reduce([]) do |result, slice|
    b0, b1, b2, b3 = slice

    value = b0 << 24 | b1 << 16 | b2 << 8 | b3

    sub_result, value = (0..6).reduce([[], value]) do |acc, i|
      res, value = acc
      idx = value % ASIZE
      value = value / ASIZE
      char = ENCODE_MAP[idx]

      [[char] + res, value]
    end

    result + sub_result
  end.join
end