msgpack-inspect 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|