Module: Tinycode

Defined in:
lib/tinycode/module.rb,
lib/tinycode/version.rb,
lib/tinycode/fixed_integer.rb

Overview

An encoder and decoder for tinycode, which is a bencode like encoding that supports more data-types and slightly smaller encoded sizes.

Defined Under Namespace

Modules: FixedInteger Classes: ParseError, U16, U32, U64, U8

Constant Summary collapse

VERSION =
'0.1.1'

Class Method Summary collapse

Class Method Details

.dump(obj) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/tinycode/module.rb', line 12

def dump(obj)
  case obj
  when Array then dump_array(obj)
  when Hash then dump_hash(obj)
  when String then dump_string(obj)
  when Symbol then dump_symbol(obj)
  when Integer then dump_integer(obj)
  when U8 then dump_fixed_integer(obj, code: '%', pack: 'aC')
  when U16 then dump_fixed_integer(obj, code: '$', pack: 'aS>')
  when U32 then dump_fixed_integer(obj, code: '!', pack: 'aL>')
  when U64 then dump_fixed_integer(obj, code: '#', pack: 'aQ>')
  when nil then "\0".b
  when true then '?T'.b
  when false then '?F'.b
  else raise ArgumentError, "Don't know how to dump #{obj.class}"
  end
end

.load(tinycode) ⇒ Object

Raises:

  • (ArgumentError)


30
31
32
33
34
35
36
37
38
# File 'lib/tinycode/module.rb', line 30

def load(tinycode)
  raise ArgumentError, "Cannot convert #{tinycode.class} to String" if !tinycode.respond_to?(:to_str)

  tinycode = tinycode.to_str.b
  struct, length = load_with_length(tinycode)
  raise ParseError, 'Input is longer than expected' if length != tinycode.length

  struct
end