ojsubmitter 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3badcb98563b660a732a2167ea7f9ced96bd2162
4
- data.tar.gz: 6a6b7ec27b6576c4ba5c9a3655efc6ea832b18a4
3
+ metadata.gz: c15735be1e373f3a239bca938b6c01aa5e7fb023
4
+ data.tar.gz: 3ee561981631575f8db2667388c76584ed5edef4
5
5
  SHA512:
6
- metadata.gz: c46b109eb64ca7abc17ed3e14a71b01e784655c12571fdeb7e0e2693a0ed52350c278005dbde89980f3a1a78fc0579ce5cfdf238241421435d0c8133b6b6a69a
7
- data.tar.gz: 30eb84adf3449d88b55213f98f867d32a68bb5012ab05f968823a8472b34326a346ea144e9079e0a3654f40d49554d8fce84de397430a9722dfa2c7aefd5f8bb
6
+ metadata.gz: 553aa70b1faf82eba5004510d5550d891d200f045b1a5877d778db45be791f0cb0c20372c809fec1c353fb97dfe07d61dff6fe204689bb48161d544af87a9145
7
+ data.tar.gz: 6e8900f7ccc3ff3c33c0b45aaaa3241c32c099c46baef4ed64aa12a7439293a3ec14bb75e950c75652f7ff9dc97edd689a217e55513d969b18f673f86807f08f
data/.travis.yml CHANGED
@@ -1,4 +1,7 @@
1
1
  language: ruby
2
2
  rvm:
3
+ - 2.0.0
4
+ - 2.1.0
5
+ - 2.2.0
3
6
  - 2.3.0
4
7
  before_install: gem install bundler -v 1.11.2
data/README.md CHANGED
@@ -1,9 +1,18 @@
1
1
  # Ojsubmitter
2
2
 
3
- This script allows you submit a source code to the online judge from CLI.
3
+ [![Gem Version](https://badge.fury.io/rb/ojsubmitter.svg)](https://badge.fury.io/rb/ojsubmitter) [![Build Status](https://travis-ci.org/hadrori/ojsubmitter.svg?branch=master)](https://travis-ci.org/hadrori/ojsubmitter) [![Coverage Status](https://coveralls.io/repos/github/hadrori/ojsubmitter/badge.svg?branch=master)](https://coveralls.io/github/hadrori/ojsubmitter?branch=master) [![Dependency Status](https://gemnasium.com/hadrori/ojsubmitter.svg)](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
- Please read the help command.
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
 
@@ -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: user,
24
- password: password,
25
- problemNO: problem_id,
26
- language: language,
27
- sourceCode: code }
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
@@ -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[aoj]
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 "Opening browser..."
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
@@ -1,3 +1,3 @@
1
1
  module OJS
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.0"
3
3
  end
data/lib/ojsubmitter.rb CHANGED
@@ -2,6 +2,7 @@ require "ojsubmitter/version"
2
2
  require "ojsubmitter/logger"
3
3
  require "ojsubmitter/util"
4
4
  require 'ojsubmitter/judge/aoj'
5
+ require 'ojsubmitter/judge/poj'
5
6
 
6
7
  module OJS
7
8
  ROOT_DIR = File.expand_path(File.join(__FILE__, '..', '..'))
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.1.1
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-28 00:00:00.000000000 Z
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