mumukit-bridge 3.5.1 → 3.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/mumukit/bridge/runner.rb +44 -22
- data/lib/mumukit/bridge/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b58fbaed7b8f322059e7482edbdc170f0ef4cacc3a51a8e9e841d5181befde3f
|
4
|
+
data.tar.gz: 472387132d4119364c755be1072b1b85acf4a3e8fc413c84e0b291f812e837e3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 16a4a415717dcd553376e095ca10bf252e9b4e8ecdd012745ce7a528c1ab19a3eb9fb9674465a110253a5f561ef8d540c50bc17fb362422170265d18ea6b3812
|
7
|
+
data.tar.gz: 20cac161fc03789592bd256489ad54324133c19defc2cf20027f4a8777891a047e849726a8a4f79ec07b734935bae33aa53619864aaa02c29129603f89e7cc2c
|
@@ -6,11 +6,12 @@ require_relative './runner/boolean'
|
|
6
6
|
module Mumukit
|
7
7
|
module Bridge
|
8
8
|
class Runner
|
9
|
-
attr_accessor :test_runner_url
|
9
|
+
attr_accessor :test_runner_url, :timeout, :headers
|
10
10
|
|
11
|
-
def initialize(test_runner_url, timeout=10)
|
11
|
+
def initialize(test_runner_url, timeout=10, headers={})
|
12
12
|
@test_runner_url = test_runner_url
|
13
13
|
@timeout = timeout
|
14
|
+
@headers = headers
|
14
15
|
end
|
15
16
|
|
16
17
|
# Expects a hash
|
@@ -21,21 +22,26 @@ module Mumukit
|
|
21
22
|
# status: :passed|:failed|:errored|:aborted|:passed_with_warnings,
|
22
23
|
# expectation_results: [{binding:string, inspection:string, result:symbol}],
|
23
24
|
# feedback: string}
|
24
|
-
def run_tests!(request)
|
25
|
-
with_server_response
|
25
|
+
def run_tests!(request, headers={})
|
26
|
+
with_server_response 'test', request, headers do |response|
|
26
27
|
response_type = ResponseType.for_response response
|
27
28
|
response_type.parse response
|
28
29
|
end
|
29
30
|
end
|
30
31
|
|
31
|
-
|
32
|
-
|
32
|
+
# Expects a hash
|
33
|
+
# {query: string, extra: string, content: string}
|
34
|
+
# Returns a hash
|
35
|
+
# {result: string,
|
36
|
+
# status: :passed|:failed|:errored|:aborted}
|
37
|
+
def run_query!(request, headers={})
|
38
|
+
with_server_response 'query', request, headers do |it|
|
33
39
|
{status: it['exit'].to_sym, result: it['out']}
|
34
40
|
end
|
35
41
|
end
|
36
42
|
|
37
|
-
def run_try!(request)
|
38
|
-
with_server_response
|
43
|
+
def run_try!(request, headers={})
|
44
|
+
with_server_response 'try', request, headers do |it|
|
39
45
|
{
|
40
46
|
status: it['exit'].to_sym,
|
41
47
|
result: it['out'],
|
@@ -47,8 +53,8 @@ module Mumukit
|
|
47
53
|
end
|
48
54
|
end
|
49
55
|
|
50
|
-
def importable_info
|
51
|
-
@language_json ||= info.merge('url' => test_runner_url)
|
56
|
+
def importable_info(headers={})
|
57
|
+
@language_json ||= info(headers).merge('url' => test_runner_url)
|
52
58
|
{
|
53
59
|
name: @language_json['name'],
|
54
60
|
comment_type: @language_json['comment_type'],
|
@@ -74,37 +80,39 @@ module Mumukit
|
|
74
80
|
}
|
75
81
|
end
|
76
82
|
|
77
|
-
def assets(path,
|
78
|
-
|
83
|
+
def assets(path, headers={})
|
84
|
+
do_get "assets/#{path}", headers
|
79
85
|
end
|
80
86
|
|
81
|
-
def info(
|
82
|
-
JSON.parse
|
87
|
+
def info(headers={})
|
88
|
+
JSON.parse do_get(:info, json_content_type(headers))
|
83
89
|
end
|
84
90
|
|
85
|
-
|
86
|
-
|
91
|
+
private
|
92
|
+
|
93
|
+
def with_server_response(route, request, headers, &action)
|
94
|
+
response = do_json_post(route, request, headers)
|
87
95
|
action.call(response)
|
96
|
+
rescue RestClient::ExceptionWithResponse => e
|
97
|
+
{result: "#{e.message}: #{parse_exception_with_response(e)}", status: :aborted}
|
88
98
|
rescue Exception => e
|
89
99
|
{result: e.message, status: :aborted}
|
90
100
|
end
|
91
101
|
|
92
|
-
def
|
93
|
-
RestClient.get
|
102
|
+
def do_get(route, headers)
|
103
|
+
RestClient.get "#{test_runner_url}/#{route}", build_headers(headers)
|
94
104
|
end
|
95
105
|
|
96
|
-
def
|
106
|
+
def do_json_post(route, request, headers)
|
97
107
|
JSON.parse RestClient::Request.new(
|
98
108
|
method: :post,
|
99
109
|
url: "#{test_runner_url}/#{route}",
|
100
110
|
payload: request.to_json,
|
101
111
|
timeout: @timeout,
|
102
112
|
open_timeout: @timeout,
|
103
|
-
headers:
|
113
|
+
headers: build_headers(json_content_type(headers))).execute
|
104
114
|
end
|
105
115
|
|
106
|
-
private
|
107
|
-
|
108
116
|
def get_assets_for(kind, content_type)
|
109
117
|
absolutize(@language_json.dig("#{kind}_assets_urls", content_type) || [])
|
110
118
|
end
|
@@ -112,6 +120,20 @@ module Mumukit
|
|
112
120
|
def absolutize(urls)
|
113
121
|
urls.map { |url| "#{test_runner_url}/#{url}"}
|
114
122
|
end
|
123
|
+
|
124
|
+
def build_headers(headers)
|
125
|
+
self.headers.merge(headers)
|
126
|
+
end
|
127
|
+
|
128
|
+
def json_content_type(headers)
|
129
|
+
headers.merge(content_type: :json)
|
130
|
+
end
|
131
|
+
|
132
|
+
def parse_exception_with_response(error)
|
133
|
+
(JSON.parse(error.response)['out'] rescue nil) ||
|
134
|
+
error.response.presence ||
|
135
|
+
"<no reason>"
|
136
|
+
end
|
115
137
|
end
|
116
138
|
end
|
117
139
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mumukit-bridge
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Franco Leonardo Bulgarelli
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-04-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|