dnsimple 8.4.0 → 8.5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 34867970ac25f062a88e64df5c8ffc1a4cebb69612aea702cf6075ca79a9f9e7
4
- data.tar.gz: 79ffa15c0875466c11c175feeda98df3467ddeb0b2229c16aa6c92aecf1e0a39
3
+ metadata.gz: 446911b281dcecf8ebea06ee9429851c721acb7757b1deee3aef8cd5aa5bf556
4
+ data.tar.gz: 3bdc28942ca0dde6156122522849bfac6d03bee431a1b952db37b0b11445ffaa
5
5
  SHA512:
6
- metadata.gz: d7d71422305173c73b5dc948ffaf006d76b651697afc072b90e494dd9051c90424409ad7f16366bbec4ea5992fadcad6463c133c7b0ef522bbabe03c6b78f766
7
- data.tar.gz: 980c1e8c59db95933ab3d6e95eea871fcaaf9234b4866efbfc105c7da2fb841097a8e9aec2deb467d3ca1a6a7e9db79bcaed9b3851c6da4429c5799e3ded2a92
6
+ metadata.gz: e9c8fbf1c0f0a6af73adcf3a2ce7a77755525f60538b3e9ca4d8e6c63642370b480a7b8d3d2d03b2efab18422dc2a111ab677a26700bbffff944c516ec88554c
7
+ data.tar.gz: 490ad2dca6043a664a7858fb3a6f91880be430d2221c27b9dcc3f00112aa1d0fdca99216f27975996ad1ed7f1f931516c2844b6da36cde84ea44c28464e82e5b
data/CHANGELOG.md CHANGED
@@ -4,6 +4,16 @@ This project uses [Semantic Versioning 2.0.0](http://semver.org/).
4
4
 
5
5
  ## main
6
6
 
7
+ ## 8.5.0
8
+
9
+ FEATURES:
10
+
11
+ - NEW: Added `Dnsimple::Client::Registrar#check_registrant_change` to retrieves the requirements of a registrant change. (dnsimple/dnsimple-ruby#355)
12
+ - NEW: Added `Dnsimple::Client::Registrar#get_registrant_change` to retrieves the details of an existing registrant change. (dnsimple/dnsimple-ruby#355)
13
+ - NEW: Added `Dnsimple::Client::Registrar#create_registrant_change` to start registrant change. (dnsimple/dnsimple-ruby#355)
14
+ - NEW: Added `Dnsimple::Client::Registrar#list_registrant_changes` to lists the registrant changes for a domain. (dnsimple/dnsimple-ruby#355)
15
+ - NEW: Added `Dnsimple::Client::Registrar#delete_registrant_change` to cancel an ongoing registrant change from the account. (dnsimple/dnsimple-ruby#355)
16
+
7
17
  ## 8.4.0
8
18
 
9
19
  FEATURES:
@@ -160,17 +160,18 @@ module Dnsimple
160
160
  include Client::Oauth
161
161
  end
162
162
 
163
-
164
163
  require_relative 'registrar'
165
164
  require_relative 'registrar_auto_renewal'
166
165
  require_relative 'registrar_whois_privacy'
166
+ require_relative 'registrar_registrant_changes'
167
167
  require_relative 'registrar_delegation'
168
168
 
169
169
  class RegistrarService < ClientService
170
170
  include Client::Registrar
171
171
  include Client::RegistrarAutoRenewal
172
- include Client::RegistrarWhoisPrivacy
173
172
  include Client::RegistrarDelegation
173
+ include Client::RegistrarRegistrantChanges
174
+ include Client::RegistrarWhoisPrivacy
174
175
  end
175
176
 
176
177
 
@@ -0,0 +1,109 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dnsimple
4
+ class Client
5
+ module RegistrarRegistrantChanges
6
+
7
+ # Retrieves the requirements of a registrant change
8
+ #
9
+ # @example Check the requirements to change the contact for example.com to contact 1234:
10
+ # client.registrar.check_registrant_change(1010, { domain_id: "example.com", contact_id: 1234 })
11
+ #
12
+ # @param [Integer] account_id the account ID
13
+ # @param [Hash] attributes the attributes to check the registrant change
14
+ # @option attributes [String, Integer] :domain_id the domain ID to check
15
+ # @option attributes [Integer] :contact_id the contact ID to check against
16
+ # @param [Hash] options
17
+ # @return [Struct::RegistrantChangeCheck]
18
+ #
19
+ # @raise [RequestError] When the request fails.
20
+ def check_registrant_change(account_id, attributes, options = {})
21
+ Extra.validate_mandatory_attributes(attributes, [:domain_id, :contact_id])
22
+ endpoint = Client.versioned("/%s/registrar/registrant_changes/check" % [account_id])
23
+ response = client.post(endpoint, attributes, options)
24
+
25
+ Dnsimple::Response.new(response, Struct::RegistrantChangeCheck.new(response["data"]))
26
+ end
27
+
28
+ # Retrieves the details of an existing registrant change.
29
+ #
30
+ # @example Retrieve the registrant change 42:
31
+ # client.registrar.get_registrant_change(1010, 42)
32
+ #
33
+ # @param [Integer] account_id the Account id
34
+ # @param [#to_s] registrant_change_id the registrant change id
35
+ # @param [Hash] options
36
+ #
37
+ # @return [Struct::RegistrantChange]
38
+ #
39
+ # @raise [NotFoundError] When record is not found.
40
+ # @raise [RequestError] When the request fails.
41
+ def get_registrant_change(account_id, registrant_change_id, options = {})
42
+ endpoint = Client.versioned("/%s/registrar/registrant_changes/%s" % [account_id, registrant_change_id])
43
+ response = client.get(endpoint, options)
44
+
45
+ Dnsimple::Response.new(response, Struct::RegistrantChange.new(response["data"]))
46
+ end
47
+
48
+ # Start registrant change.
49
+ #
50
+ # @example Start a registrant change for example.com to contact 1234:
51
+ # including WHOIS privacy for the domain and enabling auto renewal:
52
+ # client.registrar.create_registrant_change(1010, { domain_id: "example.com", contact_id: 1234, extended_attributes: { "x-fi-registrant-idnumber" => "1234" } })
53
+ #
54
+ # @param [Integer] account_id the account ID
55
+ # @param [Hash] attributes the attributes to start a registrant change
56
+ # @option attributes [String, Integer] :domain_id the domain ID
57
+ # @option attributes [Integer] :contact_id the contact ID to change to
58
+ # @option attributes [Array<Hash>, nil] :extended_attributes the extended attributes to pass to the registry
59
+ # @param [Hash] options
60
+ # @return [Struct::RegistrantChange]
61
+ #
62
+ # @raise [RequestError] When the request fails.
63
+ def create_registrant_change(account_id, attributes, options = {})
64
+ Extra.validate_mandatory_attributes(attributes, [:domain_id, :contact_id])
65
+ endpoint = Client.versioned("/%s/registrar/registrant_changes" % [account_id])
66
+ response = client.post(endpoint, attributes, options)
67
+
68
+ Dnsimple::Response.new(response, Struct::RegistrantChange.new(response["data"]))
69
+ end
70
+
71
+ # List registrant changes in the account.
72
+ #
73
+ # @example List registrant changes for the account:
74
+ # client.registrar.list_registrant_changes(1010)
75
+ #
76
+ # @param [Integer] account_id the account ID
77
+ # @param [Hash] options
78
+ # @return [Dnsimple::PaginatedResponse<Struct::DomainRegistration>]
79
+ #
80
+ # @raise [NotFoundError] When record is not found.
81
+ # @raise [RequestError] When the request fails.
82
+ def list_registrant_changes(account_id, options = {})
83
+ endpoint = Client.versioned("/%s/registrar/registrant_changes" % [account_id])
84
+ response = client.get(endpoint, options)
85
+
86
+ Dnsimple::PaginatedResponse.new(response, response["data"].map { |r| Struct::RegistrantChange.new(r) })
87
+ end
88
+
89
+ # Cancel an ongoing registrant change from the account.
90
+ #
91
+ # @example Cancel a registrant change 42:
92
+ # client.registrar.delete_registrant_change(1010, 42)
93
+ #
94
+ # @param [Integer] account_id the account ID
95
+ # @param [#to_s] registrant_change_id the registrant change ID
96
+ # @param [Hash] options
97
+ # @return [Dnsimple::Response<nil>]
98
+ #
99
+ # @raise [NotFoundError] When record is not found.
100
+ # @raise [RequestError] When the request fails.
101
+ def delete_registrant_change(account_id, registrant_change_id, options = {})
102
+ endpoint = Client.versioned("/%s/registrar/registrant_changes/%s" % [account_id, registrant_change_id])
103
+ response = client.delete(endpoint, nil, options)
104
+
105
+ Dnsimple::Response.new(response, nil)
106
+ end
107
+ end
108
+ end
109
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dnsimple
4
+ module Struct
5
+
6
+ class RegistrantChange < Base
7
+ # @return [Integer] The registrant change ID in DNSimple.
8
+ attr_accessor :id
9
+
10
+ # @return [Integer] The associated account ID.
11
+ attr_accessor :account_id
12
+
13
+ # @return [Integer] The associated contact ID.
14
+ attr_accessor :contact_id
15
+
16
+ # @return [Integer] The associated domain ID.
17
+ attr_accessor :domain_id
18
+
19
+ # @return [String] The registrant change state.
20
+ attr_accessor :state
21
+
22
+ # @return [Hash] The extended attributes.
23
+ attr_accessor :extended_attributes
24
+
25
+ # @return [Boolean] True if the registrant change is a registry owner change.
26
+ attr_accessor :registry_owner_change
27
+
28
+ # @return [String] When the Inter-Registrar Transfer lock (60 days) is going to be lifted.
29
+ attr_accessor :irt_lock_lifted_by
30
+
31
+ # @return [String] When the registrant change was created in DNSimple.
32
+ attr_accessor :created_at
33
+
34
+ # @return [String] When the registrant change was last updated in DNSimple.
35
+ attr_accessor :updated_at
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dnsimple
4
+ module Struct
5
+
6
+ class RegistrantChangeCheck < Base
7
+ # @return [Integer] The associated contact ID.
8
+ attr_accessor :contact_id
9
+
10
+ # @return [Integer] The associated domain ID.
11
+ attr_accessor :domain_id
12
+
13
+ # @return [Array<Hash>] The extended attributes.
14
+ attr_accessor :extended_attributes
15
+
16
+ # # @return [Boolean] True if the registrant change is a registry owner change.
17
+ attr_accessor :registry_owner_change
18
+ end
19
+ end
20
+ end
@@ -35,6 +35,8 @@ require_relative 'struct/domain_renewal'
35
35
  require_relative 'struct/email_forward'
36
36
  require_relative 'struct/extended_attribute'
37
37
  require_relative 'struct/oauth_token'
38
+ require_relative 'struct/registrant_change_check'
39
+ require_relative 'struct/registrant_change'
38
40
  require_relative 'struct/zone_record'
39
41
  require_relative 'struct/service'
40
42
  require_relative 'struct/template'
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Dnsimple
4
- VERSION = "8.4.0"
4
+ VERSION = "8.5.0"
5
5
  end
@@ -3,7 +3,6 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  describe Dnsimple::Client, ".registrar" do
6
-
7
6
  subject { described_class.new(base_url: "https://api.dnsimple.test", access_token: "a1b2c3").registrar }
8
7
 
9
8
 
@@ -283,7 +282,7 @@ describe Dnsimple::Client, ".registrar" do
283
282
  result = response.data
284
283
  expect(result).to be_a(Dnsimple::Struct::DomainTransfer)
285
284
  expect(result.id).to eq(361)
286
- expect(result.domain_id).to eq(182245)
285
+ expect(result.domain_id).to eq(182_245)
287
286
  expect(result.registrant_id).to eq(2715)
288
287
  expect(result.state).to eq("cancelled")
289
288
  expect(result.auto_renew).to be(false)
@@ -316,7 +315,7 @@ describe Dnsimple::Client, ".registrar" do
316
315
  result = response.data
317
316
  expect(result).to be_a(Dnsimple::Struct::DomainTransfer)
318
317
  expect(result.id).to eq(361)
319
- expect(result.domain_id).to eq(182245)
318
+ expect(result.domain_id).to eq(182_245)
320
319
  expect(result.registrant_id).to eq(2715)
321
320
  expect(result.state).to eq("transferring")
322
321
  expect(result.auto_renew).to be(false)
@@ -352,4 +351,224 @@ describe Dnsimple::Client, ".registrar" do
352
351
  end
353
352
  end
354
353
 
354
+ describe "#check_registrant_change" do
355
+ let(:account_id) { 1010 }
356
+ let(:attributes) { { domain_id: "example.com", contact_id: 1234 } }
357
+
358
+ before do
359
+ stub_request(:post, %r{/v2/#{account_id}/registrar/registrant_changes/check$})
360
+ .to_return(read_http_fixture("checkRegistrantChange/success.http"))
361
+ end
362
+
363
+ it "builds the correct request" do
364
+ subject.check_registrant_change(account_id, attributes)
365
+
366
+ expect(WebMock).to have_requested(:post, "https://api.dnsimple.test/v2/#{account_id}/registrar/registrant_changes/check")
367
+ .with(headers: { "Accept" => "application/json" })
368
+ .with(body: attributes)
369
+ end
370
+
371
+ it "returns the registrant change check" do
372
+ response = subject.check_registrant_change(account_id, attributes)
373
+ expect(response).to be_a(Dnsimple::Response)
374
+
375
+ result = response.data
376
+ expect(result).to be_a(Dnsimple::Struct::RegistrantChangeCheck)
377
+ expect(result.contact_id).to eq(101)
378
+ expect(result.domain_id).to eq(101)
379
+ expect(result.extended_attributes).to be_a(Array)
380
+ expect(result.extended_attributes).to be_empty
381
+ expect(result.registry_owner_change).to be(true)
382
+ end
383
+
384
+ context "when the attributes are incomplete" do
385
+ it "raises ArgumentError" do
386
+ expect { subject.check_registrant_change(account_id, domain_id: "example.com") }.to raise_error(ArgumentError)
387
+ end
388
+ end
389
+
390
+ context "when the domain is not found" do
391
+ it "raises a NotFoundError" do
392
+ stub_request(:post, %r{/v2/#{account_id}/registrar/registrant_changes/check$})
393
+ .to_return(read_http_fixture("checkRegistrantChange/error-domainnotfound.http"))
394
+
395
+ expect {
396
+ subject.check_registrant_change(account_id, attributes)
397
+ }.to raise_error(Dnsimple::NotFoundError)
398
+ end
399
+ end
400
+
401
+ context "when the contact is not found" do
402
+ it "raises a NotFoundError" do
403
+ stub_request(:post, %r{/v2/#{account_id}/registrar/registrant_changes/check$})
404
+ .to_return(read_http_fixture("checkRegistrantChange/error-contactnotfound.http"))
405
+
406
+ expect {
407
+ subject.check_registrant_change(account_id, attributes)
408
+ }.to raise_error(Dnsimple::NotFoundError)
409
+ end
410
+ end
411
+ end
412
+
413
+ describe "#get_registrant_change" do
414
+ let(:account_id) { 1010 }
415
+
416
+ before do
417
+ stub_request(:get, %r{/v2/#{account_id}/registrar/registrant_changes/.+$})
418
+ .to_return(read_http_fixture("getRegistrantChange/success.http"))
419
+ end
420
+
421
+ it "builds the correct request" do
422
+ subject.get_registrant_change(account_id, registrant_change_id = 42)
423
+
424
+ expect(WebMock).to have_requested(:get, "https://api.dnsimple.test/v2/#{account_id}/registrar/registrant_changes/#{registrant_change_id}")
425
+ .with(headers: { "Accept" => "application/json" })
426
+ end
427
+
428
+ it "returns the registrant change" do
429
+ response = subject.get_registrant_change(account_id, 42)
430
+ expect(response).to be_a(Dnsimple::Response)
431
+
432
+ result = response.data
433
+ expect(result).to be_a(Dnsimple::Struct::RegistrantChange)
434
+ expect(result.id).to eq(101)
435
+ expect(result.account_id).to eq(101)
436
+ expect(result.contact_id).to eq(101)
437
+ expect(result.domain_id).to eq(101)
438
+ expect(result.state).to eq("new")
439
+ expect(result.extended_attributes).to be_a(Hash)
440
+ expect(result.extended_attributes).to be_empty
441
+ expect(result.registry_owner_change).to be(true)
442
+ expect(result.irt_lock_lifted_by).to be_nil
443
+ expect(result.created_at).to eq("2017-02-03T17:43:22Z")
444
+ expect(result.updated_at).to eq("2017-02-03T17:43:22Z")
445
+ end
446
+ end
447
+
448
+ describe "#create_registrant_change" do
449
+ let(:account_id) { 1010 }
450
+ let(:attributes) { { domain_id: "example.com", contact_id: 1234, extended_attributes: { "x-fi-registrant-idnumber" => "1234" } } }
451
+
452
+ before do
453
+ stub_request(:post, %r{/v2/#{account_id}/registrar/registrant_changes$})
454
+ .to_return(read_http_fixture("createRegistrantChange/success.http"))
455
+ end
456
+
457
+ it "builds the correct request" do
458
+ subject.create_registrant_change(account_id, attributes)
459
+
460
+ expect(WebMock).to have_requested(:post, "https://api.dnsimple.test/v2/#{account_id}/registrar/registrant_changes")
461
+ .with(headers: { "Accept" => "application/json" })
462
+ .with(body: attributes)
463
+ end
464
+
465
+ it "returns the registrant change" do
466
+ response = subject.create_registrant_change(account_id, attributes)
467
+ expect(response).to be_a(Dnsimple::Response)
468
+
469
+ result = response.data
470
+ expect(result).to be_a(Dnsimple::Struct::RegistrantChange)
471
+ expect(result.id).to eq(101)
472
+ expect(result.account_id).to eq(101)
473
+ expect(result.contact_id).to eq(101)
474
+ expect(result.domain_id).to eq(101)
475
+ expect(result.state).to eq("new")
476
+ expect(result.extended_attributes).to be_a(Hash)
477
+ expect(result.extended_attributes).to be_empty
478
+ expect(result.registry_owner_change).to be(true)
479
+ expect(result.irt_lock_lifted_by).to be_nil
480
+ expect(result.created_at).to eq("2017-02-03T17:43:22Z")
481
+ expect(result.updated_at).to eq("2017-02-03T17:43:22Z")
482
+ end
483
+
484
+ context "when the attributes are incomplete" do
485
+ it "raises ArgumentError" do
486
+ expect { subject.create_registrant_change(account_id, domain_id: "example.com") }.to raise_error(ArgumentError)
487
+ end
488
+ end
489
+
490
+ context "when the domain is not found" do
491
+ it "raises a NotFoundError" do
492
+ stub_request(:post, %r{/v2/#{account_id}/registrar/registrant_changes$})
493
+ .to_return(read_http_fixture("checkRegistrantChange/error-domainnotfound.http"))
494
+
495
+ expect {
496
+ subject.create_registrant_change(account_id, attributes)
497
+ }.to raise_error(Dnsimple::NotFoundError)
498
+ end
499
+ end
500
+
501
+ context "when the contact is not found" do
502
+ it "raises a NotFoundError" do
503
+ stub_request(:post, %r{/v2/#{account_id}/registrar/registrant_changes$})
504
+ .to_return(read_http_fixture("checkRegistrantChange/error-contactnotfound.http"))
505
+
506
+ expect {
507
+ subject.create_registrant_change(account_id, attributes)
508
+ }.to raise_error(Dnsimple::NotFoundError)
509
+ end
510
+ end
511
+ end
512
+
513
+ describe "#list_registrant_changes" do
514
+ let(:account_id) { 1010 }
515
+
516
+ before do
517
+ stub_request(:get, %r{/v2/#{account_id}/registrar/registrant_changes$})
518
+ .to_return(read_http_fixture("listRegistrantChanges/success.http"))
519
+ end
520
+
521
+ it "builds the correct request" do
522
+ subject.list_registrant_changes(account_id)
523
+
524
+ expect(WebMock).to have_requested(:get, "https://api.dnsimple.test/v2/#{account_id}/registrar/registrant_changes")
525
+ .with(headers: { "Accept" => "application/json" })
526
+ end
527
+
528
+ it "returns the registrant changes" do
529
+ response = subject.list_registrant_changes(account_id)
530
+ expect(response).to be_a(Dnsimple::PaginatedResponse)
531
+
532
+ results = response.data
533
+
534
+ results.each do |result|
535
+ expect(result).to be_a(Dnsimple::Struct::RegistrantChange)
536
+ expect(result.id).to be_a(Integer)
537
+ expect(result.account_id).to be_a(Integer)
538
+ expect(result.contact_id).to be_a(Integer)
539
+ expect(result.domain_id).to be_a(Integer)
540
+ expect(result.state).to be_a(String)
541
+ expect(result.extended_attributes).to be_a(Hash)
542
+ expect(result.extended_attributes).to be_empty
543
+ expect(result.registry_owner_change).to be(true).or be(false)
544
+ expect(result.irt_lock_lifted_by).to be_nil
545
+ expect(result.created_at).to be_a(String)
546
+ expect(result.updated_at).to be_a(String)
547
+ end
548
+ end
549
+ end
550
+
551
+ describe "#delete_registrant_change" do
552
+ let(:account_id) { 1010 }
553
+
554
+ before do
555
+ stub_request(:delete, %r{/v2/#{account_id}/registrar/registrant_changes/.+$})
556
+ .to_return(read_http_fixture("deleteRegistrantChange/success.http"))
557
+ end
558
+
559
+ it "builds the correct request" do
560
+ subject.delete_registrant_change(account_id, registrant_change_id = 42)
561
+
562
+ expect(WebMock).to have_requested(:delete, "https://api.dnsimple.test/v2/#{account_id}/registrar/registrant_changes/#{registrant_change_id}")
563
+ .with(headers: { "Accept" => "application/json" })
564
+ end
565
+
566
+ it "returns nothing" do
567
+ response = subject.delete_registrant_change(account_id, 42)
568
+ expect(response).to be_a(Dnsimple::Response)
569
+
570
+ result = response.data
571
+ expect(result).to be_nil
572
+ end
573
+ end
355
574
  end
@@ -0,0 +1,14 @@
1
+ HTTP/1.1 404
2
+ server: nginx
3
+ date: Tue, 22 Aug 2023 13:59:02 GMT
4
+ content-type: application/json; charset=utf-8
5
+ x-ratelimit-limit: 2400
6
+ x-ratelimit-remaining: 2398
7
+ x-ratelimit-reset: 1692716201
8
+ x-work-with-us: Love automation? So do we! https://dnsimple.com/jobs
9
+ cache-control: no-cache
10
+ x-request-id: b1dd3f42-ebb9-42fd-a121-d595de96f667
11
+ x-runtime: 0.019122
12
+ strict-transport-security: max-age=63072000
13
+
14
+ {"message":"Contact `21` not found"}
@@ -0,0 +1,15 @@
1
+ HTTP/1.1 404
2
+ server: nginx
3
+ date: Tue, 22 Aug 2023 11:09:40 GMT
4
+ content-type: application/json; charset=utf-8
5
+ x-ratelimit-limit: 2400
6
+ x-ratelimit-remaining: 2395
7
+ x-ratelimit-reset: 1692705338
8
+ x-work-with-us: Love automation? So do we! https://dnsimple.com/jobs
9
+ etag: W/"cef1e7d85d0b9bfd25e81b812891d34f"
10
+ cache-control: max-age=0, private, must-revalidate
11
+ x-request-id: 5b0d8bfb-7b6a-40b5-a079-b640fd817e34
12
+ x-runtime: 3.066249
13
+ strict-transport-security: max-age=63072000
14
+
15
+ {"message":"Domain `example.com` not found"}
@@ -0,0 +1,15 @@
1
+ HTTP/1.1 200
2
+ server: nginx
3
+ date: Tue, 22 Aug 2023 11:09:40 GMT
4
+ content-type: application/json; charset=utf-8
5
+ x-ratelimit-limit: 2400
6
+ x-ratelimit-remaining: 2395
7
+ x-ratelimit-reset: 1692705338
8
+ x-work-with-us: Love automation? So do we! https://dnsimple.com/jobs
9
+ etag: W/"cef1e7d85d0b9bfd25e81b812891d34f"
10
+ cache-control: max-age=0, private, must-revalidate
11
+ x-request-id: 5b0d8bfb-7b6a-40b5-a079-b640fd817e34
12
+ x-runtime: 3.066249
13
+ strict-transport-security: max-age=63072000
14
+
15
+ {"data":{"domain_id":101,"contact_id":101,"extended_attributes":[],"registry_owner_change":true}}
@@ -0,0 +1,14 @@
1
+ HTTP/1.1 202
2
+ server: nginx
3
+ date: Tue, 22 Aug 2023 11:11:00 GMT
4
+ content-type: application/json; charset=utf-8
5
+ x-ratelimit-limit: 2400
6
+ x-ratelimit-remaining: 2394
7
+ x-ratelimit-reset: 1692705339
8
+ x-work-with-us: Love automation? So do we! https://dnsimple.com/jobs
9
+ cache-control: no-cache
10
+ x-request-id: 26bf7ff9-2075-42b0-9431-1778c825b6b0
11
+ x-runtime: 3.408950
12
+ strict-transport-security: max-age=63072000
13
+
14
+ {"data":{"id":101,"account_id":101,"domain_id":101,"contact_id":101,"state":"new","extended_attributes":{},"registry_owner_change":true,"irt_lock_lifted_by":null,"created_at":"2017-02-03T17:43:22Z","updated_at":"2017-02-03T17:43:22Z"}}
@@ -0,0 +1,13 @@
1
+ HTTP/1.1 201
2
+ server: nginx
3
+ date: Tue, 22 Aug 2023 11:14:44 GMT
4
+ content-type: application/json; charset=utf-8
5
+ x-ratelimit-limit: 2400
6
+ x-ratelimit-remaining: 2391
7
+ x-ratelimit-reset: 1692705338
8
+ x-work-with-us: Love automation? So do we! https://dnsimple.com/jobs
9
+ cache-control: no-cache
10
+ x-request-id: b123e1f0-aa70-4abb-95cf-34f377c83ef4
11
+ x-runtime: 0.114839
12
+ strict-transport-security: max-age=63072000
13
+
@@ -0,0 +1,15 @@
1
+ HTTP/1.1 200
2
+ server: nginx
3
+ date: Tue, 22 Aug 2023 11:13:58 GMT
4
+ content-type: application/json; charset=utf-8
5
+ x-ratelimit-limit: 2400
6
+ x-ratelimit-remaining: 2392
7
+ x-ratelimit-reset: 1692705338
8
+ x-work-with-us: Love automation? So do we! https://dnsimple.com/jobs
9
+ etag: W/"76c5d4c7579b754b94a42ac7fa37a901"
10
+ cache-control: max-age=0, private, must-revalidate
11
+ x-request-id: e910cd08-3f9c-4da4-9986-50dbe9c3bc55
12
+ x-runtime: 0.022006
13
+ strict-transport-security: max-age=63072000
14
+
15
+ {"data":{"id":101,"account_id":101,"domain_id":101,"contact_id":101,"state":"new","extended_attributes":{},"registry_owner_change":true,"irt_lock_lifted_by":null,"created_at":"2017-02-03T17:43:22Z","updated_at":"2017-02-03T17:43:22Z"}}
@@ -0,0 +1,15 @@
1
+ HTTP/1.1 200
2
+ server: nginx
3
+ date: Tue, 22 Aug 2023 11:12:49 GMT
4
+ content-type: application/json; charset=utf-8
5
+ x-ratelimit-limit: 2400
6
+ x-ratelimit-remaining: 2393
7
+ x-ratelimit-reset: 1692705338
8
+ x-work-with-us: Love automation? So do we! https://dnsimple.com/jobs
9
+ etag: W/"0049703ea058b06346df4c0e169eac29"
10
+ cache-control: max-age=0, private, must-revalidate
11
+ x-request-id: fd0334ce-414a-4872-8889-e548e0b1410c
12
+ x-runtime: 0.030759
13
+ strict-transport-security: max-age=63072000
14
+
15
+ {"data":[{"id":101,"account_id":101,"domain_id":101,"contact_id":101,"state":"new","extended_attributes":{},"registry_owner_change":true,"irt_lock_lifted_by":null,"created_at":"2017-02-03T17:43:22Z","updated_at":"2017-02-03T17:43:22Z"}],"pagination":{"current_page":1,"per_page":30,"total_entries":1,"total_pages":1}}
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dnsimple
3
3
  version: !ruby/object:Gem::Version
4
- version: 8.4.0
4
+ version: 8.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - DNSimple
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-08-10 00:00:00.000000000 Z
11
+ date: 2023-08-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -124,6 +124,7 @@ files:
124
124
  - lib/dnsimple/client/registrar.rb
125
125
  - lib/dnsimple/client/registrar_auto_renewal.rb
126
126
  - lib/dnsimple/client/registrar_delegation.rb
127
+ - lib/dnsimple/client/registrar_registrant_changes.rb
127
128
  - lib/dnsimple/client/registrar_whois_privacy.rb
128
129
  - lib/dnsimple/client/services.rb
129
130
  - lib/dnsimple/client/services_domains.rb
@@ -162,6 +163,8 @@ files:
162
163
  - lib/dnsimple/struct/email_forward.rb
163
164
  - lib/dnsimple/struct/extended_attribute.rb
164
165
  - lib/dnsimple/struct/oauth_token.rb
166
+ - lib/dnsimple/struct/registrant_change.rb
167
+ - lib/dnsimple/struct/registrant_change_check.rb
165
168
  - lib/dnsimple/struct/service.rb
166
169
  - lib/dnsimple/struct/template.rb
167
170
  - lib/dnsimple/struct/template_record.rb
@@ -227,6 +230,9 @@ files:
227
230
  - spec/fixtures.http/checkDomainPremiumPrice/error_400_not_a_premium_domain.http
228
231
  - spec/fixtures.http/checkDomainPremiumPrice/error_400_tld_not_supported.http
229
232
  - spec/fixtures.http/checkDomainPremiumPrice/success.http
233
+ - spec/fixtures.http/checkRegistrantChange/error-contactnotfound.http
234
+ - spec/fixtures.http/checkRegistrantChange/error-domainnotfound.http
235
+ - spec/fixtures.http/checkRegistrantChange/success.http
230
236
  - spec/fixtures.http/checkZoneDistribution/error.http
231
237
  - spec/fixtures.http/checkZoneDistribution/failure.http
232
238
  - spec/fixtures.http/checkZoneDistribution/success.http
@@ -239,6 +245,7 @@ files:
239
245
  - spec/fixtures.http/createDomain/created.http
240
246
  - spec/fixtures.http/createEmailForward/created.http
241
247
  - spec/fixtures.http/createPrimaryServer/created.http
248
+ - spec/fixtures.http/createRegistrantChange/success.http
242
249
  - spec/fixtures.http/createSecondaryZone/created.http
243
250
  - spec/fixtures.http/createTemplate/created.http
244
251
  - spec/fixtures.http/createTemplateRecord/created.http
@@ -251,6 +258,7 @@ files:
251
258
  - spec/fixtures.http/deleteDelegationSignerRecord/success.http
252
259
  - spec/fixtures.http/deleteDomain/success.http
253
260
  - spec/fixtures.http/deleteEmailForward/success.http
261
+ - spec/fixtures.http/deleteRegistrantChange/success.http
254
262
  - spec/fixtures.http/deleteTemplate/success.http
255
263
  - spec/fixtures.http/deleteTemplateRecord/success.http
256
264
  - spec/fixtures.http/deleteWebhook/success.http
@@ -283,6 +291,7 @@ files:
283
291
  - spec/fixtures.http/getDomainTransfer/success.http
284
292
  - spec/fixtures.http/getEmailForward/success.http
285
293
  - spec/fixtures.http/getPrimaryServer/success.http
294
+ - spec/fixtures.http/getRegistrantChange/success.http
286
295
  - spec/fixtures.http/getService/success.http
287
296
  - spec/fixtures.http/getTemplate/success.http
288
297
  - spec/fixtures.http/getTemplateRecord/success.http
@@ -309,6 +318,7 @@ files:
309
318
  - spec/fixtures.http/listEmailForwards/success.http
310
319
  - spec/fixtures.http/listPrimaryServers/success.http
311
320
  - spec/fixtures.http/listPushes/success.http
321
+ - spec/fixtures.http/listRegistrantChanges/success.http
312
322
  - spec/fixtures.http/listServices/success.http
313
323
  - spec/fixtures.http/listTemplateRecords/success.http
314
324
  - spec/fixtures.http/listTemplates/success.http