eac_ruby_utils 0.88.0 → 0.91.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 +78 -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/object/asserts.rb +11 -0
- data/lib/eac_ruby_utils/patches/pathname/reqdir_glob.rb +13 -0
- data/lib/eac_ruby_utils/version.rb +1 -1
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 67479e6645bae216dae24b09ff55f7cb5b12d803113963a3990c4c9215b47827
|
4
|
+
data.tar.gz: d9e542d4e1ba6d39623ce2981da1d3a618946ae483a3822829e3bac92a2fb9cd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 98b6e459e408b63bdf208d9376829e40dac7bac0e062f872b9313440ccec5e0ac35ba11ff339227578c540a6a8463e8ab531d17f77a3ef4bdcd7874352f1a892
|
7
|
+
data.tar.gz: 7da0fb8b6fba05183cdb977ab15fd0e8c93c7d3b3b491e0bcb67e66fdd904def1cabf796de0a64a65526f0a0e427bc21455a9d486ada5e711325f43fe45d6a21
|
@@ -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,78 @@
|
|
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
|
+
def push_array(other_bit_array)
|
31
|
+
@values_array += other_bit_array.values_array
|
32
|
+
end
|
33
|
+
|
34
|
+
# @param value [EacRubyUtils::Bit]
|
35
|
+
# @return [EacRubyUtils::Bit]
|
36
|
+
def push(value)
|
37
|
+
values_array.push(::EacRubyUtils::Bit.assert(value))
|
38
|
+
end
|
39
|
+
|
40
|
+
# @return [EacRubyUtils::BitArray]
|
41
|
+
def reverse
|
42
|
+
self.class.new(values_array.reverse)
|
43
|
+
end
|
44
|
+
|
45
|
+
# @param big_endian [Boolean]
|
46
|
+
# @return [EacRubyUtils::ByteArray]
|
47
|
+
def to_byte_array(big_endian = false)
|
48
|
+
unless count.modulo(::EacRubyUtils::Byte::BIT_COUNT).zero?
|
49
|
+
raise 'Bits returned is not multile of 8'
|
50
|
+
end
|
51
|
+
|
52
|
+
byte_bits_enumerator.each_with_object(::EacRubyUtils::ByteArray.new) do |e, a|
|
53
|
+
a << ::EacRubyUtils::Byte.from_bit_array(e, big_endian)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# @return [Array<Integer>]
|
58
|
+
def to_int_array
|
59
|
+
values_array.map(&:to_i)
|
60
|
+
end
|
61
|
+
|
62
|
+
private
|
63
|
+
|
64
|
+
def byte_bits_enumerator
|
65
|
+
::Enumerator.new do |y|
|
66
|
+
offset = 0
|
67
|
+
while offset < values_array.count
|
68
|
+
y.yield(values_array.slice(offset, ::EacRubyUtils::Byte::BIT_COUNT))
|
69
|
+
offset += ::EacRubyUtils::Byte::BIT_COUNT
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def values_array
|
75
|
+
@values_array ||= []
|
76
|
+
end
|
77
|
+
end
|
78
|
+
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
|
@@ -11,4 +11,15 @@ class Object
|
|
11
11
|
"Argument \"#{argument_name}\" is not a #{klass}" \
|
12
12
|
"(Actual class: #{self.class}, actual value: #{self})"
|
13
13
|
end
|
14
|
+
|
15
|
+
# Raises a ArgumentError if +self.count+ is not equal to +count+.
|
16
|
+
#
|
17
|
+
# @return +self+
|
18
|
+
def assert_count(count, argument_name = 'unknown_argument_name')
|
19
|
+
return self if self.count == count
|
20
|
+
|
21
|
+
raise ::ArgumentError,
|
22
|
+
"Argument \"#{argument_name}\" has wrong elements count" \
|
23
|
+
"(Actual: #{self.count}, Required: #{count})"
|
24
|
+
end
|
14
25
|
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.91.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-03-
|
11
|
+
date: 2022-03-22 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
|
@@ -211,6 +215,7 @@ files:
|
|
211
215
|
- lib/eac_ruby_utils/patches/pathname/mkpath_s.rb
|
212
216
|
- lib/eac_ruby_utils/patches/pathname/parent_n.rb
|
213
217
|
- lib/eac_ruby_utils/patches/pathname/readlink_r.rb
|
218
|
+
- lib/eac_ruby_utils/patches/pathname/reqdir_glob.rb
|
214
219
|
- lib/eac_ruby_utils/patches/regexp.rb
|
215
220
|
- lib/eac_ruby_utils/patches/regexp/if_match.rb
|
216
221
|
- lib/eac_ruby_utils/patches/regexp/to_parser.rb
|