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