hexdump 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,3 @@
1
+ -
2
+ ChangeLog.*
3
+ LICENSE.txt
File without changes
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --colour --format documentation
@@ -0,0 +1 @@
1
+ --markup markdown --title "hexdump Documentation" --protected
@@ -0,0 +1,10 @@
1
+ ### 0.1.0 / 2011-03-05
2
+
3
+ * Initial release:
4
+ * Can hexdump any Object supporting the `each_byte` method.
5
+ * Can send the hexdump output to any Object supporting the `<<` method.
6
+ * Can yield each line of hexdump, instead of printing the output.
7
+ * Supports printing hexadecimal, decimal, octal and binary bytes.
8
+ * Makes {String}, {StringIO}, {IO}, {File} objects hexdumpable.
9
+ * Fast-ish.
10
+
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 Hal Brodigan
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,113 @@
1
+ # hexdump
2
+
3
+ * [Homepage](http://github.com/postmoderm/hexdump)
4
+ * [Issues](http://github.com/postmoderm/hexdump/issues)
5
+ * [Documentation](http://rubydoc.info/gems/hexdump/frames)
6
+ * [Email](mailto:postmodern.mod3 at gmail.com)
7
+
8
+ ## Description
9
+
10
+ Simple and Fast hexdumping for Ruby.
11
+
12
+ ## Features
13
+
14
+ * Can hexdump any Object supporting the `each_byte` method.
15
+ * Can send the hexdump output to any Object supporting the `<<` method.
16
+ * Can yield each line of hexdump, instead of printing the output.
17
+ * Supports printing ASCII, hexadecimal, decimal, octal and binary bytes.
18
+ * Makes {String}, {StringIO}, {IO}, {File} objects hexdumpable.
19
+ * Fast-ish.
20
+
21
+ ## Benchmarks
22
+
23
+ Benchmarks show {Hexdump.dump} processing 2.4M of data.
24
+
25
+ ### Ruby 1.9.2-p180
26
+
27
+ user system total real
28
+ hexdump (block) 7.740000 0.030000 7.770000 ( 8.138029)
29
+ hexdump 9.590000 0.050000 9.640000 ( 10.178203)
30
+ hexdump width=256 (block) 7.280000 0.020000 7.300000 ( 7.534507)
31
+ hexdump width=256 8.130000 0.030000 8.160000 ( 8.342448)
32
+ hexdump ascii=true (block) 7.740000 0.030000 7.770000 ( 7.958550)
33
+ hexdump ascii=true 9.550000 0.050000 9.600000 ( 9.803758)
34
+
35
+ ### Ruby 1.8.7-p334
36
+
37
+ user system total real
38
+ hexdump (block) 10.520000 0.010000 10.530000 ( 10.692901)
39
+ hexdump 11.580000 0.010000 11.590000 ( 11.873978)
40
+ hexdump width=256 (block) 9.960000 0.110000 10.070000 ( 11.592033)
41
+ hexdump width=256 10.660000 0.010000 10.670000 ( 10.987417)
42
+ hexdump ascii=true (block) 10.620000 0.010000 10.630000 ( 10.899925)
43
+ hexdump ascii=true 11.590000 0.030000 11.620000 ( 12.765259)
44
+
45
+ ### Jruby 1.5.6
46
+
47
+ user system total real
48
+ hexdump (block) 6.690000 0.000000 6.690000 ( 6.517000)
49
+ hexdump 8.234000 0.000000 8.234000 ( 8.234000)
50
+ hexdump width=256 (block) 4.488000 0.000000 4.488000 ( 4.488000)
51
+ hexdump width=256 5.462000 0.000000 5.462000 ( 5.462000)
52
+ hexdump ascii=true (block) 4.456000 0.000000 4.456000 ( 4.456000)
53
+ hexdump ascii=true 5.039000 0.000000 5.039000 ( 5.039000)
54
+
55
+ ### Rubinius 1.2.3
56
+
57
+ user system total real
58
+ hexdump (block) 10.013478 0.018997 10.032475 ( 11.148450)
59
+ hexdump 13.153001 0.015997 13.168998 ( 13.740888)
60
+ hexdump width=256 (block) 8.845656 0.008999 8.854655 ( 9.022673)
61
+ hexdump width=256 9.894496 0.008999 9.903495 ( 10.121070)
62
+ hexdump ascii=true (block) 9.576544 0.021996 9.598540 ( 9.810846)
63
+ hexdump ascii=true 13.088011 0.015998 13.104009 ( 13.390532)
64
+
65
+ ## Examples
66
+
67
+ require 'hexdump'
68
+
69
+ data = "hello\x00"
70
+
71
+ Hexdump.dump(data)
72
+ # 00000000 68 65 6c 6c 6f 00 |hello.|
73
+
74
+ data.hexdump
75
+ # 00000000 68 65 6c 6c 6f 00 |hello.|
76
+
77
+ # iterate over the hexdump lines
78
+ data.hexdump do |index,hex,printable|
79
+ index # => 0
80
+ hex # => ["68", "65", "6c", "6c", "6f", "00"]
81
+ printable # => ["h", "e", "l", "l", "o", "."]
82
+ end
83
+
84
+ # configure the width of the hexdump
85
+ Hexdump.dump('A' * 30, :width => 10)
86
+ # 00000000 41 41 41 41 41 41 41 41 41 41 |AAAAAAAAAA|
87
+ # 0000000a 41 41 41 41 41 41 41 41 41 41 |AAAAAAAAAA|
88
+ # 00000014 41 41 41 41 41 41 41 41 41 41 |AAAAAAAAAA|
89
+
90
+ Hexdump.dump(data, :ascii => true)
91
+ # 00000000 h e l l o 00 |hello.|
92
+
93
+ Hexdump.dump(data, :base => 16)
94
+ # 00000000 68 65 6c 6c 6f 00 |hello.|
95
+
96
+ Hexdump.dump(data, :base => :decimal)
97
+ # 00000000 104 101 108 108 111 0 |hello.|
98
+
99
+ Hexdump.dump(data, :base => :octal)
100
+ # 00000000 0150 0145 0154 0154 0157 0000 |hello.|
101
+
102
+ Hexdump.dump(data, :base => :binary)
103
+ # 00000000 01101000 01100101 01101100 01101100 01101111 00000000 |hello.|
104
+
105
+ ## Install
106
+
107
+ $ gem install hexdump
108
+
109
+ ## Copyright
110
+
111
+ Copyright (c) 2011 Hal Brodigan
112
+
113
+ See {file:LICENSE.txt} for details.
@@ -0,0 +1,38 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ gem 'ore-tasks', '~> 0.4'
6
+ require 'ore/tasks'
7
+
8
+ Ore::Tasks.new
9
+ rescue LoadError => e
10
+ STDERR.puts e.message
11
+ STDERR.puts "Run `gem install ore-tasks` to install 'ore/tasks'."
12
+ end
13
+
14
+ begin
15
+ gem 'rspec', '~> 2.4'
16
+ require 'rspec/core/rake_task'
17
+
18
+ RSpec::Core::RakeTask.new
19
+ rescue LoadError => e
20
+ task :spec do
21
+ abort "Please run `gem install rspec` to install RSpec."
22
+ end
23
+ end
24
+
25
+ task :test => :spec
26
+ task :default => :spec
27
+
28
+ begin
29
+ gem 'yard', '~> 0.6.0'
30
+ require 'yard'
31
+
32
+ YARD::Rake::YardocTask.new
33
+ rescue LoadError => e
34
+ task :yard do
35
+ abort "Please run `gem install yard` to install YARD."
36
+ end
37
+ end
38
+ task :doc => :yard
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $LOAD_PATH << File.expand_path(File.join(File.dirname(__FILE__),'..','lib'))
4
+
5
+ require 'hexdump'
6
+ require 'benchmark'
7
+
8
+ DATA = ((0..255).map { |b| b.chr }.join) * 10000
9
+ OUTPUT = Class.new { def <<(data); end }.new
10
+
11
+ Benchmark.bm(26) do |b|
12
+ b.report('hexdump (block)') do
13
+ Hexdump.dump(DATA) { |index,hex,print| }
14
+ end
15
+
16
+ b.report('hexdump') do
17
+ Hexdump.dump(DATA, :output => OUTPUT)
18
+ end
19
+
20
+ b.report('hexdump width=256 (block)') do
21
+ Hexdump.dump(DATA, :width => 256) { |index,hex,print| }
22
+ end
23
+
24
+ b.report('hexdump width=256') do
25
+ Hexdump.dump(DATA, :width => 256, :output => OUTPUT)
26
+ end
27
+
28
+ b.report('hexdump ascii=true (block)') do
29
+ Hexdump.dump(DATA, :ascci => true) { |index,hex,print| }
30
+ end
31
+
32
+ b.report('hexdump ascii=true') do
33
+ Hexdump.dump(DATA, :ascci => true, :output => OUTPUT)
34
+ end
35
+ end
@@ -0,0 +1,14 @@
1
+ name: hexdump
2
+ version: 0.1.0
3
+ summary: Simple and Fast hexdumping for Ruby.
4
+ description: Simple and Fast hexdumping for Ruby.
5
+ license: MIT
6
+ authors: hal
7
+ email: postmodern.mod3@gmail.com
8
+ homepage: http://github.com/postmodern/hexdump
9
+ has_yard: true
10
+
11
+ development_dependencies:
12
+ ore-tasks: ~> 0.4
13
+ rspec: ~> 2.4
14
+ yard: ~> 0.6.0
@@ -0,0 +1,15 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ begin
4
+ Ore::Specification.new do |gemspec|
5
+ # custom logic here
6
+ end
7
+ rescue NameError
8
+ begin
9
+ require 'ore/specification'
10
+ retry
11
+ rescue LoadError
12
+ STDERR.puts "The '#{__FILE__}' file requires Ore."
13
+ STDERR.puts "Run `gem install ore-core` to install Ore."
14
+ end
15
+ end
@@ -0,0 +1,2 @@
1
+ require 'hexdump/hexdump'
2
+ require 'hexdump/extensions'
@@ -0,0 +1,4 @@
1
+ require 'hexdump/extensions/string'
2
+ require 'hexdump/extensions/string_io'
3
+ require 'hexdump/extensions/io'
4
+ require 'hexdump/extensions/file'
@@ -0,0 +1,22 @@
1
+ require 'hexdump/hexdump'
2
+
3
+ class File
4
+
5
+ #
6
+ # Hexdumps the contents of a file.
7
+ #
8
+ # @param [String] path
9
+ # The path of the file.
10
+ #
11
+ # @param [Hash] options
12
+ # Additional options.
13
+ #
14
+ # @see Hexdump.dump
15
+ #
16
+ def self.hexdump(path,options={},&block)
17
+ self.open(path,'rb') do |file|
18
+ Hexdump.dump(file,options,&block)
19
+ end
20
+ end
21
+
22
+ end
@@ -0,0 +1,7 @@
1
+ require 'hexdump/hexdump'
2
+
3
+ class IO
4
+
5
+ include Hexdump
6
+
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'hexdump/hexdump'
2
+
3
+ class String
4
+
5
+ include Hexdump
6
+
7
+ end
@@ -0,0 +1,9 @@
1
+ require 'hexdump/hexdump'
2
+
3
+ require 'stringio'
4
+
5
+ class StringIO
6
+
7
+ include Hexdump
8
+
9
+ end
@@ -0,0 +1,139 @@
1
+ #
2
+ # Provides the {Hexdump.dump} method and can add hexdumping to other classes
3
+ # by including the {Hexdump} module.
4
+ #
5
+ # class AbstractData
6
+ #
7
+ # include Hexdump
8
+ #
9
+ # def each_byte
10
+ # # ...
11
+ # end
12
+ #
13
+ # end
14
+ #
15
+ # data = AbstractData.new
16
+ # data.hexdump
17
+ #
18
+ module Hexdump
19
+ #
20
+ # Hexdumps the given data.
21
+ #
22
+ # @param [#each_byte] data
23
+ # The data to be hexdumped.
24
+ #
25
+ # @param [Hash] options
26
+ # Additional options.
27
+ #
28
+ # @option options [Integer] :width (16)
29
+ # The number of bytes to dump for each line.
30
+ #
31
+ # @option options [Symbol, Integer] :base (:hexadecimal)
32
+ # The base to print bytes in. Supported bases include, `:hexadecimal`,
33
+ # `:hex`, `16, `:decimal`, `:dec`, `10, `:octal`, `:oct`, `8`,
34
+ # `:binary`, `:bin` and `2`.
35
+ #
36
+ # @option options [Boolean] :ascii (false)
37
+ # Print ascii characters when possible.
38
+ #
39
+ # @option options [#<<] :output (STDOUT)
40
+ # The output to print the hexdump to.
41
+ #
42
+ # @yield [index,hex_segment,print_segment]
43
+ # The given block will be passed the hexdump break-down of each segment.
44
+ #
45
+ # @yieldparam [Integer] index
46
+ # The index of the hexdumped segment.
47
+ #
48
+ # @yieldparam [Array<String>] hex_segment
49
+ # The hexadecimal-byte representation of the segment.
50
+ #
51
+ # @yieldparam [Array<String>] print_segment
52
+ # The print-character representation of the segment.
53
+ #
54
+ # @return [nil]
55
+ #
56
+ # @raise [ArgumentError]
57
+ # The given data does not define the `#each_byte` method, or
58
+ # the `:output` value does not support the `#<<` method.
59
+ #
60
+ def Hexdump.dump(data,options={})
61
+ unless data.respond_to?(:each_byte)
62
+ raise(ArgumentError,"the data to hexdump must define #each_byte")
63
+ end
64
+
65
+ output = options.fetch(:output,STDOUT)
66
+
67
+ unless output.respond_to?(:<<)
68
+ raise(ArgumentError,":output must support the #<< method")
69
+ end
70
+
71
+ width = options.fetch(:width,16)
72
+ base = options.fetch(:base,:hexadecimal)
73
+ ascii = options.fetch(:ascii,false)
74
+ byte_width, byte_format = case base
75
+ when :hexadecimal, :hex, 16
76
+ [2, "%.2x"]
77
+ when :decimal, :dec, 10
78
+ [3, "%3.d"]
79
+ when :octal, :oct, 8
80
+ [4, "0%.3o"]
81
+ when :binary, :bin, 2
82
+ [8, "%.8b"]
83
+ end
84
+
85
+ hex_byte = lambda { |byte|
86
+ if (ascii && (byte >= 0x20 && byte <= 0x7e))
87
+ byte.chr
88
+ else
89
+ byte_format % byte
90
+ end
91
+ }
92
+
93
+ print_byte = lambda { |byte|
94
+ if (byte >= 0x20 && byte <= 0x7e)
95
+ byte.chr
96
+ else
97
+ '.'
98
+ end
99
+ }
100
+
101
+ index = 0
102
+
103
+ hex_segment_width = ((width * byte_width) + (width - 1))
104
+ line_format = "%.8x %-#{hex_segment_width}s |%s|\n"
105
+
106
+ data.each_byte.each_slice(width) do |bytes|
107
+ hex_segment = bytes.map(&hex_byte)
108
+ print_segment = bytes.map(&print_byte)
109
+
110
+ if block_given?
111
+ yield(index,hex_segment,print_segment)
112
+ else
113
+ output << sprintf(
114
+ line_format,
115
+ index,
116
+ hex_segment.join(' '),
117
+ print_segment.join
118
+ )
119
+ end
120
+
121
+ index += width
122
+ end
123
+
124
+ # flush the hexdump buffer
125
+ return nil
126
+ end
127
+
128
+ #
129
+ # Hexdumps the object.
130
+ #
131
+ # @param [Hash] options
132
+ # Additional options.
133
+ #
134
+ # @see Hexdump.dump
135
+ #
136
+ def hexdump(options={},&block)
137
+ Hexdump.dump(self,options,&block)
138
+ end
139
+ end
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+ require 'hexdump/extensions'
3
+
4
+ describe "Hexdump extensions" do
5
+ it "should include Hexdump into String" do
6
+ String.should include(Hexdump)
7
+ end
8
+
9
+ it "should include Hexdump into StringIO" do
10
+ StringIO.should include(Hexdump)
11
+ end
12
+
13
+ it "should include Hexdump into IO" do
14
+ IO.should include(Hexdump)
15
+ end
16
+
17
+ it "should define File.hexdump" do
18
+ File.should respond_to(:hexdump)
19
+ end
20
+ end
@@ -0,0 +1,171 @@
1
+ require 'spec_helper'
2
+ require 'hexdump'
3
+
4
+ describe Hexdump do
5
+ let(:bytes) { [104, 101, 108, 108, 111] }
6
+ let(:hex_chars) { ['68', '65', '6c', '6c', '6f'] }
7
+ let(:decimal_chars) { ['104', '101', '108', '108', '111'] }
8
+ let(:octal_chars) { ['0150', '0145', '0154', '0154', '0157'] }
9
+ let(:binary_chars) { ['01101000', '01100101', '01101100', '01101100', '01101111'] }
10
+ let(:print_chars) { ['h', 'e', 'l', 'l', 'o'] }
11
+ let(:data) { print_chars.join }
12
+
13
+ describe "dump" do
14
+ it "should check if the data defines '#each_byte'" do
15
+ lambda {
16
+ subject.dump(Object.new)
17
+ }.should raise_error(ArgumentError)
18
+ end
19
+
20
+ it "should check if the :output supports the '#<<' method" do
21
+ lambda {
22
+ subject.dump(data, :output => Object.new)
23
+ }.should raise_error(ArgumentError)
24
+ end
25
+
26
+ it "should append each line of the hexdump to the output" do
27
+ lines = []
28
+ subject.dump(data, :output => lines)
29
+
30
+ lines.length.should == 1
31
+ lines[0].should include(hex_chars.join(' '))
32
+ lines[0].should include(print_chars.join)
33
+ end
34
+
35
+ it "should yield the parts of each hexdump line to the given block" do
36
+ lines = []
37
+
38
+ subject.dump(data) do |index,hex,print|
39
+ lines << [index, hex, print]
40
+ end
41
+
42
+ lines.length.should == 1
43
+ lines[0][0].should == 0
44
+ lines[0][1].should == hex_chars
45
+ lines[0][2].should == print_chars
46
+ end
47
+
48
+ it "should provide the index within the data for each line" do
49
+ indices = []
50
+
51
+ subject.dump('A' * 100, :width => 10) do |index,hex,print|
52
+ indices << index
53
+ end
54
+
55
+ indices.should == [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
56
+ end
57
+
58
+ it "should allow configuring the width, in bytes, of each line" do
59
+ widths = []
60
+
61
+ subject.dump('A' * 100, :width => 10) do |index,hex,print|
62
+ widths << hex.length
63
+ end
64
+
65
+ widths.should == ([10] * 10)
66
+ end
67
+
68
+ it "should hexdump the remaining bytes" do
69
+ chars = (['B'] * 4)
70
+ string = chars.join
71
+ leading = ('A' * 100)
72
+ remainder = nil
73
+
74
+ subject.dump(leading + string, :width => 10) do |index,hex,print|
75
+ remainder = print
76
+ end
77
+
78
+ remainder.should == chars
79
+ end
80
+
81
+ it "should provide the hexadecimal characters for each line" do
82
+ chars = []
83
+
84
+ subject.dump(data * 100, :width => 10) do |index,hex,print|
85
+ chars += hex
86
+ end
87
+
88
+ chars.should == (hex_chars * 100)
89
+ end
90
+
91
+ it "should allow printing ASCII characters in place of hex characters" do
92
+ chars = []
93
+
94
+ subject.dump(data, :ascii => true) do |index,hex,print|
95
+ chars += hex
96
+ end
97
+
98
+ chars.should == print_chars
99
+ end
100
+
101
+ it "should provide the print characters for each line" do
102
+ chars = []
103
+
104
+ subject.dump(data * 100, :width => 10) do |index,hex,print|
105
+ chars += print
106
+ end
107
+
108
+ chars.should == (print_chars * 100)
109
+ end
110
+
111
+ it "should map unprintable characters to '.'" do
112
+ unprintable = ((0x00..0x1f).map(&:chr) + (0x7f..0xff).map(&:chr)).join
113
+ chars = []
114
+
115
+ subject.dump(unprintable) do |index,hex,print|
116
+ chars += print
117
+ end
118
+
119
+ chars.should == (['.'] * unprintable.length)
120
+ end
121
+
122
+ it "should support dumping bytes in decimal format" do
123
+ chars = []
124
+
125
+ subject.dump(data, :base => :decimal) do |index,hex,print|
126
+ chars += hex
127
+ end
128
+
129
+ chars.should == decimal_chars
130
+ end
131
+
132
+ it "should support dumping bytes in octal format" do
133
+ chars = []
134
+
135
+ subject.dump(data, :base => :octal) do |index,hex,print|
136
+ chars += hex
137
+ end
138
+
139
+ chars.should == octal_chars
140
+ end
141
+
142
+ it "should support dumping bytes in binary format" do
143
+ chars = []
144
+
145
+ subject.dump(data, :base => :binary) do |index,hex,print|
146
+ chars += hex
147
+ end
148
+
149
+ chars.should == binary_chars
150
+ end
151
+ end
152
+
153
+ describe "#hexdump" do
154
+ subject do
155
+ obj = Object.new.extend(Hexdump)
156
+ obj.stub!(:each_byte).and_return(bytes.enum_for(:each))
157
+
158
+ obj
159
+ end
160
+
161
+ it "should hexdump the object" do
162
+ chars = []
163
+
164
+ subject.hexdump do |index,hex,print|
165
+ chars += hex
166
+ end
167
+
168
+ chars.should == hex_chars
169
+ end
170
+ end
171
+ end
@@ -0,0 +1,2 @@
1
+ gem 'rspec', '~> 2.4'
2
+ require 'rspec'
metadata ADDED
@@ -0,0 +1,112 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hexdump
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.1.0
6
+ platform: ruby
7
+ authors:
8
+ - hal
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-03-05 00:00:00 -08:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: ore-tasks
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ~>
23
+ - !ruby/object:Gem::Version
24
+ version: "0.4"
25
+ type: :development
26
+ version_requirements: *id001
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ prerelease: false
30
+ requirement: &id002 !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ~>
34
+ - !ruby/object:Gem::Version
35
+ version: "2.4"
36
+ type: :development
37
+ version_requirements: *id002
38
+ - !ruby/object:Gem::Dependency
39
+ name: yard
40
+ prerelease: false
41
+ requirement: &id003 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: 0.6.0
47
+ type: :development
48
+ version_requirements: *id003
49
+ description: Simple and Fast hexdumping for Ruby.
50
+ email:
51
+ - postmodern.mod3@gmail.com
52
+ executables: []
53
+
54
+ extensions: []
55
+
56
+ extra_rdoc_files:
57
+ - README.md
58
+ - ChangeLog.md
59
+ - LICENSE.txt
60
+ files:
61
+ - .document
62
+ - .gemtest
63
+ - .rspec
64
+ - .yardopts
65
+ - ChangeLog.md
66
+ - LICENSE.txt
67
+ - README.md
68
+ - Rakefile
69
+ - benchmarks/hexdump.rb
70
+ - gemspec.yml
71
+ - hexdump.gemspec
72
+ - lib/hexdump.rb
73
+ - lib/hexdump/extensions.rb
74
+ - lib/hexdump/extensions/file.rb
75
+ - lib/hexdump/extensions/io.rb
76
+ - lib/hexdump/extensions/string.rb
77
+ - lib/hexdump/extensions/string_io.rb
78
+ - lib/hexdump/hexdump.rb
79
+ - spec/extensions_spec.rb
80
+ - spec/hexdump_spec.rb
81
+ - spec/spec_helper.rb
82
+ has_rdoc: yard
83
+ homepage: http://github.com/postmodern/hexdump
84
+ licenses:
85
+ - MIT
86
+ post_install_message:
87
+ rdoc_options: []
88
+
89
+ require_paths:
90
+ - lib
91
+ required_ruby_version: !ruby/object:Gem::Requirement
92
+ none: false
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: "0"
97
+ required_rubygems_version: !ruby/object:Gem::Requirement
98
+ none: false
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: "0"
103
+ requirements: []
104
+
105
+ rubyforge_project: hexdump
106
+ rubygems_version: 1.5.2
107
+ signing_key:
108
+ specification_version: 3
109
+ summary: Simple and Fast hexdumping for Ruby.
110
+ test_files:
111
+ - spec/hexdump_spec.rb
112
+ - spec/extensions_spec.rb