class Jt

Constants

I_LINE
L_LINE
SPACE_SIZE
T_LINE
VALUES
VERSION

Public Class Methods

create(text) click to toggle source
# File lib/jt.rb, line 20
def self.create(text)
  new(text)
end
new(text) click to toggle source
# File lib/jt.rb, line 24
def initialize(text)
  object = JSON.parse(text)
  @queue = []

  if object.instance_of?(Hash)
    @queue << "root\n".colorize(:red)
    parse(object)
  elsif text =~ VALUES
    @queue << "#{output_value(object)}\n"
    return
  else
    raise "Unexpected value #{object.inspect}"
  end
end

Public Instance Methods

to_s() click to toggle source
# File lib/jt.rb, line 39
def to_s
  @queue.join
end

Private Instance Methods

get_line(end_line: nil, space: '') click to toggle source
# File lib/jt.rb, line 89
def get_line(end_line: nil, space: '')
  end_line ? "#{space}#{L_LINE} " : "#{space}#{T_LINE} "
end
get_space(end_line: nil) click to toggle source
# File lib/jt.rb, line 93
def get_space(end_line: nil)
  end_line ? ' ' * SPACE_SIZE : I_LINE + ' ' * (SPACE_SIZE-1)
end
output_value(value) click to toggle source
# File lib/jt.rb, line 74
def output_value(value)
  case value.class.to_s
    when /Hash/
      value.inspect
    when /NilClass/
      "null"
    when /Integer|Fixnum|Float|Bignum/
      value.inspect.colorize(:blue)
    when /TrueClass|FalseClass/
      value.inspect.colorize(:blue)
    else
      value.inspect.colorize(:green)
  end
end
parse(object, space = '') click to toggle source
# File lib/jt.rb, line 45
def parse(object, space = '')
  until object.empty?
    key, value = object.shift

    if key.instance_of?(Hash)
      @queue << get_line(end_line: object.empty?, space: space)
      @queue << "object\n".colorize(:red)
      parse(key, space + get_space(end_line: object.empty?))
      next
    end

    @queue << get_line(end_line: object.empty?, space: space)

    if value.instance_of?(Hash) && !value.empty?
      @queue << "#{key.inspect.colorize(:blue)}\n"
      parse(value, space + get_space(end_line: object.empty?))
    elsif value.instance_of?(Array) && !value.empty?
      @queue << "#{key.inspect.colorize(:blue)}\n"
      parse(value, space + get_space(end_line: object.empty?))
    else
      if object.instance_of?(Array)
        @queue << "#{output_value(key)}\n"
      else
        @queue << "#{key.inspect.colorize(:blue)}: #{output_value(value)}\n"
      end
    end
  end
end