dnsimple 11.1.0 → 12.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 (269) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +10 -5
  3. data/.github/workflows/release.yml +44 -13
  4. data/.github/workflows/sync-test-fixtures.yml +1 -1
  5. data/.rubocop.yml +4 -1
  6. data/.rubocop_dnsimple.yml +13 -41
  7. data/.rubocop_todo.yml +4 -9
  8. data/CHANGELOG.md +285 -183
  9. data/CONTRIBUTING.md +6 -40
  10. data/Gemfile +1 -1
  11. data/LICENSE.txt +1 -1
  12. data/README.md +49 -40
  13. data/RELEASING.md +67 -0
  14. data/dnsimple.gemspec +1 -1
  15. data/lib/dnsimple/client/accounts.rb +1 -3
  16. data/lib/dnsimple/client/billing.rb +2 -4
  17. data/lib/dnsimple/client/certificates.rb +0 -2
  18. data/lib/dnsimple/client/clients.rb +2 -40
  19. data/lib/dnsimple/client/contacts.rb +17 -19
  20. data/lib/dnsimple/client/dns_analytics.rb +2 -4
  21. data/lib/dnsimple/client/domains.rb +13 -15
  22. data/lib/dnsimple/client/domains_delegation_signer_records.rb +18 -20
  23. data/lib/dnsimple/client/domains_dnssec.rb +9 -11
  24. data/lib/dnsimple/client/domains_email_forwards.rb +18 -20
  25. data/lib/dnsimple/client/domains_pushes.rb +13 -15
  26. data/lib/dnsimple/client/identity.rb +4 -9
  27. data/lib/dnsimple/client/oauth.rb +1 -3
  28. data/lib/dnsimple/client/registrar.rb +45 -47
  29. data/lib/dnsimple/client/registrar_auto_renewal.rb +6 -8
  30. data/lib/dnsimple/client/registrar_delegation.rb +14 -16
  31. data/lib/dnsimple/client/registrar_registrant_changes.rb +14 -16
  32. data/lib/dnsimple/client/registrar_transfer_lock.rb +9 -11
  33. data/lib/dnsimple/client/registrar_whois_privacy.rb +6 -48
  34. data/lib/dnsimple/client/services.rb +4 -6
  35. data/lib/dnsimple/client/services_domains.rb +12 -14
  36. data/lib/dnsimple/client/templates.rb +17 -19
  37. data/lib/dnsimple/client/templates_domains.rb +4 -6
  38. data/lib/dnsimple/client/templates_records.rb +18 -20
  39. data/lib/dnsimple/client/tlds.rb +6 -8
  40. data/lib/dnsimple/client/vanity_name_servers.rb +0 -2
  41. data/lib/dnsimple/client/webhooks.rb +11 -13
  42. data/lib/dnsimple/client/zones.rb +16 -18
  43. data/lib/dnsimple/client/zones_distributions.rb +4 -6
  44. data/lib/dnsimple/client/zones_records.rb +29 -31
  45. data/lib/dnsimple/client.rb +22 -24
  46. data/lib/dnsimple/default.rb +0 -4
  47. data/lib/dnsimple/error.rb +0 -6
  48. data/lib/dnsimple/extra.rb +4 -6
  49. data/lib/dnsimple/options.rb +1 -7
  50. data/lib/dnsimple/response.rb +4 -13
  51. data/lib/dnsimple/struct/account.rb +0 -2
  52. data/lib/dnsimple/struct/certificate.rb +0 -2
  53. data/lib/dnsimple/struct/certificate_bundle.rb +0 -2
  54. data/lib/dnsimple/struct/certificate_purchase.rb +0 -2
  55. data/lib/dnsimple/struct/certificate_renewal.rb +0 -2
  56. data/lib/dnsimple/struct/charge.rb +4 -8
  57. data/lib/dnsimple/struct/collaborator.rb +0 -2
  58. data/lib/dnsimple/struct/contact.rb +0 -2
  59. data/lib/dnsimple/struct/delegation_signer_record.rb +0 -2
  60. data/lib/dnsimple/struct/dns_analytics.rb +0 -2
  61. data/lib/dnsimple/struct/dnssec.rb +0 -2
  62. data/lib/dnsimple/struct/domain.rb +0 -2
  63. data/lib/dnsimple/struct/domain_check.rb +0 -2
  64. data/lib/dnsimple/struct/domain_premium_price.rb +0 -2
  65. data/lib/dnsimple/struct/domain_price.rb +0 -2
  66. data/lib/dnsimple/struct/domain_push.rb +0 -2
  67. data/lib/dnsimple/struct/domain_registration.rb +0 -2
  68. data/lib/dnsimple/struct/domain_renewal.rb +0 -2
  69. data/lib/dnsimple/struct/domain_restore.rb +0 -2
  70. data/lib/dnsimple/struct/domain_transfer.rb +0 -2
  71. data/lib/dnsimple/struct/email_forward.rb +0 -2
  72. data/lib/dnsimple/struct/extended_attribute.rb +0 -4
  73. data/lib/dnsimple/struct/oauth_token.rb +0 -2
  74. data/lib/dnsimple/struct/registrant_change.rb +0 -2
  75. data/lib/dnsimple/struct/registrant_change_check.rb +0 -2
  76. data/lib/dnsimple/struct/service.rb +0 -4
  77. data/lib/dnsimple/struct/template.rb +0 -2
  78. data/lib/dnsimple/struct/template_record.rb +0 -2
  79. data/lib/dnsimple/struct/tld.rb +0 -2
  80. data/lib/dnsimple/struct/transfer_lock.rb +0 -2
  81. data/lib/dnsimple/struct/user.rb +0 -2
  82. data/lib/dnsimple/struct/vanity_name_server.rb +0 -2
  83. data/lib/dnsimple/struct/webhook.rb +0 -2
  84. data/lib/dnsimple/struct/whoami.rb +2 -4
  85. data/lib/dnsimple/struct/whois_privacy.rb +0 -2
  86. data/lib/dnsimple/struct/zone.rb +0 -2
  87. data/lib/dnsimple/struct/zone_distribution.rb +0 -2
  88. data/lib/dnsimple/struct/zone_file.rb +0 -2
  89. data/lib/dnsimple/struct/zone_record.rb +0 -2
  90. data/lib/dnsimple/struct/zone_record_id.rb +0 -2
  91. data/lib/dnsimple/struct/zone_records_batch_change.rb +0 -2
  92. data/lib/dnsimple/struct.rb +0 -3
  93. data/lib/dnsimple/version.rb +1 -3
  94. data/lib/dnsimple.rb +1 -3
  95. data/spec/dnsimple/client/client_service_spec.rb +12 -10
  96. data/spec/dnsimple/client/oauth_spec.rb +6 -6
  97. data/spec/dnsimple/client/registrar_whois_privacy_spec.rb +0 -82
  98. data/spec/fixtures.http/acceptPush/success.http +15 -15
  99. data/spec/fixtures.http/accounts/success-account.http +20 -20
  100. data/spec/fixtures.http/accounts/success-user.http +21 -21
  101. data/spec/fixtures.http/activateZoneService/success.http +16 -16
  102. data/spec/fixtures.http/appliedServices/success.http +19 -19
  103. data/spec/fixtures.http/applyService/success.http +15 -15
  104. data/spec/fixtures.http/applyTemplate/success.http +13 -13
  105. data/spec/fixtures.http/authorizeDomainTransferOut/success.http +13 -13
  106. data/spec/fixtures.http/badgateway.http +5 -5
  107. data/spec/fixtures.http/batchChangeZoneRecords/error_400_create_validation_failed.http +16 -16
  108. data/spec/fixtures.http/batchChangeZoneRecords/error_400_delete_validation_failed.http +3 -3
  109. data/spec/fixtures.http/batchChangeZoneRecords/error_400_update_validation_failed.http +3 -3
  110. data/spec/fixtures.http/batchChangeZoneRecords/success.http +16 -16
  111. data/spec/fixtures.http/cancelDomainTransfer/success.http +17 -17
  112. data/spec/fixtures.http/changeDomainDelegation/success.http +15 -15
  113. data/spec/fixtures.http/changeDomainDelegationFromVanity/success.http +15 -15
  114. data/spec/fixtures.http/changeDomainDelegationToVanity/success.http +17 -17
  115. data/spec/fixtures.http/checkDomain/success.http +15 -15
  116. data/spec/fixtures.http/checkRegistrantChange/error-contactnotfound.http +3 -3
  117. data/spec/fixtures.http/checkRegistrantChange/error-domainnotfound.http +3 -3
  118. data/spec/fixtures.http/checkRegistrantChange/success.http +15 -15
  119. data/spec/fixtures.http/checkZoneDistribution/error.http +17 -17
  120. data/spec/fixtures.http/checkZoneDistribution/failure.http +17 -17
  121. data/spec/fixtures.http/checkZoneDistribution/success.http +17 -17
  122. data/spec/fixtures.http/checkZoneRecordDistribution/error.http +17 -17
  123. data/spec/fixtures.http/checkZoneRecordDistribution/failure.http +17 -17
  124. data/spec/fixtures.http/checkZoneRecordDistribution/success.http +17 -17
  125. data/spec/fixtures.http/createContact/created.http +16 -16
  126. data/spec/fixtures.http/createContact/error-validation-errors.http +15 -15
  127. data/spec/fixtures.http/createDelegationSignerRecord/created.http +17 -17
  128. data/spec/fixtures.http/createDelegationSignerRecord/validation-error.http +15 -15
  129. data/spec/fixtures.http/createDomain/created.http +19 -19
  130. data/spec/fixtures.http/createEmailForward/created.http +21 -21
  131. data/spec/fixtures.http/createPrimaryServer/created.http +20 -20
  132. data/spec/fixtures.http/createRegistrantChange/success.http +14 -14
  133. data/spec/fixtures.http/createSecondaryZone/created.http +20 -20
  134. data/spec/fixtures.http/createTemplate/created.http +15 -15
  135. data/spec/fixtures.http/createTemplateRecord/created.http +16 -16
  136. data/spec/fixtures.http/createWebhook/created.http +13 -13
  137. data/spec/fixtures.http/createZoneRecord/created-apex.http +13 -13
  138. data/spec/fixtures.http/createZoneRecord/created.http +13 -13
  139. data/spec/fixtures.http/deactivateZoneService/success.http +16 -16
  140. data/spec/fixtures.http/deleteContact/error-contact-in-use.http +15 -15
  141. data/spec/fixtures.http/deleteContact/success.http +13 -13
  142. data/spec/fixtures.http/deleteDelegationSignerRecord/success.http +15 -15
  143. data/spec/fixtures.http/deleteDomain/success.http +11 -11
  144. data/spec/fixtures.http/deleteEmailForward/success.http +18 -18
  145. data/spec/fixtures.http/deleteRegistrantChange/success.http +13 -13
  146. data/spec/fixtures.http/deleteRegistrantChange/success_async.http +3 -3
  147. data/spec/fixtures.http/deleteTemplate/success.http +13 -13
  148. data/spec/fixtures.http/deleteTemplateRecord/success.http +13 -13
  149. data/spec/fixtures.http/deleteWebhook/success.http +13 -13
  150. data/spec/fixtures.http/deleteZoneRecord/success.http +11 -11
  151. data/spec/fixtures.http/disableDnssec/not-enabled.http +15 -15
  152. data/spec/fixtures.http/disableDnssec/success.http +15 -15
  153. data/spec/fixtures.http/disableDomainAutoRenewal/success.http +13 -13
  154. data/spec/fixtures.http/disableDomainTransferLock/success.http +17 -17
  155. data/spec/fixtures.http/disableVanityNameServers/success.http +15 -15
  156. data/spec/fixtures.http/disableWhoisPrivacy/success.http +16 -16
  157. data/spec/fixtures.http/dnsAnalytics/success.http +17 -17
  158. data/spec/fixtures.http/downloadCertificate/success.http +19 -19
  159. data/spec/fixtures.http/enableDnssec/success.http +17 -17
  160. data/spec/fixtures.http/enableDomainAutoRenewal/success.http +13 -13
  161. data/spec/fixtures.http/enableDomainTransferLock/success.http +17 -17
  162. data/spec/fixtures.http/enableVanityNameServers/success.http +17 -17
  163. data/spec/fixtures.http/enableWhoisPrivacy/created.http +16 -16
  164. data/spec/fixtures.http/enableWhoisPrivacy/success.http +16 -16
  165. data/spec/fixtures.http/getCertificate/success.http +19 -19
  166. data/spec/fixtures.http/getCertificatePrivateKey/success.http +20 -20
  167. data/spec/fixtures.http/getContact/success.http +16 -16
  168. data/spec/fixtures.http/getDelegationSignerRecord/success.http +17 -17
  169. data/spec/fixtures.http/getDnssec/success.http +17 -17
  170. data/spec/fixtures.http/getDomain/success.http +19 -19
  171. data/spec/fixtures.http/getDomainDelegation/success-empty.http +15 -15
  172. data/spec/fixtures.http/getDomainDelegation/success.http +15 -15
  173. data/spec/fixtures.http/getDomainPrices/failure.http +18 -18
  174. data/spec/fixtures.http/getDomainPrices/success.http +21 -21
  175. data/spec/fixtures.http/getDomainRegistration/success.http +20 -20
  176. data/spec/fixtures.http/getDomainRenewal/success.http +20 -20
  177. data/spec/fixtures.http/getDomainRestore/success.http +22 -22
  178. data/spec/fixtures.http/getDomainTransfer/success.http +19 -19
  179. data/spec/fixtures.http/getDomainTransferLock/success.http +17 -17
  180. data/spec/fixtures.http/getEmailForward/success.http +21 -21
  181. data/spec/fixtures.http/getPrimaryServer/success.http +20 -20
  182. data/spec/fixtures.http/getRegistrantChange/success.http +15 -15
  183. data/spec/fixtures.http/getService/success.http +16 -16
  184. data/spec/fixtures.http/getTemplate/success.http +15 -15
  185. data/spec/fixtures.http/getTemplateRecord/success.http +16 -16
  186. data/spec/fixtures.http/getTld/success.http +20 -20
  187. data/spec/fixtures.http/getTldExtendedAttributes/success-attributes.http +15 -15
  188. data/spec/fixtures.http/getTldExtendedAttributes/success-noattributes.http +15 -15
  189. data/spec/fixtures.http/getTldExtendedAttributes/success.http +15 -15
  190. data/spec/fixtures.http/getWebhook/success.http +13 -13
  191. data/spec/fixtures.http/getZone/success.http +16 -16
  192. data/spec/fixtures.http/getZoneFile/success.http +17 -17
  193. data/spec/fixtures.http/getZoneRecord/success.http +17 -17
  194. data/spec/fixtures.http/initiatePush/success.http +17 -17
  195. data/spec/fixtures.http/issueLetsencryptCertificate/success.http +17 -17
  196. data/spec/fixtures.http/issueRenewalLetsencryptCertificate/success.http +17 -17
  197. data/spec/fixtures.http/linkPrimaryServer/success.http +20 -20
  198. data/spec/fixtures.http/listAccounts/success-account.http +20 -20
  199. data/spec/fixtures.http/listAccounts/success-user.http +20 -20
  200. data/spec/fixtures.http/listCertificates/success.http +19 -19
  201. data/spec/fixtures.http/listCharges/fail-400-bad-filter.http +9 -9
  202. data/spec/fixtures.http/listCharges/fail-403.http +9 -9
  203. data/spec/fixtures.http/listCharges/success.http +9 -9
  204. data/spec/fixtures.http/listContacts/success.http +16 -16
  205. data/spec/fixtures.http/listDelegationSignerRecords/success.http +17 -17
  206. data/spec/fixtures.http/listDomains/success.http +19 -19
  207. data/spec/fixtures.http/listEmailForwards/success.http +13 -13
  208. data/spec/fixtures.http/listPrimaryServers/success.http +20 -20
  209. data/spec/fixtures.http/listPushes/success.http +17 -17
  210. data/spec/fixtures.http/listRegistrantChanges/success.http +15 -15
  211. data/spec/fixtures.http/listServices/success.http +17 -17
  212. data/spec/fixtures.http/listTemplateRecords/success.http +16 -16
  213. data/spec/fixtures.http/listTemplates/success.http +15 -15
  214. data/spec/fixtures.http/listTlds/success.http +20 -20
  215. data/spec/fixtures.http/listWebhooks/success.http +13 -13
  216. data/spec/fixtures.http/listZoneRecords/success.http +17 -17
  217. data/spec/fixtures.http/listZones/success.http +16 -16
  218. data/spec/fixtures.http/method-not-allowed.http +8 -8
  219. data/spec/fixtures.http/notfound-certificate.http +12 -12
  220. data/spec/fixtures.http/notfound-contact.http +10 -10
  221. data/spec/fixtures.http/notfound-delegationSignerRecord.http +8 -8
  222. data/spec/fixtures.http/notfound-domain.http +8 -8
  223. data/spec/fixtures.http/notfound-domainpush.http +8 -8
  224. data/spec/fixtures.http/notfound-emailforward.http +8 -8
  225. data/spec/fixtures.http/notfound-record.http +10 -10
  226. data/spec/fixtures.http/notfound-template.http +10 -10
  227. data/spec/fixtures.http/notfound-webhook.http +8 -8
  228. data/spec/fixtures.http/notfound-whoisprivacy.http +10 -10
  229. data/spec/fixtures.http/notfound-zone.http +10 -10
  230. data/spec/fixtures.http/oauthAccessToken/error-invalid-request.http +12 -12
  231. data/spec/fixtures.http/oauthAccessToken/success.http +16 -16
  232. data/spec/fixtures.http/pages-1of3.http +12 -12
  233. data/spec/fixtures.http/pages-2of3.http +12 -12
  234. data/spec/fixtures.http/pages-3of3.http +12 -12
  235. data/spec/fixtures.http/purchaseLetsencryptCertificate/success.http +19 -19
  236. data/spec/fixtures.http/purchaseRenewalLetsencryptCertificate/success.http +19 -19
  237. data/spec/fixtures.http/registerDomain/error-extended-attributes.http +15 -15
  238. data/spec/fixtures.http/registerDomain/success.http +20 -20
  239. data/spec/fixtures.http/rejectPush/success.http +15 -15
  240. data/spec/fixtures.http/renewDomain/error-tooearly.http +14 -14
  241. data/spec/fixtures.http/renewDomain/success.http +20 -20
  242. data/spec/fixtures.http/response.http +12 -12
  243. data/spec/fixtures.http/restoreDomain/success.http +22 -22
  244. data/spec/fixtures.http/success-with-malformed-json.http +4 -4
  245. data/spec/fixtures.http/transferDomain/error-indnsimple.http +13 -13
  246. data/spec/fixtures.http/transferDomain/error-missing-authcode.http +13 -13
  247. data/spec/fixtures.http/transferDomain/success.http +20 -20
  248. data/spec/fixtures.http/unapplyService/success.http +15 -15
  249. data/spec/fixtures.http/unlinkPrimaryServer/success.http +20 -20
  250. data/spec/fixtures.http/updateContact/success.http +16 -16
  251. data/spec/fixtures.http/updateTemplate/success.http +15 -15
  252. data/spec/fixtures.http/updateZoneNsRecords/success.http +16 -16
  253. data/spec/fixtures.http/updateZoneRecord/success.http +17 -17
  254. data/spec/fixtures.http/validation-error.http +15 -15
  255. data/spec/fixtures.http/whoami/success-account.http +15 -15
  256. data/spec/fixtures.http/whoami/success-user.http +15 -15
  257. data/spec/fixtures.http/whoami/success.http +15 -15
  258. data/spec/support/helpers.rb +0 -2
  259. metadata +7 -13
  260. data/lib/dnsimple/struct/whois_privacy_renewal.rb +0 -30
  261. data/spec/fixtures.http/checkDomainPremiumPrice/error_400_not_a_premium_domain.http +0 -18
  262. data/spec/fixtures.http/checkDomainPremiumPrice/error_400_tld_not_supported.http +0 -18
  263. data/spec/fixtures.http/checkDomainPremiumPrice/success.http +0 -20
  264. data/spec/fixtures.http/getDomainPremiumPrice/failure.http +0 -15
  265. data/spec/fixtures.http/getDomainPremiumPrice/success.http +0 -20
  266. data/spec/fixtures.http/getWhoisPrivacy/success.http +0 -16
  267. data/spec/fixtures.http/renewWhoisPrivacy/success.http +0 -20
  268. data/spec/fixtures.http/renewWhoisPrivacy/whois-privacy-duplicated-order.http +0 -18
  269. data/spec/fixtures.http/renewWhoisPrivacy/whois-privacy-not-found.http +0 -18
@@ -3,14 +3,12 @@
3
3
  module Dnsimple
4
4
  module Struct
5
5
  class Base
6
-
7
6
  def initialize(attributes = {})
8
7
  attributes.each do |key, value|
9
8
  m = :"#{key}="
10
9
  send(m, value) if respond_to?(m)
11
10
  end
12
11
  end
13
-
14
12
  end
15
13
  end
16
14
  end
@@ -49,7 +47,6 @@ require_relative "struct/tld"
49
47
  require_relative "struct/user"
50
48
  require_relative "struct/vanity_name_server"
51
49
  require_relative "struct/whois_privacy"
52
- require_relative "struct/whois_privacy_renewal"
53
50
  require_relative "struct/zone"
54
51
  require_relative "struct/zone_records_batch_change"
55
52
  require_relative "struct/zone_record_id"
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Dnsimple
4
-
5
- VERSION = "11.1.0"
6
-
4
+ VERSION = "12.0.0"
7
5
  end
data/lib/dnsimple.rb CHANGED
@@ -1,10 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Dnsimple
4
-
5
4
  # Echoes a deprecation warning message.
6
5
  #
7
- # @param [String] message The message to display.
6
+ # @param message [String] The message to display.
8
7
  # @return [void]
9
8
  #
10
9
  # @api internal
@@ -13,7 +12,6 @@ module Dnsimple
13
12
  message ||= "You are using deprecated behavior which will be removed from the next major or minor release."
14
13
  warn("DEPRECATION WARNING: #{message}")
15
14
  end
16
-
17
15
  end
18
16
 
19
17
  require "dnsimple/version"
@@ -5,20 +5,22 @@ require "spec_helper"
5
5
  describe Dnsimple::Client::ClientService do
6
6
 
7
7
  describe "#paginate" do
8
- service_class = Class.new(Dnsimple::Client::ClientService) do
9
- Item = Class.new(Dnsimple::Struct::Base) do # rubocop:disable Lint/ConstantDefinitionInBlock
10
- attr_accessor :id
11
- end
12
-
13
- def list(account_id, options = {})
14
- response = client.get(Dnsimple::Client.versioned("/%s/list" % [account_id]), options)
15
- Dnsimple::PaginatedResponse.new(response, response["data"].map { |r| Item.new(r) })
16
- end
17
- end
18
8
 
19
9
  subject { service_class.new(Dnsimple::Client.new(base_url: "https://api.example.com/", access_token: "a1b2c3")) }
20
10
 
21
11
  let(:account_id) { 1010 }
12
+ let(:service_class) do
13
+ Class.new(Dnsimple::Client::ClientService) do
14
+ Item = Class.new(Dnsimple::Struct::Base) do # rubocop:disable Lint/ConstantDefinitionInBlock
15
+ attr_accessor :id
16
+ end
17
+
18
+ def list(account_id, options = {})
19
+ response = client.get(Dnsimple::Client.versioned("/%s/list" % [account_id]), options)
20
+ Dnsimple::PaginatedResponse.new(response, response["data"].map { |r| Item.new(r) })
21
+ end
22
+ end
23
+ end
22
24
 
23
25
  before do
24
26
  stub_request(:get, %r{/v2/#{account_id}/list\?page=1&per_page=100})
@@ -19,15 +19,15 @@ describe Dnsimple::Client, ".oauth" do
19
19
  end
20
20
 
21
21
  it "builds the correct request" do
22
- subject.exchange_authorization_for_token(code, client_id, client_secret, state: state)
22
+ subject.exchange_authorization_for_token(code, client_id, client_secret, state:)
23
23
 
24
24
  expect(WebMock).to have_requested(:post, "https://api.dnsimple.test/v2/oauth/access_token")
25
- .with(body: { client_id: client_id, client_secret: client_secret, code: code, state: state, grant_type: "authorization_code" })
25
+ .with(body: { client_id:, client_secret:, code:, state:, grant_type: "authorization_code" })
26
26
  .with(headers: { "Accept" => "application/json" })
27
27
  end
28
28
 
29
29
  it "returns oauth token" do
30
- result = subject.exchange_authorization_for_token(code, client_id, client_secret, state: state)
30
+ result = subject.exchange_authorization_for_token(code, client_id, client_secret, state:)
31
31
 
32
32
  expect(result).to be_a(Dnsimple::Struct::OauthToken)
33
33
  expect(result.access_token).to eq("zKQ7OLqF5N1gylcJweA9WodA000BUNJD")
@@ -39,10 +39,10 @@ describe Dnsimple::Client, ".oauth" do
39
39
  let(:redirect_uri) { "super-redirect-uri" }
40
40
 
41
41
  it "builds the correct request" do
42
- subject.exchange_authorization_for_token(code, client_id, client_secret, state: state, redirect_uri: redirect_uri)
42
+ subject.exchange_authorization_for_token(code, client_id, client_secret, state:, redirect_uri:)
43
43
 
44
44
  expect(WebMock).to have_requested(:post, "https://api.dnsimple.test/v2/oauth/access_token")
45
- .with(body: { client_id: client_id, client_secret: client_secret, code: code, state: state, redirect_uri: redirect_uri, grant_type: "authorization_code" })
45
+ .with(body: { client_id:, client_secret:, code:, state:, redirect_uri:, grant_type: "authorization_code" })
46
46
  .with(headers: { "Accept" => "application/json" })
47
47
  end
48
48
  end
@@ -55,7 +55,7 @@ describe Dnsimple::Client, ".oauth" do
55
55
 
56
56
  it "raises OAuthInvalidRequestError" do
57
57
  expect {
58
- subject.exchange_authorization_for_token(code, client_id, client_secret, state: state)
58
+ subject.exchange_authorization_for_token(code, client_id, client_secret, state:)
59
59
  }.to raise_error(Dnsimple::OAuthInvalidRequestError) do |e|
60
60
  error = "invalid_request"
61
61
  error_description = "Invalid \"state\": value doesn't match the \"state\" in the authorization request"
@@ -7,33 +7,6 @@ describe Dnsimple::Client, ".registrar" do
7
7
  subject { described_class.new(base_url: "https://api.dnsimple.test", access_token: "a1b2c3").registrar }
8
8
 
9
9
 
10
- describe "#whois_privacy" do
11
- let(:account_id) { 1010 }
12
-
13
- before do
14
- stub_request(:get, %r{/v2/#{account_id}/registrar/domains/.+/whois_privacy$})
15
- .to_return(read_http_fixture("getWhoisPrivacy/success.http"))
16
- end
17
-
18
- it "builds the correct request" do
19
- subject.whois_privacy(account_id, domain_name = "example.com")
20
-
21
- expect(WebMock).to have_requested(:get, "https://api.dnsimple.test/v2/#{account_id}/registrar/domains/#{domain_name}/whois_privacy")
22
- .with(headers: { "Accept" => "application/json" })
23
- end
24
-
25
- it "returns the whois privacy" do
26
- response = subject.whois_privacy(account_id, "example.com")
27
- expect(response).to be_a(Dnsimple::Response)
28
-
29
- result = response.data
30
- expect(result).to be_a(Dnsimple::Struct::WhoisPrivacy)
31
- expect(result.domain_id).to be_a(Integer)
32
- expect(result.enabled).to be(true)
33
- expect(result.expires_on).to be_a(String)
34
- end
35
- end
36
-
37
10
  describe "#enable_whois_privacy" do
38
11
  let(:account_id) { 1010 }
39
12
 
@@ -118,59 +91,4 @@ describe Dnsimple::Client, ".registrar" do
118
91
  end
119
92
  end
120
93
 
121
-
122
- describe "#renew_whois_privacy" do
123
- let(:account_id) { 1010 }
124
-
125
- before do
126
- stub_request(:post, %r{/v2/#{account_id}/registrar/domains/.+/whois_privacy/renewals$})
127
- .to_return(read_http_fixture("renewWhoisPrivacy/success.http"))
128
- end
129
-
130
- it "builds the correct request" do
131
- subject.renew_whois_privacy(account_id, domain_name = "example.com")
132
-
133
- expect(WebMock).to have_requested(:post, "https://api.dnsimple.test/v2/#{account_id}/registrar/domains/#{domain_name}/whois_privacy/renewals")
134
- .with(headers: { "Accept" => "application/json" })
135
- end
136
-
137
- it "returns the whois privacy order" do
138
- response = subject.renew_whois_privacy(account_id, "example.com")
139
- expect(response).to be_a(Dnsimple::Response)
140
-
141
- result = response.data
142
- expect(result).to be_a(Dnsimple::Struct::WhoisPrivacyRenewal)
143
- expect(result.domain_id).to be_a(Integer)
144
- expect(result.whois_privacy_id).to be_a(Integer)
145
- expect(result.enabled).to be(true)
146
- expect(result.expires_on).to be_a(String)
147
- end
148
-
149
- context "when whois privacy was't previously purchased" do
150
- before do
151
- stub_request(:post, %r{/v2/#{account_id}/registrar/domains/.+/whois_privacy/renewals$})
152
- .to_return(read_http_fixture("renewWhoisPrivacy/whois-privacy-not-found.http"))
153
- end
154
-
155
- it "raises error" do
156
- expect do
157
- subject.renew_whois_privacy(account_id, "example.com")
158
- end.to raise_error(Dnsimple::RequestError, "WHOIS privacy not found for example.com")
159
- end
160
- end
161
-
162
- context "when there is already a whois privacy renewal order in progress" do
163
- before do
164
- stub_request(:post, %r{/v2/#{account_id}/registrar/domains/.+/whois_privacy/renewals$})
165
- .to_return(read_http_fixture("renewWhoisPrivacy/whois-privacy-duplicated-order.http"))
166
- end
167
-
168
- it "raises error" do
169
- expect do
170
- subject.renew_whois_privacy(account_id, "example.com")
171
- end.to raise_error(Dnsimple::RequestError, "The whois privacy for example.com has just been renewed, a new renewal cannot be started at this time")
172
- end
173
- end
174
- end
175
-
176
94
  end
@@ -1,17 +1,17 @@
1
1
  HTTP/1.1 204 No Content
2
- Server: nginx
3
- Date: Thu, 11 Aug 2016 10:23:46 GMT
4
- Connection: keep-alive
5
- X-RateLimit-Limit: 2400
6
- X-RateLimit-Remaining: 2392
7
- X-RateLimit-Reset: 1470913058
8
- Cache-Control: no-cache
9
- X-Request-Id: 5867ab50-6237-4cf8-b220-51f5ef57debd
10
- X-Runtime: 0.582482
11
- X-Content-Type-Options: nosniff
12
- X-Download-Options: noopen
13
- X-Frame-Options: DENY
14
- X-Permitted-Cross-Domain-Policies: none
15
- X-XSS-Protection: 1; mode=block
16
- Strict-Transport-Security: max-age=31536000
2
+ server: nginx
3
+ date: Thu, 11 Aug 2016 10:23:46 GMT
4
+ connection: keep-alive
5
+ x-ratelimit-limit: 2400
6
+ x-ratelimit-remaining: 2392
7
+ x-ratelimit-reset: 1470913058
8
+ cache-control: no-cache
9
+ x-request-id: 5867ab50-6237-4cf8-b220-51f5ef57debd
10
+ x-runtime: 0.582482
11
+ x-content-type-options: nosniff
12
+ x-download-options: noopen
13
+ x-frame-options: DENY
14
+ x-permitted-cross-domain-policies: none
15
+ x-xss-protection: 1; mode=block
16
+ strict-transport-security: max-age=31536000
17
17
 
@@ -1,20 +1,20 @@
1
- HTTP/1.1 200 OK
2
- Server: nginx
3
- Date: Tue, 14 Jun 2016 12:02:58 GMT
4
- Content-Type: application/json; charset=utf-8
5
- Connection: keep-alive
6
- X-RateLimit-Limit: 2400
7
- X-RateLimit-Remaining: 2391
8
- X-RateLimit-Reset: 1465908577
9
- ETag: W/"9ef3b4bf1f441a9b1cd6d7041bc181aa"
10
- Cache-Control: max-age=0, private, must-revalidate
11
- X-Request-Id: f705b65b-3589-43ad-97ca-3b2821d49d81
12
- X-Runtime: 0.012661
13
- X-Content-Type-Options: nosniff
14
- X-Download-Options: noopen
15
- X-Frame-Options: DENY
16
- X-Permitted-Cross-Domain-Policies: none
17
- X-XSS-Protection: 1; mode=block
18
- Strict-Transport-Security: max-age=31536000
19
-
20
- {"data":[{"id":123,"email":"john@example.com","plan_identifier":"dnsimple-personal","created_at":"2011-09-11T17:15:58Z","updated_at":"2016-06-03T15:02:26Z"}]}
1
+ HTTP/1.1 200 OK
2
+ server: nginx
3
+ date: Tue, 14 Jun 2016 12:02:58 GMT
4
+ content-type: application/json; charset=utf-8
5
+ connection: keep-alive
6
+ x-ratelimit-limit: 2400
7
+ x-ratelimit-remaining: 2391
8
+ x-ratelimit-reset: 1465908577
9
+ etag: W/"9ef3b4bf1f441a9b1cd6d7041bc181aa"
10
+ cache-control: max-age=0, private, must-revalidate
11
+ x-request-id: f705b65b-3589-43ad-97ca-3b2821d49d81
12
+ x-runtime: 0.012661
13
+ x-content-type-options: nosniff
14
+ x-download-options: noopen
15
+ x-frame-options: DENY
16
+ x-permitted-cross-domain-policies: none
17
+ x-xss-protection: 1; mode=block
18
+ strict-transport-security: max-age=31536000
19
+
20
+ {"data":[{"id":123,"email":"john@example.com","plan_identifier":"dnsimple-personal","created_at":"2011-09-11T17:15:58Z","updated_at":"2016-06-03T15:02:26Z"}]}
@@ -1,21 +1,21 @@
1
- HTTP/1.1 200 OK
2
- Server: nginx
3
- Date: Tue, 14 Jun 2016 12:05:38 GMT
4
- Content-Type: application/json; charset=utf-8
5
- Connection: keep-alive
6
- X-RateLimit-Limit: 2400
7
- X-RateLimit-Remaining: 2390
8
- X-RateLimit-Reset: 1465908577
9
- ETag: W/"b8dc5b6e94652da599d15d4668b723b5"
10
- Cache-Control: max-age=0, private, must-revalidate
11
- X-Request-Id: 745455ba-3871-440d-b703-1448b9708c14
12
- X-Runtime: 0.014727
13
- X-Content-Type-Options: nosniff
14
- X-Download-Options: noopen
15
- X-Frame-Options: DENY
16
- X-Permitted-Cross-Domain-Policies: none
17
- X-XSS-Protection: 1; mode=block
18
- Strict-Transport-Security: max-age=31536000
19
-
20
- {"data":[{"id":123,"email":"john@example.com","plan_identifier":"dnsimple-personal","created_at":"2011-09-11T17:15:58Z","updated_at":"2016-06-03T15:02:26Z"},{"id":456,"email":"ops@company.com","plan_identifier":"teams-v1-monthly","created_at":"2012-03-16T16:02:54Z","updated_at":"2016-06-14T11:23:16Z"}]}
21
-
1
+ HTTP/1.1 200 OK
2
+ server: nginx
3
+ date: Tue, 14 Jun 2016 12:05:38 GMT
4
+ content-type: application/json; charset=utf-8
5
+ connection: keep-alive
6
+ x-ratelimit-limit: 2400
7
+ x-ratelimit-remaining: 2390
8
+ x-ratelimit-reset: 1465908577
9
+ etag: W/"b8dc5b6e94652da599d15d4668b723b5"
10
+ cache-control: max-age=0, private, must-revalidate
11
+ x-request-id: 745455ba-3871-440d-b703-1448b9708c14
12
+ x-runtime: 0.014727
13
+ x-content-type-options: nosniff
14
+ x-download-options: noopen
15
+ x-frame-options: DENY
16
+ x-permitted-cross-domain-policies: none
17
+ x-xss-protection: 1; mode=block
18
+ strict-transport-security: max-age=31536000
19
+
20
+ {"data":[{"id":123,"email":"john@example.com","plan_identifier":"dnsimple-personal","created_at":"2011-09-11T17:15:58Z","updated_at":"2016-06-03T15:02:26Z"},{"id":456,"email":"ops@company.com","plan_identifier":"teams-v1-monthly","created_at":"2012-03-16T16:02:54Z","updated_at":"2016-06-14T11:23:16Z"}]}
21
+
@@ -1,16 +1,16 @@
1
- HTTP/1.1 200 OK
2
- Server: nginx
3
- Date: Tue, 08 Aug 2023 04:19:23 GMT
4
- Content-Type: application/json; charset=utf-8
5
- Connection: keep-alive
6
- X-RateLimit-Limit: 2400
7
- X-RateLimit-Remaining: 2399
8
- X-RateLimit-Reset: 1691471963
9
- X-WORK-WITH-US: Love automation? So do we! https://dnsimple.com/jobs
10
- ETag: W/"fe6afd982459be33146933235343d51d"
11
- Cache-Control: max-age=0, private, must-revalidate
12
- X-Request-Id: 8e8ac535-9f46-4304-8440-8c68c30427c3
13
- X-Runtime: 0.176579
14
- Strict-Transport-Security: max-age=63072000
15
-
16
- {"data":{"id":1,"account_id":1010,"name":"example.com","reverse":false,"secondary":false,"last_transferred_at":null,"active":true,"created_at":"2022-09-28T04:45:24Z","updated_at":"2023-07-06T11:19:48Z"}}
1
+ HTTP/1.1 200 OK
2
+ server: nginx
3
+ date: Tue, 08 Aug 2023 04:19:23 GMT
4
+ content-type: application/json; charset=utf-8
5
+ connection: keep-alive
6
+ x-ratelimit-limit: 2400
7
+ x-ratelimit-remaining: 2399
8
+ x-ratelimit-reset: 1691471963
9
+ x-work-with-us: Love automation? So do we! https://dnsimple.com/jobs
10
+ etag: W/"fe6afd982459be33146933235343d51d"
11
+ cache-control: max-age=0, private, must-revalidate
12
+ x-request-id: 8e8ac535-9f46-4304-8440-8c68c30427c3
13
+ x-runtime: 0.176579
14
+ strict-transport-security: max-age=63072000
15
+
16
+ {"data":{"id":1,"account_id":1010,"name":"example.com","reverse":false,"secondary":false,"last_transferred_at":null,"active":true,"created_at":"2022-09-28T04:45:24Z","updated_at":"2023-07-06T11:19:48Z"}}
@@ -1,20 +1,20 @@
1
- HTTP/1.1 200 OK
2
- Server: nginx
3
- Date: Wed, 15 Jun 2016 11:09:44 GMT
4
- Content-Type: application/json; charset=utf-8
5
- Connection: keep-alive
6
- X-RateLimit-Limit: 2400
7
- X-RateLimit-Remaining: 2398
8
- X-RateLimit-Reset: 1465992405
9
- ETag: W/"f3fb525524e0a0eab452025850afb062"
10
- Cache-Control: max-age=0, private, must-revalidate
11
- X-Request-Id: 03bcc2ff-d1f1-4fc2-bb3f-9218a21c04b7
12
- X-Runtime: 0.065526
13
- X-Content-Type-Options: nosniff
14
- X-Download-Options: noopen
15
- X-Frame-Options: DENY
16
- X-Permitted-Cross-Domain-Policies: none
17
- X-XSS-Protection: 1; mode=block
18
- Strict-Transport-Security: max-age=31536000
19
-
1
+ HTTP/1.1 200 OK
2
+ server: nginx
3
+ date: Wed, 15 Jun 2016 11:09:44 GMT
4
+ content-type: application/json; charset=utf-8
5
+ connection: keep-alive
6
+ x-ratelimit-limit: 2400
7
+ x-ratelimit-remaining: 2398
8
+ x-ratelimit-reset: 1465992405
9
+ etag: W/"f3fb525524e0a0eab452025850afb062"
10
+ cache-control: max-age=0, private, must-revalidate
11
+ x-request-id: 03bcc2ff-d1f1-4fc2-bb3f-9218a21c04b7
12
+ x-runtime: 0.065526
13
+ x-content-type-options: nosniff
14
+ x-download-options: noopen
15
+ x-frame-options: DENY
16
+ x-permitted-cross-domain-policies: none
17
+ x-xss-protection: 1; mode=block
18
+ strict-transport-security: max-age=31536000
19
+
20
20
  {"data":[{"id":1,"name":"WordPress","sid":"wordpress","description":"Share with the world, your community, or your closest friends.","setup_description":null,"requires_setup":true,"default_subdomain":"blog","created_at":"2013-11-05T18:06:50Z","updated_at":"2016-03-04T09:23:27Z","settings":[{"name":"site","label":"Site","append":null,"description":"Your Wordpress.com subdomain","example":null,"password":false}]}],"pagination":{"current_page":1,"per_page":30,"total_entries":1,"total_pages":1}}
@@ -1,17 +1,17 @@
1
1
  HTTP/1.1 204 No Content
2
- Server: nginx
3
- Date: Sat, 09 Jul 2016 11:12:42 GMT
4
- Connection: keep-alive
5
- X-RateLimit-Limit: 2400
6
- X-RateLimit-Remaining: 2398
7
- X-RateLimit-Reset: 1468066326
8
- Cache-Control: no-cache
9
- X-Request-Id: 30a3a44b-5792-4114-a355-a866603311ce
10
- X-Runtime: 0.087254
11
- X-Content-Type-Options: nosniff
12
- X-Download-Options: noopen
13
- X-Frame-Options: DENY
14
- X-Permitted-Cross-Domain-Policies: none
15
- X-XSS-Protection: 1; mode=block
16
- Strict-Transport-Security: max-age=31536000
2
+ server: nginx
3
+ date: Sat, 09 Jul 2016 11:12:42 GMT
4
+ connection: keep-alive
5
+ x-ratelimit-limit: 2400
6
+ x-ratelimit-remaining: 2398
7
+ x-ratelimit-reset: 1468066326
8
+ cache-control: no-cache
9
+ x-request-id: 30a3a44b-5792-4114-a355-a866603311ce
10
+ x-runtime: 0.087254
11
+ x-content-type-options: nosniff
12
+ x-download-options: noopen
13
+ x-frame-options: DENY
14
+ x-permitted-cross-domain-policies: none
15
+ x-xss-protection: 1; mode=block
16
+ strict-transport-security: max-age=31536000
17
17
 
@@ -1,13 +1,13 @@
1
- HTTP/1.1 204 No Content
2
- Server: nginx
3
- Date: Thu, 24 Mar 2016 11:05:38 GMT
4
- Connection: keep-alive
5
- Status: 204 No Content
6
- X-RateLimit-Limit: 2400
7
- X-RateLimit-Remaining: 2397
8
- X-RateLimit-Reset: 1458821049
9
- Cache-Control: no-cache
10
- X-Request-Id: 967713d5-a203-40ee-875c-1df07868b7eb
11
- X-Runtime: 0.147576
12
- Strict-Transport-Security: max-age=31536000
13
-
1
+ HTTP/1.1 204 No Content
2
+ server: nginx
3
+ date: Thu, 24 Mar 2016 11:05:38 GMT
4
+ connection: keep-alive
5
+ status: 204 No Content
6
+ x-ratelimit-limit: 2400
7
+ x-ratelimit-remaining: 2397
8
+ x-ratelimit-reset: 1458821049
9
+ cache-control: no-cache
10
+ x-request-id: 967713d5-a203-40ee-875c-1df07868b7eb
11
+ x-runtime: 0.147576
12
+ strict-transport-security: max-age=31536000
13
+
@@ -1,13 +1,13 @@
1
- HTTP/1.1 204 No Content
2
- Server: nginx
3
- Date: Sun, 21 Feb 2016 13:40:35 GMT
4
- Connection: keep-alive
5
- Status: 204 No Content
6
- X-RateLimit-Limit: 4000
7
- X-RateLimit-Remaining: 3990
8
- X-RateLimit-Reset: 1456063540
9
- Cache-Control: no-cache
10
- X-Request-Id: 9af6ab78-7ea8-4675-89f0-14d124fc7ca2
11
- X-Runtime: 3.038699
12
- Strict-Transport-Security: max-age=31536000
13
-
1
+ HTTP/1.1 204 No Content
2
+ server: nginx
3
+ date: Sun, 21 Feb 2016 13:40:35 GMT
4
+ connection: keep-alive
5
+ status: 204 No Content
6
+ x-ratelimit-limit: 4000
7
+ x-ratelimit-remaining: 3990
8
+ x-ratelimit-reset: 1456063540
9
+ cache-control: no-cache
10
+ x-request-id: 9af6ab78-7ea8-4675-89f0-14d124fc7ca2
11
+ x-runtime: 3.038699
12
+ strict-transport-security: max-age=31536000
13
+
@@ -1,9 +1,9 @@
1
1
  HTTP/1.1 502 Bad Gateway
2
- Server: nginx
3
- Date: Mon, 22 Dec 2014 14:16:12 GMT
4
- Content-Type: text/html
5
- Content-Length: 166
6
- Connection: close
2
+ server: nginx
3
+ date: Mon, 22 Dec 2014 14:16:12 GMT
4
+ content-type: text/html
5
+ content-length: 166
6
+ connection: close
7
7
 
8
8
  <html>
9
9
  <head><title>502 Bad Gateway</title></head>
@@ -1,16 +1,16 @@
1
- HTTP/1.1 400 Bad Request
2
- Server: nginx
3
- Date: Tue, 23 Sep 2025 10:21:06 GMT
4
- Content-Type: application/json; charset=utf-8
5
- Content-Length: 137
6
- Connection: keep-alive
7
- X-RateLimit-Limit: 2400
8
- X-RateLimit-Remaining: 2397
9
- X-RateLimit-Reset: 1758626142
10
- X-WORK-WITH-US: Love automation? So do we! https://dnsimple.com/jobs
11
- Cache-Control: no-cache
12
- X-Request-Id: 22761da9-ad02-4970-add5-e26602b09bb5
13
- X-Runtime: 0.115194
14
- Strict-Transport-Security: max-age=63072000
15
-
16
- {"message":"Validation failed","errors":{"creates":[{"index":0,"message":"Validation failed","errors":{"record_type":["unsupported"]}}]}}
1
+ HTTP/1.1 400 Bad Request
2
+ server: nginx
3
+ date: Tue, 23 Sep 2025 10:21:06 GMT
4
+ content-type: application/json; charset=utf-8
5
+ content-length: 137
6
+ connection: keep-alive
7
+ x-ratelimit-limit: 2400
8
+ x-ratelimit-remaining: 2397
9
+ x-ratelimit-reset: 1758626142
10
+ x-work-with-us: Love automation? So do we! https://dnsimple.com/jobs
11
+ cache-control: no-cache
12
+ x-request-id: 22761da9-ad02-4970-add5-e26602b09bb5
13
+ x-runtime: 0.115194
14
+ strict-transport-security: max-age=63072000
15
+
16
+ {"message":"Validation failed","errors":{"creates":[{"index":0,"message":"Validation failed","errors":{"record_type":["unsupported"]}}]}}
@@ -3,9 +3,9 @@ server: nginx
3
3
  date: Fri, 05 Sep 2025 06:50:48 GMT
4
4
  content-type: application/json; charset=utf-8
5
5
  content-length: 107
6
- X-RateLimit-Limit: 2400
7
- X-RateLimit-Remaining: 2390
8
- X-RateLimit-Reset: 1757058040
6
+ x-ratelimit-limit: 2400
7
+ x-ratelimit-remaining: 2390
8
+ x-ratelimit-reset: 1757058040
9
9
  x-work-with-us: Love automation? So do we! https://dnsimple.com/jobs
10
10
  cache-control: no-cache
11
11
  x-request-id: 254988cd-401b-4a32-b5d8-c25502573c9a
@@ -3,9 +3,9 @@ server: nginx
3
3
  date: Fri, 05 Sep 2025 06:52:30 GMT
4
4
  content-type: application/json; charset=utf-8
5
5
  content-length: 107
6
- X-RateLimit-Limit: 2400
7
- X-RateLimit-Remaining: 2388
8
- X-RateLimit-Reset: 1757058040
6
+ x-ratelimit-limit: 2400
7
+ x-ratelimit-remaining: 2388
8
+ x-ratelimit-reset: 1757058040
9
9
  x-work-with-us: Love automation? So do we! https://dnsimple.com/jobs
10
10
  cache-control: no-cache
11
11
  x-request-id: e042a192-69de-46b5-9ea0-add647a9b20a
@@ -1,16 +1,16 @@
1
- HTTP/1.1 200 OK
2
- server: nginx
3
- date: Fri, 05 Sep 2025 05:25:01 GMT
4
- content-type: application/json; charset=utf-8
5
- content-length: 1080
6
- X-RateLimit-Limit: 2400
7
- X-RateLimit-Remaining: 2399
8
- X-RateLimit-Reset: 1757053501
9
- x-work-with-us: Love automation? So do we! https://dnsimple.com/jobs
10
- etag: W/"0d9f98e87eccabb6c8045c7fd0b61e5e"
11
- cache-control: max-age=0, private, must-revalidate
12
- x-request-id: f331c43b-7f06-4b1f-90a1-e88efee10c1c
13
- x-runtime: 0.334890
14
- strict-transport-security: max-age=63072000
15
-
16
- {"data":{"creates":[{"id":67623409,"zone_id":"example.com","parent_id":null,"name":"ab","content":"3.2.3.4","ttl":3600,"priority":null,"type":"A","regions":["global"],"system_record":false,"created_at":"2025-09-05T05:25:00Z","updated_at":"2025-09-05T05:25:00Z"},{"id":67623410,"zone_id":"example.com","parent_id":null,"name":"ab","content":"4.2.3.4","ttl":3600,"priority":null,"type":"A","regions":["global"],"system_record":false,"created_at":"2025-09-05T05:25:00Z","updated_at":"2025-09-05T05:25:00Z"}],"updates":[{"id":67622534,"zone_id":"example.com","parent_id":null,"name":"update1-1757049890","content":"3.2.3.40","ttl":3600,"priority":null,"type":"A","regions":["global"],"system_record":false,"created_at":"2025-09-05T04:40:15Z","updated_at":"2025-09-05T05:25:00Z"},{"id":67622537,"zone_id":"example.com","parent_id":null,"name":"update2-1757049890","content":"5.2.3.40","ttl":3600,"priority":null,"type":"A","regions":["global"],"system_record":false,"created_at":"2025-09-05T04:40:22Z","updated_at":"2025-09-05T05:25:00Z"}],"deletes":[{"id":67622509},{"id":67622527}]}}
1
+ HTTP/1.1 200 OK
2
+ server: nginx
3
+ date: Fri, 05 Sep 2025 05:25:01 GMT
4
+ content-type: application/json; charset=utf-8
5
+ content-length: 1080
6
+ x-ratelimit-limit: 2400
7
+ x-ratelimit-remaining: 2399
8
+ x-ratelimit-reset: 1757053501
9
+ x-work-with-us: Love automation? So do we! https://dnsimple.com/jobs
10
+ etag: W/"0d9f98e87eccabb6c8045c7fd0b61e5e"
11
+ cache-control: max-age=0, private, must-revalidate
12
+ x-request-id: f331c43b-7f06-4b1f-90a1-e88efee10c1c
13
+ x-runtime: 0.334890
14
+ strict-transport-security: max-age=63072000
15
+
16
+ {"data":{"creates":[{"id":67623409,"zone_id":"example.com","parent_id":null,"name":"ab","content":"3.2.3.4","ttl":3600,"priority":null,"type":"A","regions":["global"],"system_record":false,"created_at":"2025-09-05T05:25:00Z","updated_at":"2025-09-05T05:25:00Z"},{"id":67623410,"zone_id":"example.com","parent_id":null,"name":"ab","content":"4.2.3.4","ttl":3600,"priority":null,"type":"A","regions":["global"],"system_record":false,"created_at":"2025-09-05T05:25:00Z","updated_at":"2025-09-05T05:25:00Z"}],"updates":[{"id":67622534,"zone_id":"example.com","parent_id":null,"name":"update1-1757049890","content":"3.2.3.40","ttl":3600,"priority":null,"type":"A","regions":["global"],"system_record":false,"created_at":"2025-09-05T04:40:15Z","updated_at":"2025-09-05T05:25:00Z"},{"id":67622537,"zone_id":"example.com","parent_id":null,"name":"update2-1757049890","content":"5.2.3.40","ttl":3600,"priority":null,"type":"A","regions":["global"],"system_record":false,"created_at":"2025-09-05T04:40:22Z","updated_at":"2025-09-05T05:25:00Z"}],"deletes":[{"id":67622509},{"id":67622527}]}}