poj_org 0.1.4 → 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.
- data/lib/poj_org/code.rb +47 -0
- data/lib/poj_org/problem.rb +20 -7
- data/lib/poj_org.rb +22 -1
- metadata +5 -4
- data/lib/poj_org/source.rb +0 -27
data/lib/poj_org/code.rb
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
require 'open-uri'
|
|
2
|
+
require 'cgi'
|
|
3
|
+
|
|
4
|
+
# This class handles codes on poj.org
|
|
5
|
+
class PojOrg::Code
|
|
6
|
+
# @return [Integer] ID of code
|
|
7
|
+
attr_accessor :id
|
|
8
|
+
|
|
9
|
+
# @return [Integer] Author's user name
|
|
10
|
+
attr_accessor :user
|
|
11
|
+
|
|
12
|
+
# @return [Integer] Time costed in ms
|
|
13
|
+
attr_accessor :time_in_ms
|
|
14
|
+
|
|
15
|
+
# @return [Integer] Memory costed in KB
|
|
16
|
+
attr_accessor :memory_in_kb
|
|
17
|
+
|
|
18
|
+
# @return [String] Programming Language in which code is writen
|
|
19
|
+
attr_accessor :language
|
|
20
|
+
|
|
21
|
+
# @return [String] Source code
|
|
22
|
+
attr_accessor :content
|
|
23
|
+
|
|
24
|
+
# Get a code from poj.org via ID.
|
|
25
|
+
# Need to be autheticated.
|
|
26
|
+
#
|
|
27
|
+
# @param [Integer] id ID of code
|
|
28
|
+
def initialize(id)
|
|
29
|
+
self.id = id
|
|
30
|
+
if PojOrg::authenticated?
|
|
31
|
+
cookie = PojOrg::login
|
|
32
|
+
html = open(url, 'Cookie' => cookie).read
|
|
33
|
+
self.user = (/<td><b>User:.+?<a.+?>(.+?)<\/a><\/td>/).match(html)[1]
|
|
34
|
+
self.time_in_ms = (/<td><b>Time:.+?(\d+)MS<\/td>/).match(html)[1].to_i
|
|
35
|
+
self.memory_in_kb = (/<td><b>Memory:.+?(\d+)K<\/td>/).match(html)[1].to_i
|
|
36
|
+
self.language = (/<td><b>Language:<\/b>\s*(.+?)<\/td>/).match(html)[1]
|
|
37
|
+
self.content = CGI.unescapeHTML((/<pre.+?>(.+)<\/pre>/m).match(html)[1])
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Get the url of code on poj.org
|
|
42
|
+
#
|
|
43
|
+
# @return [String] Url of code
|
|
44
|
+
def url
|
|
45
|
+
"http://poj.org/showsource?solution_id=#{id}"
|
|
46
|
+
end
|
|
47
|
+
end
|
data/lib/poj_org/problem.rb
CHANGED
|
@@ -1,19 +1,32 @@
|
|
|
1
|
+
# This class handles problems on poj.org
|
|
1
2
|
class PojOrg::Problem
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
end
|
|
3
|
+
# @return [Integer] ID of problem
|
|
4
|
+
attr_accessor :id
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
# @return [String] Title
|
|
7
|
+
attr_accessor :title
|
|
8
|
+
|
|
9
|
+
# @return [Integer] Time limit in ms
|
|
10
|
+
attr_accessor :time_limit_in_ms
|
|
7
11
|
|
|
8
|
-
|
|
9
|
-
|
|
12
|
+
# @return [Integer] Memory limit in KB
|
|
13
|
+
attr_accessor :memory_limit_in_kb
|
|
14
|
+
|
|
15
|
+
# Get a problem for poj.org via ID
|
|
16
|
+
#
|
|
17
|
+
# @param [Integer] id ID of problem
|
|
18
|
+
def initialize(id)
|
|
19
|
+
self.id = id
|
|
10
20
|
html = open(url).read
|
|
11
21
|
self.title = html[/(?<=<div class="ptt" lang="en-US">).+?(?=<\/div>)/]
|
|
12
22
|
self.time_limit_in_ms = html[/(?<=<b>Time Limit:<\/b>)\s*\d+/].to_i
|
|
13
23
|
self.memory_limit_in_kb = html[/(?<=<b>Memory Limit:<\/b>)\s*\d+/].to_i
|
|
14
24
|
end
|
|
15
25
|
|
|
26
|
+
# Get the url of problem on poj.org
|
|
27
|
+
#
|
|
28
|
+
# @return [String] Url of problem
|
|
16
29
|
def url
|
|
17
|
-
|
|
30
|
+
"http://poj.org/problem?id=#{id}"
|
|
18
31
|
end
|
|
19
32
|
end
|
data/lib/poj_org.rb
CHANGED
|
@@ -1,10 +1,28 @@
|
|
|
1
1
|
require 'net/http'
|
|
2
2
|
|
|
3
|
+
# This class provides authetication methods
|
|
3
4
|
class PojOrg
|
|
5
|
+
# Stored user name of poj.org
|
|
4
6
|
@@user = nil
|
|
7
|
+
|
|
8
|
+
# Stored password of poj.org
|
|
5
9
|
@@password = nil
|
|
10
|
+
|
|
11
|
+
# Status of last authentication
|
|
6
12
|
@@authenticated = false
|
|
7
13
|
|
|
14
|
+
# Autheticate and store user name and password of poj.org
|
|
15
|
+
#
|
|
16
|
+
# @example
|
|
17
|
+
# >> PojOrg::authenticate('poj_library', 'secret')
|
|
18
|
+
# => true
|
|
19
|
+
# >> PojOrg::authenticate('poj_library', 'wrong_password')
|
|
20
|
+
# => false
|
|
21
|
+
#
|
|
22
|
+
# @param [String] user user name of poj.org
|
|
23
|
+
# @param [String] password password of poj.org
|
|
24
|
+
#
|
|
25
|
+
# @return [Boolean] whether authenticated or not
|
|
8
26
|
def self.authenticate(user, password)
|
|
9
27
|
if login(user, password)
|
|
10
28
|
@@user = user
|
|
@@ -15,6 +33,9 @@ class PojOrg
|
|
|
15
33
|
end
|
|
16
34
|
end
|
|
17
35
|
|
|
36
|
+
# Status of last authentication
|
|
37
|
+
#
|
|
38
|
+
# @return [Boolean] Whether the last authentication success or not
|
|
18
39
|
def self.authenticated?
|
|
19
40
|
@@authenticated
|
|
20
41
|
end
|
|
@@ -32,4 +53,4 @@ class PojOrg
|
|
|
32
53
|
end
|
|
33
54
|
|
|
34
55
|
require 'poj_org/problem'
|
|
35
|
-
require 'poj_org/
|
|
56
|
+
require 'poj_org/code'
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: poj_org
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -9,9 +9,9 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2012-08-
|
|
12
|
+
date: 2012-08-23 00:00:00.000000000 Z
|
|
13
13
|
dependencies: []
|
|
14
|
-
description: Fetch details of
|
|
14
|
+
description: Fetch details of problems and codes from poj.org
|
|
15
15
|
email: pinepara@gmail.com
|
|
16
16
|
executables: []
|
|
17
17
|
extensions: []
|
|
@@ -19,7 +19,7 @@ extra_rdoc_files: []
|
|
|
19
19
|
files:
|
|
20
20
|
- lib/poj_org.rb
|
|
21
21
|
- lib/poj_org/problem.rb
|
|
22
|
-
- lib/poj_org/
|
|
22
|
+
- lib/poj_org/code.rb
|
|
23
23
|
homepage: https://github.com/pinepara/poj_org
|
|
24
24
|
licenses: []
|
|
25
25
|
post_install_message:
|
|
@@ -45,3 +45,4 @@ signing_key:
|
|
|
45
45
|
specification_version: 3
|
|
46
46
|
summary: API for poj.org
|
|
47
47
|
test_files: []
|
|
48
|
+
has_rdoc:
|
data/lib/poj_org/source.rb
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
require 'open-uri'
|
|
2
|
-
require 'cgi'
|
|
3
|
-
|
|
4
|
-
class PojOrg::Source
|
|
5
|
-
def self.url_for(id)
|
|
6
|
-
"http://poj.org/showsource?solution_id=#{id}"
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
attr_accessor :id, :user, :time_in_ms, :memory_in_kb, :language, :source
|
|
10
|
-
|
|
11
|
-
def initialize(new_id)
|
|
12
|
-
self.id = new_id
|
|
13
|
-
if PojOrg::authenticated?
|
|
14
|
-
cookie = PojOrg::login
|
|
15
|
-
html = open(url, 'Cookie' => cookie).read
|
|
16
|
-
self.user = (/<td><b>User:.+?<a.+?>(.+?)<\/a><\/td>/).match(html)[1]
|
|
17
|
-
self.time_in_ms = (/<td><b>Time:.+?(\d+)MS<\/td>/).match(html)[1].to_i
|
|
18
|
-
self.memory_in_kb = (/<td><b>Memory:.+?(\d+)K<\/td>/).match(html)[1].to_i
|
|
19
|
-
self.language = (/<td><b>Language:<\/b>\s*(.+?)<\/td>/).match(html)[1]
|
|
20
|
-
self.source = CGI.unescapeHTML((/<pre.+?>(.+)<\/pre>/m).match(html)[1])
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def url
|
|
25
|
-
PojOrg::Source.url_for id
|
|
26
|
-
end
|
|
27
|
-
end
|