blob: 0a16ddeb42a8b0e3fb33ba9b13a817382b787a7f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
# frozen_string_literal: true
require 'stringio'
module NanoBot
module Components
class Stream < StringIO
def write(*args)
if @callback
begin
@accumulated += args.first
rescue StandardError => _e
@accumulated = "#{@accumulated.force_encoding('UTF-8')}#{args.first.force_encoding('UTF-8')}"
end
if @callback.arity == 3
@callback.call(@accumulated, args.first, false)
else
@callback.call(@accumulated, args.first, false, args[1])
end
end
super(args.first)
end
def callback=(block)
@accumulated = ''
@callback = block
end
def finish
flush
result = string.clone
truncate(0)
rewind
if @callback
if @callback.arity == 3
@callback.call(@accumulated, nil, true)
else
@callback.call(@accumulated, nil, true, nil)
end
@callback = nil
@accumulated = nil
end
result
end
end
end
end
|