dnsimple 2.0.0.a → 2.0.0.alpha2

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.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.ruby-version +1 -1
  4. data/.travis.yml +1 -2
  5. data/CHANGELOG.markdown +26 -2
  6. data/Gemfile +2 -0
  7. data/README.markdown +56 -36
  8. data/Rakefile +0 -1
  9. data/{dnsimple-ruby.gemspec → dnsimple.gemspec} +6 -4
  10. data/lib/dnsimple.rb +1 -1
  11. data/lib/dnsimple/base.rb +1 -1
  12. data/lib/dnsimple/certificate.rb +49 -35
  13. data/lib/dnsimple/client.rb +25 -72
  14. data/lib/dnsimple/contact.rb +12 -9
  15. data/lib/dnsimple/domain.rb +117 -82
  16. data/lib/dnsimple/error.rb +13 -2
  17. data/lib/dnsimple/extended_attribute.rb +3 -3
  18. data/lib/dnsimple/record.rb +9 -9
  19. data/lib/dnsimple/service.rb +3 -3
  20. data/lib/dnsimple/template.rb +8 -6
  21. data/lib/dnsimple/template_record.rb +8 -8
  22. data/lib/dnsimple/transfer_order.rb +2 -2
  23. data/lib/dnsimple/user.rb +26 -2
  24. data/lib/dnsimple/version.rb +2 -2
  25. data/spec/dnsimple/certificate_spec.rb +8 -5
  26. data/spec/dnsimple/client_spec.rb +56 -9
  27. data/spec/dnsimple/contact_spec.rb +2 -2
  28. data/spec/dnsimple/domain_spec.rb +140 -32
  29. data/spec/dnsimple/extended_attributes_spec.rb +1 -1
  30. data/spec/dnsimple/record_spec.rb +2 -2
  31. data/spec/dnsimple/template_spec.rb +1 -1
  32. data/spec/dnsimple/user_spec.rb +40 -1
  33. data/spec/files/2fa/error-badtoken.http +22 -0
  34. data/spec/files/2fa/error-required.http +23 -0
  35. data/spec/files/2fa/exchange-token.http +25 -0
  36. data/spec/files/account/user/success.http +3 -3
  37. data/spec/files/certificates/index/success.http +2 -2
  38. data/spec/files/certificates/show/notfound.http +2 -2
  39. data/spec/files/certificates/show/success.http +2 -2
  40. data/spec/files/contacts/show/notfound.http +2 -2
  41. data/spec/files/contacts/show/success.http +3 -3
  42. data/spec/files/domains/auto_renewal_disable/notfound.http +1 -1
  43. data/spec/files/domains/auto_renewal_disable/success.http +1 -1
  44. data/spec/files/domains/auto_renewal_enable/notfound.http +1 -1
  45. data/spec/files/domains/auto_renewal_enable/success.http +1 -1
  46. data/spec/files/domains/create/success.http +19 -0
  47. data/spec/files/domains/delete/success-204.http +18 -0
  48. data/spec/files/domains/delete/success.http +19 -0
  49. data/spec/files/domains/index/success.http +19 -0
  50. data/spec/files/domains/{show/notfound.http → notfound.http} +2 -2
  51. data/spec/files/domains/show/success.http +2 -2
  52. data/spec/files/extended_attributes/ca.http +2 -2
  53. data/spec/files/extended_attributes/com.http +2 -2
  54. data/spec/files/extended_attributes/success.http +2 -2
  55. data/spec/files/records/index/success.http +2 -2
  56. data/spec/files/records/show/notfound.http +2 -2
  57. data/spec/files/records/show/success.http +2 -2
  58. data/spec/files/templates/show/notfound.http +2 -2
  59. data/spec/files/templates/show/success.http +2 -2
  60. data/spec/spec_helper.rb +9 -9
  61. metadata +45 -33
  62. data/lib/dnsimple-ruby.rb +0 -1
  63. data/spec/ci/.dnsimple.test +0 -3
@@ -1,4 +1,4 @@
1
- module DNSimple
1
+ module Dnsimple
2
2
 
3
3
  # Represents a service that can be applied to a domain.
4
4
  class Service < Base
@@ -14,7 +14,7 @@ module DNSimple
14
14
  # Find a service by its ID or short name
15
15
  def self.find(id_or_short_name, options={})
16
16
  id = id_or_short_name
17
- response = DNSimple::Client.get("/v1/services/#{id}", options)
17
+ response = Client.get("/v1/services/#{id}", options)
18
18
 
19
19
  case response.code
20
20
  when 200
@@ -28,7 +28,7 @@ module DNSimple
28
28
 
29
29
  # Get all of the services that can be applied to a domain
30
30
  def self.all(options={})
31
- response = DNSimple::Client.get("/v1/services", options)
31
+ response = Client.get("/v1/services", options)
32
32
 
33
33
  case response.code
34
34
  when 200
@@ -1,4 +1,4 @@
1
- module DNSimple
1
+ module Dnsimple
2
2
  class Template < Base
3
3
 
4
4
  attr_accessor :id
@@ -16,7 +16,7 @@ module DNSimple
16
16
 
17
17
  options.merge!(:body => {:dns_template => template_hash})
18
18
 
19
- response = DNSimple::Client.post("/v1/templates", options)
19
+ response = Client.post("/v1/templates", options)
20
20
 
21
21
  case response.code
22
22
  when 201
@@ -28,7 +28,7 @@ module DNSimple
28
28
 
29
29
  def self.find(id_or_short_name, options={})
30
30
  id = id_or_short_name
31
- response = DNSimple::Client.get("/v1/templates/#{id}", options)
31
+ response = Client.get("/v1/templates/#{id}", options)
32
32
 
33
33
  case response.code
34
34
  when 200
@@ -41,7 +41,7 @@ module DNSimple
41
41
  end
42
42
 
43
43
  def self.all(options={})
44
- response = DNSimple::Client.get("/v1/templates", options)
44
+ response = Client.get("/v1/templates", options)
45
45
 
46
46
  case response.code
47
47
  when 200
@@ -52,10 +52,12 @@ module DNSimple
52
52
  end
53
53
 
54
54
 
55
- # Delete the template from DNSimple.
55
+ # #delete the template from DNSimple.
56
+ #
56
57
  # WARNING: this cannot be undone.
58
+ #
57
59
  def delete(options={})
58
- DNSimple::Client.delete("/v1/templates/#{id}", options)
60
+ Client.delete("/v1/templates/#{id}", options)
59
61
  end
60
62
  alias :destroy :delete
61
63
 
@@ -1,4 +1,4 @@
1
- module DNSimple
1
+ module Dnsimple
2
2
 
3
3
  # A single record in a template.
4
4
  class TemplateRecord < Base
@@ -25,12 +25,12 @@ module DNSimple
25
25
  attr_accessor :prio
26
26
 
27
27
  def delete(options={})
28
- DNSimple::Client.delete("/v1/templates/#{template.id}/template_records/#{id}", options)
28
+ Client.delete("/v1/templates/#{template.id}/template_records/#{id}", options)
29
29
  end
30
30
  alias :destroy :delete
31
31
 
32
32
  def self.create(short_name, name, record_type, content, options={})
33
- template = DNSimple::Template.find(short_name)
33
+ template = Template.find(short_name)
34
34
 
35
35
  record_hash = {:name => name, :record_type => record_type, :content => content}
36
36
  record_hash[:ttl] = options.delete(:ttl) || 3600
@@ -38,7 +38,7 @@ module DNSimple
38
38
 
39
39
  options.merge!({:query => {:dns_template_record => record_hash}})
40
40
 
41
- response = DNSimple::Client.post("/v1/templates/#{template.id}/template_records", options)
41
+ response = Client.post("/v1/templates/#{template.id}/template_records", options)
42
42
 
43
43
  case response.code
44
44
  when 201
@@ -49,8 +49,8 @@ module DNSimple
49
49
  end
50
50
 
51
51
  def self.find(short_name, id, options={})
52
- template = DNSimple::Template.find(short_name)
53
- response = DNSimple::Client.get("/v1/templates/#{template.id}/template_records/#{id}", options)
52
+ template = Template.find(short_name)
53
+ response = Client.get("/v1/templates/#{template.id}/template_records/#{id}", options)
54
54
 
55
55
  case response.code
56
56
  when 200
@@ -65,8 +65,8 @@ module DNSimple
65
65
  # Get all of the template records for the template with the
66
66
  # given short name.
67
67
  def self.all(short_name, options={})
68
- template = DNSimple::Template.find(short_name)
69
- response = DNSimple::Client.get("/v1/templates/#{template.id}/template_records", options)
68
+ template = Template.find(short_name)
69
+ response = Client.get("/v1/templates/#{template.id}/template_records", options)
70
70
 
71
71
  case response.code
72
72
  when 200
@@ -1,4 +1,4 @@
1
- module DNSimple
1
+ module Dnsimple
2
2
 
3
3
  # Represents a transfer order.
4
4
  class TransferOrder < Base
@@ -20,7 +20,7 @@ module DNSimple
20
20
 
21
21
  options.merge!({:body => body})
22
22
 
23
- response = DNSimple::Client.post("/v1/domain_transfers", options)
23
+ response = Client.post("/v1/domain_transfers", options)
24
24
 
25
25
  case response.code
26
26
  when 201
data/lib/dnsimple/user.rb CHANGED
@@ -1,4 +1,4 @@
1
- module DNSimple
1
+ module Dnsimple
2
2
  class User < Base
3
3
 
4
4
  attr_accessor :id
@@ -11,8 +11,12 @@ module DNSimple
11
11
  attr_accessor :updated_at
12
12
 
13
13
 
14
+ # Fetches the information about the authenticated user.
15
+ #
16
+ # @return [User] the authenticated user
17
+ # @raise [RequestError] if the user doesn't exist
14
18
  def self.me
15
- response = DNSimple::Client.get("/v1/user")
19
+ response = Client.get("/v1/user")
16
20
 
17
21
  case response.code
18
22
  when 200
@@ -22,5 +26,25 @@ module DNSimple
22
26
  end
23
27
  end
24
28
 
29
+ # Requests a new two-factor authentication exchange token.
30
+ #
31
+ # The exchange-token is required to validate API requests
32
+ # using HTTP Basic Authentication when the account has two-factor authentication enabled.
33
+ #
34
+ # @see http://developer.dnsimple.com/authentication/#twofa
35
+ #
36
+ # @example Request an Exchange Token
37
+ # Dnsimple::User.two_factor_exchange_token('0000000')
38
+ # # => "cda038832591e34f5df642ce2b61dc78"
39
+ #
40
+ # @param [String] otp_token the two-factor one time (OTP) token
41
+ #
42
+ # @return [String] the two-factor API exchange token
43
+ # @raise [AuthenticationFailed] if the provided OTP token is invalid
44
+ def self.two_factor_exchange_token(otp_token)
45
+ response = Client.get("/v1/user", :headers => { Client::HEADER_2FA_STRICT => "1", Client::HEADER_OTP_TOKEN => otp_token })
46
+ response.headers[Client::HEADER_EXCHANGE_TOKEN]
47
+ end
48
+
25
49
  end
26
50
  end
@@ -1,3 +1,3 @@
1
- module DNSimple
2
- VERSION = '2.0.0.a'
1
+ module Dnsimple
2
+ VERSION = '2.0.0.alpha2'
3
3
  end
@@ -1,8 +1,8 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe DNSimple::Certificate do
3
+ describe Dnsimple::Certificate do
4
4
 
5
- let(:domain) { DNSimple::Domain.new(:name => "example.com") }
5
+ let(:domain) { Dnsimple::Domain.new(:name => "example.com") }
6
6
 
7
7
 
8
8
  describe ".find" do
@@ -23,17 +23,20 @@ describe DNSimple::Certificate do
23
23
  result = described_class.find(domain, "2")
24
24
 
25
25
  expect(result.id).to eq(4576)
26
- expect(result.domain).to eq(domain)
26
+ expect(result.domain_id).to eq(79569)
27
+ expect(result.contact_id).to eq(11549)
27
28
  expect(result.name).to eq("www")
29
+ expect(result.state).to eq("cancelled")
28
30
  expect(result.csr).to eq("-----BEGIN NEW CERTIFICATE REQUEST-----\nRHr2akB4KMba6FMAsvlStnO/2ika16hNx+d3smPNsER+HA==\n-----END NEW CERTIFICATE REQUEST-----\n")
29
31
  expect(result.ssl_certificate).to eq("-----BEGIN CERTIFICATE-----\nXwTkw5UCPpaVyUYcwHlvaprOe9ZbwIyEHm2AT1rW+70=\n-----END CERTIFICATE-----\n")
30
32
  expect(result.private_key).to eq("-----BEGIN RSA PRIVATE KEY-----\nUeXbFi7o+nuPfRhpBFQEKwacKFc3Hnc1hH6UsnC0KY25cUif7yz38A==\n-----END RSA PRIVATE KEY-----\n")
31
33
  expect(result.approver_email).to eq("example@example.net")
32
34
  expect(result.created_at).to eq("2013-09-17T21:54:42Z")
33
35
  expect(result.updated_at).to eq("2013-09-17T22:25:36Z")
36
+ expect(result.configured_at).to eq("2013-09-17T22:25:01Z")
37
+ expect(result.expires_on).to eq("2014-09-17")
34
38
 
35
- expect(result.available_approver_emails).to be_nil
36
- expect(result.certificate_status).to be_nil
39
+ expect(result.domain).to eq(domain)
37
40
  end
38
41
  end
39
42
  end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe DNSimple::Client do
3
+ describe Dnsimple::Client do
4
4
 
5
5
  let(:klass) { described_class }
6
6
  let(:response) { stub('response', :code => 200) }
@@ -29,10 +29,15 @@ describe DNSimple::Client do
29
29
  end
30
30
 
31
31
  describe ".request" do
32
+ before do
33
+ [:username, :password, :exchange_token, :api_token, :domain_api_token].each do |attribute|
34
+ described_class.send("#{attribute}=", nil)
35
+ end
36
+ end
37
+
32
38
  it "uses HTTP authentication if there's a password provided" do
33
39
  described_class.username = 'user'
34
40
  described_class.password = 'pass'
35
- described_class.api_token = nil
36
41
  described_class.base_uri = 'https://api.example.com/'
37
42
 
38
43
  HTTParty.expects(:get).
@@ -42,9 +47,19 @@ describe DNSimple::Client do
42
47
  described_class.request(:get, '/domains', {})
43
48
  end
44
49
 
50
+ it "uses header authentication if there's a domain api token provided" do
51
+ described_class.domain_api_token = 'domaintoken'
52
+ described_class.base_uri = 'https://api.example.com/'
53
+
54
+ HTTParty.expects(:get).
55
+ with('https://api.example.com/domains', has_entries(:headers => has_entries({ 'X-DNSimple-Domain-Token' => 'domaintoken' }))).
56
+ returns(response)
57
+
58
+ described_class.request(:get, '/domains', {})
59
+ end
60
+
45
61
  it "uses header authentication if there's an api token provided" do
46
62
  described_class.username = 'user'
47
- described_class.password = nil
48
63
  described_class.api_token = 'token'
49
64
  described_class.base_uri = 'https://api.example.com/'
50
65
 
@@ -55,32 +70,48 @@ describe DNSimple::Client do
55
70
  described_class.request(:get, '/domains', {})
56
71
  end
57
72
 
73
+ it "uses HTTP authentication via exchange token if there's an exchange token provided" do
74
+ described_class.username = 'user'
75
+ described_class.password = 'pass'
76
+ described_class.exchange_token = 'exchange-token'
77
+ described_class.base_uri = 'https://api.example.com/'
78
+
79
+ HTTParty.expects(:get).
80
+ with('https://api.example.com/domains', has_entries(:basic_auth => { :username => 'exchange-token', :password => 'x-2fa-basic' })).
81
+ returns(response)
82
+
83
+ described_class.request(:get, '/domains', {})
84
+ end
85
+
58
86
  it "raises an error if there's no password or api token provided" do
59
87
  described_class.username = 'user'
60
- described_class.password = nil
61
- described_class.api_token = nil
62
88
  described_class.base_uri = 'https://api.example.com/'
63
89
 
64
90
  expect {
65
91
  described_class.request(:get, '/domains', {})
66
- }.to raise_error(DNSimple::Error, 'A password or API token is required for all API requests.')
92
+ }.to raise_error(Dnsimple::Error, 'A password or API token is required for all API requests.')
67
93
  end
68
94
 
69
95
  it "adds a custom user-agent" do
96
+ described_class.api_token = 'token'
97
+
70
98
  HTTParty.expects(:get).
71
- with(is_a(String), has_entries(:headers => has_entries({ 'User-Agent' => "dnsimple-ruby/#{DNSimple::VERSION}" }))).
99
+ with(is_a(String), has_entries(:headers => has_entries({ 'User-Agent' => "dnsimple-ruby/#{Dnsimple::VERSION}" }))).
72
100
  returns(response)
73
101
 
74
102
  described_class.request(:get, '/foo', {})
75
103
  end
76
104
 
77
105
  it "performs a request" do
106
+ described_class.username = 'user'
107
+ described_class.password = 'pass'
108
+
78
109
  HTTParty.expects(:get).
79
110
  with("#{described_class.base_uri}/foo",
80
111
  :format => :json,
81
112
  :basic_auth => { :username => described_class.username, :password => described_class.password },
82
- :headers => { 'Accept' => 'application/json', 'User-Agent' => "dnsimple-ruby/#{DNSimple::VERSION}" }
83
- ).
113
+ :headers => { 'Accept' => 'application/json', 'User-Agent' => "dnsimple-ruby/#{Dnsimple::VERSION}" }
114
+ ).
84
115
  returns(response)
85
116
 
86
117
  described_class.request(:get, '/foo', {})
@@ -104,4 +135,20 @@ describe DNSimple::Client do
104
135
  end
105
136
  end
106
137
 
138
+
139
+ describe "authentication" do
140
+ context "when 2FA is required" do
141
+ before do
142
+ stub_request(:get, %r[/foo]).
143
+ to_return(read_fixture("2fa/error-required.http"))
144
+ end
145
+
146
+ it "raises a TwoFactorAuthenticationRequired error" do
147
+ expect {
148
+ described_class.get('/foo', {})
149
+ }.to raise_error(Dnsimple::TwoFactorAuthenticationRequired)
150
+ end
151
+ end
152
+ end
153
+
107
154
  end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe DNSimple::Contact do
3
+ describe Dnsimple::Contact do
4
4
 
5
5
  describe ".find" do
6
6
  before do
@@ -24,7 +24,7 @@ describe DNSimple::Contact do
24
24
  expect(result.first_name).to eq("Simone")
25
25
  expect(result.last_name).to eq("Carletti")
26
26
  expect(result.job_title).to eq("Underwater Programmer")
27
- expect(result.organization_name).to eq("DNSimple")
27
+ expect(result.organization_name).to eq("Dnsimple")
28
28
  expect(result.email_address).to eq("example@example.com")
29
29
  expect(result.phone).to eq("+1 111 000000")
30
30
  expect(result.fax).to eq("+1 222 000000")
@@ -1,9 +1,59 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe DNSimple::Domain do
3
+ describe Dnsimple::Domain do
4
4
 
5
5
  let(:contact_id) { 1001 }
6
6
 
7
+
8
+ describe ".list" do
9
+ before do
10
+ stub_request(:get, %r[/v1/domains$]).
11
+ to_return(read_fixture("domains/index/success.http"))
12
+ end
13
+
14
+ it "builds the correct request" do
15
+ described_class.list
16
+
17
+ expect(WebMock).to have_requested(:get, "https://#{CONFIG['username']}:#{CONFIG['password']}@#{CONFIG['host']}/v1/domains").
18
+ with(headers: { 'Accept' => 'application/json' })
19
+ end
20
+
21
+ it "returns the list of domains" do
22
+ results = described_class.list
23
+
24
+ expect(results).to be_a(Array)
25
+ expect(results.size).to eq(2)
26
+
27
+ result = results[0]
28
+ expect(result.id).to eq(228)
29
+
30
+ result = results[1]
31
+ expect(result.id).to eq(227)
32
+ end
33
+ end
34
+
35
+ describe ".create" do
36
+ before do
37
+ stub_request(:post, %r[/v1/domains$]).
38
+ to_return(read_fixture("domains/create/success.http"))
39
+ end
40
+
41
+ it "builds the correct request" do
42
+ described_class.create("example.com")
43
+
44
+ expect(WebMock).to have_requested(:post, "https://#{CONFIG['username']}:#{CONFIG['password']}@#{CONFIG['host']}/v1/domains").
45
+ with(headers: { 'Accept' => 'application/json' }).
46
+ with(body: { "domain" => { "name" => "example.com" }})
47
+ end
48
+
49
+ it "returns the domain" do
50
+ result = described_class.create("example.com")
51
+
52
+ expect(result).to be_a(described_class)
53
+ expect(result.id).to eq(6)
54
+ end
55
+ end
56
+
7
57
  describe ".find" do
8
58
  before do
9
59
  stub_request(:get, %r[/v1/domains/example.com]).
@@ -14,33 +64,90 @@ describe DNSimple::Domain do
14
64
  described_class.find("example.com")
15
65
 
16
66
  expect(WebMock).to have_requested(:get, "https://#{CONFIG['username']}:#{CONFIG['password']}@#{CONFIG['host']}/v1/domains/example.com").
17
- with(:headers => { 'Accept' => 'application/json' })
18
- end
19
-
20
- context "when the domain exists" do
21
- it "returns the domain" do
22
- result = described_class.find("example.com")
23
-
24
- expect(result).to be_a(described_class)
25
- expect(result.id).to eq(6)
26
- expect(result.name).to eq("test-1383931357.com")
27
- expect(result.expires_on).to eq('2015-11-08')
28
- expect(result.created_at).to eq("2013-11-08T17:22:48Z")
29
- expect(result.updated_at).to eq("2014-01-14T18:27:04Z")
30
- expect(result.state).to eq("registered")
31
- expect(result.registrant_id).to eq(2)
32
- expect(result.user_id).to eq(2)
33
- expect(result.lockable).to eq(true)
34
- expect(result.auto_renew).to eq(true)
35
- expect(result.whois_protected).to eq(false)
36
-
37
- expect(result.name_server_status).to be_nil
67
+ with(headers: { 'Accept' => 'application/json' })
68
+ end
69
+
70
+ it "returns the domain" do
71
+ result = described_class.find("example.com")
72
+
73
+ expect(result).to be_a(described_class)
74
+ expect(result.id).to eq(6)
75
+ expect(result.user_id).to eq(2)
76
+ expect(result.registrant_id).to eq(2)
77
+ expect(result.user_id).to eq(2)
78
+ expect(result.name).to eq("test-1383931357.com")
79
+ expect(result.state).to eq("registered")
80
+ expect(result.auto_renew).to eq(true)
81
+ expect(result.whois_protected).to eq(false)
82
+ expect(result.expires_on).to eq("2015-11-08")
83
+ expect(result.created_at).to eq("2013-11-08T17:22:48Z")
84
+ expect(result.updated_at).to eq("2014-01-14T18:27:04Z")
85
+ end
86
+
87
+ context "when the domain does not exist" do
88
+ it "raises RecordNotFound" do
89
+ stub_request(:get, %r[/v1/domains/example.com]).
90
+ to_return(read_fixture("domains/notfound.http"))
91
+
92
+ expect {
93
+ described_class.find("example.com")
94
+ }.to raise_error(Dnsimple::RecordNotFound)
38
95
  end
39
96
  end
40
97
  end
41
98
 
99
+ describe ".delete" do
100
+ before do
101
+ stub_request(:delete, %r[/v1/domains/example.com]).
102
+ to_return(read_fixture("domains/delete/success.http"))
103
+ end
104
+
105
+ it "builds the correct request" do
106
+ described_class.delete("example.com")
107
+
108
+ expect(WebMock).to have_requested(:delete, "https://#{CONFIG['username']}:#{CONFIG['password']}@#{CONFIG['host']}/v1/domains/example.com").
109
+ with(headers: { 'Accept' => 'application/json' })
110
+ end
111
+
112
+ it "returns nothing" do
113
+ result = described_class.delete("example.com")
114
+
115
+ expect(result).to be_truthy
116
+ end
117
+
118
+ it "supports HTTP 204" do
119
+ stub_request(:delete, %r[/v1/domains/example.com]).
120
+ to_return(read_fixture("domains/delete/success-204.http"))
121
+
122
+ result = described_class.delete("example.com")
123
+
124
+ expect(result).to be_truthy
125
+ end
126
+
127
+ context "when the domain does not exist" do
128
+ it "raises RecordNotFound" do
129
+ stub_request(:delete, %r[/v1/domains/example.com]).
130
+ to_return(read_fixture("domains/notfound.http"))
131
+
132
+ expect {
133
+ described_class.delete("example.com")
134
+ }.to raise_error(Dnsimple::RecordNotFound)
135
+ end
136
+ end
137
+ end
138
+
139
+
140
+ describe "#delete" do
141
+ it "delegates to .delete" do
142
+ subject = described_class.new(name: "example.com")
143
+ described_class.expects(:delete).with(subject.name).returns(:returned)
144
+
145
+ expect(subject.delete).to eq(:returned)
146
+ end
147
+ end
148
+
42
149
  describe "#enable_auto_renew" do
43
- let(:domain) { described_class.new(name: 'example.com', auto_renew: false) }
150
+ let(:domain) { described_class.new(:name => 'example.com', :auto_renew => false) }
44
151
 
45
152
  context "when response is not 200" do
46
153
  before do
@@ -49,12 +156,12 @@ describe DNSimple::Domain do
49
156
  end
50
157
 
51
158
  it "raises a RequestError" do
52
- expect { domain.enable_auto_renew }.to raise_error(DNSimple::RequestError)
159
+ expect { domain.enable_auto_renew }.to raise_error(Dnsimple::RequestError)
53
160
  end
54
161
  end
55
162
 
56
163
  context "when auto_renew is true" do
57
- let(:domain) { described_class.new(name: 'example.com', auto_renew: true) }
164
+ let(:domain) { described_class.new(:name => 'example.com', :auto_renew => true) }
58
165
 
59
166
  it "does not send a web request" do
60
167
  domain.enable_auto_renew
@@ -63,7 +170,7 @@ describe DNSimple::Domain do
63
170
  end
64
171
 
65
172
  context "when auto_renew is false" do
66
- let(:domain) { described_class.new(name: 'example.com', auto_renew: false) }
173
+ let(:domain) { described_class.new(:name => 'example.com', :auto_renew => false) }
67
174
 
68
175
  before do
69
176
  stub_request(:post, %r[/v1/domains/example.com/auto_renewal]).
@@ -74,7 +181,7 @@ describe DNSimple::Domain do
74
181
  domain.enable_auto_renew
75
182
 
76
183
  expect(WebMock).to have_requested(:post, "https://#{CONFIG['username']}:#{CONFIG['password']}@#{CONFIG['host']}/v1/domains/example.com/auto_renewal").
77
- with(:headers => { 'Accept' => 'application/json' })
184
+ with(headers: { 'Accept' => 'application/json' })
78
185
  end
79
186
 
80
187
  it "sets auto_renew to true on the domain" do
@@ -86,7 +193,7 @@ describe DNSimple::Domain do
86
193
  end
87
194
 
88
195
  describe "#disable_auto_renew" do
89
- let(:domain) { described_class.new(name: 'example.com', auto_renew: true) }
196
+ let(:domain) { described_class.new(:name => 'example.com', :auto_renew => true) }
90
197
 
91
198
  context "when response is not 200" do
92
199
  before do
@@ -95,12 +202,12 @@ describe DNSimple::Domain do
95
202
  end
96
203
 
97
204
  it "raises a RequestError" do
98
- expect { domain.disable_auto_renew }.to raise_error(DNSimple::RequestError)
205
+ expect { domain.disable_auto_renew }.to raise_error(Dnsimple::RequestError)
99
206
  end
100
207
  end
101
208
 
102
209
  context "when auto_renew is false" do
103
- let(:domain) { described_class.new(name: 'example.com', auto_renew: false) }
210
+ let(:domain) { described_class.new(:name => 'example.com', :auto_renew => false) }
104
211
 
105
212
  it "does not send a web request" do
106
213
  domain.disable_auto_renew
@@ -109,7 +216,7 @@ describe DNSimple::Domain do
109
216
  end
110
217
 
111
218
  context "when auto_renew is true" do
112
- let(:domain) { described_class.new(name: 'example.com', auto_renew: true) }
219
+ let(:domain) { described_class.new(:name => 'example.com', :auto_renew => true) }
113
220
 
114
221
  before do
115
222
  stub_request(:delete, %r[/v1/domains/example.com/auto_renewal]).
@@ -120,7 +227,7 @@ describe DNSimple::Domain do
120
227
  domain.disable_auto_renew
121
228
 
122
229
  expect(WebMock).to have_requested(:delete, "https://#{CONFIG['username']}:#{CONFIG['password']}@#{CONFIG['host']}/v1/domains/example.com/auto_renewal").
123
- with(:headers => { 'Accept' => 'application/json' })
230
+ with(headers: { 'Accept' => 'application/json' })
124
231
  end
125
232
 
126
233
  it "sets auto_renew to false on the domain" do
@@ -130,4 +237,5 @@ describe DNSimple::Domain do
130
237
  end
131
238
 
132
239
  end
240
+
133
241
  end