dnsimple 8.1.0 → 8.3.1
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/.github/CODEOWNERS +1 -1
- data/.github/dependabot.yml +3 -3
- data/.github/workflows/auto-merge.yml +32 -0
- data/.github/workflows/ci.yml +2 -1
- data/.github/workflows/release.yml +5 -4
- data/.rubocop_todo.yml +8 -7
- data/CHANGELOG.md +13 -0
- data/Gemfile +3 -3
- data/lib/dnsimple/client/certificates.rb +19 -0
- data/lib/dnsimple/client/oauth.rb +5 -0
- data/lib/dnsimple/client/registrar.rb +44 -0
- data/lib/dnsimple/error.rb +17 -0
- data/lib/dnsimple/version.rb +1 -1
- data/spec/dnsimple/client/oauth_spec.rb +19 -0
- data/spec/dnsimple/client/registrar_spec.rb +52 -0
- data/spec/fixtures.http/getDomainRegistration/success.http +20 -0
- data/spec/fixtures.http/getDomainRenewal/success.http +20 -0
- metadata +6 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d47bee5f7278d2aab4a2faa9b88121cbec92c510f6bbb807d5d0dd973429e360
|
|
4
|
+
data.tar.gz: abf2e8a9fe7a3613fbb3a80bcf375065f7a804fabd8369b1ec91760d8749e6c3
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a2bbab24f39ead5c46bb0657bae0d67c2a98e0a5648d45baf9f4a03d497c2a38bb677ffde8f039b1fe6fc380c731376c948211927ddb94c969027ed89dafb828
|
|
7
|
+
data.tar.gz: f041d09f3b51854c802af60219e2713a3f42544dca0efc2b3cd28f179c8f225d52c4ae46b8aeb6ae18c67a6bdadfee8c3ab84096da1d6f33c850e2ec7636c16b
|
data/.github/CODEOWNERS
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
* @dnsimple/
|
|
1
|
+
* @dnsimple/external-integrations
|
data/.github/dependabot.yml
CHANGED
|
@@ -4,19 +4,19 @@ updates:
|
|
|
4
4
|
- package-ecosystem: bundler
|
|
5
5
|
directory: /
|
|
6
6
|
schedule:
|
|
7
|
-
interval:
|
|
7
|
+
interval: monthly
|
|
8
8
|
time: '12:00'
|
|
9
9
|
open-pull-requests-limit: 10
|
|
10
10
|
labels:
|
|
11
11
|
- task
|
|
12
12
|
- dependencies
|
|
13
|
-
|
|
14
13
|
- package-ecosystem: "github-actions"
|
|
15
14
|
directory: "/"
|
|
16
15
|
schedule:
|
|
17
|
-
interval:
|
|
16
|
+
interval: monthly
|
|
18
17
|
time: '12:00'
|
|
19
18
|
open-pull-requests-limit: 10
|
|
20
19
|
labels:
|
|
21
20
|
- task
|
|
22
21
|
- dependencies
|
|
22
|
+
- automerge
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
name: Auto-merge
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
types:
|
|
6
|
+
- labeled
|
|
7
|
+
- synchronize
|
|
8
|
+
- opened
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
auto-merge:
|
|
12
|
+
name: 'Auto-merge'
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
permissions: write-all
|
|
15
|
+
|
|
16
|
+
if: github.event.pull_request.user.login == 'dependabot[bot]' && contains(github.event.pull_request.labels.*.name, 'automerge')
|
|
17
|
+
steps:
|
|
18
|
+
- name: Wait for tests to succeed
|
|
19
|
+
uses: lewagon/wait-on-check-action@v1.3.1
|
|
20
|
+
timeout-minutes: 15
|
|
21
|
+
with:
|
|
22
|
+
ref: ${{ github.ref }}
|
|
23
|
+
running-workflow-name: 'Auto-merge'
|
|
24
|
+
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
|
25
|
+
wait-interval: 10
|
|
26
|
+
allowed-conclusions: success
|
|
27
|
+
- uses: juliangruber/merge-pull-request-action@v1
|
|
28
|
+
with:
|
|
29
|
+
github-token: "${{ secrets.GITHUB_TOKEN }}"
|
|
30
|
+
number: ${{ github.event.number }}
|
|
31
|
+
method: squash
|
|
32
|
+
repo: dnsimple/dnsimple-ruby
|
data/.github/workflows/ci.yml
CHANGED
|
@@ -18,7 +18,7 @@ jobs:
|
|
|
18
18
|
- name: Checkout Code
|
|
19
19
|
uses: actions/checkout@v3
|
|
20
20
|
- name: Run markdownlint-cli
|
|
21
|
-
uses: nosborn/github-action-markdown-cli@v3.
|
|
21
|
+
uses: nosborn/github-action-markdown-cli@v3.2.0
|
|
22
22
|
with:
|
|
23
23
|
files: .
|
|
24
24
|
config_file: ".markdownlint.yaml"
|
|
@@ -42,6 +42,7 @@ jobs:
|
|
|
42
42
|
- '2.7'
|
|
43
43
|
- '3.0'
|
|
44
44
|
- '3.1'
|
|
45
|
+
- '3.2'
|
|
45
46
|
- 'ruby-head'
|
|
46
47
|
- 'truffleruby-head'
|
|
47
48
|
steps:
|
|
@@ -7,11 +7,11 @@ on:
|
|
|
7
7
|
jobs:
|
|
8
8
|
publish:
|
|
9
9
|
name: Release to RubyGems
|
|
10
|
-
runs-on: ubuntu-
|
|
10
|
+
runs-on: ubuntu-20.04
|
|
11
11
|
|
|
12
12
|
steps:
|
|
13
13
|
- name: Wait for tests to succeed
|
|
14
|
-
uses: lewagon/wait-on-check-action@v1.1
|
|
14
|
+
uses: lewagon/wait-on-check-action@v1.3.1
|
|
15
15
|
with:
|
|
16
16
|
ref: 'refs/heads/main'
|
|
17
17
|
running-workflow-name: 'Release to RubyGems'
|
|
@@ -22,7 +22,8 @@ jobs:
|
|
|
22
22
|
- uses: actions/checkout@v3
|
|
23
23
|
|
|
24
24
|
- name: Release Gem
|
|
25
|
-
uses:
|
|
25
|
+
uses: simplyqio/publish-rubygems-action@2.0.0
|
|
26
26
|
env:
|
|
27
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
27
28
|
RUBYGEMS_API_KEY: ${{ secrets.RUBYGEMS_API_KEY }}
|
|
28
|
-
RELEASE_COMMAND: rake
|
|
29
|
+
RELEASE_COMMAND: "rake build && gem push pkg/*.gem"
|
data/.rubocop_todo.yml
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# This configuration was generated by
|
|
2
2
|
# `rubocop --auto-gen-config`
|
|
3
|
-
# on
|
|
3
|
+
# on 2023-01-26 12:48:02 UTC using RuboCop version 1.44.1.
|
|
4
4
|
# The point is for the user to remove these configuration records
|
|
5
5
|
# one by one as the offenses are removed from the code base.
|
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
|
7
7
|
# versions of RuboCop, may require this file to be generated again.
|
|
8
8
|
|
|
9
|
-
# Offense count:
|
|
9
|
+
# Offense count: 74
|
|
10
10
|
# Configuration parameters: CountAsOne.
|
|
11
11
|
RSpec/ExampleLength:
|
|
12
12
|
Max: 17
|
|
@@ -16,18 +16,19 @@ RSpec/LeakyConstantDeclaration:
|
|
|
16
16
|
Exclude:
|
|
17
17
|
- 'spec/dnsimple/client/client_service_spec.rb'
|
|
18
18
|
|
|
19
|
-
# Offense count:
|
|
19
|
+
# Offense count: 12
|
|
20
20
|
# Configuration parameters: .
|
|
21
21
|
# SupportedStyles: have_received, receive
|
|
22
22
|
RSpec/MessageSpies:
|
|
23
23
|
EnforcedStyle: receive
|
|
24
24
|
|
|
25
|
-
# Offense count:
|
|
25
|
+
# Offense count: 115
|
|
26
26
|
RSpec/MultipleExpectations:
|
|
27
27
|
Max: 15
|
|
28
28
|
|
|
29
|
-
# Offense count:
|
|
30
|
-
# Configuration parameters: IgnoreSharedExamples.
|
|
29
|
+
# Offense count: 372
|
|
30
|
+
# Configuration parameters: EnforcedStyle, IgnoreSharedExamples.
|
|
31
|
+
# SupportedStyles: always, named_only
|
|
31
32
|
RSpec/NamedSubject:
|
|
32
33
|
Enabled: false
|
|
33
34
|
|
|
@@ -47,7 +48,7 @@ RSpec/SubjectStub:
|
|
|
47
48
|
- 'spec/dnsimple/client/zones_spec.rb'
|
|
48
49
|
- 'spec/dnsimple/client_spec.rb'
|
|
49
50
|
|
|
50
|
-
# Offense count:
|
|
51
|
+
# Offense count: 69
|
|
51
52
|
# Configuration parameters: AllowedConstants.
|
|
52
53
|
Style/Documentation:
|
|
53
54
|
Enabled: false
|
data/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,19 @@ This project uses [Semantic Versioning 2.0.0](http://semver.org/).
|
|
|
4
4
|
|
|
5
5
|
## main
|
|
6
6
|
|
|
7
|
+
## 8.3.1
|
|
8
|
+
|
|
9
|
+
- FIXED: Our release process had failed to push correctly `8.2.0` and `8.3.0` to RubyGems resulting in empty gem releases. This releases fixes the issue and contains the same changes of `8.2.0` and `8.3.0`.
|
|
10
|
+
|
|
11
|
+
## 8.3.0
|
|
12
|
+
|
|
13
|
+
- CHANGED: Wrap 400 errors on the OAuth endpoint in `Dnsimple::OAuthInvalidRequestError` (dnsimple/dnsimple-ruby#336)
|
|
14
|
+
|
|
15
|
+
## 8.2.0
|
|
16
|
+
|
|
17
|
+
- NEW: Added getDomainRenewal and getDomainRegistration endpoints (dnsimple/dnsimple-ruby#332)
|
|
18
|
+
- NEW: Documented the new `signature_algorithm` parameter for the Lets Encrypt certificate purchase endpoint (dnsimple/dnsimple-ruby#331)
|
|
19
|
+
|
|
7
20
|
## 8.1.0
|
|
8
21
|
|
|
9
22
|
- CHANGED: Fixed and updated documentation for domain endpoints (dnsimple/dnsimple-ruby#300)
|
data/Gemfile
CHANGED
|
@@ -5,7 +5,7 @@ source 'https://rubygems.org'
|
|
|
5
5
|
gemspec
|
|
6
6
|
|
|
7
7
|
gem 'coveralls', require: false
|
|
8
|
-
gem 'rubocop', '1.
|
|
9
|
-
gem 'rubocop-performance', '1.
|
|
8
|
+
gem 'rubocop', '1.48.0', require: false
|
|
9
|
+
gem 'rubocop-performance', '1.16.0', require: false
|
|
10
10
|
gem 'rubocop-rake', '0.6.0', require: false
|
|
11
|
-
gem 'rubocop-rspec', '2.
|
|
11
|
+
gem 'rubocop-rspec', '2.19.0', require: false
|
|
@@ -124,6 +124,7 @@ module Dnsimple
|
|
|
124
124
|
# @option attributes [String] :name the certificate name (optional)
|
|
125
125
|
# @option attributes [Array<String>] :alternate_names the certificate alternate names (optional)
|
|
126
126
|
# @option attributes [TrueClass,FalseClass] :auto_renew enable certificate auto renew (optional)
|
|
127
|
+
# @option attributes [String] :signature_algorithm the signature algorithm used to sign the certificate (optional)
|
|
127
128
|
# @param options[Hash]
|
|
128
129
|
#
|
|
129
130
|
# @return [Dnsimple::Response<Dnsimple::Struct::CertificatPurchase>]
|
|
@@ -166,6 +167,15 @@ module Dnsimple
|
|
|
166
167
|
# certificate.common_name # => "www.example.com"
|
|
167
168
|
# certificate.alternate_names # => []
|
|
168
169
|
# certificate.auto_renew # => true
|
|
170
|
+
#
|
|
171
|
+
# @example Signature Algorithm
|
|
172
|
+
# response = client.certificates.purchase_letsencrypt_certificate(1010, "example.com", signature_algorithm: "RSA")
|
|
173
|
+
# certificate = response.data
|
|
174
|
+
#
|
|
175
|
+
# certificate.id # => 100
|
|
176
|
+
# certificate.common_name # => "www.example.com"
|
|
177
|
+
# certificate.alternate_names # => []
|
|
178
|
+
# certificate.auto_renew # => false
|
|
169
179
|
def purchase_letsencrypt_certificate(account_id, domain_id, attributes = {}, options = {})
|
|
170
180
|
response = client.post(Client.versioned("/%s/domains/%s/certificates/letsencrypt" % [account_id, domain_id]), attributes, options)
|
|
171
181
|
|
|
@@ -209,6 +219,7 @@ module Dnsimple
|
|
|
209
219
|
# @param certificate_id [Integer] the certificate ID
|
|
210
220
|
# @param attributes [Hash]
|
|
211
221
|
# @option attributes [TrueClass,FalseClass] :auto_renew enable certificate auto renew (optional)
|
|
222
|
+
# @option attributes [String] :signature_algorithm the signature algorithm used to sign the certificate (optional)
|
|
212
223
|
# @param options [Hash]
|
|
213
224
|
#
|
|
214
225
|
# @return [Dnsimple::Response<Dnsimple::Struct::CertificateRenewal>]
|
|
@@ -231,6 +242,14 @@ module Dnsimple
|
|
|
231
242
|
# certificate_renewal.id # => 999
|
|
232
243
|
# certificate_renewal.old_certificate_id # => 200
|
|
233
244
|
# certificate_renewal.new_certificate_id # => 300
|
|
245
|
+
#
|
|
246
|
+
# @example Signature Algorithm
|
|
247
|
+
# response = client.certificates.purchase_letsencrypt_certificate_renewal(1010, "example.com", 200, signature_algorithm: "RSA")
|
|
248
|
+
# certificate_renewal = response.data
|
|
249
|
+
#
|
|
250
|
+
# certificate_renewal.id # => 999
|
|
251
|
+
# certificate_renewal.old_certificate_id # => 200
|
|
252
|
+
# certificate_renewal.new_certificate_id # => 300
|
|
234
253
|
def purchase_letsencrypt_certificate_renewal(account_id, domain_id, certificate_id, attributes = {}, options = {})
|
|
235
254
|
response = client.post(Client.versioned("/%s/domains/%s/certificates/letsencrypt/%s/renewals" % [account_id, domain_id, certificate_id]), attributes, options)
|
|
236
255
|
|
|
@@ -19,6 +19,11 @@ module Dnsimple
|
|
|
19
19
|
attributes[:redirect_uri] = options.delete(:redirect_uri) if options.key?(:redirect_uri)
|
|
20
20
|
response = client.post(Client.versioned("/oauth/access_token"), attributes, options)
|
|
21
21
|
Struct::OauthToken.new(response)
|
|
22
|
+
|
|
23
|
+
rescue Dnsimple::RequestError => exception
|
|
24
|
+
raise exception unless exception.http_response.code == 400
|
|
25
|
+
|
|
26
|
+
raise Dnsimple::OAuthInvalidRequestError, exception.http_response
|
|
22
27
|
end
|
|
23
28
|
|
|
24
29
|
# Gets the URL to authorize an user for an application via the OAuth2 flow.
|
|
@@ -67,6 +67,28 @@ module Dnsimple
|
|
|
67
67
|
Dnsimple::Response.new(response, Struct::DomainRegistration.new(response["data"]))
|
|
68
68
|
end
|
|
69
69
|
|
|
70
|
+
# Retrieves the details of an existing domain registration.
|
|
71
|
+
#
|
|
72
|
+
# @see https://developer.dnsimple.com/v2/registrar/#getDomainRegistration
|
|
73
|
+
#
|
|
74
|
+
# @example Retrieve the registration 42 for example.com:
|
|
75
|
+
# client.registrar.get_domain_registration(1010, "example.com", 42)
|
|
76
|
+
#
|
|
77
|
+
# @param [Integer] account_id the account ID
|
|
78
|
+
# @param [#to_s] domain_name the domain name
|
|
79
|
+
# @param [Integer] domain_registration_id the domain registration ID
|
|
80
|
+
# @param [Hash] options
|
|
81
|
+
# @return [Struct::DomainRegistration]
|
|
82
|
+
#
|
|
83
|
+
# @raise [NotFoundError] When record is not found.
|
|
84
|
+
# @raise [RequestError] When the request fails.
|
|
85
|
+
def get_domain_registration(account_id, domain_name, domain_registration_id, options = {})
|
|
86
|
+
endpoint = Client.versioned("/%s/registrar/domains/%s/registrations/%s" % [account_id, domain_name, domain_registration_id])
|
|
87
|
+
response = client.get(endpoint, options)
|
|
88
|
+
|
|
89
|
+
Dnsimple::Response.new(response, Struct::DomainRegistration.new(response["data"]))
|
|
90
|
+
end
|
|
91
|
+
|
|
70
92
|
# Renews a domain.
|
|
71
93
|
#
|
|
72
94
|
# @see https://developer.dnsimple.com/v2/registrar/#renew
|
|
@@ -88,6 +110,28 @@ module Dnsimple
|
|
|
88
110
|
Dnsimple::Response.new(response, Struct::DomainRenewal.new(response["data"]))
|
|
89
111
|
end
|
|
90
112
|
|
|
113
|
+
# Retrieve the details of an existing domain renewal.
|
|
114
|
+
#
|
|
115
|
+
# @see https://developer.dnsimple.com/v2/registrar/#getDomainRenewal
|
|
116
|
+
#
|
|
117
|
+
# @example Retrieve the renewal 42 for example.com:
|
|
118
|
+
# client.registrar.get_domain_renewal(1010, "example.com", 42)
|
|
119
|
+
#
|
|
120
|
+
# @param [Integer] account_id the account ID
|
|
121
|
+
# @param [#to_s] domain_name the domain name
|
|
122
|
+
# @param [Integer] domain_renewal_id the domain renewal ID
|
|
123
|
+
# @param [Hash] options
|
|
124
|
+
# @return [Struct::DomainRenewal]
|
|
125
|
+
#
|
|
126
|
+
# @raise [NotFoundError] When record is not found.
|
|
127
|
+
# @raise [RequestError] When the request fails.
|
|
128
|
+
def get_domain_renewal(account_id, domain_name, domain_renewal_id, options = {})
|
|
129
|
+
endpoint = Client.versioned("/%s/registrar/domains/%s/renewals/%s" % [account_id, domain_name, domain_renewal_id])
|
|
130
|
+
response = client.get(endpoint, options)
|
|
131
|
+
|
|
132
|
+
Dnsimple::Response.new(response, Struct::DomainRenewal.new(response["data"]))
|
|
133
|
+
end
|
|
134
|
+
|
|
91
135
|
# Starts the transfer of a domain to DNSimple.
|
|
92
136
|
#
|
|
93
137
|
# @see https://developer.dnsimple.com/v2/registrar/#transfer
|
data/lib/dnsimple/error.rb
CHANGED
|
@@ -48,4 +48,21 @@ module Dnsimple
|
|
|
48
48
|
class AuthenticationFailed < AuthenticationError
|
|
49
49
|
end
|
|
50
50
|
|
|
51
|
+
class OAuthInvalidRequestError < Error
|
|
52
|
+
attr_reader :http_response, :error, :error_description
|
|
53
|
+
|
|
54
|
+
def initialize(http_response)
|
|
55
|
+
@http_response = http_response
|
|
56
|
+
@error = http_response.parsed_response["error"]
|
|
57
|
+
@error_description = http_response.parsed_response["error_description"]
|
|
58
|
+
super(message)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
private
|
|
62
|
+
|
|
63
|
+
def message
|
|
64
|
+
"#{error}: #{error_description}"
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
51
68
|
end
|
data/lib/dnsimple/version.rb
CHANGED
|
@@ -46,6 +46,25 @@ describe Dnsimple::Client, ".oauth" do
|
|
|
46
46
|
.with(headers: { 'Accept' => 'application/json' })
|
|
47
47
|
end
|
|
48
48
|
end
|
|
49
|
+
|
|
50
|
+
context "when the request fails with 400" do
|
|
51
|
+
before do
|
|
52
|
+
stub_request(:post, %r{/v2/oauth/access_token$})
|
|
53
|
+
.to_return(read_http_fixture("oauthAccessToken/error-invalid-request.http"))
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it "raises OAuthInvalidRequestError" do
|
|
57
|
+
expect {
|
|
58
|
+
subject.exchange_authorization_for_token(code, client_id, client_secret, state: state)
|
|
59
|
+
}.to raise_error(Dnsimple::OAuthInvalidRequestError) do |e|
|
|
60
|
+
error = "invalid_request"
|
|
61
|
+
error_description = "Invalid \"state\": value doesn't match the \"state\" in the authorization request"
|
|
62
|
+
expect(e.error).to eq(error)
|
|
63
|
+
expect(e.error_description).to eq(error_description)
|
|
64
|
+
expect(e.to_s).to eq("#{error}: #{error_description}")
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
49
68
|
end
|
|
50
69
|
|
|
51
70
|
describe "#authorize_url" do
|
|
@@ -112,6 +112,32 @@ describe Dnsimple::Client, ".registrar" do
|
|
|
112
112
|
end
|
|
113
113
|
end
|
|
114
114
|
|
|
115
|
+
describe "#get_domain_registration" do
|
|
116
|
+
let(:account_id) { 1010 }
|
|
117
|
+
|
|
118
|
+
before do
|
|
119
|
+
stub_request(:get, %r{/v2/#{account_id}/registrar/domains/.+/registrations/.+$})
|
|
120
|
+
.to_return(read_http_fixture("getDomainRegistration/success.http"))
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
it "builds the correct request" do
|
|
124
|
+
subject.get_domain_registration(account_id, domain_name = "example.com", registration_id = 361)
|
|
125
|
+
|
|
126
|
+
expect(WebMock).to have_requested(:get, "https://api.dnsimple.test/v2/#{account_id}/registrar/domains/#{domain_name}/registrations/#{registration_id}")
|
|
127
|
+
.with(headers: { "Accept" => "application/json" })
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
it "returns the domain transfer" do
|
|
131
|
+
response = subject.get_domain_registration(account_id, "example.com", 361)
|
|
132
|
+
expect(response).to be_a(Dnsimple::Response)
|
|
133
|
+
|
|
134
|
+
result = response.data
|
|
135
|
+
expect(result).to be_a(Dnsimple::Struct::DomainRegistration)
|
|
136
|
+
expect(result.id).to be_a(Integer)
|
|
137
|
+
expect(result.domain_id).to be_a(Integer)
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
115
141
|
describe "#renew_domain" do
|
|
116
142
|
let(:account_id) { 1010 }
|
|
117
143
|
let(:attributes) { { period: "3" } }
|
|
@@ -152,6 +178,32 @@ describe Dnsimple::Client, ".registrar" do
|
|
|
152
178
|
end
|
|
153
179
|
end
|
|
154
180
|
|
|
181
|
+
describe "#get_domain_renewal" do
|
|
182
|
+
let(:account_id) { 1010 }
|
|
183
|
+
|
|
184
|
+
before do
|
|
185
|
+
stub_request(:get, %r{/v2/#{account_id}/registrar/domains/.+/renewals/.+$})
|
|
186
|
+
.to_return(read_http_fixture("getDomainRenewal/success.http"))
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
it "builds the correct request" do
|
|
190
|
+
subject.get_domain_renewal(account_id, domain_name = "example.com", renewal_id = 361)
|
|
191
|
+
|
|
192
|
+
expect(WebMock).to have_requested(:get, "https://api.dnsimple.test/v2/#{account_id}/registrar/domains/#{domain_name}/renewals/#{renewal_id}")
|
|
193
|
+
.with(headers: { "Accept" => "application/json" })
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
it "returns the domain renewal" do
|
|
197
|
+
response = subject.get_domain_renewal(account_id, "example.com", 361)
|
|
198
|
+
expect(response).to be_a(Dnsimple::Response)
|
|
199
|
+
|
|
200
|
+
result = response.data
|
|
201
|
+
expect(result).to be_a(Dnsimple::Struct::DomainRenewal)
|
|
202
|
+
expect(result.id).to be_a(Integer)
|
|
203
|
+
expect(result.domain_id).to be_a(Integer)
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
|
|
155
207
|
describe "#transfer_domain" do
|
|
156
208
|
let(:account_id) { 1010 }
|
|
157
209
|
let(:attributes) { { registrant_id: "10", auth_code: "x1y2z3" } }
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
HTTP/1.1 200 OK
|
|
2
|
+
Server: nginx
|
|
3
|
+
Date: Fri, 05 Jun 2020 18:23:53 GMT
|
|
4
|
+
Content-Type: application/json; charset=utf-8
|
|
5
|
+
Connection: keep-alive
|
|
6
|
+
X-RateLimit-Limit: 2400
|
|
7
|
+
X-RateLimit-Remaining: 2392
|
|
8
|
+
X-RateLimit-Reset: 1591384034
|
|
9
|
+
ETag: W/"80c5827934c13b1ca87a587d96e7d1e8"
|
|
10
|
+
Cache-Control: max-age=0, private, must-revalidate
|
|
11
|
+
X-Request-Id: 9f4959ee-06a9-488c-906e-27a570cafbbf
|
|
12
|
+
X-Runtime: 0.078429
|
|
13
|
+
X-Frame-Options: DENY
|
|
14
|
+
X-Content-Type-Options: nosniff
|
|
15
|
+
X-XSS-Protection: 1; mode=block
|
|
16
|
+
X-Download-Options: noopen
|
|
17
|
+
X-Permitted-Cross-Domain-Policies: none
|
|
18
|
+
Strict-Transport-Security: max-age=31536000
|
|
19
|
+
|
|
20
|
+
{"data":{"id":361,"domain_id":104040,"registrant_id":2715,"period":1,"state":"registering","auto_renew":false,"whois_privacy":false,"created_at":"2023-01-27T17:44:32Z","updated_at":"2023-01-27T17:44:40Z"}}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
HTTP/1.1 201 Created
|
|
2
|
+
Server: nginx
|
|
3
|
+
Date: Fri, 09 Dec 2016 19:46:57 GMT
|
|
4
|
+
Content-Type: application/json; charset=utf-8
|
|
5
|
+
Connection: keep-alive
|
|
6
|
+
X-RateLimit-Limit: 2400
|
|
7
|
+
X-RateLimit-Remaining: 2394
|
|
8
|
+
X-RateLimit-Reset: 1481315245
|
|
9
|
+
ETag: W/"179d85ea8a26a3d5dc76e42de2d7918e"
|
|
10
|
+
Cache-Control: max-age=0, private, must-revalidate
|
|
11
|
+
X-Request-Id: ba6f2707-5df0-4ffa-b91b-51d4460bab8e
|
|
12
|
+
X-Runtime: 13.571302
|
|
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":1,"domain_id":999,"period":1,"state":"renewed","created_at":"2016-12-09T19:46:45Z","updated_at":"2016-12-12T19:46:45Z"}}
|
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.1
|
|
4
|
+
version: 8.3.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- DNSimple
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2023-03-10 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: httparty
|
|
@@ -90,6 +90,7 @@ extra_rdoc_files:
|
|
|
90
90
|
files:
|
|
91
91
|
- ".github/CODEOWNERS"
|
|
92
92
|
- ".github/dependabot.yml"
|
|
93
|
+
- ".github/workflows/auto-merge.yml"
|
|
93
94
|
- ".github/workflows/ci.yml"
|
|
94
95
|
- ".github/workflows/release.yml"
|
|
95
96
|
- ".gitignore"
|
|
@@ -276,6 +277,8 @@ files:
|
|
|
276
277
|
- spec/fixtures.http/getDomainPremiumPrice/success.http
|
|
277
278
|
- spec/fixtures.http/getDomainPrices/failure.http
|
|
278
279
|
- spec/fixtures.http/getDomainPrices/success.http
|
|
280
|
+
- spec/fixtures.http/getDomainRegistration/success.http
|
|
281
|
+
- spec/fixtures.http/getDomainRenewal/success.http
|
|
279
282
|
- spec/fixtures.http/getDomainTransfer/success.http
|
|
280
283
|
- spec/fixtures.http/getEmailForward/success.http
|
|
281
284
|
- spec/fixtures.http/getPrimaryServer/success.http
|
|
@@ -375,7 +378,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
375
378
|
- !ruby/object:Gem::Version
|
|
376
379
|
version: '0'
|
|
377
380
|
requirements: []
|
|
378
|
-
rubygems_version: 3.
|
|
381
|
+
rubygems_version: 3.4.6
|
|
379
382
|
signing_key:
|
|
380
383
|
specification_version: 4
|
|
381
384
|
summary: The DNSimple API client for Ruby
|