Module: PacketGen::Inspect Private
- Defined in:
- lib/packetgen/inspect.rb
Overview
This module is part of a private API. You should avoid using this module if possible, as it may be removed or be changed in the future.
Inspect module provides methods to help writing inspect
Constant Summary collapse
- INSPECT_MAX_WIDTH =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
Maximum number of characters on a line for INSPECT
70- INSPECT_FMT_ATTR =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
Format to inspect attribute
"%10s %12s: %s\n"
Class Method Summary collapse
-
.dashed_line(name, level = 1) ⇒ String
private
Create a dashed line with
objclass writing in it. -
.inspect_attribute(attr, value, level = 1) ⇒ String
private
Format an attribute for
#inspect. - .inspect_body(body) ⇒ String private
- .int_dec_hex(value, hexsize) ⇒ String private
- .shift_level(level = 1) ⇒ String private
Class Method Details
.dashed_line(name, level = 1) ⇒ String
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Create a dashed line with obj class writing in it
18 19 20 21 |
# File 'lib/packetgen/inspect.rb', line 18 def self.dashed_line(name, level=1) str = '--' * level << " #{name} " str << '-' * (INSPECT_MAX_WIDTH - str.length) << "\n" end |
.inspect_attribute(attr, value, level = 1) ⇒ String
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Format an attribute for #inspect. 3 cases are handled:
-
attribute value is a Types::Int: show value as integer and in hexdecimal format,
-
attribute value responds to
#to_human: call it, -
else,
#to_sis used to format attribute value.
45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/packetgen/inspect.rb', line 45 def self.inspect_attribute(attr, value, level=1) str = shift_level(level) val = if value.is_a? Types::Int int_dec_hex(value, value.to_s.size * 2) elsif value.respond_to? :to_human value.to_human else value.to_s.inspect end str << INSPECT_FMT_ATTR % [value.class.to_s.sub(/.*::/, ''), attr, val] end |
.inspect_body(body) ⇒ String
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/packetgen/inspect.rb', line 59 def self.inspect_body(body) return '' if body.nil? or body.empty? str = dashed_line('Body', 2) str << (0..15).to_a.map { |v| " %02d" % v}.join << "\n" str << '-' * INSPECT_MAX_WIDTH << "\n" if body.size > 0 (body.size / 16 + 1).times do |i| octets = body.to_s[i*16, 16].unpack('C*') o_str = octets.map { |v| " %02x" % v}.join str << o_str str << ' ' * (3*16 - o_str.size) unless o_str.size >= 3*16 str << ' ' << octets.map { |v| v < 128 && v > 13 ? v.chr : '.' }.join str << "\n" end end str << '-' * INSPECT_MAX_WIDTH << "\n" end |
.int_dec_hex(value, hexsize) ⇒ String
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
31 32 33 |
# File 'lib/packetgen/inspect.rb', line 31 def self.int_dec_hex(value, hexsize) "%-10s (0x%0#{hexsize}x)" % [value.to_i, value.to_i] end |
.shift_level(level = 1) ⇒ String
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
24 25 26 |
# File 'lib/packetgen/inspect.rb', line 24 def self.shift_level(level=1) ' ' + ' ' * level end |