eac_ruby_utils 0.87.0 → 0.90.0
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/lib/eac_ruby_utils/bit.rb +46 -0
- data/lib/eac_ruby_utils/bit_array.rb +74 -0
- data/lib/eac_ruby_utils/byte.rb +93 -0
- data/lib/eac_ruby_utils/byte_array.rb +36 -0
- data/lib/eac_ruby_utils/patches/pathname/basename_noext.rb +10 -0
- data/lib/eac_ruby_utils/patches/pathname/reqdir_glob.rb +13 -0
- data/lib/eac_ruby_utils/version.rb +1 -1
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 835bf57068df74ba63d257a3a724ea6c1bb55c61ce22d0641fbfb1d9ac1051ac
|
4
|
+
data.tar.gz: a968421702a2320f371123cafa19d4872276b3af2301272ce14162aedd02bb45
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b6ad3ff00cc3d865bc6f580ac64961a4d034d1a1dea4634866846c12e925ec7f21136114afe479721a6cad6813b17f4b601e7acfadedefe43719de7e184e68ff
|
7
|
+
data.tar.gz: 2ae2e960541fc651edca20e53f2b2d772fc4fe45df09e4676a9275d007165f881b4674f0d37eda315e225f2b5d500b7fe6cf073ab3e6e63fd102202e7292586f
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/patches/module/compare_by'
|
4
|
+
|
5
|
+
module EacRubyUtils
|
6
|
+
class Bit
|
7
|
+
VALID_VALUES = [0, 1].freeze
|
8
|
+
|
9
|
+
class << self
|
10
|
+
def assert(obj)
|
11
|
+
return obj if obj.is_a?(self)
|
12
|
+
|
13
|
+
new(obj.to_i)
|
14
|
+
end
|
15
|
+
|
16
|
+
def valid_integer?(value)
|
17
|
+
value.is_a?(::Integer) && VALID_VALUES.include?(value)
|
18
|
+
end
|
19
|
+
|
20
|
+
def validate_integer(value)
|
21
|
+
return value if valid_integer?(value)
|
22
|
+
|
23
|
+
raise(::ArgumentError, "Invalid bit value: #{value} (Valid: #{VALID_VALUES})")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
attr_reader :value
|
28
|
+
compare_by :value
|
29
|
+
delegate :to_s, :zero?, to: :value
|
30
|
+
|
31
|
+
# @param value [Integer]
|
32
|
+
def initialize(value)
|
33
|
+
@value = self.class.validate_integer(value)
|
34
|
+
end
|
35
|
+
|
36
|
+
# @return [Boolean]
|
37
|
+
def one?
|
38
|
+
!zero?
|
39
|
+
end
|
40
|
+
|
41
|
+
# @return [Integer]
|
42
|
+
def to_i
|
43
|
+
value
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/bit'
|
4
|
+
require 'eac_ruby_utils/byte'
|
5
|
+
require 'eac_ruby_utils/byte_array'
|
6
|
+
require 'eac_ruby_utils/patches/module/compare_by'
|
7
|
+
|
8
|
+
module EacRubyUtils
|
9
|
+
class BitArray
|
10
|
+
class << self
|
11
|
+
def assert(obj)
|
12
|
+
return obj if obj.is_a?(self)
|
13
|
+
return new(obj) if obj.is_a?(::Enumerable)
|
14
|
+
|
15
|
+
raise "Could not convert #{obj} to #{self}"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
delegate :each, :each_with_index, :to_a, :size, :count, :length, :[], :fetch, to: :values_array
|
20
|
+
compare_by :values_array
|
21
|
+
|
22
|
+
def initialize(values = [])
|
23
|
+
values.each { |value| push(value) }
|
24
|
+
end
|
25
|
+
|
26
|
+
def <<(value)
|
27
|
+
push(value)
|
28
|
+
end
|
29
|
+
|
30
|
+
# @param value [EacRubyUtils::Bit]
|
31
|
+
# @return [EacRubyUtils::Bit]
|
32
|
+
def push(value)
|
33
|
+
values_array.push(::EacRubyUtils::Bit.assert(value))
|
34
|
+
end
|
35
|
+
|
36
|
+
# @return [EacRubyUtils::BitArray]
|
37
|
+
def reverse
|
38
|
+
self.class.new(values_array.reverse)
|
39
|
+
end
|
40
|
+
|
41
|
+
# @param big_endian [Boolean]
|
42
|
+
# @return [EacRubyUtils::ByteArray]
|
43
|
+
def to_byte_array(big_endian = false)
|
44
|
+
unless count.modulo(::EacRubyUtils::Byte::BIT_COUNT).zero?
|
45
|
+
raise 'Bits returned is not multile of 8'
|
46
|
+
end
|
47
|
+
|
48
|
+
byte_bits_enumerator.each_with_object(::EacRubyUtils::ByteArray.new) do |e, a|
|
49
|
+
a << ::EacRubyUtils::Byte.from_bit_array(e, big_endian)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# @return [Array<Integer>]
|
54
|
+
def to_int_array
|
55
|
+
values_array.map(&:to_i)
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
def byte_bits_enumerator
|
61
|
+
::Enumerator.new do |y|
|
62
|
+
offset = 0
|
63
|
+
while offset < values_array.count
|
64
|
+
y.yield(values_array.slice(offset, ::EacRubyUtils::Byte::BIT_COUNT))
|
65
|
+
offset += ::EacRubyUtils::Byte::BIT_COUNT
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def values_array
|
71
|
+
@values_array ||= []
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/bit'
|
4
|
+
require 'eac_ruby_utils/bit_array'
|
5
|
+
require 'eac_ruby_utils/patches/module/compare_by'
|
6
|
+
|
7
|
+
module EacRubyUtils
|
8
|
+
class Byte
|
9
|
+
BIT_COUNT = 8
|
10
|
+
BIT_INDEX_RANGE = (0..7).freeze
|
11
|
+
VALUE_RANGE = (0..255).freeze
|
12
|
+
|
13
|
+
class << self
|
14
|
+
def assert(obj)
|
15
|
+
return obj if obj.is_a?(self)
|
16
|
+
|
17
|
+
new(obj.to_i)
|
18
|
+
end
|
19
|
+
|
20
|
+
def from_bit_array(bit_array, big_endian = false)
|
21
|
+
bit_array = ::EacRubyUtils::BitArray.assert(bit_array)
|
22
|
+
raise ::ArgumentError, "Wrong bit array size: #{bit_array.size}" if
|
23
|
+
bit_array.size != BIT_COUNT
|
24
|
+
|
25
|
+
bit_array = bit_array.reverse if big_endian
|
26
|
+
bit_array.each_with_index.inject(new(0)) do |a, e|
|
27
|
+
a.bit_set(e[1], e[0])
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def valid_bit_index?(value)
|
32
|
+
value.is_a?(::Integer) && BIT_INDEX_RANGE.include?(value)
|
33
|
+
end
|
34
|
+
|
35
|
+
def validate_bit_index(value)
|
36
|
+
return value if valid_bit_index?(value)
|
37
|
+
|
38
|
+
raise(::ArgumentError, "Invalid bit index: #{value} (Range: #{BIT_INDEX_RANGE})")
|
39
|
+
end
|
40
|
+
|
41
|
+
def valid_value?(value)
|
42
|
+
value.is_a?(::Integer) && VALUE_RANGE.include?(value)
|
43
|
+
end
|
44
|
+
|
45
|
+
def validate_value(value)
|
46
|
+
return value if valid_value?(value)
|
47
|
+
|
48
|
+
raise(::ArgumentError, "Invalid byte value: #{value} (Range: #{VALUE_RANGE})")
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
attr_reader :value
|
53
|
+
compare_by :value
|
54
|
+
|
55
|
+
def initialize(value)
|
56
|
+
self.value = value
|
57
|
+
end
|
58
|
+
|
59
|
+
# @param bit_index [Integer]
|
60
|
+
# @return [EacRubyUtils::Bit]
|
61
|
+
def [](bit_index)
|
62
|
+
bit_get(bit_index)
|
63
|
+
end
|
64
|
+
|
65
|
+
# @param bit_index [Integer]
|
66
|
+
# @return [EacRubyUtils::Bit]
|
67
|
+
def bit_get(bit_index)
|
68
|
+
self.class.validate_bit_index(bit_index)
|
69
|
+
|
70
|
+
::EacRubyUtils::Bit.new((value & (1 << bit_index)) >> bit_index)
|
71
|
+
end
|
72
|
+
|
73
|
+
def bit_set(bit_index, bit_value)
|
74
|
+
self.class.validate_bit_index(bit_index)
|
75
|
+
bit = ::EacRubyUtils::Bit.assert(bit_value)
|
76
|
+
mask = (1 << bit_index)
|
77
|
+
self.class.new(bit.zero? ? value & ~mask : value | mask)
|
78
|
+
end
|
79
|
+
|
80
|
+
def to_bit_array
|
81
|
+
BIT_INDEX_RANGE.map { |bit_index| self[bit_index] }
|
82
|
+
end
|
83
|
+
|
84
|
+
# @return [Integer]
|
85
|
+
def to_i
|
86
|
+
value
|
87
|
+
end
|
88
|
+
|
89
|
+
private
|
90
|
+
|
91
|
+
attr_writer :value
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/byte'
|
4
|
+
require 'eac_ruby_utils/patches/module/compare_by'
|
5
|
+
|
6
|
+
module EacRubyUtils
|
7
|
+
class ByteArray
|
8
|
+
delegate :to_a, :size, :count, :length, :[], :fetch, to: :values_array
|
9
|
+
compare_by :values_array
|
10
|
+
|
11
|
+
def initialize(values = [])
|
12
|
+
values.each { |value| push(value) }
|
13
|
+
end
|
14
|
+
|
15
|
+
def <<(value)
|
16
|
+
push(value)
|
17
|
+
end
|
18
|
+
|
19
|
+
# @param value [EacRubyUtils::Byte]
|
20
|
+
# @return [EacRubyUtils::Byte]
|
21
|
+
def push(value)
|
22
|
+
values_array.push(::EacRubyUtils::Byte.assert(value))
|
23
|
+
end
|
24
|
+
|
25
|
+
# @return [Array<Integer>]
|
26
|
+
def to_int_array
|
27
|
+
values_array.map(&:to_i)
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def values_array
|
33
|
+
@values_array ||= []
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'pathname'
|
4
|
+
|
5
|
+
class Pathname
|
6
|
+
# A .glob that raises a ::RuntimeError if +self+ is not a directory.
|
7
|
+
# @return [Pathname]
|
8
|
+
def reqdir_glob(*args)
|
9
|
+
raise ::RuntimeError, "\"#{self}\" is not a directory" unless directory?
|
10
|
+
|
11
|
+
glob(*args)
|
12
|
+
end
|
13
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eac_ruby_utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.90.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Esquilo Azul Company
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-03-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -102,9 +102,13 @@ files:
|
|
102
102
|
- lib/eac_ruby_utils.rb
|
103
103
|
- lib/eac_ruby_utils/abstract_methods.rb
|
104
104
|
- lib/eac_ruby_utils/arguments_consumer.rb
|
105
|
+
- lib/eac_ruby_utils/bit.rb
|
106
|
+
- lib/eac_ruby_utils/bit_array.rb
|
105
107
|
- lib/eac_ruby_utils/blank_not_blank.rb
|
106
108
|
- lib/eac_ruby_utils/boolean.rb
|
107
109
|
- lib/eac_ruby_utils/by_reference.rb
|
110
|
+
- lib/eac_ruby_utils/byte.rb
|
111
|
+
- lib/eac_ruby_utils/byte_array.rb
|
108
112
|
- lib/eac_ruby_utils/common_concern.rb
|
109
113
|
- lib/eac_ruby_utils/common_concern/class_setup.rb
|
110
114
|
- lib/eac_ruby_utils/common_concern/module_setup.rb
|
@@ -205,11 +209,13 @@ files:
|
|
205
209
|
- lib/eac_ruby_utils/patches/object/to_pathname.rb
|
206
210
|
- lib/eac_ruby_utils/patches/object/to_uri.rb
|
207
211
|
- lib/eac_ruby_utils/patches/pathname.rb
|
212
|
+
- lib/eac_ruby_utils/patches/pathname/basename_noext.rb
|
208
213
|
- lib/eac_ruby_utils/patches/pathname/basename_sub.rb
|
209
214
|
- lib/eac_ruby_utils/patches/pathname/if_exist.rb
|
210
215
|
- lib/eac_ruby_utils/patches/pathname/mkpath_s.rb
|
211
216
|
- lib/eac_ruby_utils/patches/pathname/parent_n.rb
|
212
217
|
- lib/eac_ruby_utils/patches/pathname/readlink_r.rb
|
218
|
+
- lib/eac_ruby_utils/patches/pathname/reqdir_glob.rb
|
213
219
|
- lib/eac_ruby_utils/patches/regexp.rb
|
214
220
|
- lib/eac_ruby_utils/patches/regexp/if_match.rb
|
215
221
|
- lib/eac_ruby_utils/patches/regexp/to_parser.rb
|