dnsimple 3.0.0.pre.beta2 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
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"]}