dnsimple 8.1.0 → 8.3.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 926c26b50cdc2958b19e86a45cd6eb0394f5d884bcc12e45e8fda88b194c8fac
4
- data.tar.gz: 930e5d25b213d496faa3268b3af1a0a1a407e0b632ad9a4a7f16fc8cb2a72256
3
+ metadata.gz: d47bee5f7278d2aab4a2faa9b88121cbec92c510f6bbb807d5d0dd973429e360
4
+ data.tar.gz: abf2e8a9fe7a3613fbb3a80bcf375065f7a804fabd8369b1ec91760d8749e6c3
5
5
  SHA512:
6
- metadata.gz: 94cb5d1a3c141069d239d26a95e097b016b008acca7dcb2c14ff7040ed325a896e0ceaea4139344e22de6fb72360c7709df016de5aba668eab5b9afba17db8fc
7
- data.tar.gz: 0c975b2a65075d1df91923e26d1604600d6fa595634fd3b1ec85aa31fedef28627774340cca6b2d63b09bae96731d4895745a4a040943a835cab4387cb94acb4
6
+ metadata.gz: a2bbab24f39ead5c46bb0657bae0d67c2a98e0a5648d45baf9f4a03d497c2a38bb677ffde8f039b1fe6fc380c731376c948211927ddb94c969027ed89dafb828
7
+ data.tar.gz: f041d09f3b51854c802af60219e2713a3f42544dca0efc2b3cd28f179c8f225d52c4ae46b8aeb6ae18c67a6bdadfee8c3ab84096da1d6f33c850e2ec7636c16b
data/.github/CODEOWNERS CHANGED
@@ -1 +1 @@
1
- * @dnsimple/client-ruby
1
+ * @dnsimple/external-integrations
@@ -4,19 +4,19 @@ updates:
4
4
  - package-ecosystem: bundler
5
5
  directory: /
6
6
  schedule:
7
- interval: daily
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: "daily"
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
@@ -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.1.0
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-latest
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.2
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: cadwallion/publish-rubygems-action@8f9e0538302643309e4e43bf48cd34173ca48cfc # yamllint disable-line
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 release
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 2022-09-01 12:27:48 UTC using RuboCop version 1.36.0.
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: 70
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: 11
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: 111
25
+ # Offense count: 115
26
26
  RSpec/MultipleExpectations:
27
27
  Max: 15
28
28
 
29
- # Offense count: 371
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: 37
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.36.0', require: false
9
- gem 'rubocop-performance', '1.15.0', require: false
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.13.1', require: false
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
@@ -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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Dnsimple
4
- VERSION = "8.1.0"
4
+ VERSION = "8.3.1"
5
5
  end
@@ -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.0
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: 2022-09-19 00:00:00.000000000 Z
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.3.7
381
+ rubygems_version: 3.4.6
379
382
  signing_key:
380
383
  specification_version: 4
381
384
  summary: The DNSimple API client for Ruby