class Mumukit::Bridge::Runner

Attributes

headers[RW]
test_runner_url[RW]
timeout[RW]

Public Class Methods

new(test_runner_url, timeout=10, headers={}) click to toggle source
# File lib/mumukit/bridge/runner.rb, line 11
def initialize(test_runner_url, timeout=10, headers={})
  @test_runner_url = test_runner_url
  @timeout = timeout
  @headers = headers
end

Public Instance Methods

assets(path, headers={}) click to toggle source
# File lib/mumukit/bridge/runner.rb, line 56
def assets(path, headers={})
  do_get "assets/#{path}", headers
end
info(headers={}) click to toggle source
# File lib/mumukit/bridge/runner.rb, line 60
def info(headers={})
  JSON.parse do_get(:info, json_content_type(headers))
end
run_query!(request, headers={}) click to toggle source

Expects a hash

{query: string, extra: string, content: string}

Returns a hash

{result: string,
 status: :passed|:failed|:errored|:aborted}
# File lib/mumukit/bridge/runner.rb, line 37
def run_query!(request, headers={})
  with_server_response 'query', request, headers do |it|
    {status: it['exit'].to_sym, result: it['out']}
  end
end
run_tests!(request, headers={}) click to toggle source

Expects a hash

{test: string, extra: string, content: string, expectations: [{binding:string, inspection: string})]}

Returns a hash

{result: string,
 test_results: [{title:string, status:symbol, result:string, summary:hash}],
 status: :passed|:failed|:errored|:aborted|:passed_with_warnings,
 expectation_results: [{binding:string, inspection:string, result:symbol}],
 feedback: string}
# File lib/mumukit/bridge/runner.rb, line 25
def run_tests!(request, headers={})
  with_server_response 'test', request, headers do |response|
    response_type = ResponseType.for_response response
    response_type.parse response, request
  end
end
run_try!(request, headers={}) click to toggle source
# File lib/mumukit/bridge/runner.rb, line 43
def run_try!(request, headers={})
  with_server_response 'try', request, headers do |it|
    {
      status: it['exit'].to_sym,
      result: it['out'],
      query_result: it['queryResult'].try do |it|
        { status: it['status'].to_sym,
          result: it['result'] }
      end
    }
  end
end

Private Instance Methods

build_headers(headers) click to toggle source
# File lib/mumukit/bridge/runner.rb, line 89
def build_headers(headers)
  self.headers.merge(headers)
end
do_get(route, headers) click to toggle source
# File lib/mumukit/bridge/runner.rb, line 75
def do_get(route, headers)
  RestClient.get "#{test_runner_url}/#{route}", build_headers(headers)
end
do_json_post(route, request, headers) click to toggle source
# File lib/mumukit/bridge/runner.rb, line 79
def do_json_post(route, request, headers)
  JSON.parse RestClient::Request.new(
                 method: :post,
                 url: "#{test_runner_url}/#{route}",
                 payload: request.to_json,
                 timeout: @timeout,
                 open_timeout: @timeout,
                 headers: build_headers(json_content_type(headers))).execute
end
json_content_type(headers) click to toggle source
# File lib/mumukit/bridge/runner.rb, line 93
def json_content_type(headers)
  headers.merge(content_type: :json)
end
parse_exception_with_response(error) click to toggle source
# File lib/mumukit/bridge/runner.rb, line 97
def parse_exception_with_response(error)
  (JSON.parse(error.response)['out'] rescue nil) ||
    error.response.presence ||
    "<no reason>"
end
with_server_response(route, request, headers, &action) click to toggle source
# File lib/mumukit/bridge/runner.rb, line 66
def with_server_response(route, request, headers, &action)
  response = do_json_post(route, request, headers)
  action.call(response)
rescue RestClient::ExceptionWithResponse => e
  {result: "#{e.message}: #{parse_exception_with_response(e)}", status: :aborted}
rescue Exception => e
  {result: e.message, status: :aborted}
end