msgpack-inspect 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +6 -11
- data/Rakefile +0 -1
- data/lib/msgpack/inspect/command.rb +1 -1
- data/lib/msgpack/inspect/inspector.rb +19 -10
- data/lib/msgpack/inspect/node.rb +17 -8
- data/lib/msgpack/inspect/version.rb +1 -1
- data/mrbgem.rake +12 -3
- data/mrblib/msgpack-inspect.rb +14 -3
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 56c1643fed6f78a15d1504da7a41d211c26d97bd
|
4
|
+
data.tar.gz: 5a13789e05e563e1e4591f4bd924873617da314e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 27ae13a9338558e17e318a0a220d5bdeb7cc0237bba61c1351fe03e4962898de0e7c1a181e6533dabdc61f4390198206e5809d3075e65eb67e7195211be3e65c
|
7
|
+
data.tar.gz: 40f96ca5d376e78a9973ad01ae0a1c885c2b1becf99453ca2bbb2f3f59e917e9e6cbe6562f7c50f248f5e9737b64cf737f99c18830bfe590137e730ca3d356e7
|
data/README.md
CHANGED
@@ -4,17 +4,9 @@ This is a command line tool to inspect/show a data serialized by [MessagePack](h
|
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
7
|
-
|
7
|
+
Executable binary files are available from [releases](https://github.com/tagomoris/msgpack-inspect/releases). Download a file for your platform, and use it.
|
8
8
|
|
9
|
-
|
10
|
-
gem 'msgpack-inspect'
|
11
|
-
```
|
12
|
-
|
13
|
-
And then execute:
|
14
|
-
|
15
|
-
$ bundle
|
16
|
-
|
17
|
-
Or install it yourself as:
|
9
|
+
Otherwise, you can install rubygem version on your CRuby runtime:
|
18
10
|
|
19
11
|
$ gem install msgpack-inspect
|
20
12
|
|
@@ -25,11 +17,14 @@ Usage: msgpack-inspect [options] FILE
|
|
25
17
|
|
26
18
|
Options:
|
27
19
|
|
28
|
-
-f, --format FORMAT output format of inspection result (yaml/json) [default: yaml]
|
20
|
+
-f, --format FORMAT output format of inspection result (yaml/json/jsonl) [default: yaml]
|
29
21
|
-r, --require LIB ruby file path to require (to load ext type definitions)
|
22
|
+
-v, --version Show version of this software
|
30
23
|
-h, --help Show this message
|
31
24
|
```
|
32
25
|
|
26
|
+
`-r` option is available oly with rubygem version, and unavailable with mruby binary release.
|
27
|
+
|
33
28
|
FILE is a file which msgpack binary stored. Specify `-` to inspect data from STDIN.
|
34
29
|
This command shows the all data contained in specified format (YAML in default).
|
35
30
|
|
data/Rakefile
CHANGED
@@ -13,7 +13,7 @@ module MessagePack
|
|
13
13
|
opts.separator ""
|
14
14
|
opts.separator "Options:"
|
15
15
|
opts.separator ""
|
16
|
-
opts.on("-f", "--format FORMAT", "output format of inspection result (
|
16
|
+
opts.on("-f", "--format FORMAT", "output format of inspection result (#{MessagePack::Inspect::FORMATS.compact.join('/')}) [default: yaml]") do |v|
|
17
17
|
format = v.to_sym
|
18
18
|
end
|
19
19
|
opts.on("-r", "--require LIB", "ruby file path to require (to load ext type definitions)") do |path|
|
@@ -3,33 +3,42 @@ module MessagePack
|
|
3
3
|
class Inspector
|
4
4
|
FORMATS = [:yaml, :json, :jsonl, nil] # nil is for test (without stream dump)
|
5
5
|
|
6
|
-
def initialize(io, format = :yaml, opt)
|
6
|
+
def initialize(io, format = :yaml, opt={})
|
7
7
|
# return_values: false, output_io: STDOUT
|
8
8
|
@io = io
|
9
9
|
@format = format
|
10
10
|
@streamer = MessagePack::Inspect::Streamer.get(@format)
|
11
|
-
@return_values = opt
|
12
|
-
@output_io = opt
|
11
|
+
@return_values = opt[:return_values] || false
|
12
|
+
@output_io = opt[:output_io] || STDOUT
|
13
13
|
end
|
14
14
|
|
15
15
|
def inspect
|
16
16
|
data = []
|
17
17
|
@streamer.objects(@output_io, 0) do
|
18
18
|
i = 0
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
19
|
+
begin
|
20
|
+
while true
|
21
|
+
first_byte = @io.read(1)
|
22
|
+
break if first_byte.nil? && @io.eof?
|
23
|
+
# breaking out of @streamer.object before writing object-start bytes into STDOUT
|
24
|
+
@streamer.object(@output_io, 1, i) do
|
25
|
+
obj = dig(1, true, first_byte)
|
26
|
+
data << obj if @return_values
|
27
|
+
end
|
28
|
+
i += 1
|
23
29
|
end
|
24
|
-
|
30
|
+
rescue EOFError
|
31
|
+
# end of input
|
25
32
|
end
|
26
33
|
end
|
27
34
|
@return_values ? data : nil
|
28
35
|
end
|
29
36
|
|
30
|
-
def dig(depth, heading = true)
|
31
|
-
header_byte = @io.read(1)
|
37
|
+
def dig(depth, heading = true, first_byte = nil)
|
38
|
+
header_byte = first_byte || @io.read(1)
|
32
39
|
# TODO: error handling for header_byte:nil or raised exception
|
40
|
+
raise EOFError if header_byte.nil? && @io.eof?
|
41
|
+
|
33
42
|
header = header_byte.b
|
34
43
|
fmt = parse_header(header)
|
35
44
|
node = MessagePack::Inspect::Node.new(fmt, header)
|
data/lib/msgpack/inspect/node.rb
CHANGED
@@ -149,7 +149,9 @@ module MessagePack
|
|
149
149
|
v1 = io.read(4)
|
150
150
|
v2 = io.read(4)
|
151
151
|
@data = hex(v1) + hex(v2)
|
152
|
-
|
152
|
+
# mruby doesn't have Bignum, and Float doesn't support #|
|
153
|
+
# @value = (v1.unpack('N').first << 32) | v2.unpack('N').first
|
154
|
+
@value = (v1.unpack('N').first << 32) + v2.unpack('N').first
|
153
155
|
when :int8
|
154
156
|
v = io.read(1)
|
155
157
|
@data = hex(v)
|
@@ -176,11 +178,18 @@ module MessagePack
|
|
176
178
|
v1 = io.read(4)
|
177
179
|
v2 = io.read(4)
|
178
180
|
@data = hex(v1) + hex(v2)
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
181
|
+
# mruby doesn't have Bignum, and Float doesn't support #|
|
182
|
+
# n = (v1.unpack('N').first << 32) | v2.unpack('N').first
|
183
|
+
# @value = if n & 0x8000_0000_0000_0000 > 0 # negative
|
184
|
+
# n - MAX_INT64
|
185
|
+
# else
|
186
|
+
# n
|
187
|
+
# end
|
188
|
+
upper = v1.unpack('N').first
|
189
|
+
@value = if upper & 0x8000_0000 > 0 # negative
|
190
|
+
(upper << 32) + v2.unpack('N').first - MAX_INT64
|
191
|
+
else # positive
|
192
|
+
(upper << 32) + v2.unpack('N').first
|
184
193
|
end
|
185
194
|
else
|
186
195
|
raise "unknown int format #{@format}"
|
@@ -220,8 +229,8 @@ module MessagePack
|
|
220
229
|
if [:fixstr, :str8, :str16, :str32].include?(@format)
|
221
230
|
begin
|
222
231
|
@value = v.force_encoding('UTF-8')
|
223
|
-
rescue
|
224
|
-
@error =
|
232
|
+
rescue => e
|
233
|
+
@error = e.message
|
225
234
|
end
|
226
235
|
else
|
227
236
|
@value = v.b
|
data/mrbgem.rake
CHANGED
@@ -1,10 +1,19 @@
|
|
1
|
-
require_relative 'mrblib/msgpack/inspect/version
|
1
|
+
require_relative 'lib/msgpack/inspect/version' # mrblib/msgpack/inspect/version is symlink to that file
|
2
2
|
|
3
3
|
spec = MRuby::Gem::Specification.new('msgpack-inspect') do |spec|
|
4
|
+
spec.rbfiles = [
|
5
|
+
"mrblib/msgpack/inspect/version.rb",
|
6
|
+
"mrblib/msgpack/inspect/node.rb",
|
7
|
+
"mrblib/msgpack/inspect/streamer.rb",
|
8
|
+
"mrblib/msgpack/inspect/inspector.rb",
|
9
|
+
"mrblib/msgpack/inspect.rb",
|
10
|
+
"mrblib/msgpack-inspect.rb",
|
11
|
+
]
|
4
12
|
spec.bins = ['msgpack-inspect']
|
5
13
|
spec.add_dependency 'mruby-io', mgem: 'mruby-io'
|
6
|
-
spec.add_dependency 'mruby-
|
7
|
-
spec.add_dependency 'mruby-
|
14
|
+
spec.add_dependency 'mruby-pack', mgem: 'mruby-pack'
|
15
|
+
spec.add_dependency 'mruby-print', core: 'mruby-print'
|
16
|
+
spec.add_dependency 'mruby-mtest', mgem: 'mruby-mtest'
|
8
17
|
end
|
9
18
|
|
10
19
|
spec.license = 'Apache-2.0'
|
data/mrblib/msgpack-inspect.rb
CHANGED
@@ -1,9 +1,20 @@
|
|
1
|
+
class String
|
2
|
+
# It's only for mruby... Encoding of String are defined by MRB_UTF8_STRING (or undef it) on build time.
|
3
|
+
# Default is disabled, and this tool is built under that configuration.
|
4
|
+
def force_encoding(encoding)
|
5
|
+
self
|
6
|
+
end
|
7
|
+
def b
|
8
|
+
self
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
1
12
|
def show_usage
|
2
13
|
msg = <<-EOL
|
3
14
|
Usage: msgpack-inspect [options] FILE"
|
4
15
|
|
5
16
|
Options:
|
6
|
-
-f, --format FORMAT Output format of inspection result (
|
17
|
+
-f, --format FORMAT Output format of inspection result (#{MessagePack::Inspect::FORMATS.reject{|v| v.nil? }.join('/')}) [default: yaml]
|
7
18
|
-r, --require LIB (Not supported in binary executable)
|
8
19
|
-h, --help Show this message
|
9
20
|
-v, --version Show version of this software
|
@@ -36,7 +47,7 @@ def __main__(argv)
|
|
36
47
|
arg = argv.shift
|
37
48
|
if arg == '--'
|
38
49
|
parsing_option = false
|
39
|
-
elsif arg
|
50
|
+
elsif arg[0] == '-' && arg.length > 1
|
40
51
|
show_usage
|
41
52
|
raise "Unknown option specified: #{arg}"
|
42
53
|
else
|
@@ -62,5 +73,5 @@ def __main__(argv)
|
|
62
73
|
show_usage
|
63
74
|
raise "Unsupported format: #{format}"
|
64
75
|
end
|
65
|
-
|
76
|
+
MessagePack::Inspect.inspect(io, format).inspect
|
66
77
|
end
|