Class: Mumukit::Bridge::Runner

Inherits:
Object
  • Object
show all
Defined in:
lib/mumukit/bridge/runner.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(test_runner_url, timeout = 10) ⇒ Runner

Returns a new instance of Runner.



11
12
13
14
# File 'lib/mumukit/bridge/runner.rb', line 11

def initialize(test_runner_url, timeout=10)
  @test_runner_url = test_runner_url
  @timeout = timeout
end

Instance Attribute Details

#test_runner_urlObject

Returns the value of attribute test_runner_url.



9
10
11
# File 'lib/mumukit/bridge/runner.rb', line 9

def test_runner_url
  @test_runner_url
end

Instance Method Details

#assets(path, options = {}) ⇒ Object



77
78
79
# File 'lib/mumukit/bridge/runner.rb', line 77

def assets(path, options={})
  raw_get_to_server "assets/#{path}", options
end

#importable_infoObject



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/mumukit/bridge/runner.rb', line 50

def importable_info
  @language_json ||= info.merge('url' => test_runner_url)
  {
    name:                   @language_json['name'],
    comment_type:           @language_json['comment_type'],
    test_runner_url:        @language_json['url'],
    output_content_type:    @language_json['output_content_type'],
    prompt:                (@language_json.dig('language', 'prompt') || '') + ' ',
    extension:              @language_json.dig('language', 'extension'),
    highlight_mode:         @language_json.dig('language', 'ace_mode'),
    visible_success_output: @language_json.dig('language', 'graphic').present?,
    devicon:                @language_json.dig('language', 'icon', 'name'),
    triable:                @language_json.dig('features', 'try').present?,
    feedback:               @language_json.dig('features', 'feedback').present?,
    queriable:              @language_json.dig('features', 'query').present?,
    stateful_console:       @language_json.dig('features', 'stateful').present?,
    test_extension:         @language_json.dig('test_framework', 'test_extension'),
    test_template:          @language_json.dig('test_framework', 'template'),
    layout_js_urls:         get_assets_for(:layout, 'js'),
    layout_html_urls:       get_assets_for(:layout, 'html'),
    layout_css_urls:        get_assets_for(:layout, 'css'),
    editor_js_urls:         get_assets_for(:editor, 'js'),
    editor_html_urls:       get_assets_for(:editor, 'html'),
    editor_css_urls:        get_assets_for(:editor, 'css')
  }
end

#info(options = {}) ⇒ Object



81
82
83
# File 'lib/mumukit/bridge/runner.rb', line 81

def info(options={})
  JSON.parse raw_get_to_server(:info, options.merge(content_type: :json))
end

#post_to_server(request, route) ⇒ Object



96
97
98
99
100
101
102
103
104
# File 'lib/mumukit/bridge/runner.rb', line 96

def post_to_server(request, route)
  JSON.parse RestClient::Request.new(
                 method: :post,
                 url: "#{test_runner_url}/#{route}",
                 payload: request.to_json,
                 timeout: @timeout,
                 open_timeout: @timeout,
                 headers: {content_type: :json}).execute()
end

#raw_get_to_server(route, options) ⇒ Object



92
93
94
# File 'lib/mumukit/bridge/runner.rb', line 92

def raw_get_to_server(route, options)
  RestClient.get("#{test_runner_url}/#{route}", options)
end

#run_query!(request) ⇒ Object



31
32
33
34
35
# File 'lib/mumukit/bridge/runner.rb', line 31

def run_query!(request)
  with_server_response request, 'query' do |it|
    {status: it['exit'].to_sym, result: it['out']}
  end
end

#run_tests!(request) ⇒ Object

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}],
 status: :passed|:failed|:errored|:aborted|:passed_with_warnings,
 expectation_results: [{binding:string, inspection:string, result:symbol}],
 feedback: string}


24
25
26
27
28
29
# File 'lib/mumukit/bridge/runner.rb', line 24

def run_tests!(request)
  with_server_response request, 'test' do |response|
    response_type = ResponseType.for_response response
    response_type.parse response
  end
end

#run_try!(request) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/mumukit/bridge/runner.rb', line 37

def run_try!(request)
  with_server_response request, 'try' 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

#with_server_response(request, route, &action) ⇒ Object



85
86
87
88
89
90
# File 'lib/mumukit/bridge/runner.rb', line 85

def with_server_response(request, route, &action)
  response = post_to_server(request, route)
  action.call(response)
rescue Exception => e
  {result: e.message, status: :aborted}
end