class MessagePack::Inspect::Inspector
Constants
- FORMATS
- HEADER_ARRAY16
- HEADER_ARRAY32
- HEADER_BIN16
- HEADER_BIN32
- HEADER_BIN8
- HEADER_EXT16
- HEADER_EXT32
- HEADER_EXT8
- HEADER_FALSE
- HEADER_FIXARRAY
- HEADER_FIXEXT1
- HEADER_FIXEXT16
- HEADER_FIXEXT2
- HEADER_FIXEXT4
- HEADER_FIXEXT8
- HEADER_FIXINT_NEGATIVE
- HEADER_FIXINT_POSITIVE
- HEADER_FIXMAP
- HEADER_FIXSTR
- HEADER_FLOAT32
- HEADER_FLOAT64
- HEADER_INT16
- HEADER_INT32
- HEADER_INT64
- HEADER_INT8
- HEADER_MAP16
- HEADER_MAP32
- HEADER_NEVER_USED
- HEADER_NIL
- HEADER_STR16
- HEADER_STR32
- HEADER_STR8
- HEADER_TRUE
- HEADER_UINT16
- HEADER_UINT32
- HEADER_UINT64
- HEADER_UINT8
Public Class Methods
new(io, format = :yaml, opt={})
click to toggle source
# File lib/msgpack/inspect/inspector.rb, line 6 def initialize(io, format = :yaml, opt={}) # return_values: false, output_io: STDOUT @io = io @format = format @streamer = MessagePack::Inspect::Streamer.get(@format) @return_values = opt[:return_values] || false @output_io = opt[:output_io] || STDOUT end
Public Instance Methods
dig(depth, heading = true, first_byte = nil)
click to toggle source
# File lib/msgpack/inspect/inspector.rb, line 37 def dig(depth, heading = true, first_byte = nil) header_byte = first_byte || @io.read(1) # TODO: error handling for header_byte:nil or raised exception raise EOFError if header_byte.nil? && @io.eof? header = header_byte.b fmt = parse_header(header) node = MessagePack::Inspect::Node.new(fmt, header) node.extend @streamer node.io = @output_io node.depth = depth # Streamer#depth= node.heading = heading node.attributes(@io) if node.is_array? node.elements do |i| @streamer.object(@output_io, depth + 2, i) do obj = dig(depth + 2) # children -> array node << obj if @return_values end end elsif node.is_map? node.elements do |i| key = node.element_key do @streamer.object(@output_io, depth + 3, 0) do dig(depth + 3, false) # chilren -> array -> key end end value = node.element_value do @streamer.object(@output_io, depth + 3, 0) do dig(depth + 3, false) # children -> array -> value end end node[key] = value if @return_values end end node end
inspect()
click to toggle source
# File lib/msgpack/inspect/inspector.rb, line 15 def inspect data = [] @streamer.objects(@output_io, 0) do i = 0 begin while true first_byte = @io.read(1) break if first_byte.nil? && @io.eof? # breaking out of @streamer.object before writing object-start bytes into STDOUT @streamer.object(@output_io, 1, i) do obj = dig(1, true, first_byte) data << obj if @return_values end i += 1 end rescue EOFError # end of input end end @return_values ? data : nil end
parse_header(byte)
click to toggle source
# File lib/msgpack/inspect/inspector.rb, line 116 def parse_header(byte) value = byte.unpack('C').first case value when HEADER_FIXINT_POSITIVE, HEADER_FIXINT_NEGATIVE then :fixint when HEADER_FIXMAP then :fixmap when HEADER_FIXARRAY then :fixarray when HEADER_FIXSTR then :fixstr when HEADER_NIL then :nil when HEADER_NEVER_USED then :never_used when HEADER_FALSE then :false when HEADER_TRUE then :true when HEADER_BIN8 then :bin8 when HEADER_BIN16 then :bin16 when HEADER_BIN32 then :bin32 when HEADER_EXT8 then :ext8 when HEADER_EXT16 then :ext16 when HEADER_EXT32 then :ext32 when HEADER_FLOAT32 then :float32 when HEADER_FLOAT64 then :float64 when HEADER_UINT8 then :uint8 when HEADER_UINT16 then :uint16 when HEADER_UINT32 then :uint32 when HEADER_UINT64 then :uint64 when HEADER_INT8 then :int8 when HEADER_INT16 then :int16 when HEADER_INT32 then :int32 when HEADER_INT64 then :int64 when HEADER_FIXEXT1 then :fixext1 when HEADER_FIXEXT2 then :fixext2 when HEADER_FIXEXT4 then :fixext4 when HEADER_FIXEXT8 then :fixext8 when HEADER_FIXEXT16 then :fixext16 when HEADER_STR8 then :str8 when HEADER_STR16 then :str16 when HEADER_STR32 then :str32 when HEADER_ARRAY16 then :array16 when HEADER_ARRAY32 then :array32 when HEADER_MAP16 then :map16 when HEADER_MAP32 then :map32 else raise "never reach here." end end