aoj 0.0.4 → 0.0.5

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: 2c4adde6041ce0861a081f0910853c28aec90c4f
4
- data.tar.gz: c5b0ce8c52d08de49405420b78f9df09181d04d4
3
+ metadata.gz: 449266fb56333786a7e8ee152e4dfab57b245027
4
+ data.tar.gz: 3c74831e04c44d5d4af266bbb353cd45adf7a314
5
5
  SHA512:
6
- metadata.gz: e75454d297acd4c916e22c8a9080bb21d5f523a61e91d1fe3c2d816d95f55619ab8cefc64987ff61ae3704c547d67d618a22e42e449e79fca5a895eb1ec1dcf5
7
- data.tar.gz: 5aa5d533558a9d548602198205754358753a00aec72c29a296caf07ba7fe08830cb4fcdfc751e92ffcbd725491d0ae113df1bb26ea40e0ee158911c19f09fbb3
6
+ metadata.gz: 3308c88f00e9a2a672836311754469a75be365719110e3f31aad85f5c4b73986dbf4637a8a0062aab9e24de3cd7d8b14cdf805c5ed10f13fae19ff813f29395d
7
+ data.tar.gz: ebe6e094de834312214e66b7f008e9df335552698669a3a9b22c8799377df7e39683d0a31662952fc2a742eca38440ab46cdb63c593aefb27e02043fb2eeda38
@@ -8,8 +8,8 @@ Gem::Specification.new do |spec|
8
8
  spec.version = AOJ::VERSION
9
9
  spec.authors = ["na-o-ys"]
10
10
  spec.email = ["naoyoshi0511@gmail.com"]
11
- spec.summary = %q{aoj submitter}
12
- spec.description = %q{This is a submitter program which submits your source to AOJ(Aizu Online Judge) and retrieves result of judgement.}
11
+ spec.summary = %q{aoj command-line tool}
12
+ spec.description = %q{AOJ is a command-line tool for AOJ(Aizu Online Judge). You can submit your source to AOJ and check the result of judgement without opening browser or copy & paste..}
13
13
  spec.homepage = ""
14
14
  spec.license = "MIT"
15
15
 
@@ -48,6 +48,11 @@ module AOJ
48
48
 
49
49
  desc "omikuji", "今日の 1 問"
50
50
  def omikuji
51
+ unless conf.has_credential?
52
+ input_credentials
53
+ puts
54
+ end
55
+
51
56
  problem = AOJ::Problem.random_icpc(conf['username'])
52
57
  title = "ID #{problem.id}"
53
58
  width = title.size
@@ -0,0 +1,34 @@
1
+ module AOJ
2
+ class Env
3
+
4
+ def initialize(env = ENV)
5
+ @env = env
6
+ end
7
+
8
+ # parse proxy from String
9
+ # param str : [http://][user:pass@]host[:port]
10
+ def parse_proxy_info
11
+ raw = @env["HTTP_PROXY"] || @env["http_proxy"]
12
+ return {} unless raw
13
+
14
+ main_str = raw
15
+ .strip
16
+ .sub(/^http:\/\//, "")
17
+ .sub(/\/+$/, "")
18
+
19
+ auth_str = main_str.match(/(.*)@/).to_a[1].to_s
20
+ host_str = main_str.sub(/^.*@/, "")
21
+ {
22
+ host: host_str.sub(/:.*$/, ""),
23
+ port: host_str.match(/:(.*)/).to_a[1].try(:to_i), # int or nil
24
+ user: auth_str.sub(/:.*$/, ""),
25
+ pass: auth_str.sub(/^.*:/, "")
26
+ }.select { |_, value| value.present? }
27
+ end
28
+
29
+ def proxy_specified?
30
+ parse_proxy_info != {}
31
+ end
32
+
33
+ end
34
+ end
@@ -3,33 +3,12 @@ require 'net/http'
3
3
  module AOJ
4
4
 
5
5
  HTTP = -> do
6
- # set proxy if specified
7
- # [http://][user:pass@]host:port
8
- env = ENV["HTTP_PROXY"] || ENV["http_proxy"]
9
- break ::Net::HTTP unless env
10
-
11
- info = parse_proxy_info(env)
6
+ proxy_info = Env.new.parse_proxy_info
12
7
  ::Net::HTTP::Proxy(
13
- info[:host],
14
- info[:port],
15
- info[:user],
16
- info[:pass]
8
+ proxy_info[:host],
9
+ proxy_info[:port],
10
+ proxy_info[:user],
11
+ proxy_info[:pass]
17
12
  )
18
13
  end.call
19
-
20
- private
21
- # TODO: test
22
- def self.parse_proxy_info(str)
23
- {}.tap do |i|
24
- str.sub!(/http:\/\//, "")
25
- str.sub!(/\/+$/, "")
26
- if str.include?("@")
27
- auth, str = str.split("@")
28
- i[:user], i[:pass] = auth.split(":")
29
- end
30
- i[:host], port_str = str.split(":")
31
- i[:port] = port_str.sub(/\//, "").to_i
32
- i[:uri] = "http://" + str
33
- end
34
- end
35
14
  end
@@ -1,3 +1,3 @@
1
1
  module AOJ
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
@@ -0,0 +1,72 @@
1
+ require "spec_helper"
2
+
3
+ describe AOJ::Env do
4
+ describe 'parse_proxy_info' do
5
+ context 'when only host given' do
6
+ let(:env) { create_env("HTTP_PROXY" => "http://hoge.co.jp/") }
7
+
8
+ it { expect(env.parse_proxy_info).to eq(host: "hoge.co.jp") }
9
+ end
10
+
11
+ context 'when host and port given' do
12
+ let(:env) { create_env("HTTP_PROXY" => "http://hoge.co.jp:8080/") }
13
+
14
+ it {
15
+ expect(env.parse_proxy_info).to eq(
16
+ host: "hoge.co.jp",
17
+ port: 8080
18
+ )
19
+ }
20
+ end
21
+
22
+ context 'when user, pass, host given' do
23
+ let(:env) { create_env("HTTP_PROXY" => "http://nao:secret@hoge.co.jp/") }
24
+
25
+ it {
26
+ expect(env.parse_proxy_info).to eq(
27
+ host: "hoge.co.jp",
28
+ user: "nao",
29
+ pass: "secret"
30
+ )
31
+ }
32
+ end
33
+
34
+ context 'when user, pass, host and port given' do
35
+ let(:env) { create_env("HTTP_PROXY" => "http://nao:secret@hoge.co.jp:8080/") }
36
+
37
+ it {
38
+ expect(env.parse_proxy_info).to eq(
39
+ host: "hoge.co.jp",
40
+ port: 8080,
41
+ user: "nao",
42
+ pass: "secret"
43
+ )
44
+ }
45
+ end
46
+
47
+ context 'when no proxy info given' do
48
+ let(:env) { AOJ::Env.new({}) }
49
+
50
+ it { expect(env.parse_proxy_info).to eq({}) }
51
+ end
52
+ end
53
+
54
+ describe 'proxy_specified?' do
55
+ context 'when proxy info given' do
56
+ let(:env) { create_env("HTTP_PROXY" => "http://hoge.co.jp") }
57
+
58
+ it { expect(env.proxy_specified?).to be_truthy }
59
+ end
60
+
61
+ context 'when no proxy info given' do
62
+ let(:env) { AOJ::Env.new({}) }
63
+
64
+ it { expect(env.proxy_specified?).to be_falsy }
65
+ end
66
+ end
67
+
68
+ def create_env(hash)
69
+ hash.each { |key, value| value.freeze }
70
+ AOJ::Env.new(hash)
71
+ end
72
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aoj
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - na-o-ys
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-16 00:00:00.000000000 Z
11
+ date: 2015-02-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -108,8 +108,9 @@ dependencies:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: '5.14'
111
- description: This is a submitter program which submits your source to AOJ(Aizu Online
112
- Judge) and retrieves result of judgement.
111
+ description: AOJ is a command-line tool for AOJ(Aizu Online Judge). You can submit
112
+ your source to AOJ and check the result of judgement without opening browser or
113
+ copy & paste..
113
114
  email:
114
115
  - naoyoshi0511@gmail.com
115
116
  executables:
@@ -130,6 +131,7 @@ files:
130
131
  - lib/aoj/cli/helper.rb
131
132
  - lib/aoj/conf.rb
132
133
  - lib/aoj/credential.rb
134
+ - lib/aoj/env.rb
133
135
  - lib/aoj/error/api_error.rb
134
136
  - lib/aoj/error/fetch_result_error.rb
135
137
  - lib/aoj/error/file_open_error.rb
@@ -145,6 +147,7 @@ files:
145
147
  - lib/aoj/version.rb
146
148
  - spec/lib/aoj/api_spec.rb
147
149
  - spec/lib/aoj/conf_spec.rb
150
+ - spec/lib/aoj/env_spec.rb
148
151
  - spec/lib/aoj/language_spec.rb
149
152
  - spec/spec_helper.rb
150
153
  homepage: ''
@@ -170,9 +173,10 @@ rubyforge_project:
170
173
  rubygems_version: 2.2.2
171
174
  signing_key:
172
175
  specification_version: 4
173
- summary: aoj submitter
176
+ summary: aoj command-line tool
174
177
  test_files:
175
178
  - spec/lib/aoj/api_spec.rb
176
179
  - spec/lib/aoj/conf_spec.rb
180
+ - spec/lib/aoj/env_spec.rb
177
181
  - spec/lib/aoj/language_spec.rb
178
182
  - spec/spec_helper.rb