dnsmadeeasy 0.4.0 → 1.0.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.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +5 -10
  3. data/.gitignore +2 -0
  4. data/.rubocop.yml +5 -4
  5. data/.rubocop_todo.yml +251 -143
  6. data/CLAUDE.md +67 -0
  7. data/Gemfile +9 -1
  8. data/README.md +858 -0
  9. data/Rakefile +4 -4
  10. data/dnsmadeeasy.gemspec +42 -26
  11. data/docs/badges/coverage_badge.svg +21 -0
  12. data/docs/dry-cli-based-tools.webloc +8 -0
  13. data/docs/plan-zone-management.md +756 -0
  14. data/docs/plans/01-plan-ruby4-baseline.md +38 -0
  15. data/docs/plans/02-plan-dry-cli-launcher.md +44 -0
  16. data/docs/plans/03-plan-account-command.md +43 -0
  17. data/docs/plans/04-plan-zone-record-model.md +48 -0
  18. data/docs/plans/05-plan-zone-parser.md +41 -0
  19. data/docs/plans/06-plan-zone-formatter.md +43 -0
  20. data/docs/plans/07-plan-zone-export.md +58 -0
  21. data/docs/plans/08-plan-zone-diff.md +42 -0
  22. data/docs/plans/09-plan-zone-apply.md +69 -0
  23. data/docs/plans/10-plan-docs-cleanup.md +55 -0
  24. data/docs/spec-zone-management.md +242 -0
  25. data/exe/dme +13 -2
  26. data/exe/dmez +6 -0
  27. data/lib/dme.rb +7 -2
  28. data/lib/dnsmadeeasy/api/client.rb +32 -26
  29. data/lib/dnsmadeeasy/cli/box_output.rb +9 -0
  30. data/lib/dnsmadeeasy/cli/commands/account.rb +222 -0
  31. data/lib/dnsmadeeasy/cli/commands/base.rb +119 -0
  32. data/lib/dnsmadeeasy/cli/commands/legacy_operation.rb +30 -0
  33. data/lib/dnsmadeeasy/cli/commands/version.rb +22 -0
  34. data/lib/dnsmadeeasy/cli/commands/zone.rb +326 -0
  35. data/lib/dnsmadeeasy/cli/commands.rb +19 -0
  36. data/lib/dnsmadeeasy/cli/input.rb +14 -0
  37. data/lib/dnsmadeeasy/cli/launcher.rb +53 -0
  38. data/lib/dnsmadeeasy/cli/message_helpers.rb +81 -0
  39. data/lib/dnsmadeeasy/cli/reported_error.rb +10 -0
  40. data/lib/dnsmadeeasy/credentials/api_keys.rb +11 -9
  41. data/lib/dnsmadeeasy/credentials.rb +0 -1
  42. data/lib/dnsmadeeasy/runner.rb +24 -24
  43. data/lib/dnsmadeeasy/types.rb +19 -0
  44. data/lib/dnsmadeeasy/version.rb +2 -1
  45. data/lib/dnsmadeeasy/zone/aname_flattener.rb +63 -0
  46. data/lib/dnsmadeeasy/zone/apply_executor.rb +189 -0
  47. data/lib/dnsmadeeasy/zone/apply_result.rb +22 -0
  48. data/lib/dnsmadeeasy/zone/diff.rb +152 -0
  49. data/lib/dnsmadeeasy/zone/file.rb +26 -0
  50. data/lib/dnsmadeeasy/zone/parser.rb +172 -0
  51. data/lib/dnsmadeeasy/zone/plan.rb +28 -0
  52. data/lib/dnsmadeeasy/zone/plan_action.rb +29 -0
  53. data/lib/dnsmadeeasy/zone/plan_renderer.rb +91 -0
  54. data/lib/dnsmadeeasy/zone/provider_record.rb +18 -0
  55. data/lib/dnsmadeeasy/zone/record.rb +44 -0
  56. data/lib/dnsmadeeasy/zone/record_set.rb +23 -0
  57. data/lib/dnsmadeeasy/zone/remote_adapter.rb +94 -0
  58. data/lib/dnsmadeeasy/zone/remote_records.rb +26 -0
  59. data/lib/dnsmadeeasy/zone/serializer.rb +115 -0
  60. data/lib/dnsmadeeasy.rb +61 -27
  61. metadata +184 -25
  62. data/.dme-help.png +0 -0
  63. data/README.adoc +0 -690
data/lib/dnsmadeeasy.rb CHANGED
@@ -6,25 +6,49 @@ module DnsMadeEasy
6
6
  end
7
7
 
8
8
  require 'dnsmadeeasy/version'
9
+ require 'dnsmadeeasy/types'
9
10
  require 'dnsmadeeasy/credentials'
10
11
  require 'dnsmadeeasy/api/client'
12
+ require 'dnsmadeeasy/cli/launcher'
13
+ require 'dnsmadeeasy/zone/record'
14
+ require 'dnsmadeeasy/zone/provider_record'
15
+ require 'dnsmadeeasy/zone/record_set'
16
+ require 'dnsmadeeasy/zone/file'
17
+ require 'dnsmadeeasy/zone/parser'
18
+ require 'dnsmadeeasy/zone/aname_flattener'
19
+ require 'dnsmadeeasy/zone/apply_executor'
20
+ require 'dnsmadeeasy/zone/apply_result'
21
+ require 'dnsmadeeasy/zone/diff'
22
+ require 'dnsmadeeasy/zone/plan'
23
+ require 'dnsmadeeasy/zone/plan_action'
24
+ require 'dnsmadeeasy/zone/plan_renderer'
25
+ require 'dnsmadeeasy/zone/remote_adapter'
26
+ require 'dnsmadeeasy/zone/remote_records'
27
+ require 'dnsmadeeasy/zone/serializer'
11
28
 
12
29
  module DnsMadeEasy
13
- class Error < StandardError;
30
+ class Error < StandardError
14
31
  end
15
- class AuthenticationError < Error;
32
+
33
+ class AuthenticationError < Error
16
34
  end
17
- class APIKeyAndSecretMissingError < Error;
35
+
36
+ class APIKeyAndSecretMissingError < Error
18
37
  end
19
- class InvalidCredentialKeys < Error;
38
+
39
+ class InvalidCredentialKeys < Error
20
40
  end
21
- class AbstractMethodError < Error;
41
+
42
+ class AbstractMethodError < Error
22
43
  end
23
- class InvalidCredentialsFormatError < Error;
44
+
45
+ class InvalidCredentialsFormatError < Error
24
46
  end
25
- class NoSuchAccountError < Error;
47
+
48
+ class NoSuchAccountError < Error
26
49
  end
27
- class NoDomainError < Error;
50
+
51
+ class NoDomainError < Error
28
52
  end
29
53
 
30
54
  class << self
@@ -38,26 +62,22 @@ module DnsMadeEasy
38
62
  def configure_from_file(file = nil,
39
63
  account = nil,
40
64
  encryption_key = nil)
41
-
42
65
  credentials = ::DnsMadeEasy::Credentials.keys_from_file(
43
- file: file || ::DnsMadeEasy::Credentials.default_credentials_path(user: ENV['USER']),
66
+ file: file || ::DnsMadeEasy::Credentials.default_credentials_path(user: ENV.fetch('USER', nil)),
44
67
  account: account,
45
68
  encryption_key: encryption_key
46
69
  )
47
- if credentials
48
- configure do |config|
49
- config.api_key = credentials.api_key
50
- config.api_secret = credentials.api_secret
51
- end
52
- else
53
- raise APIKeyAndSecretMissingError, "Unable to load valid api keys from #{file}!"
70
+ raise APIKeyAndSecretMissingError, "Unable to load valid api keys from #{file}!" unless credentials
71
+
72
+ configure do |config|
73
+ config.api_key = credentials.api_key
74
+ config.api_secret = credentials.api_secret
54
75
  end
55
76
  end
56
77
 
57
78
  def credentials_from_file(file: DnsMadeEasy::Credentials.default_credentials_path,
58
79
  account: nil,
59
80
  encryption_key: nil)
60
-
61
81
  DnsMadeEasy::Credentials.keys_from_file file: file,
62
82
  account: account,
63
83
  encryption_key: encryption_key
@@ -67,37 +87,51 @@ module DnsMadeEasy
67
87
  self.default_api_key = value
68
88
  end
69
89
 
90
+ def api_key
91
+ default_api_key
92
+ end
93
+
70
94
  def api_secret=(value)
71
95
  self.default_api_secret = value
72
96
  end
73
97
 
74
- def client(**options)
75
- @client ||= create_client(false, **options)
98
+ def api_secret
99
+ default_api_secret
76
100
  end
77
101
 
78
- def sandbox_client(**options)
79
- @sandbox_client ||= create_client(true, **options)
102
+ def client(**)
103
+ @client ||= create_client(false, **)
104
+ end
105
+
106
+ def sandbox_client(**)
107
+ @sandbox_client ||= create_client(true, **)
80
108
  end
81
109
 
82
110
  def create_client(sandbox = false,
83
111
  api_key: default_api_key,
84
112
  api_secret: default_api_secret,
85
113
 
86
- **options)
114
+ **)
87
115
  raise APIKeyAndSecretMissingError, 'Please set #api_key and #api_secret' unless api_key && api_secret
88
116
 
89
- ::DnsMadeEasy::Api::Client.new(api_key, api_secret, sandbox, **options)
117
+ ::DnsMadeEasy::Api::Client.new(api_key, api_secret, sandbox, **)
90
118
  end
91
119
 
92
120
  # Basically delegate it all to the Client instance
93
121
  # if the method call is supported.
94
122
  #
95
- def method_missing(method, *args, &block)
123
+ def method_missing(method, ...)
96
124
  if client.respond_to?(method)
97
- client.send(method, *args, &block)
125
+ client.send(method, ...)
98
126
  else
99
- super(method, *args, &block)
127
+ super
100
128
  end
101
129
  end
130
+
131
+ def respond_to_missing?(method, include_private = false)
132
+ client.respond_to?(method, include_private) || super
133
+ rescue APIKeyAndSecretMissingError
134
+ super
135
+ end
102
136
  end
103
137
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dnsmadeeasy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Konstantin Gredeskoul
@@ -10,10 +10,9 @@ authors:
10
10
  - James Hart
11
11
  - Phil Cohen
12
12
  - Praneeth Are
13
- autorequire:
14
13
  bindir: exe
15
14
  cert_chain: []
16
- date: 2020-04-15 00:00:00.000000000 Z
15
+ date: 1980-01-02 00:00:00.000000000 Z
17
16
  dependencies:
18
17
  - !ruby/object:Gem::Dependency
19
18
  name: awesome_print
@@ -43,6 +42,76 @@ dependencies:
43
42
  - - ">="
44
43
  - !ruby/object:Gem::Version
45
44
  version: '0'
45
+ - !ruby/object:Gem::Dependency
46
+ name: dns-zonefile
47
+ requirement: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: '0'
52
+ type: :runtime
53
+ prerelease: false
54
+ version_requirements: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: '0'
59
+ - !ruby/object:Gem::Dependency
60
+ name: dry-cli
61
+ requirement: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
73
+ - !ruby/object:Gem::Dependency
74
+ name: dry-monads
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ type: :runtime
81
+ prerelease: false
82
+ version_requirements: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
87
+ - !ruby/object:Gem::Dependency
88
+ name: dry-struct
89
+ requirement: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ type: :runtime
95
+ prerelease: false
96
+ version_requirements: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ - !ruby/object:Gem::Dependency
102
+ name: dry-types
103
+ requirement: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - ">="
106
+ - !ruby/object:Gem::Version
107
+ version: '0'
108
+ type: :runtime
109
+ prerelease: false
110
+ version_requirements: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - ">="
113
+ - !ruby/object:Gem::Version
114
+ version: '0'
46
115
  - !ruby/object:Gem::Dependency
47
116
  name: hashie
48
117
  requirement: !ruby/object:Gem::Requirement
@@ -72,13 +141,41 @@ dependencies:
72
141
  - !ruby/object:Gem::Version
73
142
  version: '0'
74
143
  - !ruby/object:Gem::Dependency
75
- name: bundler
144
+ name: tsort
76
145
  requirement: !ruby/object:Gem::Requirement
77
146
  requirements:
78
147
  - - ">="
79
148
  - !ruby/object:Gem::Version
80
149
  version: '0'
81
- type: :development
150
+ type: :runtime
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ requirements:
154
+ - - ">="
155
+ - !ruby/object:Gem::Version
156
+ version: '0'
157
+ - !ruby/object:Gem::Dependency
158
+ name: tty-box
159
+ requirement: !ruby/object:Gem::Requirement
160
+ requirements:
161
+ - - ">="
162
+ - !ruby/object:Gem::Version
163
+ version: '0'
164
+ type: :runtime
165
+ prerelease: false
166
+ version_requirements: !ruby/object:Gem::Requirement
167
+ requirements:
168
+ - - ">="
169
+ - !ruby/object:Gem::Version
170
+ version: '0'
171
+ - !ruby/object:Gem::Dependency
172
+ name: tty-spinner
173
+ requirement: !ruby/object:Gem::Requirement
174
+ requirements:
175
+ - - ">="
176
+ - !ruby/object:Gem::Version
177
+ version: '0'
178
+ type: :runtime
82
179
  prerelease: false
83
180
  version_requirements: !ruby/object:Gem::Requirement
84
181
  requirements:
@@ -197,16 +294,35 @@ dependencies:
197
294
  - - ">="
198
295
  - !ruby/object:Gem::Version
199
296
  version: '0'
297
+ - !ruby/object:Gem::Dependency
298
+ name: aruba
299
+ requirement: !ruby/object:Gem::Requirement
300
+ requirements:
301
+ - - ">="
302
+ - !ruby/object:Gem::Version
303
+ version: '0'
304
+ type: :development
305
+ prerelease: false
306
+ version_requirements: !ruby/object:Gem::Requirement
307
+ requirements:
308
+ - - ">="
309
+ - !ruby/object:Gem::Version
310
+ version: '0'
200
311
  description: |
201
- This is an authoratative and fully-featured API client for the DNS Provider "DnsMadeEasy.com".
312
+ This is an authoratative and fully-featured API client for the
313
+ DNS Provider "DnsMadeEasy.com".
202
314
 
203
- This library offers both a rich Ruby API that you can use to automate DNS record management, as well
204
- as a rich CLI interface with the command line executable "dme" installed when you install the gem.
205
- The gem additionally supports storing credentials in the ~/.dnsmadeeasy/credentials.yml
315
+ This library offers both a rich Ruby API that you can use to
316
+ automate DNS record management, as well
317
+ as a rich CLI interface with the command line executable "dme"
318
+ installed when you install the gem.
319
+ The gem additionally supports storing credentials in
320
+ the ~/.dnsmadeeasy/credentials.yml
206
321
  file, supports multiple accounts, encryption, and more.
207
322
 
208
- If you are using Chef consider using the "dnsmadeeasy" Chef Cookbook, while uses this gem behind
209
- the scenes: https://supermarket.chef.io/cookbooks/dnsmadeeasy<br />
323
+ If you are using Chef consider using the "dnsmadeeasy"
324
+ Chef Cookbook, while uses this gem behind
325
+ the scenes: https://supermarket.chef.io/cookbooks/dnsmadeeasy
210
326
 
211
327
  ACKNOWLEDGEMENTS:
212
328
 
@@ -216,45 +332,90 @@ description: |
216
332
  2. We also wish to thank the gem author Phil Cohen who
217
333
  kindly yielded the "dnsmadeeasy" RubyGems namespace to this gem.
218
334
 
219
- 3. We also thank Praneeth Are for contributing the support for secondary domains in 0.3.5.
335
+ 3. We also thank Praneeth Are for contributing the support for
336
+ secondary domains in 0.3.5.
220
337
  email:
221
338
  - kigster@gmail.com
222
339
  - letuboy@gmail.com
223
340
  - hjhart@gmail.com
224
341
  executables:
225
342
  - dme
343
+ - dmez
226
344
  extensions: []
227
345
  extra_rdoc_files: []
228
346
  files:
229
347
  - ".codeclimate.yml"
230
- - ".dme-help.png"
231
348
  - ".github/workflows/ruby.yml"
232
349
  - ".gitignore"
233
350
  - ".rspec"
234
351
  - ".rubocop.yml"
235
352
  - ".rubocop_todo.yml"
236
353
  - ".travis.yml"
354
+ - CLAUDE.md
237
355
  - Gemfile
238
356
  - LICENSE.txt
239
- - README.adoc
357
+ - README.md
240
358
  - Rakefile
241
359
  - bin/console
242
360
  - bin/setup
243
361
  - dnsmadeeasy.gemspec
362
+ - docs/badges/coverage_badge.svg
363
+ - docs/dry-cli-based-tools.webloc
364
+ - docs/plan-zone-management.md
365
+ - docs/plans/01-plan-ruby4-baseline.md
366
+ - docs/plans/02-plan-dry-cli-launcher.md
367
+ - docs/plans/03-plan-account-command.md
368
+ - docs/plans/04-plan-zone-record-model.md
369
+ - docs/plans/05-plan-zone-parser.md
370
+ - docs/plans/06-plan-zone-formatter.md
371
+ - docs/plans/07-plan-zone-export.md
372
+ - docs/plans/08-plan-zone-diff.md
373
+ - docs/plans/09-plan-zone-apply.md
374
+ - docs/plans/10-plan-docs-cleanup.md
375
+ - docs/spec-zone-management.md
244
376
  - exe/dme
377
+ - exe/dmez
245
378
  - lib/dme.rb
246
379
  - lib/dnsmadeeasy.rb
247
380
  - lib/dnsmadeeasy/api/client.rb
381
+ - lib/dnsmadeeasy/cli/box_output.rb
382
+ - lib/dnsmadeeasy/cli/commands.rb
383
+ - lib/dnsmadeeasy/cli/commands/account.rb
384
+ - lib/dnsmadeeasy/cli/commands/base.rb
385
+ - lib/dnsmadeeasy/cli/commands/legacy_operation.rb
386
+ - lib/dnsmadeeasy/cli/commands/version.rb
387
+ - lib/dnsmadeeasy/cli/commands/zone.rb
388
+ - lib/dnsmadeeasy/cli/input.rb
389
+ - lib/dnsmadeeasy/cli/launcher.rb
390
+ - lib/dnsmadeeasy/cli/message_helpers.rb
391
+ - lib/dnsmadeeasy/cli/reported_error.rb
248
392
  - lib/dnsmadeeasy/credentials.rb
249
393
  - lib/dnsmadeeasy/credentials/api_keys.rb
250
394
  - lib/dnsmadeeasy/credentials/yaml_file.rb
251
395
  - lib/dnsmadeeasy/dme.rb
252
396
  - lib/dnsmadeeasy/runner.rb
397
+ - lib/dnsmadeeasy/types.rb
253
398
  - lib/dnsmadeeasy/version.rb
399
+ - lib/dnsmadeeasy/zone/aname_flattener.rb
400
+ - lib/dnsmadeeasy/zone/apply_executor.rb
401
+ - lib/dnsmadeeasy/zone/apply_result.rb
402
+ - lib/dnsmadeeasy/zone/diff.rb
403
+ - lib/dnsmadeeasy/zone/file.rb
404
+ - lib/dnsmadeeasy/zone/parser.rb
405
+ - lib/dnsmadeeasy/zone/plan.rb
406
+ - lib/dnsmadeeasy/zone/plan_action.rb
407
+ - lib/dnsmadeeasy/zone/plan_renderer.rb
408
+ - lib/dnsmadeeasy/zone/provider_record.rb
409
+ - lib/dnsmadeeasy/zone/record.rb
410
+ - lib/dnsmadeeasy/zone/record_set.rb
411
+ - lib/dnsmadeeasy/zone/remote_adapter.rb
412
+ - lib/dnsmadeeasy/zone/remote_records.rb
413
+ - lib/dnsmadeeasy/zone/serializer.rb
254
414
  homepage: https://github.com/kigster/dnsmadeeasy
255
415
  licenses:
256
416
  - MIT
257
- metadata: {}
417
+ metadata:
418
+ rubygems_mfa_required: 'true'
258
419
  post_install_message: |
259
420
  Thank you for using the DnsMadeEasy ruby gem, the Ruby client
260
421
  API for DnsMadeEasy.com's SDK v2. Please note that this gem
@@ -270,17 +431,16 @@ require_paths:
270
431
  - lib
271
432
  required_ruby_version: !ruby/object:Gem::Requirement
272
433
  requirements:
273
- - - ">="
434
+ - - "~>"
274
435
  - !ruby/object:Gem::Version
275
- version: '0'
436
+ version: '4.0'
276
437
  required_rubygems_version: !ruby/object:Gem::Requirement
277
438
  requirements:
278
439
  - - ">="
279
440
  - !ruby/object:Gem::Version
280
441
  version: '0'
281
442
  requirements: []
282
- rubygems_version: 3.1.2
283
- signing_key:
443
+ rubygems_version: 4.0.16
284
444
  specification_version: 4
285
445
  summary: 'This is an authoratative and fully-featured API client for the DNS Provider
286
446
  "DnsMadeEasy.com". This library offers both a rich Ruby API that you can use to
@@ -288,10 +448,9 @@ summary: 'This is an authoratative and fully-featured API client for the DNS Pro
288
448
  line executable "dme" installed when you install the gem. The gem additionally supports
289
449
  storing credentials in the ~/.dnsmadeeasy/credentials.yml file, supports multiple
290
450
  accounts, encryption, and more. If you are using Chef consider using the "dnsmadeeasy"
291
- Chef Cookbook, while uses this gem behind the scenes: https://supermarket.chef.io/cookbooks/dnsmadeeasy<br
292
- /> ACKNOWLEDGEMENTS: 1. This gem is based on the original work contributed by
293
- Wanelo.com to the now abandonded "dnsmadeeasy-rest-api" client. 2. We also wish
294
- to thank the gem author Phil Cohen who kindly yielded the "dnsmadeeasy" RubyGems
295
- namespace to this gem. 3. We also thank Praneeth Are for contributing the support
296
- for secondary domains in 0.3.5.'
451
+ Chef Cookbook, while uses this gem behind the scenes: https://supermarket.chef.io/cookbooks/dnsmadeeasy ACKNOWLEDGEMENTS: 1.
452
+ This gem is based on the original work contributed by Wanelo.com to the now abandonded
453
+ "dnsmadeeasy-rest-api" client. 2. We also wish to thank the gem author Phil Cohen
454
+ who kindly yielded the "dnsmadeeasy" RubyGems namespace to this gem. 3. We also
455
+ thank Praneeth Are for contributing the support for secondary domains in 0.3.5.'
297
456
  test_files: []
data/.dme-help.png DELETED
Binary file