class Tanj::Frontend
Public Class Methods
new()
click to toggle source
# File lib/tanj/frontend.rb, line 3 def initialize @events = [] end
Public Instance Methods
receive(line)
click to toggle source
# File lib/tanj/frontend.rb, line 7 def receive(line) return unless line.start_with? "tanj| " event = JSON.parse(line[6..-1], symbolize_names: true) @events.push event if event[:type] == 'array' ary = event[:value] if ary.empty? puts Paint['<empty array>', 'dark gray'] else print Paint["#{event[:name]}", :underline, :bright, 'deep sky blue'], ': ' ary.each.with_index do |val, idx| idx_layer = 0 Array(event[:options][:index]).each.sort_by do |target_idx| target_idx.is_a?(Array) ? target_idx[1][:value] - target_idx[0][:value] + 2 : 1 end.each.with_index do |target_idx, target_layer| if target_idx.is_a?(Array) target_idx = Range.new(*target_idx.map { |v| v[:value] }) else target_idx = target_idx[:value] end if target_idx === idx idx_layer = target_layer + 1 break end end cell_color = ['white', 'green', 'yellow', 'orange'][idx_layer] print Paint['[ ', cell_color] print Paint[val.inspect, :bright, cell_color] print Paint[' ] ', cell_color] end puts end elsif event[:type] == 'message' puts Paint[event[:message], :bright, 'orange'] elsif event[:type] == 'variable' print Paint["#{event[:name]}", :underline, :bright, 'deep sky blue'], ': ' puts Paint[event[:value].inspect, :bright, 'white'] else p event end end