hexdump 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +5 -6
- data/.gitignore +1 -0
- data/.yardopts +1 -1
- data/ChangeLog.md +11 -4
- data/Gemfile +2 -0
- data/LICENSE.txt +1 -1
- data/README.md +31 -19
- data/gemspec.yml +2 -1
- data/hexdump.gemspec +1 -4
- data/lib/hexdump/core_ext/file.rb +2 -2
- data/lib/hexdump/core_ext/io.rb +1 -1
- data/lib/hexdump/core_ext/kernel.rb +2 -4
- data/lib/hexdump/core_ext/string.rb +1 -1
- data/lib/hexdump/core_ext/string_io.rb +1 -1
- data/lib/hexdump/core_ext.rb +5 -5
- data/lib/hexdump/hexdump.rb +13 -15
- data/lib/hexdump/mixin.rb +1 -7
- data/lib/hexdump/module_methods.rb +1 -1
- data/lib/hexdump/numeric/binary.rb +2 -2
- data/lib/hexdump/numeric/char_or_int.rb +8 -3
- data/lib/hexdump/numeric/decimal.rb +1 -1
- data/lib/hexdump/numeric/hexadecimal.rb +1 -1
- data/lib/hexdump/numeric/octal.rb +2 -2
- data/lib/hexdump/numeric.rb +5 -5
- data/lib/hexdump/reader.rb +14 -15
- data/lib/hexdump/theme/ansi.rb +2 -1
- data/lib/hexdump/theme/rule.rb +1 -1
- data/lib/hexdump/theme.rb +1 -1
- data/lib/hexdump/type.rb +4 -3
- data/lib/hexdump/types.rb +9 -9
- data/lib/hexdump/version.rb +1 -1
- data/lib/hexdump.rb +3 -3
- data/spec/core_ext_spec.rb +1 -1
- data/spec/format_string_spec.rb +22 -0
- data/spec/reader_spec.rb +62 -59
- data/spec/spec_helper.rb +2 -0
- data/spec/types_spec.rb +8 -8
- metadata +6 -5
- data/lib/hexdump/extensions.rb +0 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7f797d519e67c6284088b0052bc49a75b7fb7b7588d1cdc8b01d017039272c77
|
4
|
+
data.tar.gz: d1920db1ac10b3b2d07bcc3a5423f0764751eb6d2ac64e2e5ddb09ed14cf6e4d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a2e74dcd20c447a3ce959a7af67b65bcaa95a1805c56d9ea205b106d6a04547ff8dd642ae94b5c09213c5356222d7818782805dd38ad7d4b37b6254c9047c218
|
7
|
+
data.tar.gz: b70d82e23d3eeab44dcec8e617198fad89cec5052a37d421d8bdc9ffaf128af6a03a0babca98105c9a8ac1c92406fe956c01426c292be56524a9ad41b79417cd
|
data/.github/workflows/ruby.yml
CHANGED
@@ -9,16 +9,15 @@ jobs:
|
|
9
9
|
fail-fast: false
|
10
10
|
matrix:
|
11
11
|
ruby:
|
12
|
-
-
|
13
|
-
-
|
14
|
-
- 2
|
15
|
-
-
|
16
|
-
- 3.0
|
12
|
+
- '3.0'
|
13
|
+
- '3.1'
|
14
|
+
- '3.2'
|
15
|
+
- '3.3'
|
17
16
|
- jruby
|
18
17
|
- truffleruby
|
19
18
|
name: Ruby ${{ matrix.ruby }}
|
20
19
|
steps:
|
21
|
-
- uses: actions/checkout@
|
20
|
+
- uses: actions/checkout@v4
|
22
21
|
- name: Set up Ruby
|
23
22
|
uses: ruby/setup-ruby@v1
|
24
23
|
with:
|
data/.gitignore
CHANGED
data/.yardopts
CHANGED
@@ -1 +1 @@
|
|
1
|
-
--markup markdown --title "hexdump Documentation" --protected
|
1
|
+
--markup markdown --title "hexdump Documentation" --protected
|
data/ChangeLog.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
### 1.0.1 / 2024-01-23
|
2
|
+
|
3
|
+
* Switched to using `require_relative` to improve load-times.
|
4
|
+
* Correctly alias `:long`/`:ulong` to `:int32`/`:uint32`.
|
5
|
+
* Disable ANSI styling in {Hexdump#hexdump} if the output is not a TTY.
|
6
|
+
* Removed the old `hexdump/extensions` file in favor of `hexdump/core_ext`.
|
7
|
+
|
1
8
|
### 1.0.0 / 2021-08-31
|
2
9
|
|
3
10
|
* Added the ability to hexdump typed data. Available `type:`s are :
|
@@ -68,10 +75,10 @@
|
|
68
75
|
|
69
76
|
* Require Ruby >= 2.0.0.
|
70
77
|
* Added support for Ruby 3.0.
|
71
|
-
* {Hexdump.dump}, {Hexdump#dump}, and
|
78
|
+
* {Hexdump.dump}, {Hexdump#dump}, and `Hexdump::Dumper#initialize` now accept
|
72
79
|
keyword arguments.
|
73
|
-
*
|
74
|
-
*
|
80
|
+
* `Hexdump::Dumper#each` now returns the total number of bytes read.
|
81
|
+
* `Hexdump::Dumper#dump` now prints the final number of bytes read on the last
|
75
82
|
line.
|
76
83
|
* Micro-optimizations to improve performance on JRuby and TruffleRuby.
|
77
84
|
|
@@ -102,7 +109,7 @@
|
|
102
109
|
|
103
110
|
### 0.2.0 / 2011-06-11
|
104
111
|
|
105
|
-
* Added
|
112
|
+
* Added `Hexdump::Dumper`.
|
106
113
|
* Added support for hexdumping 1, 2, 4, 8 byte words.
|
107
114
|
* Added support for hexdumping Little and Big Endian words.
|
108
115
|
* Optimized the hexdump algorithm to not use Arrays, use a lookup table
|
data/Gemfile
CHANGED
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
# hexdump.rb
|
2
2
|
|
3
3
|
[![CI](https://github.com/postmodern/hexdump.rb/actions/workflows/ruby.yml/badge.svg)](https://github.com/postmodern/hexdump.rb/actions/workflows/ruby.yml)
|
4
|
+
[![Gem Version](https://badge.fury.io/rb/hexdump.svg)](https://badge.fury.io/rb/hexdump)
|
4
5
|
|
5
6
|
* [Source](https://github.com/postmodern/hexdump.rb)
|
6
7
|
* [Issues](https://github.com/postmodern/hexdump.rb/issues)
|
7
|
-
* [Documentation](
|
8
|
+
* [Documentation](https://rubydoc.info/gems/hexdump)
|
8
9
|
|
9
10
|
## Description
|
10
11
|
|
11
|
-
|
12
|
+
Fully Featured and Fast hexdumping for Ruby.
|
12
13
|
|
13
14
|
## Features
|
14
15
|
|
@@ -27,24 +28,29 @@ Simple and Fast hexdumping for Ruby.
|
|
27
28
|
* `uint16_le` / `ushort_le` - unsigned 16bit integer (little endian)
|
28
29
|
* `uint16_be` / `ushort_be` - unsigned 16bit integer (big endian)
|
29
30
|
* `uint16_ne` / `ushort_ne` - unsigned 16bit integer (network endian)
|
30
|
-
* `int32` / `int`
|
31
|
-
* `int32_le` / `int_le`
|
32
|
-
* `int32_be` / `int_be`
|
33
|
-
* `int32_ne` / `int_ne`
|
34
|
-
* `uint32` / `uint` /
|
35
|
-
* `uint32_le` / `uint_le`
|
31
|
+
* `int32` / `int` - signed 32bit integer
|
32
|
+
* `int32_le` / `int_le` - signed 32bit integer (little endian)
|
33
|
+
* `int32_be` / `int_be` - signed 32bit integer (big endian)
|
34
|
+
* `int32_ne` / `int_ne` - signed 32bit integer (network endian)
|
35
|
+
* `uint32` / `uint` / - unsigned 32bit integer
|
36
|
+
* `uint32_le` / `uint_le` - unsigned 32bit integer
|
36
37
|
(little endian)
|
37
|
-
* `uint32_be` / `uint_be`
|
38
|
-
* `uint32_ne` / `uint_ne`
|
38
|
+
* `uint32_be` / `uint_be` - unsigned 32bit integer (big endian)
|
39
|
+
* `uint32_ne` / `uint_ne` - unsigned 32bit integer
|
40
|
+
(network endian)
|
41
|
+
* `int64` / `long` / `long_long` - signed 64bit integer
|
42
|
+
* `int64_le` / `long_le` / `long_long_le` - signed 64bit integer
|
43
|
+
(little endian)
|
44
|
+
* `int64_be` / `long_be` / `long_long_be` - signed 64bit integer (big endian)
|
45
|
+
* `int64_ne` / `long_ne` / `long_long_ne` - signed 64bit integer
|
46
|
+
(network endian)
|
47
|
+
* `uint64` `ulong` / `ulong_long` - unsigned 64bit integer
|
48
|
+
* `uint64_le` / `ulong_le` / `ulong_long_le` - unsigned 64bit integer
|
49
|
+
(little endian)
|
50
|
+
* `uint64_be` / `ulong_be` / `ulong_long_be` - unsigned 64bit integer
|
51
|
+
(big endian)
|
52
|
+
* `uint64_ne` / `ulong_ne` / `ulong_long_ne` - unsigned 64bit integer
|
39
53
|
(network endian)
|
40
|
-
* `int64` / `long_long` - signed 64bit integer
|
41
|
-
* `int64_le` / `long_long_le` - signed 64bit integer (little endian)
|
42
|
-
* `int64_be` / `long_long_be` - signed 64bit integer (big endian)
|
43
|
-
* `int64_ne` / `long_long_ne` - signed 64bit integer (network endian)
|
44
|
-
* `uint64` / `ulong_long` - unsigned 64bit integer
|
45
|
-
* `uint64_le` / `ulong_long_le` - unsigned 64bit integer (little endian)
|
46
|
-
* `uint64_be` / `ulong_long_be` - unsigned 64bit integer (big endian)
|
47
|
-
* `uint64_ne` / `ulong_long_ne` - unsigned 64bit integer (network endian)
|
48
54
|
* `float` - single precision 32bit floating-point number
|
49
55
|
* `float_le` - single precision 32bit floating-point number (little endian)
|
50
56
|
* `float_be` - single precision 32bit floating-point number (big endian)
|
@@ -66,6 +72,12 @@ Simple and Fast hexdumping for Ruby.
|
|
66
72
|
* Makes {String}, {StringIO}, {IO}, {File} objects hexdumpable.
|
67
73
|
* Fast-ish.
|
68
74
|
|
75
|
+
## Requirements
|
76
|
+
|
77
|
+
* [Ruby] >= 2.0.0
|
78
|
+
|
79
|
+
[Ruby]: https://www.ruby-lang.org/
|
80
|
+
|
69
81
|
## Install
|
70
82
|
|
71
83
|
```shell
|
@@ -241,7 +253,7 @@ Hexdump.hexdump("ABCD" * 7, type: :uint32_be)
|
|
241
253
|
### Int Type
|
242
254
|
|
243
255
|
```ruby
|
244
|
-
Hexdump.hexdump([65535, -1].pack("LL"), type: :
|
256
|
+
Hexdump.hexdump([65535, -1].pack("LL"), type: :int32, base: 10)
|
245
257
|
# 00000000 65535 -1 |........|
|
246
258
|
# 00000008
|
247
259
|
```
|
data/gemspec.yml
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
name: hexdump
|
2
2
|
summary: Hexdump Strings and IO objects.
|
3
|
-
description:
|
3
|
+
description: Fully Featured and Fast hexdumping for Ruby.
|
4
4
|
license: MIT
|
5
5
|
authors: Postmodern
|
6
6
|
email: postmodern.mod3@gmail.com
|
@@ -12,6 +12,7 @@ metadata:
|
|
12
12
|
source_code_uri: https://github.com/postmodern/hexdump.rb
|
13
13
|
bug_tracker_uri: https://github.com/postmodern/hexdump.rb/issues
|
14
14
|
changelog_uri: https://github.com/postmodern/hexdump.rb/blob/master/ChangeLog.md
|
15
|
+
rubygems_mfa_required: 'true'
|
15
16
|
|
16
17
|
required_ruby_version: ">= 2.0.0"
|
17
18
|
|
data/hexdump.gemspec
CHANGED
@@ -7,10 +7,7 @@ Gem::Specification.new do |gem|
|
|
7
7
|
|
8
8
|
gem.name = gemspec.fetch('name')
|
9
9
|
gem.version = gemspec.fetch('version') do
|
10
|
-
|
11
|
-
$LOAD_PATH << lib_dir unless $LOAD_PATH.include?(lib_dir)
|
12
|
-
|
13
|
-
require 'hexdump/version'
|
10
|
+
require_relative 'lib/hexdump/version'
|
14
11
|
Hexdump::VERSION
|
15
12
|
end
|
16
13
|
|
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
require_relative 'io'
|
2
2
|
|
3
3
|
class File
|
4
4
|
|
@@ -9,7 +9,7 @@ class File
|
|
9
9
|
# The path of the file.
|
10
10
|
#
|
11
11
|
# @param [Hash{Symbol => Object}] kwargs
|
12
|
-
# Additional keyword arguments for {
|
12
|
+
# Additional keyword arguments for {Hexdump::Hexdump#initialize}.
|
13
13
|
#
|
14
14
|
# @option kwargs [#print] :output ($stdout)
|
15
15
|
# The output to print the hexdump to.
|
data/lib/hexdump/core_ext/io.rb
CHANGED
data/lib/hexdump/core_ext.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
require_relative 'core_ext/string'
|
2
|
+
require_relative 'core_ext/string_io'
|
3
|
+
require_relative 'core_ext/io'
|
4
|
+
require_relative 'core_ext/file'
|
5
|
+
require_relative 'core_ext/kernel'
|
data/lib/hexdump/hexdump.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
3
|
+
require_relative 'types'
|
4
|
+
require_relative 'reader'
|
5
|
+
require_relative 'numeric'
|
6
|
+
require_relative 'chars'
|
7
|
+
require_relative 'theme'
|
8
8
|
|
9
9
|
module Hexdump
|
10
10
|
#
|
@@ -93,7 +93,7 @@ module Hexdump
|
|
93
93
|
# @param [Integer] index_offset
|
94
94
|
# The offset to start the index at.
|
95
95
|
#
|
96
|
-
# @param [Boolean]
|
96
|
+
# @param [Boolean] chars_column
|
97
97
|
# Controls whether to display the characters column.
|
98
98
|
#
|
99
99
|
# @param [:ascii, :utf8, Encoding, nil] encoding
|
@@ -481,16 +481,14 @@ module Hexdump
|
|
481
481
|
# The given block will be passed the hexdump break-down of each
|
482
482
|
# row.
|
483
483
|
#
|
484
|
-
# @yieldparam [Integer
|
484
|
+
# @yieldparam [Integer] index
|
485
485
|
# The index of the hexdumped row.
|
486
|
-
# If the index is `'*'`, then it indicates the beginning of repeating
|
487
|
-
# rows of data.
|
488
486
|
#
|
489
487
|
# @yieldparam [Array<Integer>, Array<Float>] values
|
490
488
|
# The decoded values.
|
491
489
|
#
|
492
|
-
# @yieldparam [String] chars
|
493
|
-
#
|
490
|
+
# @yieldparam [Array<String>, nil] chars
|
491
|
+
# The underlying raw characters that were read.
|
494
492
|
#
|
495
493
|
# @return [Integer, Enumerator]
|
496
494
|
# If a block is given, then the final number of bytes read is returned.
|
@@ -584,7 +582,7 @@ module Hexdump
|
|
584
582
|
# The given block will be passed the hexdump break-down of each
|
585
583
|
# row.
|
586
584
|
#
|
587
|
-
# @yieldparam [
|
585
|
+
# @yieldparam [String] index
|
588
586
|
# The index of the hexdumped row.
|
589
587
|
# If the index is `'*'`, then it indicates the beginning of repeating
|
590
588
|
# rows of data.
|
@@ -592,7 +590,7 @@ module Hexdump
|
|
592
590
|
# @yieldparam [Array<String>, nil] numeric
|
593
591
|
# The numeric representation of the row.
|
594
592
|
#
|
595
|
-
# @yieldparam [
|
593
|
+
# @yieldparam [String, nil] chars
|
596
594
|
# The printable representation of the row.
|
597
595
|
#
|
598
596
|
# @return [String, Enumerator]
|
@@ -736,7 +734,7 @@ module Hexdump
|
|
736
734
|
# @param [#each_byte] data
|
737
735
|
# The data to be hexdumped.
|
738
736
|
#
|
739
|
-
# @param [
|
737
|
+
# @param [#<<] output
|
740
738
|
# The output to dump the hexdump to.
|
741
739
|
#
|
742
740
|
# @return [nil]
|
@@ -749,7 +747,7 @@ module Hexdump
|
|
749
747
|
raise(ArgumentError,"output must support the #<< method")
|
750
748
|
end
|
751
749
|
|
752
|
-
ansi = theme? &&
|
750
|
+
ansi = theme? && output.tty?
|
753
751
|
|
754
752
|
each_line(data, ansi: ansi) do |line|
|
755
753
|
output << line
|
data/lib/hexdump/mixin.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
require_relative 'hexdump'
|
2
2
|
|
3
3
|
module Hexdump
|
4
4
|
#
|
@@ -27,9 +27,6 @@ module Hexdump
|
|
27
27
|
# @param [#print] output ($stdout)
|
28
28
|
# The output to print the hexdump to.
|
29
29
|
#
|
30
|
-
# @param [Integer] offset
|
31
|
-
# The offset to start the index at.
|
32
|
-
#
|
33
30
|
# @param [Hash{Symbol => Object}] kwargs
|
34
31
|
# Additional keyword arguments for {Hexdump#initialize}.
|
35
32
|
#
|
@@ -114,9 +111,6 @@ module Hexdump
|
|
114
111
|
#
|
115
112
|
# Outputs the hexdump to a String.
|
116
113
|
#
|
117
|
-
# @param [Integer] offset
|
118
|
-
# The offset to start the index at.
|
119
|
-
#
|
120
114
|
# @param [Hash{Symbol => Object}] kwargs
|
121
115
|
# Additional keyword arguments for {Hexdump#initialize}.
|
122
116
|
#
|
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
require_relative '../format_string'
|
2
2
|
|
3
3
|
module Hexdump
|
4
4
|
module Numeric
|
@@ -9,7 +9,7 @@ module Hexdump
|
|
9
9
|
#
|
10
10
|
class CharOrInt < FormatString
|
11
11
|
|
12
|
-
# @return [
|
12
|
+
# @return [Hexadecimal, Decimal, Octal, Binary]
|
13
13
|
attr_reader :base
|
14
14
|
|
15
15
|
# @return [Encoding, nil]
|
@@ -18,7 +18,7 @@ module Hexdump
|
|
18
18
|
#
|
19
19
|
# Initializes the character format.
|
20
20
|
#
|
21
|
-
# @param [
|
21
|
+
# @param [Hexadecimal, Decimal, Octal, Binary] base
|
22
22
|
# The numeric base format to fallback to if a value does not map to a
|
23
23
|
# character.
|
24
24
|
#
|
@@ -32,6 +32,11 @@ module Hexdump
|
|
32
32
|
super("%#{@base.width}s")
|
33
33
|
end
|
34
34
|
|
35
|
+
#
|
36
|
+
# The string width associated with the numeric base.
|
37
|
+
#
|
38
|
+
# @return [Integer]
|
39
|
+
#
|
35
40
|
def width
|
36
41
|
@base.width
|
37
42
|
end
|
data/lib/hexdump/numeric.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
require_relative 'numeric/binary'
|
2
|
+
require_relative 'numeric/octal'
|
3
|
+
require_relative 'numeric/decimal'
|
4
|
+
require_relative 'numeric/hexadecimal'
|
5
|
+
require_relative 'numeric/char_or_int'
|
data/lib/hexdump/reader.rb
CHANGED
@@ -32,7 +32,8 @@ module Hexdump
|
|
32
32
|
# The type to decode the data as.
|
33
33
|
#
|
34
34
|
# @param [Integer, nil] offset
|
35
|
-
# Controls whether to offset N number of bytes before starting to read
|
35
|
+
# Controls whether to offset N number of bytes before starting to read
|
36
|
+
# data.
|
36
37
|
#
|
37
38
|
# @param [Integer, nil] length
|
38
39
|
# Controls control many bytes to read.
|
@@ -103,8 +104,6 @@ module Hexdump
|
|
103
104
|
raise(ArgumentError,"the given data must respond to #each_byte")
|
104
105
|
end
|
105
106
|
|
106
|
-
count = 0
|
107
|
-
|
108
107
|
if @type.size == 1
|
109
108
|
each_byte(data) do |b|
|
110
109
|
yield b.chr
|
@@ -133,7 +132,7 @@ module Hexdump
|
|
133
132
|
|
134
133
|
yield buffer
|
135
134
|
else
|
136
|
-
# yield the
|
135
|
+
# yield the remaining partial buffer
|
137
136
|
yield buffer[0,index]
|
138
137
|
end
|
139
138
|
end
|
@@ -173,24 +172,24 @@ module Hexdump
|
|
173
172
|
when :little then 'S<'
|
174
173
|
when :big then 'S>'
|
175
174
|
else
|
176
|
-
raise(TypeError,"unsupported endian #{@type.endian} for #{@type.
|
175
|
+
raise(TypeError,"unsupported endian #{@type.endian} for #{@type.inspect}")
|
177
176
|
end
|
178
177
|
when 4
|
179
178
|
case @type.endian
|
180
179
|
when :little then 'L<'
|
181
180
|
when :big then 'L>'
|
182
181
|
else
|
183
|
-
raise(TypeError,"unsupported endian #{@type.endian} for #{@type.
|
182
|
+
raise(TypeError,"unsupported endian #{@type.endian} for #{@type.inspect}")
|
184
183
|
end
|
185
184
|
when 8
|
186
185
|
case @type.endian
|
187
186
|
when :little then 'Q<'
|
188
187
|
when :big then 'Q>'
|
189
188
|
else
|
190
|
-
raise(TypeError,"unsupported endian #{@type.endian} for #{@type.
|
189
|
+
raise(TypeError,"unsupported endian #{@type.endian} for #{@type.inspect}")
|
191
190
|
end
|
192
191
|
else
|
193
|
-
raise(TypeError,"unsupported type size #{@type.size} for #{@type.
|
192
|
+
raise(TypeError,"unsupported type size #{@type.size} for #{@type.inspect}")
|
194
193
|
end
|
195
194
|
|
196
195
|
each_slice(data) do |slice|
|
@@ -221,24 +220,24 @@ module Hexdump
|
|
221
220
|
when :little then 's<'
|
222
221
|
when :big then 's>'
|
223
222
|
else
|
224
|
-
raise(TypeError,"unsupported endian #{@type.endian} for #{@type.
|
223
|
+
raise(TypeError,"unsupported endian #{@type.endian} for #{@type.inspect}")
|
225
224
|
end
|
226
225
|
when 4
|
227
226
|
case @type.endian
|
228
227
|
when :little then 'l<'
|
229
228
|
when :big then 'l>'
|
230
229
|
else
|
231
|
-
raise(TypeError,"unsupported endian #{@type.endian} for #{@type.
|
230
|
+
raise(TypeError,"unsupported endian #{@type.endian} for #{@type.inspect}")
|
232
231
|
end
|
233
232
|
when 8
|
234
233
|
case @type.endian
|
235
234
|
when :little then 'q<'
|
236
235
|
when :big then 'q>'
|
237
236
|
else
|
238
|
-
raise(TypeError,"unsupported endian #{@type.endian} for #{@type.
|
237
|
+
raise(TypeError,"unsupported endian #{@type.endian} for #{@type.inspect}")
|
239
238
|
end
|
240
239
|
else
|
241
|
-
raise(TypeError,"unsupported type size #{@type.size} for #{@type.
|
240
|
+
raise(TypeError,"unsupported type size #{@type.size} for #{@type.inspect}")
|
242
241
|
end
|
243
242
|
|
244
243
|
each_slice(data) do |slice|
|
@@ -266,17 +265,17 @@ module Hexdump
|
|
266
265
|
when 4 then 'e'
|
267
266
|
when 8 then 'E'
|
268
267
|
else
|
269
|
-
raise(TypeError,"unsupported type size #{@type.size} for #{@type.
|
268
|
+
raise(TypeError,"unsupported type size #{@type.size} for #{@type.inspect}")
|
270
269
|
end
|
271
270
|
when :big
|
272
271
|
case @type.size
|
273
272
|
when 4 then 'g'
|
274
273
|
when 8 then 'G'
|
275
274
|
else
|
276
|
-
raise(TypeError,"unsupported type size #{@type.size} for #{@type.
|
275
|
+
raise(TypeError,"unsupported type size #{@type.size} for #{@type.inspect}")
|
277
276
|
end
|
278
277
|
else
|
279
|
-
raise(TypeError,"unsupported endian #{@type.endian} for #{@type.
|
278
|
+
raise(TypeError,"unsupported endian #{@type.endian} for #{@type.inspect}")
|
280
279
|
end
|
281
280
|
|
282
281
|
each_slice(data) do |slice|
|
data/lib/hexdump/theme/ansi.rb
CHANGED
@@ -52,7 +52,8 @@ module Hexdump
|
|
52
52
|
#
|
53
53
|
# Initializes an ANSI control sequence.
|
54
54
|
#
|
55
|
-
# @param [Symbol, Array<Symbol>]
|
55
|
+
# @param [Symbol, Array<Symbol>] parameters
|
56
|
+
# The ANSI styling parameters. See {PARAMETERS}.
|
56
57
|
#
|
57
58
|
def initialize(parameters)
|
58
59
|
@parameters = parameters
|
data/lib/hexdump/theme/rule.rb
CHANGED
data/lib/hexdump/theme.rb
CHANGED
data/lib/hexdump/type.rb
CHANGED
@@ -19,13 +19,14 @@ module Hexdump
|
|
19
19
|
#
|
20
20
|
# Initializes the type.
|
21
21
|
#
|
22
|
-
# @param [
|
22
|
+
# @param [1, 2, 4, 8] size
|
23
|
+
# The type's size in bytes.
|
23
24
|
#
|
24
25
|
# @param [:little, :big, nil] endian
|
25
|
-
#
|
26
|
-
# @param [1, 2, 4, 8] size
|
26
|
+
# The endianness of the type. `nil` indicates the type has no endianness.
|
27
27
|
#
|
28
28
|
# @param [Boolean] signed
|
29
|
+
# Indicates whether the type is signed or unsigned.
|
29
30
|
#
|
30
31
|
# @raise [ArgumentError]
|
31
32
|
# Invalid `endian:` or `size:` values.
|
data/lib/hexdump/types.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
require_relative 'type'
|
2
2
|
|
3
3
|
module Hexdump
|
4
4
|
#
|
@@ -76,15 +76,15 @@ module Hexdump
|
|
76
76
|
TYPES[:uint_be] = TYPES[:uint32_be]
|
77
77
|
TYPES[:uint_ne] = TYPES[:uint32_ne]
|
78
78
|
|
79
|
-
TYPES[:long] = TYPES[:
|
80
|
-
TYPES[:long_le] = TYPES[:
|
81
|
-
TYPES[:long_be] = TYPES[:
|
82
|
-
TYPES[:long_ne] = TYPES[:
|
79
|
+
TYPES[:long] = TYPES[:int64]
|
80
|
+
TYPES[:long_le] = TYPES[:int64_le]
|
81
|
+
TYPES[:long_be] = TYPES[:int64_be]
|
82
|
+
TYPES[:long_ne] = TYPES[:int64_ne]
|
83
83
|
|
84
|
-
TYPES[:ulong] = TYPES[:
|
85
|
-
TYPES[:ulong_le] = TYPES[:
|
86
|
-
TYPES[:ulong_be] = TYPES[:
|
87
|
-
TYPES[:ulong_ne] = TYPES[:
|
84
|
+
TYPES[:ulong] = TYPES[:uint64]
|
85
|
+
TYPES[:ulong_le] = TYPES[:uint64_le]
|
86
|
+
TYPES[:ulong_be] = TYPES[:uint64_be]
|
87
|
+
TYPES[:ulong_ne] = TYPES[:uint64_ne]
|
88
88
|
|
89
89
|
TYPES[:long_long] = TYPES[:int64]
|
90
90
|
TYPES[:long_long_le] = TYPES[:int64_le]
|
data/lib/hexdump/version.rb
CHANGED
data/lib/hexdump.rb
CHANGED
data/spec/core_ext_spec.rb
CHANGED
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'hexdump/format_string'
|
3
|
+
|
4
|
+
describe Hexdump::FormatString do
|
5
|
+
let(:fmt) { "%x" }
|
6
|
+
|
7
|
+
subject { described_class.new(fmt) }
|
8
|
+
|
9
|
+
describe "#%" do
|
10
|
+
let(:value) { 255 }
|
11
|
+
|
12
|
+
it "must format the given value" do
|
13
|
+
expect(subject % value).to eq(fmt % value)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "#to_s" do
|
18
|
+
it "must return the format string" do
|
19
|
+
expect(subject.to_s).to eq(fmt)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/spec/reader_spec.rb
CHANGED
@@ -53,11 +53,13 @@ describe Hexdump::Reader do
|
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
|
+
let(:type) { Hexdump::TYPES[:byte] }
|
57
|
+
|
58
|
+
subject { described_class.new(type) }
|
59
|
+
|
56
60
|
describe "#each_byte" do
|
57
61
|
let(:type) { Hexdump::TYPES[:uint8] }
|
58
62
|
|
59
|
-
subject { described_class.new(type) }
|
60
|
-
|
61
63
|
let(:chars) { %w[A B C D] }
|
62
64
|
let(:data) { chars.join }
|
63
65
|
let(:bytes) { data.bytes }
|
@@ -107,8 +109,6 @@ describe Hexdump::Reader do
|
|
107
109
|
let(:chars) { %w[A B C D] }
|
108
110
|
let(:data) { "ABCD" }
|
109
111
|
|
110
|
-
subject { described_class.new(type) }
|
111
|
-
|
112
112
|
it "must yield each consequetize character" do
|
113
113
|
expect { |b|
|
114
114
|
subject.each_slice(data,&b)
|
@@ -147,8 +147,6 @@ describe Hexdump::Reader do
|
|
147
147
|
let(:slices) { %w[AA BB CC DD EE FF] }
|
148
148
|
let(:data) { "AABBCCDDEEFF" }
|
149
149
|
|
150
|
-
subject { described_class.new(type) }
|
151
|
-
|
152
150
|
it "must yield each slice of the String" do
|
153
151
|
expect { |b|
|
154
152
|
subject.each_slice(data,&b)
|
@@ -220,9 +218,7 @@ describe Hexdump::Reader do
|
|
220
218
|
let(:bytes) { [0x41, 0x42, 0x43, 0x44] }
|
221
219
|
let(:raw) { bytes.map(&:chr) }
|
222
220
|
let(:data) { raw.join }
|
223
|
-
let(:type) { Hexdump::TYPES[:
|
224
|
-
|
225
|
-
subject { described_class.new(type) }
|
221
|
+
let(:type) { Hexdump::TYPES[:uint8] }
|
226
222
|
|
227
223
|
it "must yield each byte" do
|
228
224
|
expect { |b|
|
@@ -239,8 +235,6 @@ describe Hexdump::Reader do
|
|
239
235
|
let(:raw) { uints.map { |uint| [uint].pack('S<') } }
|
240
236
|
let(:data) { raw.join }
|
241
237
|
|
242
|
-
subject { described_class.new(type) }
|
243
|
-
|
244
238
|
it "must decode the bytes in little-endian order" do
|
245
239
|
expect { |b|
|
246
240
|
subject.each_uint(data,&b)
|
@@ -273,8 +267,6 @@ describe Hexdump::Reader do
|
|
273
267
|
let(:raw) { uints.map { |uint| [uint].pack('S>') } }
|
274
268
|
let(:data) { raw.join }
|
275
269
|
|
276
|
-
subject { described_class.new(type) }
|
277
|
-
|
278
270
|
it "must decode the bytes in big-endian order" do
|
279
271
|
expect { |b|
|
280
272
|
subject.each_uint(data,&b)
|
@@ -311,8 +303,6 @@ describe Hexdump::Reader do
|
|
311
303
|
let(:raw) { uints.map { |uint| [uint].pack('L<') } }
|
312
304
|
let(:data) { raw.join }
|
313
305
|
|
314
|
-
subject { described_class.new(type) }
|
315
|
-
|
316
306
|
it "must decode the bytes in little-endian order" do
|
317
307
|
expect { |b|
|
318
308
|
subject.each_uint(data,&b)
|
@@ -345,8 +335,6 @@ describe Hexdump::Reader do
|
|
345
335
|
let(:raw) { uints.map { |uint| [uint].pack('L>') } }
|
346
336
|
let(:data) { raw.join }
|
347
337
|
|
348
|
-
subject { described_class.new(type) }
|
349
|
-
|
350
338
|
it "must decode the bytes in big-endian order" do
|
351
339
|
expect { |b|
|
352
340
|
subject.each_uint(data,&b)
|
@@ -383,8 +371,6 @@ describe Hexdump::Reader do
|
|
383
371
|
let(:raw) { uints.map { |uint| [uint].pack('Q<') } }
|
384
372
|
let(:data) { raw.join }
|
385
373
|
|
386
|
-
subject { described_class.new(type) }
|
387
|
-
|
388
374
|
it "must decode the bytes in little-endian order" do
|
389
375
|
expect { |b|
|
390
376
|
subject.each_uint(data,&b)
|
@@ -417,8 +403,6 @@ describe Hexdump::Reader do
|
|
417
403
|
let(:raw) { uints.map { |uint| [uint].pack('Q>') } }
|
418
404
|
let(:data) { raw.join }
|
419
405
|
|
420
|
-
subject { described_class.new(type) }
|
421
|
-
|
422
406
|
it "must decode the bytes in big-endian order" do
|
423
407
|
expect { |b|
|
424
408
|
subject.each_uint(data,&b)
|
@@ -463,8 +447,6 @@ describe Hexdump::Reader do
|
|
463
447
|
let(:raw) { ints.map { |int| [int].pack('c') } }
|
464
448
|
let(:data) { raw.join }
|
465
449
|
|
466
|
-
subject { described_class.new(type) }
|
467
|
-
|
468
450
|
it "must decode the bytes" do
|
469
451
|
expect { |b|
|
470
452
|
subject.each_int(data,&b)
|
@@ -480,8 +462,6 @@ describe Hexdump::Reader do
|
|
480
462
|
let(:raw) { ints.map { |int| [int].pack('s<') } }
|
481
463
|
let(:data) { raw.join }
|
482
464
|
|
483
|
-
subject { described_class.new(type) }
|
484
|
-
|
485
465
|
it "must decode the bytes in little-endian order" do
|
486
466
|
expect { |b|
|
487
467
|
subject.each_int(data,&b)
|
@@ -489,7 +469,7 @@ describe Hexdump::Reader do
|
|
489
469
|
end
|
490
470
|
|
491
471
|
context "but there is not enough bytes to decode a value" do
|
492
|
-
let(:data) { "\
|
472
|
+
let(:data) { "\x11".encode(Encoding::BINARY) }
|
493
473
|
|
494
474
|
it "must yield the remaining bytes and nil" do
|
495
475
|
expect { |b|
|
@@ -503,7 +483,7 @@ describe Hexdump::Reader do
|
|
503
483
|
it "must yield the zero-padded data and partially decoded int" do
|
504
484
|
expect { |b|
|
505
485
|
subject.each_int(data,&b)
|
506
|
-
}.to yield_with_args("#{data}\x00",
|
486
|
+
}.to yield_with_args("#{data}\x00",0x11)
|
507
487
|
end
|
508
488
|
end
|
509
489
|
end
|
@@ -514,8 +494,6 @@ describe Hexdump::Reader do
|
|
514
494
|
let(:raw) { ints.map { |int| [int].pack('s>') } }
|
515
495
|
let(:data) { raw.join }
|
516
496
|
|
517
|
-
subject { described_class.new(type) }
|
518
|
-
|
519
497
|
it "must decode the bytes in big-endian order" do
|
520
498
|
expect { |b|
|
521
499
|
subject.each_int(data,&b)
|
@@ -523,7 +501,7 @@ describe Hexdump::Reader do
|
|
523
501
|
end
|
524
502
|
|
525
503
|
context "but there is not enough bytes to decode a value" do
|
526
|
-
let(:data) { "\
|
504
|
+
let(:data) { "\x11".encode(Encoding::BINARY) }
|
527
505
|
|
528
506
|
it "must yield the remaining bytes and nil" do
|
529
507
|
expect { |b|
|
@@ -537,7 +515,7 @@ describe Hexdump::Reader do
|
|
537
515
|
it "must yield the zero-padded data and partially decoded int" do
|
538
516
|
expect { |b|
|
539
517
|
subject.each_int(data,&b)
|
540
|
-
}.to yield_with_args("#{data}\x00",
|
518
|
+
}.to yield_with_args("#{data}\x00",0x1100)
|
541
519
|
end
|
542
520
|
end
|
543
521
|
end
|
@@ -552,8 +530,6 @@ describe Hexdump::Reader do
|
|
552
530
|
let(:raw) { ints.map { |int| [int].pack('l<') } }
|
553
531
|
let(:data) { raw.join }
|
554
532
|
|
555
|
-
subject { described_class.new(type) }
|
556
|
-
|
557
533
|
it "must decode the bytes in little-endian order" do
|
558
534
|
expect { |b|
|
559
535
|
subject.each_int(data,&b)
|
@@ -561,7 +537,7 @@ describe Hexdump::Reader do
|
|
561
537
|
end
|
562
538
|
|
563
539
|
context "but there is not enough bytes to decode a value" do
|
564
|
-
let(:data) { "\
|
540
|
+
let(:data) { "\x11\x22\x33".encode(Encoding::BINARY) }
|
565
541
|
|
566
542
|
it "must yield the remaining bytes and nil" do
|
567
543
|
expect { |b|
|
@@ -575,7 +551,7 @@ describe Hexdump::Reader do
|
|
575
551
|
it "must yield the zero-padded data and partially decoded int" do
|
576
552
|
expect { |b|
|
577
553
|
subject.each_int(data,&b)
|
578
|
-
}.to yield_with_args("#{data}\x00",
|
554
|
+
}.to yield_with_args("#{data}\x00",0x00332211)
|
579
555
|
end
|
580
556
|
end
|
581
557
|
end
|
@@ -586,8 +562,6 @@ describe Hexdump::Reader do
|
|
586
562
|
let(:raw) { ints.map { |int| [int].pack('l>') } }
|
587
563
|
let(:data) { raw.join }
|
588
564
|
|
589
|
-
subject { described_class.new(type) }
|
590
|
-
|
591
565
|
it "must decode the bytes in big-endian order" do
|
592
566
|
expect { |b|
|
593
567
|
subject.each_int(data,&b)
|
@@ -595,7 +569,7 @@ describe Hexdump::Reader do
|
|
595
569
|
end
|
596
570
|
|
597
571
|
context "but there is not enough bytes to decode a value" do
|
598
|
-
let(:data) { "\
|
572
|
+
let(:data) { "\x11\x22\x33".encode(Encoding::BINARY) }
|
599
573
|
|
600
574
|
it "must yield the remaining bytes and nil" do
|
601
575
|
expect { |b|
|
@@ -609,7 +583,7 @@ describe Hexdump::Reader do
|
|
609
583
|
it "must yield the zero-padded data and partially decoded int" do
|
610
584
|
expect { |b|
|
611
585
|
subject.each_int(data,&b)
|
612
|
-
}.to yield_with_args("#{data}\x00",
|
586
|
+
}.to yield_with_args("#{data}\x00",0x11223300)
|
613
587
|
end
|
614
588
|
end
|
615
589
|
end
|
@@ -624,8 +598,6 @@ describe Hexdump::Reader do
|
|
624
598
|
let(:raw) { ints.map { |int| [int].pack('q<') } }
|
625
599
|
let(:data) { raw.join }
|
626
600
|
|
627
|
-
subject { described_class.new(type) }
|
628
|
-
|
629
601
|
it "must decode the bytes in little-endian order" do
|
630
602
|
expect { |b|
|
631
603
|
subject.each_int(data,&b)
|
@@ -633,7 +605,7 @@ describe Hexdump::Reader do
|
|
633
605
|
end
|
634
606
|
|
635
607
|
context "but there is not enough bytes to decode a value" do
|
636
|
-
let(:data) { "\
|
608
|
+
let(:data) { "\x11\x22\x33\x44\x55\x66\x77".encode(Encoding::BINARY) }
|
637
609
|
|
638
610
|
it "must yield the remaining bytes and nil" do
|
639
611
|
expect { |b|
|
@@ -647,7 +619,7 @@ describe Hexdump::Reader do
|
|
647
619
|
it "must yield the zero-padded data and partially decoded int" do
|
648
620
|
expect { |b|
|
649
621
|
subject.each_int(data,&b)
|
650
|
-
}.to yield_with_args("#{data}\x00",
|
622
|
+
}.to yield_with_args("#{data}\x00",0x0077665544332211)
|
651
623
|
end
|
652
624
|
end
|
653
625
|
end
|
@@ -658,8 +630,6 @@ describe Hexdump::Reader do
|
|
658
630
|
let(:raw) { ints.map { |int| [int].pack('q>') } }
|
659
631
|
let(:data) { raw.join }
|
660
632
|
|
661
|
-
subject { described_class.new(type) }
|
662
|
-
|
663
633
|
it "must decode the bytes in big-endian order" do
|
664
634
|
expect { |b|
|
665
635
|
subject.each_int(data,&b)
|
@@ -667,7 +637,7 @@ describe Hexdump::Reader do
|
|
667
637
|
end
|
668
638
|
|
669
639
|
context "but there is not enough bytes to decode a value" do
|
670
|
-
let(:data) { "\
|
640
|
+
let(:data) { "\x11\x22\x33\x44\x55\x66\x77".encode(Encoding::BINARY) }
|
671
641
|
|
672
642
|
it "must yield nil and the remaining bytes" do
|
673
643
|
expect { |b|
|
@@ -681,7 +651,7 @@ describe Hexdump::Reader do
|
|
681
651
|
it "must yield the zero-padded data and partially decoded int" do
|
682
652
|
expect { |b|
|
683
653
|
subject.each_int(data,&b)
|
684
|
-
}.to yield_with_args("#{data}\x00",
|
654
|
+
}.to yield_with_args("#{data}\x00",0x1122334455667700)
|
685
655
|
end
|
686
656
|
end
|
687
657
|
end
|
@@ -698,6 +668,8 @@ describe Hexdump::Reader do
|
|
698
668
|
end
|
699
669
|
|
700
670
|
describe "#each_float" do
|
671
|
+
let(:type) { Hexdump::TYPES[:float] }
|
672
|
+
|
701
673
|
context "when the type has size of 4" do
|
702
674
|
let(:floats) { [1.0, -3.0, 5.0, -7.0, 9.0] }
|
703
675
|
|
@@ -706,8 +678,6 @@ describe Hexdump::Reader do
|
|
706
678
|
let(:raw) { floats.map { |float| [float].pack('e') } }
|
707
679
|
let(:data) { raw.join }
|
708
680
|
|
709
|
-
subject { described_class.new(type) }
|
710
|
-
|
711
681
|
it "must decode the bytes in little-endian order" do
|
712
682
|
expect { |b|
|
713
683
|
subject.each_float(data,&b)
|
@@ -726,7 +696,7 @@ describe Hexdump::Reader do
|
|
726
696
|
context "but #zero_pad? is true" do
|
727
697
|
subject { described_class.new(type, zero_pad: true) }
|
728
698
|
|
729
|
-
it "must yield the zero-padded data and partially decoded
|
699
|
+
it "must yield the zero-padded data and partially decoded float" do
|
730
700
|
expect { |b|
|
731
701
|
subject.each_float(data,&b)
|
732
702
|
}.to yield_with_args("#{data}\x00",2.7622535458617227e-40)
|
@@ -740,8 +710,6 @@ describe Hexdump::Reader do
|
|
740
710
|
let(:raw) { floats.map { |float| [float].pack('g') } }
|
741
711
|
let(:data) { raw.join }
|
742
712
|
|
743
|
-
subject { described_class.new(type) }
|
744
|
-
|
745
713
|
it "must decode the bytes in big-endian order" do
|
746
714
|
expect { |b|
|
747
715
|
subject.each_float(data,&b)
|
@@ -760,7 +728,7 @@ describe Hexdump::Reader do
|
|
760
728
|
context "but #zero_pad? is true" do
|
761
729
|
subject { described_class.new(type, zero_pad: true) }
|
762
730
|
|
763
|
-
it "must yield the zero-padded data and partially decoded
|
731
|
+
it "must yield the zero-padded data and partially decoded float" do
|
764
732
|
expect { |b|
|
765
733
|
subject.each_float(data,&b)
|
766
734
|
}.to yield_with_args("#{data}\x00",2.387938139551892e-38)
|
@@ -778,8 +746,6 @@ describe Hexdump::Reader do
|
|
778
746
|
let(:raw) { floats.map { |float| [float].pack('E') } }
|
779
747
|
let(:data) { raw.join }
|
780
748
|
|
781
|
-
subject { described_class.new(type) }
|
782
|
-
|
783
749
|
it "must decode the bytes in little-endian order" do
|
784
750
|
expect { |b|
|
785
751
|
subject.each_float(data,&b)
|
@@ -798,7 +764,7 @@ describe Hexdump::Reader do
|
|
798
764
|
context "but #zero_pad? is true" do
|
799
765
|
subject { described_class.new(type, zero_pad: true) }
|
800
766
|
|
801
|
-
it "must yield the zero-padded data and partially decoded
|
767
|
+
it "must yield the zero-padded data and partially decoded float" do
|
802
768
|
expect { |b|
|
803
769
|
subject.each_float(data,&b)
|
804
770
|
}.to yield_with_args("#{data}\x00",9.76739841864353e-309)
|
@@ -812,8 +778,6 @@ describe Hexdump::Reader do
|
|
812
778
|
let(:raw) { floats.map { |float| [float].pack('G') } }
|
813
779
|
let(:data) { raw.join }
|
814
780
|
|
815
|
-
subject { described_class.new(type) }
|
816
|
-
|
817
781
|
it "must decode the bytes in big-endian order" do
|
818
782
|
expect { |b|
|
819
783
|
subject.each_float(data,&b)
|
@@ -832,7 +796,7 @@ describe Hexdump::Reader do
|
|
832
796
|
context "but #zero_pad? is true" do
|
833
797
|
subject { described_class.new(type, zero_pad: true) }
|
834
798
|
|
835
|
-
it "must yield the zero-padded data and partially decoded
|
799
|
+
it "must yield the zero-padded data and partially decoded float" do
|
836
800
|
expect { |b|
|
837
801
|
subject.each_float(data,&b)
|
838
802
|
}.to yield_with_args("#{data}\x00",8.207880399131826e-304)
|
@@ -852,6 +816,45 @@ describe Hexdump::Reader do
|
|
852
816
|
end
|
853
817
|
|
854
818
|
describe "#each" do
|
819
|
+
context "when #type is a UInt" do
|
820
|
+
let(:type) { Hexdump::TYPES[:uint32] }
|
821
|
+
let(:uints) { [1, 2, 3] }
|
822
|
+
let(:raw) { uints.map { |uint| [uint].pack('L') } }
|
823
|
+
let(:data) { raw.join }
|
824
|
+
|
825
|
+
it "must yield decoded integers" do
|
826
|
+
expect { |b|
|
827
|
+
subject.each(data,&b)
|
828
|
+
}.to yield_successive_args(*raw.zip(uints))
|
829
|
+
end
|
830
|
+
end
|
831
|
+
|
832
|
+
context "when #type is a Int" do
|
833
|
+
let(:type) { Hexdump::TYPES[:int32] }
|
834
|
+
let(:ints) { [1, 2, 3] }
|
835
|
+
let(:raw) { ints.map { |int| [int].pack('l') } }
|
836
|
+
let(:data) { raw.join }
|
837
|
+
|
838
|
+
it "must yield decoded integers" do
|
839
|
+
expect { |b|
|
840
|
+
subject.each(data,&b)
|
841
|
+
}.to yield_successive_args(*raw.zip(ints))
|
842
|
+
end
|
843
|
+
end
|
844
|
+
|
845
|
+
context "when #type is a Float" do
|
846
|
+
let(:type) { Hexdump::TYPES[:float] }
|
847
|
+
let(:floats) { [1.0, 2.0, 3.0] }
|
848
|
+
let(:raw) { floats.map { |float| [float].pack('e') } }
|
849
|
+
let(:data) { raw.join }
|
850
|
+
|
851
|
+
it "must yield decoded integers" do
|
852
|
+
expect { |b|
|
853
|
+
subject.each(data,&b)
|
854
|
+
}.to yield_successive_args(*raw.zip(floats))
|
855
|
+
end
|
856
|
+
end
|
857
|
+
|
855
858
|
context "when the given data does not define #each_byte" do
|
856
859
|
it do
|
857
860
|
expect {
|
data/spec/spec_helper.rb
CHANGED
data/spec/types_spec.rb
CHANGED
@@ -448,25 +448,25 @@ describe "Hexdump::TYPES" do
|
|
448
448
|
|
449
449
|
describe "long" do
|
450
450
|
it "must be an alias to int32" do
|
451
|
-
expect(subject[:long]).to be(subject[:
|
451
|
+
expect(subject[:long]).to be(subject[:int64])
|
452
452
|
end
|
453
453
|
end
|
454
454
|
|
455
455
|
describe "long_le" do
|
456
456
|
it "must be an alias to int32_le" do
|
457
|
-
expect(subject[:long_le]).to be(subject[:
|
457
|
+
expect(subject[:long_le]).to be(subject[:int64_le])
|
458
458
|
end
|
459
459
|
end
|
460
460
|
|
461
461
|
describe "long_be" do
|
462
462
|
it "must be an alias to int32_be" do
|
463
|
-
expect(subject[:long_be]).to be(subject[:
|
463
|
+
expect(subject[:long_be]).to be(subject[:int64_be])
|
464
464
|
end
|
465
465
|
end
|
466
466
|
|
467
467
|
describe "long_ne" do
|
468
468
|
it "must be an alias to int32_ne" do
|
469
|
-
expect(subject[:long_ne]).to be(subject[:
|
469
|
+
expect(subject[:long_ne]).to be(subject[:int64_ne])
|
470
470
|
end
|
471
471
|
end
|
472
472
|
|
@@ -496,25 +496,25 @@ describe "Hexdump::TYPES" do
|
|
496
496
|
|
497
497
|
describe "ulong" do
|
498
498
|
it "must be an alias to uint32" do
|
499
|
-
expect(subject[:ulong]).to be(subject[:
|
499
|
+
expect(subject[:ulong]).to be(subject[:uint64])
|
500
500
|
end
|
501
501
|
end
|
502
502
|
|
503
503
|
describe "ulong_le" do
|
504
504
|
it "must be an alias to uint32_le" do
|
505
|
-
expect(subject[:ulong_le]).to be(subject[:
|
505
|
+
expect(subject[:ulong_le]).to be(subject[:uint64_le])
|
506
506
|
end
|
507
507
|
end
|
508
508
|
|
509
509
|
describe "ulong_be" do
|
510
510
|
it "must be an alias to uint32_be" do
|
511
|
-
expect(subject[:ulong_be]).to be(subject[:
|
511
|
+
expect(subject[:ulong_be]).to be(subject[:uint64_be])
|
512
512
|
end
|
513
513
|
end
|
514
514
|
|
515
515
|
describe "ulong_ne" do
|
516
516
|
it "must be an alias to uint32_ne" do
|
517
|
-
expect(subject[:ulong_ne]).to be(subject[:
|
517
|
+
expect(subject[:ulong_ne]).to be(subject[:uint64_ne])
|
518
518
|
end
|
519
519
|
end
|
520
520
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hexdump
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Postmodern
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-01-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -24,7 +24,7 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '2.0'
|
27
|
-
description:
|
27
|
+
description: Fully Featured and Fast hexdumping for Ruby.
|
28
28
|
email: postmodern.mod3@gmail.com
|
29
29
|
executables: []
|
30
30
|
extensions: []
|
@@ -54,7 +54,6 @@ files:
|
|
54
54
|
- lib/hexdump/core_ext/kernel.rb
|
55
55
|
- lib/hexdump/core_ext/string.rb
|
56
56
|
- lib/hexdump/core_ext/string_io.rb
|
57
|
-
- lib/hexdump/extensions.rb
|
58
57
|
- lib/hexdump/format_string.rb
|
59
58
|
- lib/hexdump/hexdump.rb
|
60
59
|
- lib/hexdump/mixin.rb
|
@@ -75,6 +74,7 @@ files:
|
|
75
74
|
- lib/hexdump/version.rb
|
76
75
|
- spec/chars_spec.rb
|
77
76
|
- spec/core_ext_spec.rb
|
77
|
+
- spec/format_string_spec.rb
|
78
78
|
- spec/hexdump_class_spec.rb
|
79
79
|
- spec/hexdump_module_spec.rb
|
80
80
|
- spec/mixin_spec.rb
|
@@ -98,6 +98,7 @@ metadata:
|
|
98
98
|
source_code_uri: https://github.com/postmodern/hexdump.rb
|
99
99
|
bug_tracker_uri: https://github.com/postmodern/hexdump.rb/issues
|
100
100
|
changelog_uri: https://github.com/postmodern/hexdump.rb/blob/master/ChangeLog.md
|
101
|
+
rubygems_mfa_required: 'true'
|
101
102
|
post_install_message:
|
102
103
|
rdoc_options: []
|
103
104
|
require_paths:
|
@@ -113,7 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
113
114
|
- !ruby/object:Gem::Version
|
114
115
|
version: '0'
|
115
116
|
requirements: []
|
116
|
-
rubygems_version: 3.
|
117
|
+
rubygems_version: 3.4.10
|
117
118
|
signing_key:
|
118
119
|
specification_version: 4
|
119
120
|
summary: Hexdump Strings and IO objects.
|
data/lib/hexdump/extensions.rb
DELETED