binstream 1.0.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.
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+ module Binstream
3
+ module Streams
4
+ class StringReader < Base
5
+ def initialize(path_or_io, **kwargs)
6
+ if path_or_io.is_a?(::StringIO)
7
+ super(path_or_io, **kwargs)
8
+ else
9
+ super(::StringIO.new(path_or_io, "rb"), **kwargs)
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+ module Binstream
3
+ class Tracker
4
+ include Singleton
5
+
6
+ def initialize
7
+ @tracking_buffer = []
8
+ @enabled = false
9
+ end
10
+
11
+ def buffer
12
+ @tracking_buffer
13
+ end
14
+
15
+ def enabled=(bool)
16
+ @enabled = !!bool
17
+ end
18
+
19
+ def enabled?
20
+ @enabled
21
+ end
22
+
23
+ def clear
24
+ @tracking_buffer.clear
25
+ end
26
+
27
+ def track(message = nil, &block)
28
+
29
+ value = if message.nil? && block_given?
30
+ yield
31
+ else
32
+ message
33
+ end
34
+
35
+ if enabled?
36
+ @tracking_buffer << value
37
+ end
38
+
39
+ return value
40
+
41
+ end
42
+
43
+ def print_debug_buffer(options={})
44
+ return unless enabled?
45
+ STDERR.puts ""
46
+ STDERR.puts "DEBUG BUFFER:"
47
+ debug_str = @tracking_buffer.map do |item|
48
+ if item.nil?
49
+ "\\x00"
50
+ elsif item == :newline
51
+ "\n\n"
52
+ elsif item == :break
53
+ "\n\t"
54
+ else
55
+ item.inspect
56
+ end
57
+ end.join(", ")
58
+
59
+ STDERR.puts debug_str
60
+ STDERR.puts ""
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,31 @@
1
+ module Binstream
2
+ module Tracking
3
+ def self.included(base)
4
+ base.extend(ClassMethods)
5
+ end
6
+
7
+ def track(message = nil, &block)
8
+ ::Binstream::Tracker.instance.track(message, &block)
9
+ end
10
+
11
+ def track_pos(stream)
12
+ track do
13
+ "Pos=#{stream.tell}"
14
+ end
15
+ end
16
+
17
+ def without_tracking(&block)
18
+ old_val = ::Binstream::Tracker.instance.enabled?
19
+ ::Binstream::Tracker.instance.enabled = false
20
+ yield
21
+ ensure
22
+ ::Binstream::Tracker.instance.enabled = old_val
23
+ end
24
+
25
+ module ClassMethods
26
+ def track(message = nil, &block)
27
+ ::Binstream::Tracker.instance.track(message, &block)
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,3 @@
1
+ module Binstream
2
+ VERSION = "1.0.0"
3
+ end
metadata ADDED
@@ -0,0 +1,115 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: binstream
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Mitch Dempsey
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2019-09-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: simplecov
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: Binary stream processor
70
+ email:
71
+ - gems@mitchdempsey.com
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - ".gitignore"
77
+ - ".rspec"
78
+ - ".ruby-version"
79
+ - Gemfile
80
+ - Gemfile.lock
81
+ - LICENSE
82
+ - binstream.gemspec
83
+ - lib/binstream.rb
84
+ - lib/binstream/errors.rb
85
+ - lib/binstream/streams/base.rb
86
+ - lib/binstream/streams/file_reader.rb
87
+ - lib/binstream/streams/string_reader.rb
88
+ - lib/binstream/tracker.rb
89
+ - lib/binstream/tracking.rb
90
+ - lib/binstream/version.rb
91
+ homepage: ''
92
+ licenses:
93
+ - GPL
94
+ metadata: {}
95
+ post_install_message:
96
+ rdoc_options: []
97
+ require_paths:
98
+ - lib
99
+ required_ruby_version: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: 2.5.0
104
+ required_rubygems_version: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
109
+ requirements: []
110
+ rubyforge_project:
111
+ rubygems_version: 2.7.3
112
+ signing_key:
113
+ specification_version: 4
114
+ summary: Binary stream processor
115
+ test_files: []