gandi_v5 0.3.0 → 0.8.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.
Files changed (95) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +56 -2
  4. data/.travis.yml +6 -1
  5. data/CHANGELOG.md +61 -0
  6. data/LICENSE.md +2 -6
  7. data/README.md +15 -9
  8. data/gandi_v5.gemspec +2 -2
  9. data/lib/gandi_v5.rb +40 -14
  10. data/lib/gandi_v5/data.rb +1 -2
  11. data/lib/gandi_v5/data/converter/integer.rb +26 -0
  12. data/lib/gandi_v5/domain.rb +13 -14
  13. data/lib/gandi_v5/email/forward.rb +2 -8
  14. data/lib/gandi_v5/email/mailbox.rb +57 -11
  15. data/lib/gandi_v5/email/slot.rb +11 -3
  16. data/lib/gandi_v5/live_dns.rb +0 -12
  17. data/lib/gandi_v5/live_dns/domain.rb +313 -29
  18. data/lib/gandi_v5/live_dns/domain/dnssec_key.rb +115 -0
  19. data/lib/gandi_v5/live_dns/domain/record.rb +81 -0
  20. data/lib/gandi_v5/live_dns/domain/snapshot.rb +107 -0
  21. data/lib/gandi_v5/live_dns/domain/tsig_key.rb +71 -0
  22. data/lib/gandi_v5/organization.rb +10 -0
  23. data/lib/gandi_v5/organization/customer.rb +90 -0
  24. data/lib/gandi_v5/sharing_space.rb +27 -0
  25. data/lib/gandi_v5/simple_hosting.rb +12 -0
  26. data/lib/gandi_v5/simple_hosting/instance.rb +242 -0
  27. data/lib/gandi_v5/simple_hosting/instance/application.rb +44 -0
  28. data/lib/gandi_v5/simple_hosting/instance/database.rb +19 -0
  29. data/lib/gandi_v5/simple_hosting/instance/language.rb +22 -0
  30. data/lib/gandi_v5/simple_hosting/instance/upgrade.rb +21 -0
  31. data/lib/gandi_v5/simple_hosting/instance/virtual_host.rb +187 -0
  32. data/lib/gandi_v5/simple_hosting/instance/virtual_host/linked_dns_zone.rb +74 -0
  33. data/lib/gandi_v5/version.rb +1 -1
  34. data/spec/.rubocop.yml +56 -2
  35. data/spec/fixtures/bodies/GandiV5_Domain/fetch.yml +8 -0
  36. data/spec/fixtures/bodies/GandiV5_LiveDNS_Domain/fetch.yml +1 -2
  37. data/spec/fixtures/bodies/GandiV5_LiveDNS_Domain/list_tsig.yml +3 -0
  38. data/spec/fixtures/bodies/GandiV5_LiveDNS_Domain/nameservers.yml +3 -0
  39. data/spec/fixtures/bodies/GandiV5_LiveDNS_Domain_DnssecKey/fetch.yml +12 -0
  40. data/spec/fixtures/bodies/GandiV5_LiveDNS_Domain_DnssecKey/list.yml +9 -0
  41. data/spec/fixtures/bodies/{GandiV5_LiveDNS_Zone_Snapshot → GandiV5_LiveDNS_Domain_Snapshot}/fetch.yml +4 -3
  42. data/spec/fixtures/bodies/GandiV5_LiveDNS_Domain_Snapshot/list.yml +5 -0
  43. data/spec/fixtures/bodies/GandiV5_LiveDNS_Domain_TsigKey/fetch.yml +9 -0
  44. data/spec/fixtures/bodies/GandiV5_LiveDNS_Domain_TsigKey/list.yml +4 -0
  45. data/spec/fixtures/bodies/GandiV5_Organization_Customer/list.yml +8 -0
  46. data/spec/fixtures/bodies/GandiV5_SimpleHosting_Instance/fetch.yml +80 -0
  47. data/spec/fixtures/bodies/GandiV5_SimpleHosting_Instance/list.yml +38 -0
  48. data/spec/fixtures/bodies/GandiV5_SimpleHosting_Instance_VirtualHost/fetch.yml +26 -0
  49. data/spec/fixtures/bodies/GandiV5_SimpleHosting_Instance_VirtualHost/list.yml +18 -0
  50. data/spec/units/gandi_v5/data/converter/integer_spec.rb +16 -0
  51. data/spec/units/gandi_v5/domain_spec.rb +53 -43
  52. data/spec/units/gandi_v5/email/forward_spec.rb +5 -34
  53. data/spec/units/gandi_v5/email/mailbox_spec.rb +119 -37
  54. data/spec/units/gandi_v5/email/slot_spec.rb +10 -2
  55. data/spec/units/gandi_v5/live_dns/domain/dnssec_key_spec.rb +128 -0
  56. data/spec/units/gandi_v5/live_dns/{record_set_spec.rb → domain/record_spec.rb} +1 -1
  57. data/spec/units/gandi_v5/live_dns/domain/snapshot_spec.rb +101 -0
  58. data/spec/units/gandi_v5/live_dns/domain/tsig_key_spec.rb +78 -0
  59. data/spec/units/gandi_v5/live_dns/domain_spec.rb +297 -118
  60. data/spec/units/gandi_v5/live_dns_spec.rb +0 -12
  61. data/spec/units/gandi_v5/organization/customer_spec.rb +81 -0
  62. data/spec/units/gandi_v5/organization_spec.rb +14 -0
  63. data/spec/units/gandi_v5/sharing_space_spec.rb +4 -0
  64. data/spec/units/gandi_v5/simple_hosting/instance/application_spec.rb +37 -0
  65. data/spec/units/gandi_v5/simple_hosting/instance/database_spec.rb +4 -0
  66. data/spec/units/gandi_v5/simple_hosting/instance/language_spec.rb +4 -0
  67. data/spec/units/gandi_v5/simple_hosting/instance/upgrade_spec.rb +4 -0
  68. data/spec/units/gandi_v5/simple_hosting/instance/virtual_host/linked_dns_zone_spec.rb +50 -0
  69. data/spec/units/gandi_v5/simple_hosting/instance/virtual_host_spec.rb +199 -0
  70. data/spec/units/gandi_v5/simple_hosting/instance_spec.rb +182 -0
  71. data/spec/units/gandi_v5/simple_hosting_spec.rb +9 -0
  72. data/spec/units/gandi_v5_spec.rb +139 -30
  73. metadata +50 -31
  74. data/lib/gandi_v5/domain/sharing_space.rb +0 -21
  75. data/lib/gandi_v5/live_dns/has_zone_records.rb +0 -153
  76. data/lib/gandi_v5/live_dns/record_set.rb +0 -79
  77. data/lib/gandi_v5/live_dns/zone.rb +0 -160
  78. data/lib/gandi_v5/live_dns/zone/snapshot.rb +0 -81
  79. data/spec/features/domain_spec.rb +0 -45
  80. data/spec/features/livedns_domain_spec.rb +0 -8
  81. data/spec/features/livedns_zone_spec.rb +0 -45
  82. data/spec/features/mailbox_spec.rb +0 -18
  83. data/spec/fixtures/bodies/GandiV5_LiveDNS_Zone/fetch.yml +0 -11
  84. data/spec/fixtures/bodies/GandiV5_LiveDNS_Zone/list.yml +0 -11
  85. data/spec/fixtures/bodies/GandiV5_LiveDNS_Zone_Snapshot/list.yml +0 -3
  86. data/spec/fixtures/vcr/Domain_features/List_domains.yml +0 -55
  87. data/spec/fixtures/vcr/Domain_features/Renew_domain.yml +0 -133
  88. data/spec/fixtures/vcr/LiveDNS_Domain_features/List_domains.yml +0 -32
  89. data/spec/fixtures/vcr/LiveDNS_Zone_features/List_zones.yml +0 -42
  90. data/spec/fixtures/vcr/LiveDNS_Zone_features/Make_and_save_snapshot.yml +0 -72
  91. data/spec/fixtures/vcr/LiveDNS_Zone_features/Save_zone_to_file.yml +0 -28
  92. data/spec/fixtures/vcr/Mailbox_features/List_mailboxes.yml +0 -39
  93. data/spec/units/gandi_v5/domain/sharing_space_spec.rb +0 -4
  94. data/spec/units/gandi_v5/live_dns/zone/snapshot_spec.rb +0 -66
  95. data/spec/units/gandi_v5/live_dns/zone_spec.rb +0 -347
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ef84fa55ae8d79f2d6fa178db059e4130ff8ae9ba2eb5f5886a57b9f965d8b48
4
- data.tar.gz: b5bc9448754bf08ab28c1e3235d01929a6edf3b82f00dbdf935b58d863035de1
3
+ metadata.gz: 5bcedab1f98eded02f20893ca2f4b8c5a47abe1d72d3e055ef5688b2969104df
4
+ data.tar.gz: 6db74218bd3914c662c2b6cac47c76a4d9497368f80b3ef4f31ad7e6537604a5
5
5
  SHA512:
6
- metadata.gz: 90083b929123d60702880dc1fbaa7500c972f38ce1134dbb031d1e5585cad63fbe7265ee38075e5329e2e125f4b441ef0bc02da79137444df4ea27c999c1fa26
7
- data.tar.gz: 536d1dae15301728cfda7df6c556913e75025d90f801c5748da598716b887bd0e8c4d25c2f0226ea25d9bab02fa9a3f185d64a5cf9a31694cb21a1ea5f8ac264
6
+ metadata.gz: 29dad44ec126323a917bcc5c4ac8dd200e1acc7ac32cfdf7c4608a919dd872e9f2071031b371d7ad8bae8a2ed09e6bd2bf660d0095b59999859e91d180b53e70
7
+ data.tar.gz: 1d2c599205a31b449c003cf4e2628b0326cf90d45ae3c75a68356879e463ee708c6d81f5fb64e1ee75ffe73fbc5402cc3e2fc290fddfe6777c0fb304ccb45a8f
data/.gitignore CHANGED
@@ -5,6 +5,7 @@ Gemfile.lock
5
5
  # And because this is Ruby, ignore the following
6
6
  # (source: https://github.com/github/gitignore/blob/master/Ruby.gitignore):
7
7
 
8
+ .ruby-version
8
9
  notes.txt
9
10
  todo.txt
10
11
  *.gem
@@ -4,17 +4,71 @@ AllCops:
4
4
  TargetRubyVersion: 2.6.0
5
5
  Gemspec/RequiredRubyVersion:
6
6
  Enabled: false
7
+ Layout/EmptyLinesAroundAttributeAccessor:
8
+ Enabled: true
9
+ Layout/SpaceAroundMethodCallOperator:
10
+ Enabled: true
11
+ Lint/DeprecatedOpenSSLConstant:
12
+ Enabled: true
13
+ Lint/MixedRegexpCaptureTypes:
14
+ Enabled: true
15
+ Lint/RaiseException:
16
+ Enabled: true
17
+ Lint/StructNewOverride:
18
+ Enabled: true
7
19
  Metrics/AbcSize:
8
20
  Max: 20
9
21
  Metrics/ClassLength:
10
22
  Max: 250
11
- Metrics/LineLength:
12
- Max: 100
23
+ Metrics/CyclomaticComplexity:
24
+ Max: 8
13
25
  Metrics/MethodLength:
14
26
  Max: 15
15
27
  Metrics/ModuleLength:
16
28
  Max: 200
29
+ Metrics/ParameterLists:
30
+ Max: 6
31
+ Performance/AncestorsInclude:
32
+ Enabled: true
33
+ Performance/BigDecimalWithNumericArgument:
34
+ Enabled: true
35
+ Performance/RedundantSortBlock:
36
+ Enabled: true
37
+ Performance/RedundantStringChars:
38
+ Enabled: true
39
+ Performance/ReverseFirst:
40
+ Enabled: true
41
+ Performance/SortReverse:
42
+ Enabled: true
43
+ Performance/Squeeze:
44
+ Enabled: true
45
+ Performance/StringInclude:
46
+ Enabled: true
47
+ Style/AccessorGrouping:
48
+ Enabled: true
49
+ Style/BisectedAttrAccessor:
50
+ Enabled: true
17
51
  Style/DocumentationMethod:
18
52
  Enabled: true
53
+ Style/ExponentialNotation:
54
+ Enabled: true
55
+ Style/HashEachMethods:
56
+ Enabled: true
57
+ Style/HashTransformKeys:
58
+ Enabled: true
59
+ Style/HashTransformValues:
60
+ Enabled: true
61
+ Style/RedundantAssignment:
62
+ Enabled: true
63
+ Style/RedundantFetchBlock:
64
+ Enabled: true
65
+ Style/RedundantRegexpCharacterClass:
66
+ Enabled: true
67
+ Style/RedundantRegexpEscape:
68
+ Enabled: true
19
69
  Style/SignalException:
20
70
  Enabled: false
71
+ Style/SlicingWithRange:
72
+ Enabled: true
73
+ Layout/LineLength:
74
+ Max: 100
@@ -5,6 +5,11 @@ rvm:
5
5
  - 2.6.2
6
6
  - 2.6.3
7
7
  - 2.6.4
8
+ - 2.6.5
9
+ - 2.6.6
10
+ - 2.7.0
11
+ - 2.7.1
12
+ - truffleruby-20.1.0
8
13
  gemfile:
9
14
  - Gemfile
10
15
  branches:
@@ -21,7 +26,7 @@ before_install: gem update bundler
21
26
  before_script:
22
27
  - 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
23
28
  script:
24
- - bundle exec rubocop
29
+ - if [[ $(echo $TRAVIS_JOB_NUMBER | awk -F . '{ print $2 }') == '1' ]]; then bundle exec rubocop; fi
25
30
  - bundle exec rspec
26
31
  after_script:
27
32
  - ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
@@ -1,5 +1,66 @@
1
1
  # Gandi V5 API Gem Changelog
2
2
 
3
+ ## Version 0.8.0
4
+
5
+ * Domain:
6
+ * .list - add resellee_id filter
7
+ * Added simple hosting: (I don't use simple hosting myself so it's possible I've misread the docs and a bug is waiting to be found, please add an issue if I have)
8
+ * SimpleHosting::Instance
9
+ * SimpleHosting::Instance::VirtualHost
10
+ * SimpleHosting::Instance::Application
11
+ * SimpleHosting::Instance::Database
12
+ * SimpleHosting::Instance::Language
13
+ * SimpleHosting::Instance::Upgrade
14
+ * GandiV5::Domain::SharingSpace moved to GandiV5::SharingSpace
15
+
16
+ ## Version 0.7.0
17
+
18
+ * LiveDNS:
19
+ * Rename LiveDNS::RecordSet to LiveDNS::Domain::Record
20
+ * Domains:
21
+ * .list now returns an array of strings
22
+ * Can no longer change the zone used by a domain
23
+ * Added automatic_snapshots attribute for whether snapshots are automatically created when a modification is made to this domain's records
24
+ * #replace_records and #replace_records_for merged into #replace_records
25
+ * If replacing with a zone file use the new #replace_zone_lines
26
+ * Added:
27
+ * .create
28
+ * .record_types
29
+ * .generic_name_servers(fqdn)
30
+ * #name_servers and #fetch_name_servers
31
+ * #tsig_keys, #fetch_tsig_keys, #add_tsig_key, #remove_tsig_key
32
+ * #axfr_clients, #fetch_axfr_clients, #add_axfr_client, #remove_axfr_client
33
+ * ::DnssecKeys, #dnssec_keys, #fetch_dnssec_keys
34
+ * Snapshots:
35
+ * Moved to live under LiveDNS::Domain not LiveDNS::Zone
36
+ * Are now accessed via the fully qualified domain name NOT the zone's UUID
37
+ * Ability to access the zone from a snapshot is removed
38
+ * Taking a snapshot now allows for named snapshots
39
+ * Added automatic attribute for when a snapshot was taken due to a zone change
40
+ * .list now returns an array of snapshots (records are fetched in a seperate request when first needed)
41
+ * Zone removed.
42
+
43
+ ## Version 0.6.0
44
+
45
+ * GandiV5::Email::Slot.create now supports sharing_id
46
+ * GandiV5::Email::Slot.create's type argument is now named not positional
47
+ * Add reseller information to GandiV5::Domain
48
+
49
+ ## Version 0.5.0
50
+
51
+ * Add support for truffleruby 20.1.0
52
+ * Fix issue with rails in production
53
+
54
+ ## Version 0.4.0
55
+
56
+ * Fix exception when delete returns no content-type
57
+ * Add support for ruby 2.7.0
58
+ * Add up/downgrading mailbox offer
59
+ * Add dry run option to creating a mailbox
60
+ * Add sharing_id & dry run option for renewing domain
61
+ * Add listing customers under a reseller organization (GandiV5::Organization::Customer.list and GandiV5::Organization#customers)
62
+ * Add creating customer under a reseller organization (GandiV5::Organization::Customer.create and GandiV5::Organization#create_customer)
63
+
3
64
  ## Version 0.3.0
4
65
 
5
66
  * Additions to GandiV5::Domain
data/LICENSE.md CHANGED
@@ -1,14 +1,10 @@
1
- ##Copyright
2
- Copyright (c) 2018, Robert Gauld. All rights reserved.
3
-
4
-
5
- ##License
1
+ ## License
6
2
  This code can be used under the BSD License (reproduced below).
7
3
  Commiters to the project give Robert Gauld the right to redistribute their commits
8
4
  under the BSD license.
9
5
 
10
6
 
11
- ###BSD License
7
+ ### BSD License
12
8
  Redistribution and use in source and binary forms, with or without modification,
13
9
  are permitted provided that the following conditions are met:
14
10
 
data/README.md CHANGED
@@ -8,9 +8,10 @@
8
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.
9
9
 
10
10
  * ruby:
11
- * 2.6.0 - 2.6.4
11
+ * 2.6.0 - 2.6.6
12
+ * 2.7.0 - 2.7.1
13
+ * truffleruby 20.1.0
12
14
  * jruby, once it's reached parity with ruby 2.6.x
13
- * truffleruby, once it's reached parity with ruby 2.6.x
14
15
  * rubinius, once it's reached parity with ruby 2.6.x
15
16
 
16
17
 
@@ -35,12 +36,12 @@ Details of the API can be found at:
35
36
  If you're using bundler then add it to your Gemfile and run the bundle command.
36
37
 
37
38
  ```ruby
38
- gem 'gandi_v5', '~> 0.1'
39
+ gem 'gandi_v5', '~> 0.7'
39
40
  ```
40
41
 
41
42
  If you're not using bundler then install it from the command line.
42
43
  ```bash
43
- gem install gandi_v5 -v '~> 0.1'
44
+ gem install gandi_v5 -v '~> 0.7'
44
45
  ```
45
46
 
46
47
  ## Usage
@@ -74,11 +75,16 @@ TODO: More examples!
74
75
 
75
76
  We follow the [Semantic Versioning](http://semver.org/) concept.
76
77
 
77
- | Gem Version | Gandi API Release Date |
78
- | --------------- | ---------------------- |
79
- | 0.3.0 | 2019-08-22 |
80
- | 0.2.0 | 2019-05-16 |
81
- | 0.1.0 | 2019-05-16 |
78
+ | Gem Version | Gandi API Release Date |
79
+ | --------------- | ------------------------ |
80
+ | 0.8.0 | 2020-07-10 |
81
+ | 0.7.0 | 2020-05-07 |
82
+ | 0.6.0 | 2020-05-07 (not LiveDNS) |
83
+ | 0.5.0 | 2019-10-01 |
84
+ | 0.4.0 | 2019-10-01 |
85
+ | 0.3.0 | 2019-08-22 |
86
+ | 0.2.0 | 2019-05-16 |
87
+ | 0.1.0 | 2019-05-16 |
82
88
 
83
89
  See <https://api.gandi.net/docs/reference#API-Changelog> to find out what
84
90
  Gandi changed on each date.
@@ -33,8 +33,8 @@ Gem::Specification.new do |gem|
33
33
  gem.add_development_dependency 'rb-inotify', '~> 0.9'
34
34
  gem.add_development_dependency 'rspec', '>= 3.7', '< 4'
35
35
  gem.add_development_dependency 'rspec-its', '~> 1.3'
36
- gem.add_development_dependency 'rubocop', '~> 0.73'
37
- gem.add_development_dependency 'rubocop-performance', '~> 1.1'
36
+ gem.add_development_dependency 'rubocop', '~> 0.87'
37
+ gem.add_development_dependency 'rubocop-performance', '~> 1.7'
38
38
  gem.add_development_dependency 'simplecov', '~> 0.7'
39
39
  gem.add_development_dependency 'timecop', '~> 0.5'
40
40
  gem.add_development_dependency 'vcr', '~> 4.0'
@@ -17,6 +17,8 @@ class MyInflector < Zeitwerk::Inflector
17
17
  'LiveDNS'
18
18
  when 'tld'
19
19
  'TLD'
20
+ when 'version'
21
+ 'VERSION'
20
22
  else
21
23
  super
22
24
  end
@@ -80,6 +82,36 @@ class GandiV5
80
82
  handle_bad_request(e)
81
83
  end
82
84
 
85
+ # Might raise:
86
+ # * RestClient::NotFound
87
+ # * RestClient::Unauthorized
88
+ # Bad authentication attempt because of a wrong API Key.
89
+ # * RestClient::Forbidden
90
+ # Access to the resource is denied.
91
+ # Mainly due to a lack of permissions to access it.
92
+ # * GandiV5::Error
93
+ # * JSON::ParserError
94
+ def paginated_get(url, page = (1..), per_page = 100, **headers)
95
+ unless page.respond_to?(:each)
96
+ fail ArgumentError, 'page must be positive' unless page.positive?
97
+
98
+ page = [page]
99
+ end
100
+
101
+ headers[:params] ||= {}
102
+ headers[:params].transform_keys!(&:to_s)
103
+ headers[:params]['per_page'] = per_page
104
+
105
+ page.each do |page_number|
106
+ headers[:params]['page'] = page_number
107
+ _resp, this_data = get(url, **headers)
108
+ break if this_data.empty?
109
+
110
+ yield this_data
111
+ break if this_data.count < per_page
112
+ end
113
+ end
114
+
83
115
  # Might raise:
84
116
  # * RestClient::NotFound
85
117
  # * RestClient::Unauthorized
@@ -93,7 +125,10 @@ class GandiV5
93
125
  def delete(url, **headers)
94
126
  prepare_headers headers, url
95
127
  response = RestClient.delete url, **headers
96
- [response, parse_response(response)]
128
+ [
129
+ response,
130
+ response.headers.key?(:content_type) ? parse_response(response) : nil
131
+ ]
97
132
  rescue RestClient::BadRequest => e
98
133
  handle_bad_request(e)
99
134
  end
@@ -164,16 +199,6 @@ class GandiV5
164
199
  @api_key ||= ENV.fetch('GANDI_API_KEY')
165
200
  end
166
201
 
167
- def authorisation_header(url)
168
- if url.start_with?(BASE)
169
- { Authorization: "Apikey #{api_key}" }
170
- elsif url.start_with?(GandiV5::LiveDNS::BASE)
171
- { 'X-Api-Key': api_key }
172
- else
173
- fail ArgumentError, "Don't know how to authorise for url: #{url}"
174
- end
175
- end
176
-
177
202
  def parse_response(response)
178
203
  type = response.headers.fetch(:content_type).split(';').first.chomp
179
204
  case type
@@ -191,10 +216,11 @@ class GandiV5
191
216
  end
192
217
  end
193
218
 
194
- def prepare_headers(headers, url)
195
- headers.transform_keys!(&:to_sym)
219
+ def prepare_headers(headers, _url)
220
+ headers.transform_keys! { |key| key.to_s.downcase.to_sym }
196
221
  headers[:accept] ||= 'application/json'
197
- headers.merge!(authorisation_header(url))
222
+ headers[:authorization] = "Apikey #{api_key}"
223
+ headers
198
224
  end
199
225
 
200
226
  def handle_bad_request(exception)
@@ -179,9 +179,8 @@ class GandiV5
179
179
  define_method "#{name}=" do |value|
180
180
  instance_variable_set("@#{name}", value)
181
181
  end
182
- # rubocop:disable Style/AccessModifierDeclarations
182
+
183
183
  private "#{name}="
184
- # rubocop:enable Style/AccessModifierDeclarations
185
184
  end
186
185
 
187
186
  # @api private
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ class GandiV5
4
+ module Data
5
+ class Converter
6
+ # Methods for converting strings to/from integerss.
7
+ class Integer
8
+ # @param value [Integer]
9
+ # @return [String]
10
+ def self.to_gandi(value)
11
+ return nil if value.nil?
12
+
13
+ value.to_s
14
+ end
15
+
16
+ # @param [String]
17
+ # @return value [Integer]
18
+ def self.from_gandi(value)
19
+ return nil if value.nil?
20
+
21
+ value.to_i
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -15,7 +15,7 @@ class GandiV5
15
15
  # gandidns, redirection, gandimail, packmail, dnssec, blog, hosting,
16
16
  # paas, site, certificate, gandilivedns, mailboxv2
17
17
  # @!attribute [r] sharing_space
18
- # @return [GandiV5::Domain::SharingSpace]
18
+ # @return [GandiV5::SharingSpace]
19
19
  # @!attribute [r] status
20
20
  # @return [String] one of: "clientHold", "clientUpdateProhibited", "clientTransferProhibited",
21
21
  # "clientDeleteProhibited", "clientRenewProhibited", "serverHold", "pendingTransfer",
@@ -107,7 +107,7 @@ class GandiV5
107
107
  member(
108
108
  :sharing_space,
109
109
  gandi_key: 'sharing_space',
110
- converter: GandiV5::Domain::SharingSpace
110
+ converter: GandiV5::SharingSpace
111
111
  )
112
112
 
113
113
  member(
@@ -211,10 +211,13 @@ class GandiV5
211
211
  # @param duration [Integer, #to_s] how long to renew for (in years).
212
212
  # @return [String] confirmation message from Gandi.
213
213
  # @raise [GandiV5::Error::GandiError] if Gandi returns an error.
214
- def renew_for(duration = 1)
214
+ def renew_for(duration = 1, sharing_id: nil, dry_run: false)
215
215
  body = { duration: duration }.to_json
216
- _response, data = GandiV5.post url('renew'), body
217
- data['message']
216
+ url_ = url('renew')
217
+ url_ = sharing_id ? "#{url_}?sharing_id=#{sharing_id}" : url_
218
+
219
+ _response, data = GandiV5.post(url_, body, 'Dry-Run': dry_run ? 1 : 0)
220
+ dry_run ? data : data['message']
218
221
  end
219
222
 
220
223
  # Restoration information for the domain.
@@ -489,24 +492,20 @@ class GandiV5
489
492
  # @param page [#each<Integer, #to_s>] the page(s) of results to retrieve.
490
493
  # If page is not provided keep querying until an empty list is returned.
491
494
  # If page responds to .each then iterate until an empty list is returned.
492
- # @param per_page [Integer, #to_s] (optional default 100) how many results ot get per page.
495
+ # @param per_page [Integer, #to_s] (optional default 100) how many results to get per page.
493
496
  # @param fqdn [String, #to_s] (optional)
494
497
  # filters the list by domain name, with optional patterns.
495
498
  # e.g. "example.net", "example.*", "*ample.com"
496
- # @param sort_by [String, #to_s] (optional default "fqdn") how to sort the list.
499
+ # @param resellee_id [String, #to_s] (optional)
500
+ # filters the list by resellee_id (from the Organization API).
497
501
  # @param tld [String, #to_s] (optional) used to filter by just the top level domain.
502
+ # @param sort_by [String, #to_s] (optional default "fqdn") how to sort the list.
498
503
  # @return [Array<GandiV5::Domain>]
499
504
  # @raise [GandiV5::Error::GandiError] if Gandi returns an error.
500
505
  def self.list(page: (1..), per_page: 100, **params)
501
- page = [page.to_i] unless page.respond_to?(:each)
502
-
503
506
  domains = []
504
- page.each do |page_number|
505
- _resp, data = GandiV5.get url, params: params.merge(page: page_number, per_page: per_page)
506
- break if data.empty?
507
-
507
+ GandiV5.paginated_get(url, page, per_page, params: params) do |data|
508
508
  domains += data.map { |domain| from_gandi domain }
509
- break if data.count < per_page
510
509
  end
511
510
  domains
512
511
  end