Module: PacketGen::Types::LengthFrom

Included in:
Array, String
Defined in:
lib/packetgen/types/length_from.rb

Overview

This module is a mixin adding length_from capacity to a type. length_from capacity is the capacity, for a type, to gets its length from another object.

Author:

  • Sylvain Daubert

Since:

  • 3.0.0

Constant Summary collapse

MAX_SZ_TO_READ =

Max value returned by #sz_to_read.

Since:

  • 3.0.0

65_535

Instance Method Summary collapse

Instance Method Details

#initialize_length_from(options) ⇒ void

This method returns an undefined value.

Initialize length from capacity. Should be call by extensed object's initialize.

Parameters:

  • options (Hash)

Options Hash (options):

  • :length_from (Types::Int, Proc)

    object or proc from which takes length when reading

Since:

  • 3.0.0


26
27
28
# File 'lib/packetgen/types/length_from.rb', line 26

def initialize_length_from(options)
  @length_from = options[:length_from]
end

#read_with_length_from(str) ⇒ String

Return a substring from str of length given in another object.

Parameters:

  • str (#to_s)

Returns:

Since:

  • 3.0.0


33
34
35
36
# File 'lib/packetgen/types/length_from.rb', line 33

def read_with_length_from(str)
  s = PacketGen.force_binary(str.to_s)
  s[0, sz_to_read]
end

#sz_to_readInteger

Size to read, from length_from

Returns:

  • (Integer)

Since:

  • 3.0.0


40
41
42
43
44
45
46
47
48
49
50
# File 'lib/packetgen/types/length_from.rb', line 40

def sz_to_read
  len = case @length_from
        when Types::Int
          @length_from.to_i
        when Proc
          @length_from.call
        else
          MAX_SZ_TO_READ
        end
  [0, len].max
end