ojsubmitter 0.1.1 → 0.2.0
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/.travis.yml +3 -0
- data/README.md +27 -2
- data/lib/ojsubmitter/cli.rb +3 -1
- data/lib/ojsubmitter/judge/aoj.rb +5 -5
- data/lib/ojsubmitter/judge/poj.rb +54 -0
- data/lib/ojsubmitter/judge.rb +10 -3
- data/lib/ojsubmitter/version.rb +1 -1
- data/lib/ojsubmitter.rb +1 -0
- data/ojsubmitter.gemspec +1 -0
- metadata +17 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c15735be1e373f3a239bca938b6c01aa5e7fb023
|
4
|
+
data.tar.gz: 3ee561981631575f8db2667388c76584ed5edef4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 553aa70b1faf82eba5004510d5550d891d200f045b1a5877d778db45be791f0cb0c20372c809fec1c353fb97dfe07d61dff6fe204689bb48161d544af87a9145
|
7
|
+
data.tar.gz: 6e8900f7ccc3ff3c33c0b45aaaa3241c32c099c46baef4ed64aa12a7439293a3ec14bb75e950c75652f7ff9dc97edd689a217e55513d969b18f673f86807f08f
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -1,9 +1,18 @@
|
|
1
1
|
# Ojsubmitter
|
2
2
|
|
3
|
-
|
3
|
+
[](https://badge.fury.io/rb/ojsubmitter) [](https://travis-ci.org/hadrori/ojsubmitter) [](https://coveralls.io/github/hadrori/ojsubmitter?branch=master) [](https://gemnasium.com/hadrori/ojsubmitter)
|
4
|
+
|
5
|
+
Submit a source code to the online judge from CLI.
|
6
|
+
|
7
|
+
## Requirements
|
8
|
+
|
9
|
+
- ruby >= 2.0.0
|
4
10
|
|
5
11
|
### Enabled Judges
|
6
12
|
- [AIZU ONLINE JUDGE](http://judge.u-aizu.ac.jp)
|
13
|
+
- [PKU JudgeOnline](http://poj.org)
|
14
|
+
|
15
|
+
You can also get this list from `ojsubmitter list` command.
|
7
16
|
|
8
17
|
## Installation
|
9
18
|
|
@@ -21,9 +30,25 @@ Or install it yourself as:
|
|
21
30
|
|
22
31
|
$ gem install ojsubmitter
|
23
32
|
|
33
|
+
## Configure
|
34
|
+
|
35
|
+
Please run below command to create config file to home directory.
|
36
|
+
You can set the default options of ojsubmitter command.
|
37
|
+
|
38
|
+
$ ojsubmitter init
|
39
|
+
|
40
|
+
|
24
41
|
## Usage
|
25
42
|
|
26
|
-
|
43
|
+
#### Submit
|
44
|
+
|
45
|
+
$ ojsubmitter -j [JUDGE_NAME] -u [USER_NAME] -p [PASSWORD] -l [LANGUAGE] -f [SOURCE_FILE]
|
46
|
+
|
47
|
+
To omit these options, you can use config file `.ojsconf.yml` located in your home directory.
|
48
|
+
|
49
|
+
#### Help
|
50
|
+
|
51
|
+
Please read the help command to get more info.
|
27
52
|
|
28
53
|
$ ojsubmitter help
|
29
54
|
|
data/lib/ojsubmitter/cli.rb
CHANGED
@@ -37,9 +37,11 @@ module OJS
|
|
37
37
|
:desc => "Don't show status page after submitting."
|
38
38
|
def submit
|
39
39
|
@config = set_options_from_config_file(options.to_h)
|
40
|
-
case @config['judge']
|
40
|
+
case @config['judge'].to_s.downcase
|
41
41
|
when 'aoj'
|
42
42
|
OJS::AOJ.submit @config
|
43
|
+
when 'poj'
|
44
|
+
OJS::POJ.submit @config
|
43
45
|
else
|
44
46
|
list
|
45
47
|
end
|
@@ -20,11 +20,11 @@ module OJS
|
|
20
20
|
def post
|
21
21
|
hclient.post(
|
22
22
|
'http://judge.u-aizu.ac.jp/onlinejudge/servlet/Submit',
|
23
|
-
{ userID
|
24
|
-
password
|
25
|
-
problemNO
|
26
|
-
language
|
27
|
-
sourceCode
|
23
|
+
{ :userID => user,
|
24
|
+
:password => password,
|
25
|
+
:problemNO => problem_id,
|
26
|
+
:language => language,
|
27
|
+
:sourceCode => code }
|
28
28
|
)
|
29
29
|
end
|
30
30
|
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'ojsubmitter/judge'
|
2
|
+
|
3
|
+
module OJS
|
4
|
+
class POJ < Judge
|
5
|
+
class << self
|
6
|
+
LANGUAGE_ID = {
|
7
|
+
'g++' => '0',
|
8
|
+
'gcc' => '1',
|
9
|
+
'java' => '2',
|
10
|
+
'pascal' => '3',
|
11
|
+
'c++' => '4',
|
12
|
+
'c' => '5',
|
13
|
+
'fortran' => '6',
|
14
|
+
}
|
15
|
+
|
16
|
+
def login
|
17
|
+
res = hclient.post(
|
18
|
+
'http://poj.org/login',
|
19
|
+
{ :user_id1 => user,
|
20
|
+
:password1 => password }
|
21
|
+
)
|
22
|
+
raise Judge::LoginFailedError if res.body =~ /Login failed!/
|
23
|
+
Logger.info "Logged in successfully."
|
24
|
+
end
|
25
|
+
|
26
|
+
def post
|
27
|
+
res = hclient.post(
|
28
|
+
'http://poj.org/submit',
|
29
|
+
{ :problem_id => problem_id,
|
30
|
+
:language => language,
|
31
|
+
:source => code,
|
32
|
+
:encoded => 'UTF-8',
|
33
|
+
}
|
34
|
+
)
|
35
|
+
raise Judge::SubmissionError if res.body =~ /(Error Occurred)|(Error report)/
|
36
|
+
end
|
37
|
+
|
38
|
+
def status_url
|
39
|
+
"http://poj.org/status?problem_id=#{problem_id}&user_id=#{user}"
|
40
|
+
end
|
41
|
+
|
42
|
+
def language
|
43
|
+
LANGUAGE_ID[@config['language'].to_s.downcase]
|
44
|
+
end
|
45
|
+
|
46
|
+
def problem_id
|
47
|
+
unless @config['problem_id']
|
48
|
+
@config['problem_id'] = File.basename(file).split('.')[0]
|
49
|
+
end
|
50
|
+
sprintf "%04d", @config['problem_id'].to_i
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
data/lib/ojsubmitter/judge.rb
CHANGED
@@ -3,22 +3,29 @@ require 'httpclient'
|
|
3
3
|
|
4
4
|
module OJS
|
5
5
|
class Judge
|
6
|
+
class LoginFailedError < StandardError; end
|
7
|
+
class SubmissionError < StandardError; end
|
8
|
+
|
6
9
|
class << self
|
7
10
|
def valid_judges
|
8
|
-
%w[
|
11
|
+
%w[AOJ POJ]
|
9
12
|
end
|
10
13
|
|
11
14
|
def login
|
12
|
-
false
|
13
15
|
end
|
14
16
|
|
15
17
|
def submit(*options)
|
16
18
|
@config = options[0].to_h if options
|
19
|
+
login
|
17
20
|
post
|
18
21
|
Logger.info "Your source code has submitted successfully."
|
19
|
-
Logger.info "
|
22
|
+
Logger.info "Open browser..."
|
20
23
|
sleep 1
|
21
24
|
open_status
|
25
|
+
rescue LoginFailedError => err
|
26
|
+
Logger.error "Login failed!"
|
27
|
+
rescue SubmissionError => err
|
28
|
+
Logger.error "Failed to submit. Check your config."
|
22
29
|
end
|
23
30
|
|
24
31
|
def post
|
data/lib/ojsubmitter/version.rb
CHANGED
data/lib/ojsubmitter.rb
CHANGED
data/ojsubmitter.gemspec
CHANGED
@@ -22,6 +22,7 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.add_development_dependency "rake", "~> 10.0"
|
23
23
|
spec.add_development_dependency "rspec", "~> 3.0"
|
24
24
|
spec.add_development_dependency "simplecov", "~> 0.11.0"
|
25
|
+
spec.add_development_dependency "coveralls", "~> 0.8.0"
|
25
26
|
|
26
27
|
spec.add_dependency 'httpclient', '~> 2.7.0'
|
27
28
|
spec.add_dependency 'thor', '~> 0.19.0'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ojsubmitter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- hadrori
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-02-
|
11
|
+
date: 2016-02-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 0.11.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: coveralls
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.8.0
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.8.0
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: httpclient
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -118,6 +132,7 @@ files:
|
|
118
132
|
- lib/ojsubmitter/cli.rb
|
119
133
|
- lib/ojsubmitter/judge.rb
|
120
134
|
- lib/ojsubmitter/judge/aoj.rb
|
135
|
+
- lib/ojsubmitter/judge/poj.rb
|
121
136
|
- lib/ojsubmitter/logger.rb
|
122
137
|
- lib/ojsubmitter/util.rb
|
123
138
|
- lib/ojsubmitter/version.rb
|