gandi_v5 0.2.0 → 0.3.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/.gitignore +1 -0
- data/.rubocop.yml +1 -1
- data/.travis.yml +9 -0
- data/CHANGELOG.md +15 -0
- data/FUNDING.yml +10 -0
- data/README.md +7 -17
- data/gandi_v5.gemspec +3 -2
- data/lib/gandi_v5.rb +24 -10
- data/lib/gandi_v5/billing.rb +0 -2
- data/lib/gandi_v5/billing/info.rb +0 -2
- data/lib/gandi_v5/data.rb +0 -2
- data/lib/gandi_v5/data/converter.rb +0 -4
- data/lib/gandi_v5/domain.rb +159 -17
- data/lib/gandi_v5/domain/availability.rb +0 -3
- data/lib/gandi_v5/domain/availability/product.rb +0 -3
- data/lib/gandi_v5/domain/live_dns.rb +42 -0
- data/lib/gandi_v5/domain/renewal_information.rb +0 -3
- data/lib/gandi_v5/email.rb +0 -4
- data/lib/gandi_v5/email/forward.rb +108 -0
- data/lib/gandi_v5/email/mailbox.rb +0 -2
- data/lib/gandi_v5/error.rb +0 -2
- data/lib/gandi_v5/live_dns.rb +0 -4
- data/lib/gandi_v5/live_dns/domain.rb +1 -144
- data/lib/gandi_v5/live_dns/has_zone_records.rb +153 -0
- data/lib/gandi_v5/live_dns/zone.rb +1 -146
- data/lib/gandi_v5/organization.rb +28 -5
- data/lib/gandi_v5/version.rb +1 -1
- data/spec/.rubocop.yml +1 -1
- data/spec/features/domain_spec.rb +1 -1
- data/spec/fixtures/bodies/GandiV5_Billing/{info.yaml → info.yml} +0 -0
- data/spec/fixtures/bodies/GandiV5_Domain/{get.yaml → fetch.yml} +0 -0
- data/spec/fixtures/bodies/GandiV5_Domain/{fetch_contacts.yaml → fetch_contacts.yml} +0 -0
- data/spec/fixtures/bodies/GandiV5_Domain/fetch_glue_records.yml +7 -0
- data/spec/fixtures/bodies/GandiV5_Domain/fetch_livedns.yml +6 -0
- data/spec/fixtures/bodies/GandiV5_Domain/fetch_name_servers.yml +2 -0
- data/spec/fixtures/bodies/GandiV5_Domain/{renewal_info.yaml → fetch_renewal_info.yml} +0 -3
- data/spec/fixtures/bodies/GandiV5_Domain/{restore_info.yaml → fetch_restore_info.yml} +0 -0
- data/spec/fixtures/bodies/GandiV5_Domain/{list.yaml → list.yml} +1 -0
- data/spec/fixtures/bodies/GandiV5_Domain_Availability/{fetch.yaml → fetch.yml} +0 -0
- data/spec/fixtures/bodies/GandiV5_Domain_TLD/{fetch.yaml → fetch.yml} +0 -0
- data/spec/fixtures/bodies/GandiV5_Domain_TLD/{list.yaml → list.yml} +0 -0
- data/spec/fixtures/bodies/GandiV5_Email_Forward/list.yml +6 -0
- data/spec/fixtures/bodies/GandiV5_Email_Mailbox/{get.yaml → fetch.yml} +0 -0
- data/spec/fixtures/bodies/GandiV5_Email_Mailbox/{list.yaml → list.yml} +0 -0
- data/spec/fixtures/bodies/GandiV5_Email_Slot/{get.yaml → fetch.yml} +0 -0
- data/spec/fixtures/bodies/GandiV5_Email_Slot/{list.yaml → list.yml} +0 -0
- data/spec/fixtures/bodies/GandiV5_LiveDNS_Domain/{get.yaml → fetch.yml} +0 -0
- data/spec/fixtures/bodies/GandiV5_LiveDNS_Domain/{list.yaml → list.yml} +0 -0
- data/spec/fixtures/bodies/GandiV5_LiveDNS_Zone/{get.yaml → fetch.yml} +0 -0
- data/spec/fixtures/bodies/GandiV5_LiveDNS_Zone/{list.yaml → list.yml} +0 -0
- data/spec/fixtures/bodies/GandiV5_LiveDNS_Zone_Snapshot/{fetch.yaml → fetch.yml} +0 -0
- data/spec/fixtures/bodies/GandiV5_LiveDNS_Zone_Snapshot/{list.yaml → list.yml} +0 -0
- data/spec/fixtures/bodies/GandiV5_Organization/{get.yaml → fetch.yml} +0 -0
- data/spec/fixtures/bodies/GandiV5_Organization/list.yml +7 -0
- data/spec/fixtures/vcr/Domain_features/List_domains.yml +2 -1
- data/spec/spec_helper.rb +2 -2
- data/spec/units/gandi_v5/billing_spec.rb +2 -2
- data/spec/units/gandi_v5/domain/availability_spec.rb +1 -1
- data/spec/units/gandi_v5/domain/live_dns_spec.rb +45 -0
- data/spec/units/gandi_v5/domain/tld_spec.rb +2 -2
- data/spec/units/gandi_v5/domain_spec.rb +241 -22
- data/spec/units/gandi_v5/email/forward_spec.rb +121 -0
- data/spec/units/gandi_v5/email/mailbox_spec.rb +3 -3
- data/spec/units/gandi_v5/email/slot_spec.rb +3 -3
- data/spec/units/gandi_v5/live_dns/domain_spec.rb +3 -3
- data/spec/units/gandi_v5/live_dns/zone/snapshot_spec.rb +2 -2
- data/spec/units/gandi_v5/live_dns/zone_spec.rb +2 -2
- data/spec/units/gandi_v5/organization_spec.rb +38 -1
- metadata +51 -77
- data/doc/GandiV5.html +0 -1183
- data/doc/GandiV5/Billing.html +0 -293
- data/doc/GandiV5/Billing/Info.html +0 -641
- data/doc/GandiV5/Billing/Info/Prepaid.html +0 -817
- data/doc/GandiV5/Data.html +0 -785
- data/doc/GandiV5/Data/ClassMethods.html +0 -223
- data/doc/GandiV5/Data/Converter.html +0 -433
- data/doc/GandiV5/Data/Converter/ArrayOf.html +0 -413
- data/doc/GandiV5/Data/Converter/Symbol.html +0 -322
- data/doc/GandiV5/Data/Converter/Time.html +0 -330
- data/doc/GandiV5/Domain.html +0 -16847
- data/doc/GandiV5/Domain/AutoRenew.html +0 -1237
- data/doc/GandiV5/Domain/Availability.html +0 -1020
- data/doc/GandiV5/Domain/Availability/Product.html +0 -988
- data/doc/GandiV5/Domain/Availability/Product/Period.html +0 -220
- data/doc/GandiV5/Domain/Availability/Product/Price.html +0 -1031
- data/doc/GandiV5/Domain/Availability/Tax.html +0 -440
- data/doc/GandiV5/Domain/Contact.html +0 -4459
- data/doc/GandiV5/Domain/Contract.html +0 -520
- data/doc/GandiV5/Domain/Dates.html +0 -1313
- data/doc/GandiV5/Domain/RenewalInformation.html +0 -1147
- data/doc/GandiV5/Domain/RestoreInformation.html +0 -339
- data/doc/GandiV5/Domain/SharingSpace.html +0 -437
- data/doc/GandiV5/Domain/TLD.html +0 -1565
- data/doc/GandiV5/Email.html +0 -144
- data/doc/GandiV5/Email/Mailbox.html +0 -6307
- data/doc/GandiV5/Email/Mailbox/Responder.html +0 -1560
- data/doc/GandiV5/Email/Offer.html +0 -514
- data/doc/GandiV5/Email/Slot.html +0 -4244
- data/doc/GandiV5/Error.html +0 -151
- data/doc/GandiV5/Error/GandiError.html +0 -270
- data/doc/GandiV5/LiveDNS.html +0 -300
- data/doc/GandiV5/LiveDNS/Domain.html +0 -2984
- data/doc/GandiV5/LiveDNS/RecordSet.html +0 -1593
- data/doc/GandiV5/LiveDNS/Zone.html +0 -8891
- data/doc/GandiV5/LiveDNS/Zone/Snapshot.html +0 -1556
- data/doc/GandiV5/Organization.html +0 -2341
- data/doc/_index.html +0 -474
- data/doc/class_list.html +0 -51
- data/doc/css/common.css +0 -1
- data/doc/css/full_list.css +0 -58
- data/doc/css/style.css +0 -496
- data/doc/file.README.html +0 -175
- data/doc/file_list.html +0 -56
- data/doc/frames.html +0 -17
- data/doc/index.html +0 -175
- data/doc/js/app.js +0 -303
- data/doc/js/full_list.js +0 -216
- data/doc/js/jquery.js +0 -4
- data/doc/method_list.html +0 -2427
- data/doc/top-level-namespace.html +0 -110
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ef84fa55ae8d79f2d6fa178db059e4130ff8ae9ba2eb5f5886a57b9f965d8b48
|
4
|
+
data.tar.gz: b5bc9448754bf08ab28c1e3235d01929a6edf3b82f00dbdf935b58d863035de1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 90083b929123d60702880dc1fbaa7500c972f38ce1134dbb031d1e5585cad63fbe7265ee38075e5329e2e125f4b441ef0bc02da79137444df4ea27c999c1fa26
|
7
|
+
data.tar.gz: 536d1dae15301728cfda7df6c556913e75025d90f801c5748da598716b887bd0e8c4d25c2f0226ea25d9bab02fa9a3f185d64a5cf9a31694cb21a1ea5f8ac264
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
data/.travis.yml
CHANGED
@@ -4,6 +4,7 @@ rvm:
|
|
4
4
|
- 2.6.1
|
5
5
|
- 2.6.2
|
6
6
|
- 2.6.3
|
7
|
+
- 2.6.4
|
7
8
|
gemfile:
|
8
9
|
- Gemfile
|
9
10
|
branches:
|
@@ -12,10 +13,18 @@ branches:
|
|
12
13
|
- staging
|
13
14
|
- /gh(?:\d)+(?:-.+)?/
|
14
15
|
- /dev_ver_\d+\.\d+/
|
16
|
+
env:
|
17
|
+
global:
|
18
|
+
# CC_TEST_REPORTER_ID for reporting test coverage to code climate
|
19
|
+
- secure: "C3AcK+/2A4h2+ZayJXc89EQp76o8/2RL03PdtVjWPI6cfBSwN174ImWSdIcs6+Bjv8GH+bADsM4epkTjI7H24wh80If/4jAZJMB6LsAxVC3rZVx2UfDghp1Lwcy6BkNx4VVXMQJUR4rA8fXNd1l6n2a72RbPhTaGYxggw+yiKYNjj5m/u3HWPzTQ9wIx/rLzb2shQU1P9tDX4eRqJixYsd8LvStvXewUKlTQSaxNczzfcSOmeJrrytJGuPQxgBx67hlN40cs84oEbhndjlekZRwYepsRcan9umJEDHnE+k0wLlz/vb2cshYp5tdcfkqspaEhUSV7Vr7ZQNIppI3XyY1hs/pTYc2Vytp3OiY0EXBjKRmiHcnmA8EIkrV9i4OSt6Af3EQJaYU56a0BCaEqzRoQJWOZDS8bVowuO4rY8/xINQBwTojIYAplI/vqX/7xvlRbzIgeWdpvQipPC01d2JtmI/5D1FdGWtzYcDCTRTbHyWmjhr7Jt8qEDMFkbpkcAQiS61baEQ0p4CxaLYm/lpPco1U3e/gMOb/EXDhOrF1I8lSBmVJE/Uz2/3kfOa1DQSxDSRmV1nU3pSd7PUi25Pdx0rezJjRl1UC2gnsNZrCLbplk+VkImXTt3iirV/RuHDo+YVT0efaws7TVH7Uf87jqWf4VZEw/KI3tzfF43CE="
|
15
20
|
before_install: gem update bundler
|
21
|
+
before_script:
|
22
|
+
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter && chmod +x ./cc-test-reporter && ./cc-test-reporter before-build
|
16
23
|
script:
|
17
24
|
- bundle exec rubocop
|
18
25
|
- bundle exec rspec
|
26
|
+
after_script:
|
27
|
+
- ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
|
19
28
|
notifications:
|
20
29
|
slack:
|
21
30
|
on_success: always
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,20 @@
|
|
1
1
|
# Gandi V5 API Gem Changelog
|
2
2
|
|
3
|
+
## Version 0.3.0
|
4
|
+
|
5
|
+
* Additions to GandiV5::Domain
|
6
|
+
* Glue record management
|
7
|
+
* LiveDNS management
|
8
|
+
* Name server management
|
9
|
+
* Update GandiV5::Domain.create to allow purchasing as a reseller and billing to a different organization
|
10
|
+
* Add forwarding address management to GandiV5::Email::Forwarding
|
11
|
+
* Add GandiV5::Organization.list
|
12
|
+
* Uses Zeitwerk for auto loading
|
13
|
+
* Add aliasing methods:
|
14
|
+
* GandiV5::Domain.mailboxes -> GandiV5::Email::Mailbox.list
|
15
|
+
* GandiV5::Domain.mailbox_slots -> GandiV5::Email::Slot.list
|
16
|
+
* GandiV5::Domain.email_forwards -> GandiV5::Email::Forward.list
|
17
|
+
|
3
18
|
## Version 0.2.0
|
4
19
|
|
5
20
|
* Enhancements to GandiV5::Domain
|
data/FUNDING.yml
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
|
2
|
+
patreon: robertgauld
|
3
|
+
open_collective: # Replace with a single Open Collective username
|
4
|
+
ko_fi: # Replace with a single Ko-fi username
|
5
|
+
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
6
|
+
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
7
|
+
liberapay: # Replace with a single Liberapay username
|
8
|
+
issuehunt: # Replace with a single IssueHunt username
|
9
|
+
otechie: # Replace with a single Otechie username
|
10
|
+
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
|
data/README.md
CHANGED
@@ -1,29 +1,17 @@
|
|
1
1
|
[](http://badge.fury.io/rb/gandi_v5)
|
2
|
-
|
3
|
-
Master branch:
|
4
2
|
[](http://travis-ci.org/robertgauld/gandi_v5)
|
5
3
|
[](https://coveralls.io/r/robertgauld/gandi_v5)
|
6
4
|
[](https://codeclimate.com/github/robertgauld/gandi_v5)
|
7
|
-
|
8
|
-
Staging branch:
|
9
|
-
[](http://travis-ci.org/robertgauld/gandi_v5)
|
10
|
-
[](https://coveralls.io/r/robertgauld/gandi_v5)
|
11
|
-
|
12
|
-
|
13
|
-
## Build State
|
14
|
-
This project uses continuous integration to help ensure that a quality product is delivered.
|
15
|
-
Travis CI monitors two branches (versions) of the code:
|
16
|
-
|
17
|
-
* Master (which is what gets released)
|
18
|
-
* Staging (which is what is currently being developed ready for moving to master).
|
19
|
-
|
5
|
+
[](https://hakiri.io/github/robertgauld/gandi_v5/master)
|
20
6
|
|
21
7
|
## Ruby Versions
|
22
8
|
This gem supports the following versions of ruby, it may work on other versions but is not tested against them so don't rely on it.
|
23
9
|
|
24
10
|
* ruby:
|
25
|
-
* 2.6.0 - 2.6.
|
11
|
+
* 2.6.0 - 2.6.4
|
26
12
|
* jruby, once it's reached parity with ruby 2.6.x
|
13
|
+
* truffleruby, once it's reached parity with ruby 2.6.x
|
14
|
+
* rubinius, once it's reached parity with ruby 2.6.x
|
27
15
|
|
28
16
|
|
29
17
|
## Gandi V5
|
@@ -86,8 +74,10 @@ TODO: More examples!
|
|
86
74
|
|
87
75
|
We follow the [Semantic Versioning](http://semver.org/) concept.
|
88
76
|
|
89
|
-
| Gem Version | Gandi API Release Date |
|
77
|
+
| Gem Version | Gandi API Release Date |
|
90
78
|
| --------------- | ---------------------- |
|
79
|
+
| 0.3.0 | 2019-08-22 |
|
80
|
+
| 0.2.0 | 2019-05-16 |
|
91
81
|
| 0.1.0 | 2019-05-16 |
|
92
82
|
|
93
83
|
See <https://api.gandi.net/docs/reference#API-Changelog> to find out what
|
data/gandi_v5.gemspec
CHANGED
@@ -22,8 +22,9 @@ Gem::Specification.new do |gem|
|
|
22
22
|
|
23
23
|
gem.add_dependency 'dotenv', '~> 2.5'
|
24
24
|
gem.add_dependency 'rest-client', '>= 2', '< 3'
|
25
|
+
gem.add_dependency 'zeitwerk', '~> 2.1'
|
25
26
|
|
26
|
-
gem.add_development_dependency 'coveralls', '~> 0.
|
27
|
+
gem.add_development_dependency 'coveralls', '~> 0.8'
|
27
28
|
gem.add_development_dependency 'guard', '~> 2.15'
|
28
29
|
gem.add_development_dependency 'guard-bundler', '~> 2.2'
|
29
30
|
gem.add_development_dependency 'guard-rspec', '~> 4.2', '>= 4.2.5'
|
@@ -37,5 +38,5 @@ Gem::Specification.new do |gem|
|
|
37
38
|
gem.add_development_dependency 'simplecov', '~> 0.7'
|
38
39
|
gem.add_development_dependency 'timecop', '~> 0.5'
|
39
40
|
gem.add_development_dependency 'vcr', '~> 4.0'
|
40
|
-
gem.add_development_dependency 'webmock', '~> 3.
|
41
|
+
gem.add_development_dependency 'webmock', '~> 3.6'
|
41
42
|
end
|
data/lib/gandi_v5.rb
CHANGED
@@ -1,17 +1,31 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative 'gandi_v5/version'
|
4
|
-
require_relative 'gandi_v5/data'
|
5
|
-
require_relative 'gandi_v5/error'
|
6
|
-
|
7
|
-
require_relative 'gandi_v5/billing'
|
8
|
-
require_relative 'gandi_v5/domain'
|
9
|
-
require_relative 'gandi_v5/email'
|
10
|
-
require_relative 'gandi_v5/live_dns'
|
11
|
-
require_relative 'gandi_v5/organization'
|
12
|
-
|
13
3
|
require 'rest_client'
|
14
4
|
require 'securerandom'
|
5
|
+
require 'zeitwerk'
|
6
|
+
|
7
|
+
# Custom inflector for Zeitwerk.
|
8
|
+
class MyInflector < Zeitwerk::Inflector
|
9
|
+
# Convert file's base name to class name when
|
10
|
+
# Zeitwerk's included inflector gets it wrong.
|
11
|
+
# @param basename [String] the file's base name (no path or extension)
|
12
|
+
# @param abspath [String] the file's absolute path
|
13
|
+
# @return [String] the class name
|
14
|
+
def camelize(basename, _abspath)
|
15
|
+
case basename
|
16
|
+
when 'live_dns'
|
17
|
+
'LiveDNS'
|
18
|
+
when 'tld'
|
19
|
+
'TLD'
|
20
|
+
else
|
21
|
+
super
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
loader = Zeitwerk::Loader.for_gem
|
27
|
+
loader.inflector = MyInflector.new
|
28
|
+
loader.setup
|
15
29
|
|
16
30
|
# Namespace for classes which access the Gandi V5 API.
|
17
31
|
# Also provides useful methods and constants for them.
|
data/lib/gandi_v5/billing.rb
CHANGED
data/lib/gandi_v5/data.rb
CHANGED
data/lib/gandi_v5/domain.rb
CHANGED
@@ -1,15 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative 'domain/auto_renew'
|
4
|
-
require_relative 'domain/availability'
|
5
|
-
require_relative 'domain/contact'
|
6
|
-
require_relative 'domain/contract'
|
7
|
-
require_relative 'domain/dates'
|
8
|
-
require_relative 'domain/renewal_information'
|
9
|
-
require_relative 'domain/restore_information'
|
10
|
-
require_relative 'domain/sharing_space'
|
11
|
-
require_relative 'domain/tld'
|
12
|
-
|
13
3
|
class GandiV5
|
14
4
|
# Gandi Domain Management API.
|
15
5
|
# @see https://api.gandi.net/docs/domains
|
@@ -280,10 +270,163 @@ class GandiV5
|
|
280
270
|
.prices.first
|
281
271
|
end
|
282
272
|
|
273
|
+
# LiveDNS information for the domain.
|
274
|
+
# @see https://api.gandi.net/docs/domains#get-v5-domain-domains-domain-livedns
|
275
|
+
# @return [GandiV5::Domain::LiveDNS]
|
276
|
+
# @raise [GandiV5::Error::GandiError] if Gandi returns an error.
|
277
|
+
def livedns
|
278
|
+
@livedns ||= fetch_livedns
|
279
|
+
end
|
280
|
+
|
281
|
+
# Requery Gandi for the domain's LiveDNS information.
|
282
|
+
# @see https://api.gandi.net/docs/domains#get-v5-domain-domains-domain-livedns
|
283
|
+
# @return [GandiV5::Domain::LiveDNS]
|
284
|
+
# @raise [GandiV5::Error::GandiError] if Gandi returns an error.
|
285
|
+
def fetch_livedns
|
286
|
+
_response, data = GandiV5.get url('livedns')
|
287
|
+
@livedns = GandiV5::Domain::LiveDNS.from_gandi data
|
288
|
+
@name_server = @livedns.current
|
289
|
+
@name_servers = @livedns.name_servers
|
290
|
+
@livedns
|
291
|
+
end
|
292
|
+
|
293
|
+
# Enable LiveDNS for the domain.
|
294
|
+
# If you want to disable LiveDNS, change the nameservers.
|
295
|
+
# Please note that if the domain is on the classic Gandi DNS,
|
296
|
+
# this will also perform a copy of all existing records immediately afterwards.
|
297
|
+
# @see https://api.gandi.net/docs/domains#post-v5-domain-domains-domain-livedns
|
298
|
+
# @return [String] confirmation message from Gandi.
|
299
|
+
# @raise [GandiV5::Error::GandiError] if Gandi returns an error.
|
300
|
+
def enable_livedns
|
301
|
+
_response, data = GandiV5.post url('livedns')
|
302
|
+
data['message']
|
303
|
+
end
|
304
|
+
|
305
|
+
# Name servers for the domain.
|
306
|
+
# @see https://api.gandi.net/docs/domains#get-v5-domain-domains-domain-nameservers
|
307
|
+
# @return [Array<String>]
|
308
|
+
# @raise [GandiV5::Error::GandiError] if Gandi returns an error.
|
309
|
+
def name_servers
|
310
|
+
@name_servers ||= fetch_name_servers
|
311
|
+
end
|
312
|
+
|
313
|
+
# Requery Gandi for the domain's name servers.
|
314
|
+
# @see https://api.gandi.net/docs/domains#get-v5-domain-domains-domain-nameservers
|
315
|
+
# @return [Array<String>]
|
316
|
+
# @raise [GandiV5::Error::GandiError] if Gandi returns an error.
|
317
|
+
def fetch_name_servers
|
318
|
+
_response, data = GandiV5.get url('nameservers')
|
319
|
+
@name_servers = data
|
320
|
+
end
|
321
|
+
|
322
|
+
# Update name servers in Gandi.
|
323
|
+
# @see https://api.gandi.net/docs/domains#put-v5-domain-domains-domain-nameservers
|
324
|
+
# @param nameservers [Array<String>] the name servers to use.
|
325
|
+
# @return [String] confirmation message from Gandi.
|
326
|
+
# @raise [GandiV5::Error::GandiError] if Gandi returns an error.
|
327
|
+
def update_name_servers(nameservers)
|
328
|
+
_response, data = GandiV5.put url('nameservers'), { 'nameservers' => nameservers }.to_json
|
329
|
+
@name_servers = nameservers
|
330
|
+
data['message']
|
331
|
+
end
|
332
|
+
|
333
|
+
# Glue records for the domain.
|
334
|
+
# @see https://api.gandi.net/docs/domains#get-v5-domain-domains-domain-hosts
|
335
|
+
# @return [Hash<String => Array<String>>] name to list of IPs
|
336
|
+
# @raise [GandiV5::Error::GandiError] if Gandi returns an error.
|
337
|
+
def glue_records
|
338
|
+
@glue_records ||= fetch_glue_records
|
339
|
+
end
|
340
|
+
|
341
|
+
# Requery Gandi for the domain's glue records.
|
342
|
+
# @see https://api.gandi.net/docs/domains#get-v5-domain-domains-domain-hosts
|
343
|
+
# @return [Hash<String => Array<String>>] name to list of IPs
|
344
|
+
# @raise [GandiV5::Error::GandiError] if Gandi returns an error.
|
345
|
+
def fetch_glue_records
|
346
|
+
_response, data = GandiV5.get url('hosts')
|
347
|
+
@glue_records = data.map { |record| record.values_at('name', 'ips') }.to_h
|
348
|
+
end
|
349
|
+
|
350
|
+
# Add a new glue record to the domain in Gandi.
|
351
|
+
# @see https://api.gandi.net/docs/domains#post-v5-domain-domains-domain-hosts
|
352
|
+
# @param name [String] the DNS name (excluding FQDN) for the glue record to add (e.g. 'ns1').
|
353
|
+
# @param ips [Array<String>] the IPs for the name.
|
354
|
+
# @return [String] confirmation message from Gandi.
|
355
|
+
# @raise [GandiV5::Error::GandiError] if Gandi returns an error.
|
356
|
+
def add_glue_record(name, *ips)
|
357
|
+
_response, data = GandiV5.post url('hosts'), { 'name' => name, 'ips' => ips }.to_json
|
358
|
+
@glue_records ||= {}
|
359
|
+
@glue_records[name] = ips
|
360
|
+
data['message']
|
361
|
+
end
|
362
|
+
|
363
|
+
# Get a specific glue record for the domain.
|
364
|
+
# @see https://api.gandi.net/docs/domains#get-v5-domain-domains-domain-hosts
|
365
|
+
# @param name [String] the DNS name (excluding FQDN) for the glue record to add (e.g. 'ns1').
|
366
|
+
# @return [Hash<String => Array<String>>] name to list of IPs
|
367
|
+
# @return [nil] name was not found
|
368
|
+
# @raise [GandiV5::Error::GandiError] if Gandi returns an error.
|
369
|
+
def glue_record(name)
|
370
|
+
records = @glue_records.key?(name) ? @glue_records : fetch_glue_records
|
371
|
+
records.key?(name) ? records.select { |k, _v| k == name } : nil
|
372
|
+
end
|
373
|
+
|
374
|
+
# Update a specific glue record for the domain.
|
375
|
+
# @see https://api.gandi.net/docs/domains#put-v5-domain-domains-domain-hosts-name
|
376
|
+
# @param name [String] the DNS name (excluding FQDN) for the glue record to update (e.g. 'ns1').
|
377
|
+
# @param ips [Array<String>] the IPs for the name.
|
378
|
+
# @return [String] confirmation message from Gandi.
|
379
|
+
# @raise [GandiV5::Error::GandiError] if Gandi returns an error.
|
380
|
+
def update_glue_record(name, *ips)
|
381
|
+
_response, data = GandiV5.put url('hosts', name), { 'ips' => ips }.to_json
|
382
|
+
@glue_records ||= {}
|
383
|
+
@glue_records[name] = ips
|
384
|
+
data['message']
|
385
|
+
end
|
386
|
+
|
387
|
+
# Delete a specific glue record for the domain.
|
388
|
+
# @see https://api.gandi.net/docs/domains#delete-v5-domain-domains-domain-hosts-name
|
389
|
+
# @param name [String] the DNS name (excluding FQDN) for the glue record to update (e.g. 'ns1').
|
390
|
+
# @return [String] confirmation message from Gandi.
|
391
|
+
# @raise [GandiV5::Error::GandiError] if Gandi returns an error.
|
392
|
+
def delete_glue_record(name)
|
393
|
+
_response, data = GandiV5.delete url('hosts', name)
|
394
|
+
@glue_records ||= {}
|
395
|
+
@glue_records.delete(name)
|
396
|
+
data['message']
|
397
|
+
end
|
398
|
+
|
399
|
+
# @see GandiV5::Email::Mailbox.list
|
400
|
+
def mailboxes(**params)
|
401
|
+
GandiV5::Email::Mailbox.list(**params, fqdn: fqdn)
|
402
|
+
end
|
403
|
+
|
404
|
+
# @see GandiV5::Email::Slot.list
|
405
|
+
def mailbox_slots(**params)
|
406
|
+
GandiV5::Email::Slot.list(**params, fqdn: fqdn)
|
407
|
+
end
|
408
|
+
|
409
|
+
# @see GandiV5::Email::Forward.list
|
410
|
+
def email_forwards(**params)
|
411
|
+
GandiV5::Email::Forward.list(**params, fqdn: fqdn)
|
412
|
+
end
|
413
|
+
|
283
414
|
# Create (register) a new domain.
|
284
415
|
# Warning! This is not a free operation. Please ensure your prepaid account has enough credit.
|
285
416
|
# @see https://api.gandi.net/docs/domains#post-v5-domain-domains
|
286
417
|
# @param fqdn [String, #to_s] the fully qualified domain name to create.
|
418
|
+
# @param dry_run [Boolean]
|
419
|
+
# whether the details should be checked instead of actually creating the domain.
|
420
|
+
# @param sharing_id [String] either:
|
421
|
+
# * nil (default) - nothing special happens
|
422
|
+
# * an organization ID - pay using another organization
|
423
|
+
# (you need to have billing permissions on the organization
|
424
|
+
# and use the same organization name for the domain name's owner).
|
425
|
+
# The invoice will be edited using this organization's information.
|
426
|
+
# * a reseller ID - buy a domain for a customer using a reseller account
|
427
|
+
# (you need to have billing permissions on the reseller organization
|
428
|
+
# and have your customer's information for the owner).
|
429
|
+
# The invoice will be edited using the reseller organization's information.
|
287
430
|
# @param owner [GandiV5::Domain::Contact, #to_gandi, #to_h] (required)
|
288
431
|
# the owner of the new domain.
|
289
432
|
# @param admin [GandiV5::Domain::Contact, #to_gandi, #to_h] (optional, defaults to owner)
|
@@ -308,25 +451,24 @@ class GandiV5
|
|
308
451
|
# @param nameservers [Array<String>, #to_gandi, #to_json] (optional)
|
309
452
|
# List of nameservers. Gandi's LiveDNS nameservers are used if omitted..
|
310
453
|
# @param price [Numeric, #to_gandi, #to_json] (optional) unknown - not documented at Gandi.
|
311
|
-
# @param
|
454
|
+
# @param resellee_id [String, #to_gandi, #to_json] (optional) unknown - not documented at Gandi.
|
312
455
|
# @param smd [String, #to_gandi, #to_json] (optional)
|
313
456
|
# Contents of a Signed Mark Data file (used for newgtld sunrises, tld_period must be sunrise).
|
314
457
|
# @param tld_period ["sunrise", "landrush", "eap1", "eap2", "eap3", "eap4", "eap5", "eap6",
|
315
458
|
# "eap7", "eap8", "eap9", "golive", #to_gandi, #to_json] (optional)
|
316
459
|
# @see https://docs.gandi.net/en/domain_names/register/new_gtld.html
|
317
|
-
# @param dry_run [Boolean] whether the details should be checked
|
318
|
-
# instead of actually creating the domain
|
319
460
|
# @return [GandiV5::Domain] the created domain
|
320
461
|
# @return [Hash] if doing a dry run, you get what Gandi returns
|
321
462
|
# @raise [GandiV5::Error::GandiError] if Gandi returns an error
|
322
|
-
def self.create(fqdn, dry_run: false, **params)
|
463
|
+
def self.create(fqdn, dry_run: false, sharing_id: nil, **params)
|
323
464
|
fail ArgumentError, 'missing keyword: owner' unless params.key?(:owner)
|
324
465
|
|
325
466
|
body = params.merge(fqdn: fqdn)
|
326
467
|
.transform_values { |val| val.respond_to?(:to_gandi) ? val.to_gandi : val }
|
327
468
|
.to_json
|
469
|
+
url_ = sharing_id ? "#{url}?sharing_id=#{sharing_id}" : url
|
328
470
|
|
329
|
-
response, data = GandiV5.post(
|
471
|
+
response, data = GandiV5.post(url_, body, 'Dry-Run': dry_run ? 1 : 0)
|
330
472
|
dry_run ? data : fetch(response.headers[:location].split('/').last)
|
331
473
|
end
|
332
474
|
|
@@ -371,10 +513,10 @@ class GandiV5
|
|
371
513
|
|
372
514
|
private
|
373
515
|
|
374
|
-
def url(extra
|
516
|
+
def url(*extra)
|
375
517
|
"#{BASE}domain/domains/" +
|
376
518
|
CGI.escape(fqdn) +
|
377
|
-
(extra ? "/#{extra
|
519
|
+
(extra.empty? ? '' : "/#{extra.join('/')}")
|
378
520
|
end
|
379
521
|
|
380
522
|
def self.url(fqdn = nil)
|