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 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