class Evalso::Request

Public Class Methods

new(hash) click to toggle source

Usage:

Evalso::Request.new(lang, code, inputFiles: ["filename.txt"])

or

Evalso::Request.new(language: lang, code: code, inputFiles: {"filename.txt" => "file contents"})

Defaults:

Evalso::Request.new(language: nil, code: nil, inputFiles: {}, compilationOnly: false)

If `language` or `code` are not specified, an ArugmentError is raised.

# File lib/evalso.rb, line 46
def initialize(hash)
  self.class.base_uri Evalso.base_uri

  hash = {
    :api_version => Evalso::API_VERSION,
    :language    => nil,
    :code        => nil,
    :inputFiles  => {},
    :compilationOnly => false,
  }.merge(hash)

  raise ArgumentError, "no language specified." unless hash[:language]
  raise ArgumentError, "no code specified."     unless hash[:code]

  hash[:inputFiles] = handle_input_files(hash[:inputFiles])

  @hash = hash
end

Public Instance Methods

handle_input_files(files) click to toggle source
# File lib/evalso.rb, line 85
def handle_input_files(files)
  # If files is an array of filenames,
  # make it a hash of filenames => file content.
  if files.is_a?(Array)
    ret = {}
    files.each do |file|
      ret[file] = open(file).read
    end

    files = ret
  end

  files.keys.each do |file|
    files[file] = Base64.encode64(files[file])
  end

  files
end
response() click to toggle source
# File lib/evalso.rb, line 65
def response
  opts = {
    :body    => @hash.to_json,
    :headers => {
      "Content-Type" => "text/json"
    }
  }

  resp = self.class.post('/evaluate', opts)
  ret = JSON.parse(resp.body)

  if !resp.response.is_a?(Net::HTTPSuccess)
    error = ret['error']
    error ||= "#{resp.response.code} #{resp.response.msg.inspect}"
    raise Evalso::HTTPError, ret['error']
  end

  @response = Response.new(@hash[:code], ret)
end