module CJSONCI::Servant

Public Class Methods

run!() click to toggle source
# File lib/cjsonci/servant.rb, line 5
def self.run!
  loop do
    obj = read_input
    result = eval_input(obj)
    puts format_message(result).to_json
  end
end

Private Class Methods

eval_input(obj) click to toggle source
# File lib/cjsonci/servant.rb, line 34
def self.eval_input(obj)
  code = obj["eval"]
  eval_result = nil
  begin
    eval_result = TOPLEVEL_BINDING.eval code.to_s
  rescue Exception => ex
    eval_result = ex
  end

  case eval_result.class.name
  when "SignalException"
    case eval_result.message
    when "SIGTERM"
      exit 0
    end
  when "SystemExit"
    exit 0
  end

  eval_result
end
format_message(result) click to toggle source
# File lib/cjsonci/servant.rb, line 56
def self.format_message(result)
  if result.is_a? Exception
    {
      type: "error",
      class: result.class,
      message: result,
    }
  else
    {
      type: "ok",
      result: result,
    }
  end
end
read_input() click to toggle source
# File lib/cjsonci/servant.rb, line 15
def self.read_input
  input = ""
  obj = nil
  loop do
    line = STDIN.gets
    exit 0 unless line
    input << line

    begin
      obj = JSON.parse(input)
    rescue
    end

    break if obj
  end

  obj
end