nic_ar 0.0.3 → 0.0.4
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/nic_ar/client.rb +40 -59
- data/lib/nic_ar/version.rb +1 -1
- data/lib/nic_ar.rb +9 -9
- data/spec/client_spec.rb +85 -74
- metadata +8 -8
data/lib/nic_ar/client.rb
CHANGED
@@ -2,71 +2,52 @@ module NicAr
|
|
2
2
|
class Client
|
3
3
|
class << self
|
4
4
|
def method_missing(name, *args)
|
5
|
-
unless args.empty?
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
params += '!'
|
12
|
-
end
|
13
|
-
get "/#{resource}/#{params}"
|
14
|
-
else
|
15
|
-
raise ArgumentError
|
5
|
+
params = '/' + args.map { |p| CGI.escape(p) }.join('/') unless args.empty?
|
6
|
+
resource = name.to_s
|
7
|
+
# send the bang! trailing the request (upcoming API feat.)
|
8
|
+
if unbanged = resource[/(\w+)!$/,1]
|
9
|
+
resource = unbanged
|
10
|
+
params = "#{params}!"
|
16
11
|
end
|
12
|
+
get "/#{resource}#{params}"
|
17
13
|
end
|
18
14
|
|
19
15
|
private
|
20
16
|
|
21
17
|
def get(path) #:nodoc:
|
22
|
-
RestClient.get("#{api_host}/#{path}")
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
when 412
|
56
|
-
raise PreconditionError, message
|
57
|
-
|
58
|
-
#408: Request Timeout
|
59
|
-
#503: Service Unavailable
|
60
|
-
when 408, 503
|
61
|
-
raise TimeoutError, message
|
62
|
-
|
63
|
-
#500: System Error
|
64
|
-
when 500
|
65
|
-
raise ServiceError, message
|
66
|
-
|
67
|
-
else
|
68
|
-
response.return!(request, response, &block)
|
69
|
-
end
|
18
|
+
response = RestClient.get("#{api_host}/#{path}")
|
19
|
+
raise NoContent if response.code == 204
|
20
|
+
JSON.parse(response)
|
21
|
+
|
22
|
+
rescue RestClient::Exception => e
|
23
|
+
message = message_from(e.http_body)
|
24
|
+
|
25
|
+
case e.http_code
|
26
|
+
#424: Failed Dependency
|
27
|
+
when 424
|
28
|
+
raise CaptchaError, message
|
29
|
+
#406: Not Acceptable
|
30
|
+
when 406
|
31
|
+
raise RequestError, message
|
32
|
+
#417: Expectation Failed
|
33
|
+
when 417
|
34
|
+
raise ExpectationError, message
|
35
|
+
#404: Not Found
|
36
|
+
when 404
|
37
|
+
raise NotFound
|
38
|
+
#400: Bad Request
|
39
|
+
when 400
|
40
|
+
raise ParameterError, message
|
41
|
+
#412: Precondition Failed
|
42
|
+
when 412
|
43
|
+
raise PreconditionError, message
|
44
|
+
#408: Request Timeout
|
45
|
+
#503: Service Unavailable
|
46
|
+
when 408, 503
|
47
|
+
raise TimeoutError, message
|
48
|
+
#500: System Error
|
49
|
+
when 500
|
50
|
+
raise ServiceError, message
|
70
51
|
end
|
71
52
|
end
|
72
53
|
|
data/lib/nic_ar/version.rb
CHANGED
data/lib/nic_ar.rb
CHANGED
@@ -9,15 +9,15 @@ module NicAr
|
|
9
9
|
|
10
10
|
# exceptions match API's error codes
|
11
11
|
|
12
|
-
class CaptchaError < StandardError; end #
|
13
|
-
class
|
14
|
-
class ExpectationError < StandardError; end #
|
15
|
-
class NoContent < StandardError; end #
|
16
|
-
class NotFound < StandardError; end #
|
17
|
-
class ParameterError < StandardError; end #
|
18
|
-
class PreconditionError < StandardError; end #
|
19
|
-
class ServiceError < StandardError; end #
|
20
|
-
class TimeoutError < StandardError; end #
|
12
|
+
class CaptchaError < StandardError; end #424: Failed Dependency
|
13
|
+
class RequestError < StandardError; end #406: Not Acceptable
|
14
|
+
class ExpectationError < StandardError; end #417: Expectation Failed (available?, pending?)
|
15
|
+
class NoContent < StandardError; end #204: No Content
|
16
|
+
class NotFound < StandardError; end #404: Not Found
|
17
|
+
class ParameterError < StandardError; end #400: Bad Request
|
18
|
+
class PreconditionError < StandardError; end #412: Precondition Failed
|
19
|
+
class ServiceError < StandardError; end #500: System Error
|
20
|
+
class TimeoutError < StandardError; end #408: Request Timeout
|
21
21
|
end
|
22
22
|
|
23
23
|
require "nic_ar/client"
|
data/spec/client_spec.rb
CHANGED
@@ -1,95 +1,106 @@
|
|
1
1
|
require_relative 'spec_helper'
|
2
2
|
|
3
3
|
describe 'NicAr::Client' do
|
4
|
-
|
5
|
-
|
4
|
+
describe 'when receiving invalid requests' do
|
5
|
+
it 'rejects single invalid requests' do
|
6
|
+
stub_request(:get,/invalid_request$/).to_return(:status => 406)
|
7
|
+
proc { NicAr::Client.invalid_request }.must_raise NicAr::RequestError
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'also rejects invalid requests with parameters' do
|
11
|
+
stub_request(:get,/invalid_request\/with\/parameters$/).to_return(:status => 406)
|
12
|
+
proc { NicAr::Client.invalid_request 'with', 'parameters' }.must_raise NicAr::RequestError
|
13
|
+
end
|
6
14
|
end
|
7
15
|
|
8
|
-
describe '
|
9
|
-
it '
|
10
|
-
stub_request(:get,/
|
11
|
-
result = NicAr::Client.
|
12
|
-
result.must_be_instance_of
|
13
|
-
|
14
|
-
|
15
|
-
transaction['id'].must_equal 'REN17330833'
|
16
|
-
transaction['status'].must_equal 'FINALIZADO'
|
17
|
-
transaction['description'].must_equal 'Renovacion de Nombre'
|
16
|
+
describe 'DNS lookups' do
|
17
|
+
it 'returns a hash for primary DNS lookups' do
|
18
|
+
stub_request(:get,/dns_servers\/ns1\.sedoparking\.com$/).to_return(:body => stub_for('dns_servers/ns1.sedoparking.com'))
|
19
|
+
result = NicAr::Client.dns_servers 'ns1.sedoparking.com'
|
20
|
+
result.must_be_instance_of Hash
|
21
|
+
result['host'].must_equal 'ns1.sedoparking.com'
|
22
|
+
result['handle'].must_equal 'NICAR-H24966'
|
18
23
|
end
|
19
24
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
25
|
+
it 'returns a hash for secondary DNS lookups' do
|
26
|
+
stub_request(:get,/dns_servers\/ns2\.sedoparking\.com$/).to_return(:body => stub_for('dns_servers/ns2.sedoparking.com'))
|
27
|
+
result = NicAr::Client.dns_servers 'ns2.sedoparking.com'
|
28
|
+
result.must_be_instance_of Hash
|
29
|
+
result['host'].must_equal 'ns2.sedoparking.com'
|
30
|
+
result['handle'].must_equal 'NICAR-H24965'
|
31
|
+
end
|
32
|
+
end
|
28
33
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
result['host'].must_equal 'ns2.sedoparking.com'
|
34
|
-
result['handle'].must_equal 'NICAR-H24965'
|
35
|
-
end
|
34
|
+
describe 'Domains lookups' do
|
35
|
+
it 'raises on unexisting domains' do
|
36
|
+
stub_request(:get,/domains\/hispafuentes\.com\.ar$/).to_return(:status => 404)
|
37
|
+
proc { NicAr::Client.domains 'hispafuentes.com.ar' }.must_raise NicAr::NotFound
|
36
38
|
end
|
37
39
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
40
|
+
it 'returns a Hash for Domain lookups' do
|
41
|
+
stub_request(:get,/domains\/dww\.com\.ar$/).to_return(:body => stub_for('domains/dww.com.ar'))
|
42
|
+
result = NicAr::Client.domains 'dww.com.ar'
|
43
|
+
result.must_be_instance_of Hash
|
44
|
+
result['name'].must_equal 'dww'
|
45
|
+
result['domain'].must_equal '.com.ar'
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe 'Entities lookups' do
|
50
|
+
it 'returns an Entity hash for lookups' do
|
51
|
+
stub_request(:get,/entities\/Sedo\.com.LLC$/).to_return(:body => stub_for('entities/Sedo.com LLC'))
|
52
|
+
result = NicAr::Client.entities 'Sedo.com LLC'
|
53
|
+
result.must_be_instance_of Hash
|
54
|
+
result['name'].must_equal 'Sedo.com LLC'
|
55
|
+
result['handle'].must_equal 'NICAR-E779784'
|
56
|
+
end
|
57
|
+
end
|
43
58
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
59
|
+
describe 'People lookups' do
|
60
|
+
it 'returns a Person hash for lookups' do
|
61
|
+
stub_request(:get,/people\/Sedo\.com.LLC.-.Technical.Contact$/).to_return(:body => stub_for('people/Sedo.com LLC - Technical Contact'))
|
62
|
+
result = NicAr::Client.people 'Sedo.com LLC - Technical Contact'
|
63
|
+
result.must_be_instance_of Hash
|
64
|
+
result['name'].must_equal 'Sedo.com LLC - Technical Contact'
|
65
|
+
result['handle'].must_equal 'NICAR-P1280916'
|
51
66
|
end
|
67
|
+
end
|
52
68
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
69
|
+
describe 'Transactions lookups' do
|
70
|
+
it 'returns a Transactions array for domains lookups' do
|
71
|
+
stub_request(:get,/transactions\/macusadas\.com\.ar$/).to_return(:body => stub_for('transactions/macusadas.com.ar.REN'))
|
72
|
+
result = NicAr::Client.transactions 'macusadas.com.ar'
|
73
|
+
result.must_be_instance_of Array
|
74
|
+
result.count.must_equal 1
|
75
|
+
transaction = result.first
|
76
|
+
transaction.must_be_instance_of Hash
|
77
|
+
transaction['id'].must_equal 'REN17330833'
|
78
|
+
transaction['status'].must_equal 'FINALIZADO'
|
79
|
+
transaction['description'].must_equal 'Renovacion de Nombre'
|
61
80
|
end
|
62
81
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
result['handle'].must_equal 'NICAR-P1280916'
|
70
|
-
end
|
82
|
+
it 'returns a Transaction hash for single transaction lookups' do
|
83
|
+
stub_request(:get,/transactions\/REN17330833$/).to_return(:body => stub_for('transactions/REN17330833'))
|
84
|
+
result = NicAr::Client.transactions 'REN17330833'
|
85
|
+
result['domain'].must_equal 'macusadas.com.ar'
|
86
|
+
result['status'].must_equal 'FINALIZADO'
|
87
|
+
result['description'].must_equal 'Renovacion de Nombre'
|
71
88
|
end
|
72
89
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
transaction['description'].must_equal 'Renovacion de Nombre'
|
84
|
-
end
|
90
|
+
it 'has flexible support for multiple arguments' do
|
91
|
+
stub_request(:get,/domains\/macusadas\.com\.ar\/transactions$/).to_return(:body => stub_for('transactions/macusadas.com.ar.REN'))
|
92
|
+
result = NicAr::Client.domains 'macusadas.com.ar', 'transactions'
|
93
|
+
result.must_be_instance_of Array
|
94
|
+
transaction = result.first
|
95
|
+
transaction.must_be_instance_of Hash
|
96
|
+
transaction['id'].must_equal 'REN17330833'
|
97
|
+
transaction['status'].must_equal 'FINALIZADO'
|
98
|
+
transaction['description'].must_equal 'Renovacion de Nombre'
|
99
|
+
end
|
85
100
|
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
result['domain'].must_equal 'macusadas.com.ar'
|
90
|
-
result['status'].must_equal 'FINALIZADO'
|
91
|
-
result['description'].must_equal 'Renovacion de Nombre'
|
92
|
-
end
|
101
|
+
it 'might return no transactions at all' do
|
102
|
+
stub_request(:get,/transactions\/hispafuentes\.com\.ar$/).to_return(:status => 204)
|
103
|
+
proc { NicAr::Client.transactions 'hispafuentes.com.ar' }.must_raise NicAr::NoContent
|
93
104
|
end
|
94
105
|
end
|
95
106
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nic_ar
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-11-
|
12
|
+
date: 2012-11-02 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rest-client
|
16
|
-
requirement: &
|
16
|
+
requirement: &79831770 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '1.6'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *79831770
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: minitest
|
27
|
-
requirement: &
|
27
|
+
requirement: &79831500 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '3.3'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *79831500
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: webmock
|
38
|
-
requirement: &
|
38
|
+
requirement: &79831210 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
version: '1.8'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *79831210
|
47
47
|
description: A simple client for ".ar" (Argentina) domain names lookup
|
48
48
|
email:
|
49
49
|
- cristian.arroyo@vivaserver.com
|