hexutils 0.0.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 58d93d37042b54496a85566264d827f2852ed034ecf6356b63ec121561230347
4
+ data.tar.gz: 999e485f063f2e1753f9541e94bd34deb2a0c609bb26b03e551be0b234ffe7c9
5
+ SHA512:
6
+ metadata.gz: 04aeca2de8a683f4d3a5080e23cb10ceb3d38aa580bbaa127b267315e59fe38bd4da3de416cdf6081d233395d35772091b6389e1fe5f1d2750c84849e80145dc
7
+ data.tar.gz: 5f978fc664a4398e8148c96812875910a6db8629e1448acec559efe76c368efa79f8d4c30c3accb55fb480069a270cab00eb6eac6ac2ad34111a685f94590583
data/CHANGELOG.md ADDED
@@ -0,0 +1,3 @@
1
+ ### 0.0.1 / 2023-01-10
2
+
3
+ * Everything is new. First release
data/Manifest.txt ADDED
@@ -0,0 +1,6 @@
1
+ CHANGELOG.md
2
+ Manifest.txt
3
+ README.md
4
+ Rakefile
5
+ lib/hex.rb
6
+ lib/hexutils.rb
data/README.md ADDED
@@ -0,0 +1,32 @@
1
+ # Hex(adecimal) Encode / Decode Helpers - From Hex(adecimal) String to Bin(ary) String And Back
2
+
3
+ hexutils - hex(adecimal) encode/decode helpers 'n' more for String, NilClass, Kernel and more
4
+
5
+
6
+ * home :: [github.com/rubycocos/core](https://github.com/rubycocos/core)
7
+ * bugs :: [github.com/rubycocos/core/issues](https://github.com/rubycocos/core/issues)
8
+ * gem :: [rubygems.org/gems/hexutils](https://rubygems.org/gems/hexutils)
9
+ * rdoc :: [rubydoc.info/gems/hexutils](http://rubydoc.info/gems/hexutils)
10
+
11
+
12
+
13
+
14
+
15
+ ## Usage
16
+
17
+ To be done
18
+
19
+
20
+ ## License
21
+
22
+ The scripts are dedicated to the public domain.
23
+ Use it as you please with no restrictions whatsoever.
24
+
25
+
26
+
27
+
28
+ ## Questions? Comments?
29
+
30
+ Send them along to the [wwwmake forum](http://groups.google.com/group/wwwmake).
31
+ Thanks!
32
+
data/Rakefile ADDED
@@ -0,0 +1,30 @@
1
+ require 'hoe'
2
+
3
+
4
+ Hoe.spec 'hexutils' do
5
+
6
+ self.version = '0.0.1'
7
+
8
+ self.summary = "hexutils - hex(adecimal) encode/decode helpers 'n' more for String, NilClass, Kernel and more"
9
+ self.description = summary
10
+
11
+ self.urls = { home: 'https://github.com/rubycocos/core' }
12
+
13
+ self.author = 'Gerald Bauer'
14
+ self.email = 'wwwmake@googlegroups.com'
15
+
16
+ # switch extension to .markdown for gihub formatting
17
+ self.readme_file = 'README.md'
18
+ self.history_file = 'CHANGELOG.md'
19
+
20
+ self.extra_deps = [
21
+ ]
22
+
23
+ self.licenses = ['Public Domain']
24
+
25
+ self.spec_extras = {
26
+ required_ruby_version: '>= 2.3'
27
+ }
28
+
29
+ end
30
+
data/lib/hex.rb ADDED
@@ -0,0 +1,3 @@
1
+ require_relative 'hexutils' ## lets you use require 'hex' too
2
+
3
+
data/lib/hexutils.rb ADDED
@@ -0,0 +1,95 @@
1
+
2
+
3
+
4
+ ##
5
+ ## todo/check:
6
+ ## allow/ignore whitespaces [ \t\n\r] in hex strings why? why not?
7
+ ##
8
+ ## or add option with ignore e.g. ':' or such - why? why not?
9
+
10
+ class String
11
+ ## use deprecated_hex or legacy_hex
12
+ ## or ??? such? - why? why not?
13
+ alias_method :old_hex, :hex
14
+ alias_method :hexnum, :old_hex
15
+
16
+ def hex?
17
+ if self.empty?
18
+ ## make empty string (e.g.'') a valid hex string - why? why not?
19
+ ## note: 0x (prefix only) is NOT a valid hex string
20
+ true
21
+ elsif self =~ /\A(0[xX])?[0-9a-fA-F]+\z/
22
+ ## note: allow 0x0 or 0xf too or 0xfff or 0x123
23
+ ## that is uneven hexstrings
24
+ ## a byte assumes always two chars
25
+ true
26
+ else
27
+ false
28
+ end
29
+ end
30
+ alias_method :is_hex?, :hex?
31
+
32
+ def to_hex
33
+ if self.empty?
34
+ ## change encoding to utf_8 - why? why not?
35
+ ## always return a new string why? why not?
36
+ '' ## note: assume utf_8 encoding for new string
37
+ else
38
+ ## note: always return a hex string with default encoding e.g. utf-8 - why? why not?
39
+ ### check if unpack always works on bytes (or .b required???)
40
+ self.unpack( 'H*' ).first.force_encoding( Encoding::UTF_8 )
41
+ end
42
+ end
43
+ alias_method :hex, :to_hex
44
+ end # class String
45
+
46
+
47
+ class NilClass
48
+ def hex?() false; end
49
+ alias_method :is_hex?, :hex?
50
+
51
+ ##
52
+ # open question - add hex/to_hex to NilClass too (along like to_s/to_i/etc.)
53
+ # why? why not?
54
+ def to_hex
55
+ '' ## note: assume utf_8 encoding for new string
56
+ end
57
+ alias_method :hex, :to_hex
58
+ end # class NilClass
59
+
60
+
61
+
62
+ module Kernel
63
+ def encode_hex( bin ) ## bin_to_hex
64
+ ## use ArgumentError or TypeError - why? why not?
65
+ raise TypeError, "Value must be a string" unless bin.is_a?( String )
66
+ ## note: always return a hex string with default encoding e.g. utf-8 - why? why not?
67
+ bin.hex
68
+ end
69
+
70
+
71
+ def decode_hex( hex )
72
+ ## use ArgumentError or TypeError - why? why not?
73
+ raise TypeError, "Value must be a string" unless hex.is_a?( String )
74
+ ## note: for now allow whitespaces - get auto-removed - why? why not?
75
+ hex = hex.gsub( /[ \t\r\n]/, '' )
76
+ if hex.empty? ## special case - empty string
77
+ ''.b
78
+ else
79
+ raise TypeError, 'Non-hexadecimal char found' unless hex =~ /\A(0[xX])?[0-9a-fA-F]+\z/
80
+
81
+ ## allow optional starting 0x - why? why not?
82
+ hex = hex[2..-1] if ['0x', '0X'].include?( hex[0,2] )
83
+
84
+ hex = '0'+hex if hex.size.odd?
85
+ [hex].pack('H*')
86
+ end
87
+ end
88
+ alias_method :hex, :decode_hex
89
+
90
+ ## open question - add "global" bin_to_hex and hex_to_bin alias to - why? why not?
91
+
92
+ # alias_method :bin_to_hex, :encode_hex ## add bin_to_hex alias - why? why not?
93
+ # alias_method :hex_to_bin, :decode_hex ## add hex_to_bin alias - why? why not?
94
+ end # module Kernel
95
+
metadata ADDED
@@ -0,0 +1,89 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hexutils
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Gerald Bauer
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-01-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rdoc
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '4.0'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '7'
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '4.0'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '7'
33
+ - !ruby/object:Gem::Dependency
34
+ name: hoe
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '3.23'
40
+ type: :development
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '3.23'
47
+ description: hexutils - hex(adecimal) encode/decode helpers 'n' more for String, NilClass,
48
+ Kernel and more
49
+ email: wwwmake@googlegroups.com
50
+ executables: []
51
+ extensions: []
52
+ extra_rdoc_files:
53
+ - CHANGELOG.md
54
+ - Manifest.txt
55
+ - README.md
56
+ files:
57
+ - CHANGELOG.md
58
+ - Manifest.txt
59
+ - README.md
60
+ - Rakefile
61
+ - lib/hex.rb
62
+ - lib/hexutils.rb
63
+ homepage: https://github.com/rubycocos/core
64
+ licenses:
65
+ - Public Domain
66
+ metadata: {}
67
+ post_install_message:
68
+ rdoc_options:
69
+ - "--main"
70
+ - README.md
71
+ require_paths:
72
+ - lib
73
+ required_ruby_version: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ version: '2.3'
78
+ required_rubygems_version: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ requirements: []
84
+ rubygems_version: 3.3.7
85
+ signing_key:
86
+ specification_version: 4
87
+ summary: hexutils - hex(adecimal) encode/decode helpers 'n' more for String, NilClass,
88
+ Kernel and more
89
+ test_files: []