bytemapper 1.0.26 → 1.0.27

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 76c2e215cabd7c201c72481a89a032dcd6034512b4242eb821fe097914c7f69f
4
- data.tar.gz: 31615cfac602b73c2d3d36f1c9a0b4bc9ca55befec6cad72c4fae2fd7f39df80
3
+ metadata.gz: 7f16b61aeb646f03cd1a49dbaca9b948bd95c36a9bdf7582b8c97f50d0d6f5c2
4
+ data.tar.gz: 66d21d518947f760770e1fca457bb3d3b993f4d2b5514bc7ad94841f79af19b9
5
5
  SHA512:
6
- metadata.gz: 4b8d9c242406a8d80d30e901231fe674b2d689c8d0f44310e5e021f305c23f1ea508ee0d9f607ec6c19b187c64d060f40b2b970e3ca7f99ab5ced89a48713d84
7
- data.tar.gz: ed768686f5c64498d0c382a57ba92e292ef1a6fcf72fe69ded983378805aac32056e3e78e79be51c3d534bd222b448f6c69b193f49033e7775e90ea22177ecb7
6
+ metadata.gz: 56498f8a6f77dc55686077847d01f34b01cfbdad3004118cf3041bf80148f3af3b0ead05eb7ecefa1c24cea05c620613cbf6d4fd1247befa4d91b957850d8a06
7
+ data.tar.gz: 57ebf44b242121611b71ca6cd2913f2788a538d4af5cfe49c9ca14f1d90ea8d12f15395242cdc37115965b866bf82e5303ba3c527d4d6ce51b735eb5c1ebdc5e
@@ -23,6 +23,8 @@ module Bytemapper
23
23
  require 'bytemapper/chunk'
24
24
  require 'bytemapper/table'
25
25
 
26
+ using Refinements
27
+
26
28
  @@registry = Registry.new
27
29
 
28
30
  class << self
@@ -71,9 +73,11 @@ module Bytemapper
71
73
  end
72
74
 
73
75
  def map(bytes, shape, name = nil)
74
- bytes.force_encoding(Encoding::ASCII_8BIT)
75
- bytes = StringIO.new(bytes)
76
- if shape.is_a?(Array)
76
+ bytes = StringIO.from(bytes)
77
+
78
+ if shape.is_a?(Bytemapper::Table)
79
+ shape.populate(bytes)
80
+ elsif shape.is_a?(Array)
77
81
  chunks = []
78
82
  shape.each { |s| chunks << Chunk.new(bytes.read(s.size), s, name) }
79
83
  chunks
@@ -95,6 +99,11 @@ module Bytemapper
95
99
  registry.get(obj)
96
100
  end
97
101
 
102
+ def get2(obj)
103
+ obj.each_pair { |k,v| obj[k] = get(v) if registry.registered_name?(v) }
104
+ registry.get(obj)
105
+ end
106
+
98
107
  def put(obj, name)
99
108
  registry.put(obj, name)
100
109
  end
@@ -30,7 +30,7 @@ module Bytemapper
30
30
  self[k] = if v.is_a?(Hash)
31
31
  Chunk.new(@bytes.read(v.size), v, k)
32
32
  elsif v.is_a?(Bytemapper::Table)
33
- if v.unbounded?
33
+ if v.empty?
34
34
  v.populate(@bytes.read(@bytes.size-@bytes.pos))
35
35
  else
36
36
  v.populate(@bytes.read(v.capacity))
@@ -16,6 +16,7 @@
16
16
 
17
17
  module Bytemapper
18
18
  class Registry
19
+ require 'set'
19
20
  require 'bytemapper/nameable'
20
21
 
21
22
  attr_reader :names
@@ -1,32 +1,45 @@
1
1
  module Bytemapper
2
- using Refinements
2
+ module NilTimes
3
+ refine NilClass do
4
+ def times
5
+ 0
6
+ end
7
+ end
8
+ end
3
9
 
4
10
  class Table < Array
5
11
  include Flattenable
6
12
  include Nameable
7
- attr_reader :bytes, :shape
13
+ attr_reader :shape, :rows, :bytes
14
+ using NilTimes
8
15
 
9
16
  def initialize(shape, rows = nil)
10
- @bytes = nil
11
- @shape = Bytemapper.get(shape)
17
+ @shape = Bytemapper.get(shape) || shape
18
+ rows.times { self << @shape }
12
19
  end
13
20
 
14
21
  def populate(bytes)
15
- @bytes = StringIO.from(bytes)
22
+ bytes = bytes.nil? ? '' : bytes
23
+ @bytes = bytes.is_a?(StringIO) ? bytes : StringIO.new(bytes)
24
+ @bytes.string.force_encoding(Encoding::ASCII_8BIT)
25
+ @shape = Bytemapper.get(shape).nil? ? Bytemapper.get2(shape) : Bytemapper.get(shape)
16
26
 
17
- table = Table.new(shape)
18
- table.clear
27
+ (bytes.size / shape.size).times { self << @shape } if unbounded?
19
28
 
29
+ table = Table.new(shape)
30
+ table.clear
20
31
  (bytes.size / shape.size).times do
21
- table << Chunk.new(@bytes.read(shape.size), shape, shape.name)
32
+ table << Chunk.new(@bytes.read(shape.size), shape, shape.name)
22
33
  end
23
-
24
34
  table
25
35
  end
26
36
 
37
+ def unbounded?
38
+ empty?
39
+ end
40
+
27
41
  def size
28
42
  empty? ? 0 : map(&:size).reduce(:+)
29
43
  end
30
-
31
44
  end
32
45
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bytemapper
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.26
4
+ version: 1.0.27
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jefferson Hudson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-16 00:00:00.000000000 Z
11
+ date: 2020-08-22 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Model and interact with bytestrings using Ruby objects.
14
14
  email: jefferson.hudson@gmail.com