sphere_engine 1.2.0.pre → 1.3.0.pre
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +115 -10
- data/lib/sphere_engine/error.rb +2 -13
- data/lib/sphere_engine/rest/api.rb +6 -0
- data/lib/sphere_engine/rest/judges.rb +28 -0
- data/lib/sphere_engine/rest/problems.rb +30 -0
- data/lib/sphere_engine/rest/request.rb +11 -1
- data/lib/sphere_engine/rest/submissions.rb +13 -1
- data/lib/sphere_engine/rest/test_cases.rb +33 -0
- data/lib/sphere_engine/rest/utils.rb +4 -0
- data/lib/sphere_engine/version.rb +1 -1
- data/sphere_engine.gemspec +1 -1
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 85ffebbdcb50dd3a459d3f218d5f0a71ea013b71
|
4
|
+
data.tar.gz: c56fbeb10283601a2e519798cddeb12890599d99
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5e4b68f18ab79b7b3442c5874768207d719dfddaa6dab3518e4984f5c11a8245b6a61a63d117aaffd420900aa50a630cf17760e3e2e355318c313b6f773e15f5
|
7
|
+
data.tar.gz: d1c931605c1f609e2e884069d71bba064207e10013b56fc3f4e67232476bba7bec23a028c7fcab4d61265371d34b5924b7aa49442b75486d5a84b2ab6663d54c
|
data/README.md
CHANGED
@@ -41,34 +41,139 @@ end
|
|
41
41
|
## Usage Examples
|
42
42
|
After configuring a client, you can do the following things:
|
43
43
|
|
44
|
-
###
|
45
|
-
```ruby
|
46
|
-
client.all_compilers
|
47
|
-
```
|
44
|
+
### Compilers Service
|
48
45
|
|
49
|
-
|
46
|
+
#### Get languages
|
50
47
|
```ruby
|
51
48
|
client.all_languages
|
52
49
|
```
|
53
50
|
|
51
|
+
#### Get compilers
|
52
|
+
```ruby
|
53
|
+
client.all_compilers
|
54
|
+
```
|
54
55
|
|
55
|
-
|
56
|
+
#### Create a submission
|
56
57
|
|
57
58
|
This method return a submission_id
|
58
59
|
```ruby
|
59
60
|
client.create_submission_compiler(
|
60
61
|
language: 11, #LanguageID
|
61
|
-
sourceCode: "#include int main(){
|
62
|
+
sourceCode: "#include <iostream>\n using namespace std;\n int main()\n {\n cout << \"Hello World\" << endl;\n return 0;\n }" #Code example
|
62
63
|
)
|
63
64
|
```
|
64
65
|
|
65
|
-
|
66
|
+
*Other params: input [string]*
|
67
|
+
|
68
|
+
#### Fetch a submission
|
66
69
|
```ruby
|
67
70
|
client.fetch_submission_compilers(submission_id)
|
68
71
|
```
|
69
72
|
|
70
73
|
### Problems service
|
71
|
-
|
74
|
+
|
75
|
+
#### Create a problem
|
76
|
+
|
77
|
+
This method return a "code" is like a problem_id
|
78
|
+
```ruby
|
79
|
+
client.create_problem(
|
80
|
+
code: "RUBY_001", # Unique problem code. consist of 3 up to 16 capital letters. numbers and underscore
|
81
|
+
name: "Problem_Name", #String
|
82
|
+
body: "Write the fibonacci sequence" #String
|
83
|
+
)
|
84
|
+
```
|
85
|
+
|
86
|
+
#### Create testcase to problem
|
87
|
+
|
88
|
+
```ruby
|
89
|
+
client.create_problem_testcase(
|
90
|
+
"PROBLEM_ID",
|
91
|
+
input: "input content",
|
92
|
+
timelimit: 10,
|
93
|
+
output: "output content"
|
94
|
+
)
|
95
|
+
```
|
96
|
+
|
97
|
+
#### Update a problem
|
98
|
+
|
99
|
+
```ruby
|
100
|
+
client.update_problem("PROBLEM_ID", name: "NEW_NAME")
|
101
|
+
```
|
102
|
+
|
103
|
+
*Other params: type [string], interactive [boolean], masterjudgeId [integer], activeTestcases [array]*
|
104
|
+
|
105
|
+
#### Get a list testcases of a problem
|
106
|
+
|
107
|
+
```ruby
|
108
|
+
client.list_testcases("PROBLEM_ID")
|
109
|
+
```
|
110
|
+
|
111
|
+
#### Get a testcase of a problem
|
112
|
+
|
113
|
+
```ruby
|
114
|
+
client.get_testcase("PROBLEM_ID", "TESTCASE_ID")
|
115
|
+
```
|
116
|
+
|
117
|
+
#### Get a file testcases of a problem
|
118
|
+
```ruby
|
119
|
+
client.get_testcase_file("PROBLEM_ID", "TESTCASE_ID", "FILENAME")
|
120
|
+
```
|
121
|
+
|
122
|
+
*Filename is obtained from get_testcase request in uri params*
|
123
|
+
|
124
|
+
#### Get judge list
|
125
|
+
|
126
|
+
```ruby
|
127
|
+
client.all_judges()
|
128
|
+
```
|
129
|
+
|
130
|
+
*Other params: limit [Integer], offset [Integer], type [String]*
|
131
|
+
|
132
|
+
#### Create judge
|
133
|
+
|
134
|
+
```ruby
|
135
|
+
client.create_judge(
|
136
|
+
name: "NameJudge",
|
137
|
+
source: "<source code>"
|
138
|
+
)
|
139
|
+
```
|
140
|
+
|
141
|
+
*Other params: type [String], compilerId [Integer]*
|
142
|
+
|
143
|
+
#### Get judge details
|
144
|
+
|
145
|
+
```ruby
|
146
|
+
client..get_judge("JUDGE_ID")
|
147
|
+
```
|
148
|
+
|
149
|
+
#### Update judge
|
150
|
+
|
151
|
+
```ruby
|
152
|
+
client.update_judge(
|
153
|
+
"JUDGE_ID",
|
154
|
+
name: "NewNameJudge",
|
155
|
+
)
|
156
|
+
```
|
157
|
+
|
158
|
+
*Other params: source [String], compilerId [Integer]*
|
159
|
+
|
160
|
+
#### Create a submission
|
161
|
+
|
162
|
+
```ruby
|
163
|
+
client.create_submission_problem(
|
164
|
+
problemCode: "RUBY_001", #problem_id
|
165
|
+
compilerId: 1, # get of all_request
|
166
|
+
source: "#include <iostream>\n using namespace std;\n int main()\n {\n cout << \"Hello World\" << endl;\n return 0;\n }" #Example
|
167
|
+
)
|
168
|
+
```
|
169
|
+
|
170
|
+
*Other params: userId [Integer]*
|
171
|
+
|
172
|
+
#### Fetch a submission
|
173
|
+
|
174
|
+
```ruby
|
175
|
+
client.fetch_submission_problems("SUBMISSION_ID")
|
176
|
+
```
|
72
177
|
|
73
178
|
## Development
|
74
179
|
|
@@ -80,8 +185,8 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
80
185
|
|
81
186
|
Bug reports and pull requests are welcome on GitHub at https://github.com/14tinchov/sphere_engine. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
82
187
|
|
83
|
-
|
84
188
|
## License
|
85
189
|
|
86
190
|
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
87
191
|
|
192
|
+
|
data/lib/sphere_engine/error.rb
CHANGED
@@ -43,19 +43,8 @@ module SphereEngine
|
|
43
43
|
def parse_error(body)
|
44
44
|
if body.nil? || body.empty?
|
45
45
|
['', nil]
|
46
|
-
elsif body[:message]
|
47
|
-
[body[:message], nil]
|
48
|
-
elsif body[:errors]
|
49
|
-
extract_message_from_errors(body)
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
def extract_message_from_errors(body)
|
54
|
-
first = Array(body[:errors]).first
|
55
|
-
if first.is_a?(Hash)
|
56
|
-
[first[:message].chomp, first[:code]]
|
57
|
-
else
|
58
|
-
[first.chomp, nil]
|
46
|
+
elsif body["message"] || body[:message]
|
47
|
+
[ body["message"] || body[:message], nil]
|
59
48
|
end
|
60
49
|
end
|
61
50
|
end
|
@@ -2,6 +2,9 @@ require 'sphere_engine/rest/access'
|
|
2
2
|
require 'sphere_engine/rest/languages'
|
3
3
|
require 'sphere_engine/rest/compilers'
|
4
4
|
require 'sphere_engine/rest/submissions'
|
5
|
+
require 'sphere_engine/rest/problems'
|
6
|
+
require 'sphere_engine/rest/test_cases'
|
7
|
+
require 'sphere_engine/rest/judges'
|
5
8
|
|
6
9
|
module SphereEngine
|
7
10
|
module REST
|
@@ -11,6 +14,9 @@ module SphereEngine
|
|
11
14
|
include SphereEngine::REST::Languages
|
12
15
|
include SphereEngine::REST::Compilers
|
13
16
|
include SphereEngine::REST::Submissions
|
17
|
+
include SphereEngine::REST::Problems
|
18
|
+
include SphereEngine::REST::TestCases
|
19
|
+
include SphereEngine::REST::Judges
|
14
20
|
end
|
15
21
|
end
|
16
22
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module SphereEngine
|
2
|
+
module REST
|
3
|
+
module Judges
|
4
|
+
include SphereEngine::REST::Utils
|
5
|
+
|
6
|
+
# @options [Hash]
|
7
|
+
def all_judges(options = {})
|
8
|
+
perform_get_requests_of_problems_service("/judges", options)
|
9
|
+
end
|
10
|
+
|
11
|
+
# @options [Hash]
|
12
|
+
def create_judge(options = {})
|
13
|
+
perform_post_requests_of_problems_service("/judges", options)
|
14
|
+
end
|
15
|
+
|
16
|
+
# @judge_id [String]
|
17
|
+
def get_judge(judge_id)
|
18
|
+
perform_get_requests_of_problems_service("/judges/#{judge_id}")
|
19
|
+
end
|
20
|
+
|
21
|
+
# @judge_id [String]
|
22
|
+
# @options [Hash]
|
23
|
+
def update_judge(judge_id, options = {})
|
24
|
+
perform_put_requests_of_problems_service("/judges/#{judge_id}", options)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module SphereEngine
|
2
|
+
module REST
|
3
|
+
module Problems
|
4
|
+
include SphereEngine::REST::Utils
|
5
|
+
|
6
|
+
# @param options [Hash]
|
7
|
+
# This request you could send a limit and offset
|
8
|
+
def all_problems(options = {})
|
9
|
+
perform_get_requests_of_problems_service('/problems', options)
|
10
|
+
end
|
11
|
+
|
12
|
+
# @param options [Hash]
|
13
|
+
# This request you could send a limit and offset
|
14
|
+
def create_problem(options = {})
|
15
|
+
perform_post_requests_of_problems_service('/problems', options)
|
16
|
+
end
|
17
|
+
|
18
|
+
# @param code [String]
|
19
|
+
def get_problem(code)
|
20
|
+
perform_get_requests_of_problems_service("/problems/#{code}")
|
21
|
+
end
|
22
|
+
|
23
|
+
# @param code [String]
|
24
|
+
# @param options [Hash]
|
25
|
+
def update_problem(code, options = {})
|
26
|
+
perform_put_requests_of_problems_service("/problems/#{code}", options)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -27,10 +27,18 @@ module SphereEngine
|
|
27
27
|
# @return [Array, Hash]
|
28
28
|
def perform
|
29
29
|
response = build_http_request
|
30
|
-
response_body = response.body.empty? ? '' :
|
30
|
+
response_body = response.body.empty? ? '' : format_to_response(response)
|
31
31
|
fail_or_return_response_body(response.code, response_body)
|
32
32
|
end
|
33
33
|
|
34
|
+
def format_to_response(response)
|
35
|
+
begin
|
36
|
+
JSON.parse(response.to_s)
|
37
|
+
rescue JSON::ParserError
|
38
|
+
response.to_s
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
34
42
|
def fail_or_return_response_body(code, body)
|
35
43
|
error = error(code, body)
|
36
44
|
raise(error) if error
|
@@ -59,6 +67,8 @@ module SphereEngine
|
|
59
67
|
HTTP.get(uri, params: build_request_params)
|
60
68
|
when :post
|
61
69
|
HTTP.post(uri, params: build_request_params)
|
70
|
+
when :put
|
71
|
+
HTTP.put(uri, params: build_request_params)
|
62
72
|
end
|
63
73
|
end
|
64
74
|
|
@@ -1,6 +1,8 @@
|
|
1
1
|
module SphereEngine
|
2
2
|
module REST
|
3
3
|
module Submissions
|
4
|
+
include SphereEngine::REST::Utils
|
5
|
+
|
4
6
|
# @param options [Hash]
|
5
7
|
# This request you should send a compilerId and source
|
6
8
|
def create_submission_compiler(options = {})
|
@@ -12,6 +14,16 @@ module SphereEngine
|
|
12
14
|
def fetch_submission_compilers(submission_id, options = {})
|
13
15
|
perform_get_requests_of_compílers_service("/submissions/#{submission_id}")
|
14
16
|
end
|
17
|
+
|
18
|
+
# @param options [Hash]
|
19
|
+
def create_submission_problem(options = {})
|
20
|
+
perform_post_requests_of_problems_service('/submissions', options)
|
21
|
+
end
|
22
|
+
|
23
|
+
# @param options [Hash]
|
24
|
+
def fetch_submission_problems(submission_id)
|
25
|
+
perform_get_requests_of_problems_service("/submissions/#{submission_id}")
|
26
|
+
end
|
15
27
|
end
|
16
28
|
end
|
17
|
-
end
|
29
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module SphereEngine
|
2
|
+
module REST
|
3
|
+
module TestCases
|
4
|
+
include SphereEngine::REST::Utils
|
5
|
+
|
6
|
+
# @param problem_id [String]
|
7
|
+
def list_testcases(problem_id)
|
8
|
+
perform_get_requests_of_problems_service("/problems/#{problem_id}/testcases")
|
9
|
+
end
|
10
|
+
|
11
|
+
# @param problem_id [String]
|
12
|
+
# @options [Hash]
|
13
|
+
def create_problem_testcase(problem_id, options = {})
|
14
|
+
perform_post_requests_of_problems_service("/problems/#{problem_id}/testcases", options)
|
15
|
+
end
|
16
|
+
|
17
|
+
# @param problem_id [String]
|
18
|
+
# @param testcase_id [String]
|
19
|
+
def get_testcase(problem_id, testcase_id)
|
20
|
+
perform_get_requests_of_problems_service("/problems/#{problem_id}/testcases/#{testcase_id}")
|
21
|
+
end
|
22
|
+
|
23
|
+
# @param problem_id [String]
|
24
|
+
# @param testcase_id [String]
|
25
|
+
# @param filename [String]
|
26
|
+
def get_testcase_file(problem_id, testcase_id, filename)
|
27
|
+
perform_get_requests_of_problems_service(
|
28
|
+
"/problems/#{problem_id}/testcases/#{testcase_id}/#{filename}"
|
29
|
+
)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -20,6 +20,10 @@ module SphereEngine
|
|
20
20
|
perform_request(:post, :compilers, path, options)
|
21
21
|
end
|
22
22
|
|
23
|
+
def perform_put_requests_of_problems_service(path, options = {})
|
24
|
+
perform_request(:put, :problems, path, options)
|
25
|
+
end
|
26
|
+
|
23
27
|
def perform_request(request_method, service, path, options = {})
|
24
28
|
SphereEngine::REST::Request.new(self, request_method, service, path, options).perform
|
25
29
|
end
|
data/sphere_engine.gemspec
CHANGED
@@ -16,7 +16,7 @@ Gem::Specification.new do |spec|
|
|
16
16
|
spec.email = ["14tinchov@gmail.com"]
|
17
17
|
|
18
18
|
spec.summary = %q{A Ruby interface to the SphereEngine API.}
|
19
|
-
spec.description = %q{This gem was made as an interface to the SphereEngine API. I try to abstract in the best way all his methods that SphereEngine give us}
|
19
|
+
spec.description = %q{This gem was made as an interface to the SphereEngine API. I try to abstract in the best way all his methods that SphereEngine give us.}
|
20
20
|
spec.homepage = "https://github.com/14tinchov/sphere-engine.git"
|
21
21
|
spec.license = "MIT"
|
22
22
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sphere_engine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0.pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Martin Villalba
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-04-
|
11
|
+
date: 2017-04-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: addressable
|
@@ -81,7 +81,7 @@ dependencies:
|
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '2.0'
|
83
83
|
description: This gem was made as an interface to the SphereEngine API. I try to abstract
|
84
|
-
in the best way all his methods that SphereEngine give us
|
84
|
+
in the best way all his methods that SphereEngine give us.
|
85
85
|
email:
|
86
86
|
- 14tinchov@gmail.com
|
87
87
|
executables: []
|
@@ -105,9 +105,12 @@ files:
|
|
105
105
|
- lib/sphere_engine/rest/api.rb
|
106
106
|
- lib/sphere_engine/rest/client.rb
|
107
107
|
- lib/sphere_engine/rest/compilers.rb
|
108
|
+
- lib/sphere_engine/rest/judges.rb
|
108
109
|
- lib/sphere_engine/rest/languages.rb
|
110
|
+
- lib/sphere_engine/rest/problems.rb
|
109
111
|
- lib/sphere_engine/rest/request.rb
|
110
112
|
- lib/sphere_engine/rest/submissions.rb
|
113
|
+
- lib/sphere_engine/rest/test_cases.rb
|
111
114
|
- lib/sphere_engine/rest/utils.rb
|
112
115
|
- lib/sphere_engine/version.rb
|
113
116
|
- sphere_engine.gemspec
|