Module: Streamd

Defined in:
lib/streamd.rb

Constant Summary collapse

VERSION =
"0.1.1"

Class Method Summary collapse

Class Method Details



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
# File 'lib/streamd.rb', line 7

def self.print(stream)
  whole = ""
  live = TTY::Live.new

  enum = Enumerator.new do |e|
    in_code_block = false
    stream.each do |chunk|
      curr = ""
      chunk.each_char do |char|
        whole << char
        if whole =~ /\n`{3}[^`]\z/
          in_code_block = !in_code_block
        end
        if whole =~ /\n[\n\s\t]*\n[^\n]\z/ && !in_code_block
          e << [curr, true]
          curr = char
          next
        end
        curr << char
      end
      e << [curr, false]
    end
  end

  current = ""
  enum.each do |chunk, neo|
    current << chunk
    styled = Glamour.render(current, style: 'dracula', width: 180, preserve_newlines: true)
    live.update(styled)
    if neo
      Kernel.print live.clear_lines(2)
      live = TTY::Live.new 
      current.clear
    end
  end

  whole
end