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 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
- params = args.map { |p| CGI.escape(p) }.join '/'
7
- resource = name.to_s
8
- # send the bang! trailing the request (upcoming API feat.)
9
- if unbanged = resource[/(\w+)!$/,1]
10
- resource = unbanged
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}") do |response, request, result, &block|
23
- message = message_from(response)
24
-
25
- case response.code
26
- #200: Success
27
- when 200
28
- JSON.parse(response)
29
-
30
- #204: No Content
31
- when 204
32
- raise NoContent
33
-
34
- #424: Failed Dependency
35
- when 424
36
- raise CaptchaError, message
37
-
38
- #406: Not Acceptable
39
- when 406
40
- raise DomainError, message
41
-
42
- #417: Expectation Failed
43
- when 417
44
- raise ExpectationError, message
45
-
46
- #404: Not Found
47
- when 404
48
- raise NotFound
49
-
50
- #400: Bad Request
51
- when 400
52
- raise ParameterError, message
53
-
54
- #412: Precondition Failed
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
 
@@ -1,3 +1,3 @@
1
1
  module NicAr
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
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 # 424: Failed Dependency
13
- class DomainError < 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
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
- it 'raises ArgumentError if no parameter to resource given' do
5
- proc { NicAr::Client.people }.must_raise ArgumentError
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 'using stubbed API responses' do
9
- it 'has flexible support for multiple arguments' do
10
- stub_request(:get,/domains\/macusadas\.com\.ar\/transactions$/).to_return(:body => stub_for('transactions/macusadas.com.ar.REN'))
11
- result = NicAr::Client.domains 'macusadas.com.ar', 'transactions'
12
- result.must_be_instance_of Array
13
- transaction = result.first
14
- transaction.must_be_instance_of Hash
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
- describe 'DNS lookups' do
21
- it 'returns a hash for primary DNS lookups' do
22
- stub_request(:get,/dns_servers\/ns1\.sedoparking\.com$/).to_return(:body => stub_for('dns_servers/ns1.sedoparking.com'))
23
- result = NicAr::Client.dns_servers 'ns1.sedoparking.com'
24
- result.must_be_instance_of Hash
25
- result['host'].must_equal 'ns1.sedoparking.com'
26
- result['handle'].must_equal 'NICAR-H24966'
27
- end
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
- it 'returns a hash for secondary DNS lookups' do
30
- stub_request(:get,/dns_servers\/ns2\.sedoparking\.com$/).to_return(:body => stub_for('dns_servers/ns2.sedoparking.com'))
31
- result = NicAr::Client.dns_servers 'ns2.sedoparking.com'
32
- result.must_be_instance_of Hash
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
- describe 'Domains lookups' do
39
- it 'returns Nil for Domain 404s' do
40
- stub_request(:get,/domains\/hispafuentes\.com\.ar$/).to_return(:status => 404)
41
- proc { NicAr::Client.domains 'hispafuentes.com.ar' }.must_raise NicAr::NotFound
42
- end
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
- it 'returns a Hash for Domain lookups' do
45
- stub_request(:get,/domains\/dww\.com\.ar$/).to_return(:body => stub_for('domains/dww.com.ar'))
46
- result = NicAr::Client.domains 'dww.com.ar'
47
- result.must_be_instance_of Hash
48
- result['name'].must_equal 'dww'
49
- result['domain'].must_equal '.com.ar'
50
- end
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
- describe 'Entities lookups' do
54
- it 'returns an Entity hash for lookups' do
55
- stub_request(:get,/entities\/Sedo\.com.LLC$/).to_return(:body => stub_for('entities/Sedo.com LLC'))
56
- result = NicAr::Client.entities 'Sedo.com LLC'
57
- result.must_be_instance_of Hash
58
- result['name'].must_equal 'Sedo.com LLC'
59
- result['handle'].must_equal 'NICAR-E779784'
60
- end
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
- describe 'People lookups' do
64
- it 'returns a Person hash for lookups' do
65
- stub_request(:get,/people\/Sedo\.com.LLC.-.Technical.Contact$/).to_return(:body => stub_for('people/Sedo.com LLC - Technical Contact'))
66
- result = NicAr::Client.people 'Sedo.com LLC - Technical Contact'
67
- result.must_be_instance_of Hash
68
- result['name'].must_equal 'Sedo.com LLC - Technical Contact'
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
- describe 'Transactions lookups' do
74
- it 'returns a Transactions array for domains lookups' do
75
- stub_request(:get,/transactions\/macusadas\.com\.ar$/).to_return(:body => stub_for('transactions/macusadas.com.ar.REN'))
76
- result = NicAr::Client.transactions 'macusadas.com.ar'
77
- result.must_be_instance_of Array
78
- result.count.must_equal 1
79
- transaction = result.first
80
- transaction.must_be_instance_of Hash
81
- transaction['id'].must_equal 'REN17330833'
82
- transaction['status'].must_equal 'FINALIZADO'
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
- it 'returns a Transaction hash for single transaction lookups' do
87
- stub_request(:get,/transactions\/REN17330833$/).to_return(:body => stub_for('transactions/REN17330833'))
88
- result = NicAr::Client.transactions 'REN17330833'
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.3
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-01 00:00:00.000000000Z
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: &84464410 !ruby/object:Gem::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: *84464410
24
+ version_requirements: *79831770
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: minitest
27
- requirement: &84464150 !ruby/object:Gem::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: *84464150
35
+ version_requirements: *79831500
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: webmock
38
- requirement: &84463840 !ruby/object:Gem::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: *84463840
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