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 +4 -4
- data/CHANGELOG.md +10 -0
- data/lib/dnsimple/client/clients.rb +3 -2
- data/lib/dnsimple/client/registrar_registrant_changes.rb +109 -0
- data/lib/dnsimple/struct/registrant_change.rb +38 -0
- data/lib/dnsimple/struct/registrant_change_check.rb +20 -0
- data/lib/dnsimple/struct.rb +2 -0
- data/lib/dnsimple/version.rb +1 -1
- data/spec/dnsimple/client/registrar_spec.rb +222 -3
- data/spec/fixtures.http/checkRegistrantChange/error-contactnotfound.http +14 -0
- data/spec/fixtures.http/checkRegistrantChange/error-domainnotfound.http +15 -0
- data/spec/fixtures.http/checkRegistrantChange/success.http +15 -0
- data/spec/fixtures.http/createRegistrantChange/success.http +14 -0
- data/spec/fixtures.http/deleteRegistrantChange/success.http +13 -0
- data/spec/fixtures.http/getRegistrantChange/success.http +15 -0
- data/spec/fixtures.http/listRegistrantChanges/success.http +15 -0
- metadata +12 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 446911b281dcecf8ebea06ee9429851c721acb7757b1deee3aef8cd5aa5bf556
|
4
|
+
data.tar.gz: 3bdc28942ca0dde6156122522849bfac6d03bee431a1b952db37b0b11445ffaa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
data/lib/dnsimple/struct.rb
CHANGED
@@ -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'
|
data/lib/dnsimple/version.rb
CHANGED
@@ -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(
|
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(
|
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
|
+
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-
|
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
|