dnsimple 3.0.0.pre.beta2 → 3.0.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.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +13 -0
  3. data/.rubocop_dnsimple.yml +216 -0
  4. data/.rubocop_todo.yml +14 -0
  5. data/CHANGELOG.md +16 -1
  6. data/Gemfile +1 -0
  7. data/Rakefile +8 -3
  8. data/lib/dnsimple/client.rb +9 -12
  9. data/lib/dnsimple/client/clients.rb +36 -2
  10. data/lib/dnsimple/client/contacts.rb +6 -6
  11. data/lib/dnsimple/client/domains.rb +5 -5
  12. data/lib/dnsimple/client/identity.rb +2 -2
  13. data/lib/dnsimple/client/oauth.rb +2 -2
  14. data/lib/dnsimple/client/registrar.rb +1 -1
  15. data/lib/dnsimple/client/registrar_auto_renewal.rb +2 -2
  16. data/lib/dnsimple/client/registrar_delegation.rb +49 -0
  17. data/lib/dnsimple/client/registrar_whois_privacy.rb +1 -1
  18. data/lib/dnsimple/client/services.rb +68 -0
  19. data/lib/dnsimple/client/templates.rb +139 -0
  20. data/lib/dnsimple/client/tlds.rb +3 -3
  21. data/lib/dnsimple/client/webhooks.rb +4 -4
  22. data/lib/dnsimple/client/zones.rb +2 -2
  23. data/lib/dnsimple/client/zones_records.rb +1 -1
  24. data/lib/dnsimple/default.rb +2 -2
  25. data/lib/dnsimple/error.rb +14 -1
  26. data/lib/dnsimple/struct.rb +3 -1
  27. data/lib/dnsimple/struct/contact.rb +2 -2
  28. data/lib/dnsimple/struct/extended_attribute.rb +5 -1
  29. data/lib/dnsimple/struct/service.rb +64 -0
  30. data/lib/dnsimple/struct/template.rb +22 -0
  31. data/lib/dnsimple/struct/tld.rb +1 -1
  32. data/lib/dnsimple/version.rb +1 -1
  33. data/spec/dnsimple/client/client_service_spec.rb +6 -6
  34. data/spec/dnsimple/client/contacts_spec.rb +30 -30
  35. data/spec/dnsimple/client/domains_email_forwards_spec.rb +25 -25
  36. data/spec/dnsimple/client/domains_spec.rb +27 -27
  37. data/spec/dnsimple/client/identity_spec.rb +8 -8
  38. data/spec/dnsimple/client/oauth_spec.rb +9 -9
  39. data/spec/dnsimple/client/registrar_auto_renewal_spec.rb +13 -13
  40. data/spec/dnsimple/client/registrar_delegation_spec.rb +55 -0
  41. data/spec/dnsimple/client/registrar_spec.rb +29 -29
  42. data/spec/dnsimple/client/registrar_whois_privacy_spec.rb +16 -16
  43. data/spec/dnsimple/client/services_spec.rb +78 -0
  44. data/spec/dnsimple/client/templates_spec.rb +163 -0
  45. data/spec/dnsimple/client/tlds_spec.rb +22 -23
  46. data/spec/dnsimple/client/webhooks_spec.rb +22 -22
  47. data/spec/dnsimple/client/zones_records_spec.rb +40 -40
  48. data/spec/dnsimple/client/zones_spec.rb +12 -12
  49. data/spec/dnsimple/client_spec.rb +52 -44
  50. data/spec/dnsimple/extra_spec.rb +3 -3
  51. data/spec/fixtures.http/changeDomainDelegation/success.http +17 -0
  52. data/spec/fixtures.http/createTemplate/created.http +17 -0
  53. data/spec/fixtures.http/deleteTemplate/success.http +13 -0
  54. data/spec/fixtures.http/getDomainDelegation/success-empty.http +17 -0
  55. data/spec/fixtures.http/getDomainDelegation/success.http +17 -0
  56. data/spec/fixtures.http/getService/success.http +17 -0
  57. data/spec/fixtures.http/getTemplate/success.http +17 -0
  58. data/spec/fixtures.http/listServices/success.http +17 -0
  59. data/spec/fixtures.http/listTemplates/success.http +17 -0
  60. data/spec/fixtures.http/method-not-allowed.http +11 -0
  61. data/spec/fixtures.http/updateTemplate/success.http +17 -0
  62. metadata +41 -5
@@ -10,15 +10,15 @@ describe Dnsimple::Client, ".zones" do
10
10
  let(:zone_id) { "example.com" }
11
11
 
12
12
  before do
13
- stub_request(:get, %r[/v2/#{account_id}/zones/#{zone_id}/records])
14
- .to_return(read_http_fixture("listZoneRecords/success.http"))
13
+ stub_request(:get, %r{/v2/#{account_id}/zones/#{zone_id}/records}).
14
+ to_return(read_http_fixture("listZoneRecords/success.http"))
15
15
  end
16
16
 
17
17
  it "builds the correct request" do
18
18
  subject.records(account_id, zone_id)
19
19
 
20
- expect(WebMock).to have_requested(:get, "https://api.dnsimple.test/v2/#{account_id}/zones/#{zone_id}/records")
21
- .with(headers: { 'Accept' => 'application/json' })
20
+ expect(WebMock).to have_requested(:get, "https://api.dnsimple.test/v2/#{account_id}/zones/#{zone_id}/records").
21
+ with(headers: { 'Accept' => 'application/json' })
22
22
  end
23
23
 
24
24
  it "supports pagination" do
@@ -58,8 +58,8 @@ describe Dnsimple::Client, ".zones" do
58
58
 
59
59
  context "when the zone does not exist" do
60
60
  it "raises NotFoundError" do
61
- stub_request(:get, %r[/v2])
62
- .to_return(read_http_fixture("notfound-zone.http"))
61
+ stub_request(:get, %r{/v2}).
62
+ to_return(read_http_fixture("notfound-zone.http"))
63
63
 
64
64
  expect {
65
65
  subject.records(account_id, zone_id)
@@ -73,8 +73,8 @@ describe Dnsimple::Client, ".zones" do
73
73
  let(:zone_id) { "example.com" }
74
74
 
75
75
  it "delegates to client.paginate" do
76
- expect(subject).to receive(:paginate).with(:records, account_id, zone_id, { foo: "bar" })
77
- subject.all_records(account_id, zone_id, { foo: "bar" })
76
+ expect(subject).to receive(:paginate).with(:records, account_id, zone_id, foo: "bar")
77
+ subject.all_records(account_id, zone_id, foo: "bar")
78
78
  end
79
79
  end
80
80
 
@@ -83,8 +83,8 @@ describe Dnsimple::Client, ".zones" do
83
83
  let(:zone_id) { "example.com" }
84
84
 
85
85
  before do
86
- stub_request(:post, %r[/v2/#{account_id}/zones/#{zone_id}/records$])
87
- .to_return(read_http_fixture("createZoneRecord/created.http"))
86
+ stub_request(:post, %r{/v2/#{account_id}/zones/#{zone_id}/records$}).
87
+ to_return(read_http_fixture("createZoneRecord/created.http"))
88
88
  end
89
89
 
90
90
  let(:attributes) { { type: "A", name: "www", content: "127.0.0.1" } }
@@ -92,9 +92,9 @@ describe Dnsimple::Client, ".zones" do
92
92
  it "builds the correct request" do
93
93
  subject.create_record(account_id, zone_id, attributes)
94
94
 
95
- expect(WebMock).to have_requested(:post, "https://api.dnsimple.test/v2/#{account_id}/zones/#{zone_id}/records")
96
- .with(body: attributes)
97
- .with(headers: { 'Accept' => 'application/json' })
95
+ expect(WebMock).to have_requested(:post, "https://api.dnsimple.test/v2/#{account_id}/zones/#{zone_id}/records").
96
+ with(body: attributes).
97
+ with(headers: { 'Accept' => 'application/json' })
98
98
  end
99
99
 
100
100
  it "returns the record" do
@@ -108,8 +108,8 @@ describe Dnsimple::Client, ".zones" do
108
108
 
109
109
  context "when the zone does not exist" do
110
110
  it "raises NotFoundError" do
111
- stub_request(:post, %r[/v2])
112
- .to_return(read_http_fixture("notfound-zone.http"))
111
+ stub_request(:post, %r{/v2}).
112
+ to_return(read_http_fixture("notfound-zone.http"))
113
113
 
114
114
  expect {
115
115
  subject.create_record(account_id, zone_id, attributes)
@@ -123,15 +123,15 @@ describe Dnsimple::Client, ".zones" do
123
123
  let(:zone_id) { "example.com" }
124
124
 
125
125
  before do
126
- stub_request(:get, %r[/v2/#{account_id}/zones/#{zone_id}/records/.+$])
127
- .to_return(read_http_fixture("getZoneRecord/success.http"))
126
+ stub_request(:get, %r{/v2/#{account_id}/zones/#{zone_id}/records/.+$}).
127
+ to_return(read_http_fixture("getZoneRecord/success.http"))
128
128
  end
129
129
 
130
130
  it "builds the correct request" do
131
131
  subject.record(account_id, zone_id, record_id = 2)
132
132
 
133
- expect(WebMock).to have_requested(:get, "https://api.dnsimple.test/v2/#{account_id}/zones/#{zone_id}/records/#{record_id}")
134
- .with(headers: { 'Accept' => 'application/json' })
133
+ expect(WebMock).to have_requested(:get, "https://api.dnsimple.test/v2/#{account_id}/zones/#{zone_id}/records/#{record_id}").
134
+ with(headers: { 'Accept' => 'application/json' })
135
135
  end
136
136
 
137
137
  it "returns the record" do
@@ -155,8 +155,8 @@ describe Dnsimple::Client, ".zones" do
155
155
 
156
156
  context "when the zone does not exist" do
157
157
  it "raises NotFoundError" do
158
- stub_request(:get, %r[/v2])
159
- .to_return(read_http_fixture("notfound-zone.http"))
158
+ stub_request(:get, %r{/v2}).
159
+ to_return(read_http_fixture("notfound-zone.http"))
160
160
 
161
161
  expect {
162
162
  subject.record(account_id, zone_id, "0")
@@ -166,8 +166,8 @@ describe Dnsimple::Client, ".zones" do
166
166
 
167
167
  context "when the record does not exist" do
168
168
  it "raises NotFoundError" do
169
- stub_request(:get, %r[/v2])
170
- .to_return(read_http_fixture("notfound-record.http"))
169
+ stub_request(:get, %r{/v2}).
170
+ to_return(read_http_fixture("notfound-record.http"))
171
171
 
172
172
  expect {
173
173
  subject.record(account_id, zone_id, "0")
@@ -181,8 +181,8 @@ describe Dnsimple::Client, ".zones" do
181
181
  let(:zone_id) { "example.com" }
182
182
 
183
183
  before do
184
- stub_request(:patch, %r[/v2/#{account_id}/zones/#{zone_id}/records/.+$])
185
- .to_return(read_http_fixture("updateZoneRecord/success.http"))
184
+ stub_request(:patch, %r{/v2/#{account_id}/zones/#{zone_id}/records/.+$}).
185
+ to_return(read_http_fixture("updateZoneRecord/success.http"))
186
186
  end
187
187
 
188
188
  let(:attributes) { { content: "127.0.0.1", priority: "1" } }
@@ -190,9 +190,9 @@ describe Dnsimple::Client, ".zones" do
190
190
  it "builds the correct request" do
191
191
  subject.update_record(account_id, zone_id, record_id = 2, attributes)
192
192
 
193
- expect(WebMock).to have_requested(:patch, "https://api.dnsimple.test/v2/#{account_id}/zones/#{zone_id}/records/#{record_id}")
194
- .with(body: attributes)
195
- .with(headers: { 'Accept' => 'application/json' })
193
+ expect(WebMock).to have_requested(:patch, "https://api.dnsimple.test/v2/#{account_id}/zones/#{zone_id}/records/#{record_id}").
194
+ with(body: attributes).
195
+ with(headers: { 'Accept' => 'application/json' })
196
196
  end
197
197
 
198
198
  it "returns the record" do
@@ -206,8 +206,8 @@ describe Dnsimple::Client, ".zones" do
206
206
 
207
207
  context "when the zone does not exist" do
208
208
  it "raises NotFoundError" do
209
- stub_request(:patch, %r[/v2])
210
- .to_return(read_http_fixture("notfound-zone.http"))
209
+ stub_request(:patch, %r{/v2}).
210
+ to_return(read_http_fixture("notfound-zone.http"))
211
211
 
212
212
  expect {
213
213
  subject.update_record(account_id, zone_id, "0", {})
@@ -217,8 +217,8 @@ describe Dnsimple::Client, ".zones" do
217
217
 
218
218
  context "when the record does not exist" do
219
219
  it "raises NotFoundError" do
220
- stub_request(:patch, %r[/v2])
221
- .to_return(read_http_fixture("notfound-record.http"))
220
+ stub_request(:patch, %r{/v2}).
221
+ to_return(read_http_fixture("notfound-record.http"))
222
222
 
223
223
  expect {
224
224
  subject.update_record(account_id, zone_id, "0", {})
@@ -232,15 +232,15 @@ describe Dnsimple::Client, ".zones" do
232
232
  let(:zone_id) { "example.com" }
233
233
 
234
234
  before do
235
- stub_request(:delete, %r[/v2/#{account_id}/zones/#{zone_id}/records/.+$])
236
- .to_return(read_http_fixture("deleteZoneRecord/success.http"))
235
+ stub_request(:delete, %r{/v2/#{account_id}/zones/#{zone_id}/records/.+$}).
236
+ to_return(read_http_fixture("deleteZoneRecord/success.http"))
237
237
  end
238
238
 
239
239
  it "builds the correct request" do
240
240
  subject.delete_record(account_id, zone_id, record_id = 2)
241
241
 
242
- expect(WebMock).to have_requested(:delete, "https://api.dnsimple.test/v2/#{account_id}/zones/#{zone_id}/records/#{record_id}")
243
- .with(headers: { 'Accept' => 'application/json' })
242
+ expect(WebMock).to have_requested(:delete, "https://api.dnsimple.test/v2/#{account_id}/zones/#{zone_id}/records/#{record_id}").
243
+ with(headers: { 'Accept' => 'application/json' })
244
244
  end
245
245
 
246
246
  it "returns nothing" do
@@ -253,8 +253,8 @@ describe Dnsimple::Client, ".zones" do
253
253
 
254
254
  context "when the zone does not exist" do
255
255
  it "raises NotFoundError" do
256
- stub_request(:delete, %r[/v2])
257
- .to_return(read_http_fixture("notfound-zone.http"))
256
+ stub_request(:delete, %r{/v2}).
257
+ to_return(read_http_fixture("notfound-zone.http"))
258
258
 
259
259
  expect {
260
260
  subject.delete_record(account_id, zone_id, "0")
@@ -264,8 +264,8 @@ describe Dnsimple::Client, ".zones" do
264
264
 
265
265
  context "when the record does not exist" do
266
266
  it "raises NotFoundError" do
267
- stub_request(:delete, %r[/v2])
268
- .to_return(read_http_fixture("notfound-record.http"))
267
+ stub_request(:delete, %r{/v2}).
268
+ to_return(read_http_fixture("notfound-record.http"))
269
269
 
270
270
  expect {
271
271
  subject.delete_record(account_id, zone_id, "0")
@@ -9,15 +9,15 @@ describe Dnsimple::Client, ".zones" do
9
9
  let(:account_id) { 1010 }
10
10
 
11
11
  before do
12
- stub_request(:get, %r[/v2/#{account_id}/zones])
13
- .to_return(read_http_fixture("listZones/success.http"))
12
+ stub_request(:get, %r{/v2/#{account_id}/zones}).
13
+ to_return(read_http_fixture("listZones/success.http"))
14
14
  end
15
15
 
16
16
  it "builds the correct request" do
17
17
  subject.zones(account_id)
18
18
 
19
- expect(WebMock).to have_requested(:get, "https://api.dnsimple.test/v2/#{account_id}/zones")
20
- .with(headers: { 'Accept' => 'application/json' })
19
+ expect(WebMock).to have_requested(:get, "https://api.dnsimple.test/v2/#{account_id}/zones").
20
+ with(headers: { 'Accept' => 'application/json' })
21
21
  end
22
22
 
23
23
  it "supports pagination" do
@@ -60,8 +60,8 @@ describe Dnsimple::Client, ".zones" do
60
60
  let(:account_id) { 1010 }
61
61
 
62
62
  it "delegates to client.paginate" do
63
- expect(subject).to receive(:paginate).with(:zones, account_id, { foo: "bar" })
64
- subject.all_zones(account_id, { foo: "bar" })
63
+ expect(subject).to receive(:paginate).with(:zones, account_id, foo: "bar")
64
+ subject.all_zones(account_id, foo: "bar")
65
65
  end
66
66
  end
67
67
 
@@ -69,15 +69,15 @@ describe Dnsimple::Client, ".zones" do
69
69
  let(:account_id) { 1010 }
70
70
 
71
71
  before do
72
- stub_request(:get, %r[/v2/#{account_id}/zones/.+$])
73
- .to_return(read_http_fixture("getZone/success.http"))
72
+ stub_request(:get, %r{/v2/#{account_id}/zones/.+$}).
73
+ to_return(read_http_fixture("getZone/success.http"))
74
74
  end
75
75
 
76
76
  it "builds the correct request" do
77
77
  subject.zone(account_id, zone = "example.com")
78
78
 
79
- expect(WebMock).to have_requested(:get, "https://api.dnsimple.test/v2/#{account_id}/zones/#{zone}")
80
- .with(headers: { 'Accept' => 'application/json' })
79
+ expect(WebMock).to have_requested(:get, "https://api.dnsimple.test/v2/#{account_id}/zones/#{zone}").
80
+ with(headers: { 'Accept' => 'application/json' })
81
81
  end
82
82
 
83
83
  it "returns the zone" do
@@ -96,8 +96,8 @@ describe Dnsimple::Client, ".zones" do
96
96
 
97
97
  context "when the zone does not exist" do
98
98
  it "raises NotFoundError" do
99
- stub_request(:get, %r[/v2])
100
- .to_return(read_http_fixture("notfound-zone.http"))
99
+ stub_request(:get, %r{/v2}).
100
+ to_return(read_http_fixture("notfound-zone.http"))
101
101
 
102
102
  expect {
103
103
  subject.zone(account_id, "example.com")
@@ -26,7 +26,7 @@ describe Dnsimple::Client do
26
26
 
27
27
  describe "authentication" do
28
28
  it "uses HTTP authentication if there's a password provided" do
29
- stub_request(:any, %r[/test])
29
+ stub_request(:any, %r{/test})
30
30
 
31
31
  subject = described_class.new(username: "user", password: "pass")
32
32
  subject.execute(:get, "test", {})
@@ -34,24 +34,14 @@ describe Dnsimple::Client do
34
34
  expect(WebMock).to have_requested(:get, "https://user:pass@api.dnsimple.com/test")
35
35
  end
36
36
 
37
- it "uses header authentication if there's a domain api token provided" do
38
- stub_request(:any, %r[/test])
39
-
40
- subject = described_class.new(domain_api_token: "domaintoken")
41
- subject.execute(:get, "test", {})
42
-
43
- expect(WebMock).to have_requested(:get, "https://api.dnsimple.com/test").
44
- with { |req| req.headers["X-Dnsimple-Domain-Token"] == "domaintoken" }
45
- end
46
-
47
37
  it "uses access token if there's an access token provided" do
48
- stub_request(:any, %r[/test])
38
+ stub_request(:any, %r{/test})
49
39
 
50
40
  subject = described_class.new(access_token: "access-token")
51
41
  subject.execute(:get, "test", {})
52
42
 
53
43
  expect(WebMock).to have_requested(:get, "https://api.dnsimple.com/test").
54
- with { |req| req.headers["Authorization"] == "Bearer access-token" }
44
+ with { |req| req.headers["Authorization"] == "Bearer access-token" }
55
45
  end
56
46
 
57
47
  it "raises an error if there's no password, domain token or access token provided" do
@@ -65,7 +55,7 @@ describe Dnsimple::Client do
65
55
 
66
56
  describe "#get" do
67
57
  it "delegates to #request" do
68
- expect(subject).to receive(:execute).with(:get, "path", nil, { foo: "bar" }).and_return(:returned)
58
+ expect(subject).to receive(:execute).with(:get, "path", nil, foo: "bar").and_return(:returned)
69
59
  expect(subject.get("path", foo: "bar")).to eq(:returned)
70
60
  end
71
61
  end
@@ -101,13 +91,28 @@ describe Dnsimple::Client do
101
91
  describe "#execute" do
102
92
  subject { described_class.new(username: "user", password: "pass") }
103
93
 
104
- it "raises RequestError in case of error" do
105
- stub_request(:get, %r[/foo]).
106
- to_return(status: [500, "Internal Server Error"])
94
+ it "raises RequestError in case of error with a JSON response" do
95
+ stub_request(:post, %r{/foo}).to_return(read_http_fixture("transferDomain/error-indnsimple.http"))
96
+
97
+ expect {
98
+ subject.execute(:post, "foo", {})
99
+ }.to raise_error(Dnsimple::RequestError, "The domain google.com is already in DNSimple and cannot be added")
100
+ end
101
+
102
+ it "raises RequestError in case of error with an HTML response" do
103
+ stub_request(:get, %r{/foo}).to_return(read_http_fixture("badgateway.http"))
107
104
 
108
105
  expect {
109
106
  subject.execute(:get, "foo", {})
110
- }.to raise_error(Dnsimple::RequestError, "500")
107
+ }.to raise_error(Dnsimple::RequestError, "502 Bad Gateway")
108
+ end
109
+
110
+ it "raises RequestError in absence of content types" do
111
+ stub_request(:put, %r{/foo}).to_return(read_http_fixture("method-not-allowed.http"))
112
+
113
+ expect {
114
+ subject.execute(:put, "foo", {})
115
+ }.to raise_error(Dnsimple::RequestError, "405 Method Not Allowed")
111
116
  end
112
117
  end
113
118
 
@@ -115,53 +120,56 @@ describe Dnsimple::Client do
115
120
  subject { described_class.new(username: "user", password: "pass") }
116
121
 
117
122
  it "performs a request" do
118
- stub_request(:get, %r[/foo])
123
+ stub_request(:get, %r{/foo})
119
124
 
120
125
  subject.request(:get, 'foo', {})
121
126
 
122
127
  expect(WebMock).to have_requested(:get, "https://user:pass@api.dnsimple.com/foo").
123
- with(headers: { 'Accept' => 'application/json', 'User-Agent' => "dnsimple-ruby/#{Dnsimple::VERSION}" })
128
+ with(headers: { 'Accept' => 'application/json', 'User-Agent' => "dnsimple-ruby/#{Dnsimple::VERSION}" })
124
129
  end
125
130
 
126
131
  it "delegates to HTTParty" do
127
- stub_request(:get, %r[/foo])
132
+ stub_request(:get, %r{/foo})
128
133
 
129
134
  expect(HTTParty).to receive(:get).
130
- with("#{subject.base_url}foo",
131
- format: :json,
132
- basic_auth: { username: "user", password: "pass" },
133
- headers: { 'Accept' => 'application/json', 'User-Agent' => "dnsimple-ruby/#{Dnsimple::VERSION}" }
134
- ).
135
- and_return(double('response', code: 200))
135
+ with(
136
+ "#{subject.base_url}foo",
137
+ format: :json,
138
+ basic_auth: { username: "user", password: "pass" },
139
+ headers: { 'Accept' => 'application/json', 'User-Agent' => "dnsimple-ruby/#{Dnsimple::VERSION}" }
140
+ ).
141
+ and_return(double('response', code: 200))
136
142
 
137
143
  subject.request(:get, 'foo')
138
144
  end
139
145
 
140
146
  it "properly extracts processes options and encodes data" do
141
147
  expect(HTTParty).to receive(:put).
142
- with("#{subject.base_url}foo",
143
- format: :json,
144
- body: JSON.dump({ something: "else" }),
145
- query: { foo: "bar" },
146
- basic_auth: { username: "user", password: "pass" },
147
- headers: { 'Accept' => 'application/json', 'Content-Type' => 'application/json', 'User-Agent' => "dnsimple-ruby/#{Dnsimple::VERSION}", "Custom" => "Header" }
148
- ).
149
- and_return(double('response', code: 200))
148
+ with(
149
+ "#{subject.base_url}foo",
150
+ format: :json,
151
+ body: JSON.dump(something: "else"),
152
+ query: { foo: "bar" },
153
+ basic_auth: { username: "user", password: "pass" },
154
+ headers: { 'Accept' => 'application/json', 'Content-Type' => 'application/json', 'User-Agent' => "dnsimple-ruby/#{Dnsimple::VERSION}", "Custom" => "Header" }
155
+ ).
156
+ and_return(double('response', code: 200))
150
157
 
151
158
  subject.request(:put, 'foo', { something: "else" }, { query: { foo: "bar" }, headers: { "Custom" => "Header" } })
152
159
  end
153
160
 
154
161
  it "handles non application/json content types" do
155
162
  expect(HTTParty).to receive(:post).
156
- with("#{subject.base_url}foo",
157
- format: :json,
158
- body: { something: "else" },
159
- basic_auth: { username: "user", password: "pass" },
160
- headers: { 'Accept' => 'application/json', 'Content-Type' => 'application/x-www-form-urlencoded', 'User-Agent' => "dnsimple-ruby/#{Dnsimple::VERSION}" }
161
- ).
162
- and_return(double('response', code: 200))
163
-
164
- subject.request(:post, 'foo', { something: "else" }, headers: { "Content-Type" => "application/x-www-form-urlencoded" })
163
+ with(
164
+ "#{subject.base_url}foo",
165
+ format: :json,
166
+ body: { something: "else" },
167
+ basic_auth: { username: "user", password: "pass" },
168
+ headers: { 'Accept' => 'application/json', 'Content-Type' => 'application/x-www-form-urlencoded', 'User-Agent' => "dnsimple-ruby/#{Dnsimple::VERSION}" }
169
+ ).
170
+ and_return(double('response', code: 200))
171
+
172
+ subject.request(:post, 'foo', { something: "else" }, { headers: { "Content-Type" => "application/x-www-form-urlencoded" } })
165
173
  end
166
174
  end
167
175
 
@@ -22,17 +22,17 @@ describe Dnsimple::Extra do
22
22
  end
23
23
 
24
24
  describe ".validate_mandatory_attributes" do
25
- let(:mandatory_attributes) { %i{name email} }
25
+ let(:mandatory_attributes) { %i(name email) }
26
26
 
27
27
  it "raises an error if a mandatory attribute is not present " do
28
28
  expect {
29
- described_class.validate_mandatory_attributes({name: "foo"}, mandatory_attributes)
29
+ described_class.validate_mandatory_attributes({ name: "foo" }, mandatory_attributes)
30
30
  }.to raise_error(ArgumentError, ":email is required")
31
31
  end
32
32
 
33
33
  it "does not raise an error if all attributes are present" do
34
34
  expect {
35
- described_class.validate_mandatory_attributes({name: "foo", email: "bar"}, mandatory_attributes)
35
+ described_class.validate_mandatory_attributes({ name: "foo", email: "bar" }, mandatory_attributes)
36
36
  }.not_to raise_error
37
37
  end
38
38
 
@@ -0,0 +1,17 @@
1
+ HTTP/1.1 200 OK
2
+ Server: nginx
3
+ Date: Thu, 24 Mar 2016 11:17:01 GMT
4
+ Content-Type: application/json; charset=utf-8
5
+ Transfer-Encoding: chunked
6
+ Connection: keep-alive
7
+ Status: 200 OK
8
+ X-RateLimit-Limit: 2400
9
+ X-RateLimit-Remaining: 2392
10
+ X-RateLimit-Reset: 1458821049
11
+ ETag: W/"cb540984f806b12ac437cc1f76092f90"
12
+ Cache-Control: max-age=0, private, must-revalidate
13
+ X-Request-Id: 0ea7bdd2-63ca-4eef-9c41-4a83d2fe0067
14
+ X-Runtime: 2.845860
15
+ Strict-Transport-Security: max-age=31536000
16
+
17
+ {"data":["ns1.dnsimple.com","ns2.dnsimple.com","ns3.dnsimple.com","ns4.dnsimple.com"]}