dnsimple 3.0.0.pre.beta2 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +13 -0
  3. data/.rubocop_dnsimple.yml +216 -0
  4. data/.rubocop_todo.yml +14 -0
  5. data/CHANGELOG.md +16 -1
  6. data/Gemfile +1 -0
  7. data/Rakefile +8 -3
  8. data/lib/dnsimple/client.rb +9 -12
  9. data/lib/dnsimple/client/clients.rb +36 -2
  10. data/lib/dnsimple/client/contacts.rb +6 -6
  11. data/lib/dnsimple/client/domains.rb +5 -5
  12. data/lib/dnsimple/client/identity.rb +2 -2
  13. data/lib/dnsimple/client/oauth.rb +2 -2
  14. data/lib/dnsimple/client/registrar.rb +1 -1
  15. data/lib/dnsimple/client/registrar_auto_renewal.rb +2 -2
  16. data/lib/dnsimple/client/registrar_delegation.rb +49 -0
  17. data/lib/dnsimple/client/registrar_whois_privacy.rb +1 -1
  18. data/lib/dnsimple/client/services.rb +68 -0
  19. data/lib/dnsimple/client/templates.rb +139 -0
  20. data/lib/dnsimple/client/tlds.rb +3 -3
  21. data/lib/dnsimple/client/webhooks.rb +4 -4
  22. data/lib/dnsimple/client/zones.rb +2 -2
  23. data/lib/dnsimple/client/zones_records.rb +1 -1
  24. data/lib/dnsimple/default.rb +2 -2
  25. data/lib/dnsimple/error.rb +14 -1
  26. data/lib/dnsimple/struct.rb +3 -1
  27. data/lib/dnsimple/struct/contact.rb +2 -2
  28. data/lib/dnsimple/struct/extended_attribute.rb +5 -1
  29. data/lib/dnsimple/struct/service.rb +64 -0
  30. data/lib/dnsimple/struct/template.rb +22 -0
  31. data/lib/dnsimple/struct/tld.rb +1 -1
  32. data/lib/dnsimple/version.rb +1 -1
  33. data/spec/dnsimple/client/client_service_spec.rb +6 -6
  34. data/spec/dnsimple/client/contacts_spec.rb +30 -30
  35. data/spec/dnsimple/client/domains_email_forwards_spec.rb +25 -25
  36. data/spec/dnsimple/client/domains_spec.rb +27 -27
  37. data/spec/dnsimple/client/identity_spec.rb +8 -8
  38. data/spec/dnsimple/client/oauth_spec.rb +9 -9
  39. data/spec/dnsimple/client/registrar_auto_renewal_spec.rb +13 -13
  40. data/spec/dnsimple/client/registrar_delegation_spec.rb +55 -0
  41. data/spec/dnsimple/client/registrar_spec.rb +29 -29
  42. data/spec/dnsimple/client/registrar_whois_privacy_spec.rb +16 -16
  43. data/spec/dnsimple/client/services_spec.rb +78 -0
  44. data/spec/dnsimple/client/templates_spec.rb +163 -0
  45. data/spec/dnsimple/client/tlds_spec.rb +22 -23
  46. data/spec/dnsimple/client/webhooks_spec.rb +22 -22
  47. data/spec/dnsimple/client/zones_records_spec.rb +40 -40
  48. data/spec/dnsimple/client/zones_spec.rb +12 -12
  49. data/spec/dnsimple/client_spec.rb +52 -44
  50. data/spec/dnsimple/extra_spec.rb +3 -3
  51. data/spec/fixtures.http/changeDomainDelegation/success.http +17 -0
  52. data/spec/fixtures.http/createTemplate/created.http +17 -0
  53. data/spec/fixtures.http/deleteTemplate/success.http +13 -0
  54. data/spec/fixtures.http/getDomainDelegation/success-empty.http +17 -0
  55. data/spec/fixtures.http/getDomainDelegation/success.http +17 -0
  56. data/spec/fixtures.http/getService/success.http +17 -0
  57. data/spec/fixtures.http/getTemplate/success.http +17 -0
  58. data/spec/fixtures.http/listServices/success.http +17 -0
  59. data/spec/fixtures.http/listTemplates/success.http +17 -0
  60. data/spec/fixtures.http/method-not-allowed.http +11 -0
  61. data/spec/fixtures.http/updateTemplate/success.http +17 -0
  62. metadata +41 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7128cb8f75d602974383ef364f17f679420772b2
4
- data.tar.gz: a2fa6d2b0434351994f911d2b72bf385b885a8f9
3
+ metadata.gz: 8aca4eb6f6813b601531e5c5d82f9db0ec222dd5
4
+ data.tar.gz: 6076520c66e7ac64e23e1e006a9342f96cefabc5
5
5
  SHA512:
6
- metadata.gz: 774ea827afd9b4f40ba487dbf04c8c5a1c32bb3850abd94bae3652e4d75867c124000384d26505186e5963f0873b74a5b117342b8530eeea491e8808b95b3360
7
- data.tar.gz: e4debc8a6e08f919d7839d007e58845a58a0f68e0b64d5ecb77623030a585a830f1e2665f7f49f061ee20f89117634df8b501e40bbe6c8e7df913884d44047c6
6
+ metadata.gz: 3b56cb8d598eec60f48cf0eb63594e323b3a16d2d02a73a003e4fd7c64030f6a2d488fc77b8e4abab8c33598a28411aa15fdb946db4c0db2dc4faeafb1507303
7
+ data.tar.gz: d9cc0e1e056166b2cc5952ecd3d317bb524341ea92aaaac581a9e414bbc4e6164837f40b65566420281633a17ecb6c707430db2d0ee56e3053e439c9d96d9a65
@@ -0,0 +1,13 @@
1
+ inherit_from:
2
+ - .rubocop_todo.yml
3
+ - .rubocop_dnsimple.yml
4
+
5
+ # [codesmell]
6
+ # It's irrelevant here, but it could be a code smell.
7
+ # Hence keep it disabled, but don't include it in the DNSimple suite.
8
+ Lint/Loop:
9
+ Enabled: false
10
+
11
+ # It doesn't seem to work as expected.
12
+ Style/IfUnlessModifier:
13
+ Enabled: false
@@ -0,0 +1,216 @@
1
+ AllCops:
2
+ Exclude:
3
+ # Exclude .gemspec files because they are generally auto-generated
4
+ - '*.gemspec'
5
+
6
+ # Generally, the keyword style uses a lot of space. This is particularly true when
7
+ # you use case/if statements, in combination with a long-name variable.
8
+ #
9
+ # invoice_error_message = case error
10
+ # when 1 == 1
11
+ # do_something
12
+ # else
13
+ # do_else
14
+ # end
15
+ #
16
+ Lint/EndAlignment:
17
+ AlignWith: variable
18
+
19
+ # [codesmell]
20
+ Metrics/AbcSize:
21
+ Enabled: false
22
+ Exclude:
23
+ - 'spec/**/*_spec.rb'
24
+ - 'test/**/*_test.rb'
25
+
26
+ # For the same reason of EndAlignment, aligning with the case may have a bad impact
27
+ # on a case after a very long variable.
28
+ #
29
+ # invoice_error_message = case error
30
+ # when 1 == 1
31
+ # do_something
32
+ # else
33
+ # do_else
34
+ # end
35
+ #
36
+ Style/CaseIndentation:
37
+ IndentWhenRelativeTo: end
38
+
39
+ # [codesmell]
40
+ Metrics/ClassLength:
41
+ Enabled: false
42
+ Exclude:
43
+ - 'spec/**/*_spec.rb'
44
+ - 'test/**/*_test.rb'
45
+
46
+ # [codesmell]
47
+ Metrics/MethodLength:
48
+ Enabled: false
49
+ Exclude:
50
+ - 'spec/**/*_spec.rb'
51
+ - 'test/**/*_test.rb'
52
+ Max: 10
53
+
54
+ # [codesmell]
55
+ Metrics/ModuleLength:
56
+ Enabled: false
57
+ Exclude:
58
+ - 'spec/**/*_spec.rb'
59
+ - 'test/**/*_test.rb'
60
+
61
+ # [codesmell]
62
+ Metrics/LineLength:
63
+ Enabled: false
64
+ Exclude:
65
+ - 'spec/**/*_spec.rb'
66
+ - 'test/**/*_test.rb'
67
+ Max: 100
68
+
69
+ # [codesmell]
70
+ # I don't really get the point of this cop.
71
+ Performance/RedundantMerge:
72
+ Enabled: false
73
+
74
+ # Do not use "and" or "or" in conditionals, but for readability we can use it
75
+ # to chain executions. Just beware of operator order.
76
+ Style/AndOr:
77
+ EnforcedStyle: conditionals
78
+
79
+ # No specific reason, except that %q() is easier to grep than %()
80
+ Style/BarePercentLiterals:
81
+ EnforcedStyle: percent_q
82
+
83
+ # braces_for_chaining seems a good fit of what we've been doing so far.
84
+ Style/BlockDelimiters:
85
+ EnforcedStyle: braces_for_chaining
86
+ IgnoredMethods:
87
+ - expect
88
+
89
+ # I'd rather use context_dependent, even if I'm not even sure we should enforce a style.
90
+ Style/BracesAroundHashParameters:
91
+ EnforcedStyle: context_dependent
92
+
93
+ # I was a big fan of leading, but trailing seems to be more commonly adopted.
94
+ # At least at the time being.
95
+ Style/DotPosition:
96
+ EnforcedStyle: trailing
97
+
98
+ # Warn on empty else.
99
+ Style/EmptyElse:
100
+ EnforcedStyle: empty
101
+
102
+ # Double empty lines are useful to separate conceptually different methods
103
+ # in the same class or module.
104
+ Style/EmptyLines:
105
+ Enabled: false
106
+
107
+ Style/EmptyLinesAroundBlockBody:
108
+ Exclude:
109
+ # RSpec is all made of blocks. Disable this config in RSpec
110
+ # to be consistent with EmptyLinesAroundClassBody and EmptyLinesAroundModuleBody
111
+ - 'spec/**/*_spec.rb'
112
+ - 'test/**/*_test.rb'
113
+
114
+ # In most cases, a space is nice. Sometimes, it's not.
115
+ # Just be consistent with the rest of the surrounding code.
116
+ Style/EmptyLinesAroundClassBody:
117
+ Enabled: false
118
+
119
+ # In most cases, a space is nice. Sometimes, it's not.
120
+ # Just be consistent with the rest of the surrounding code.
121
+ Style/EmptyLinesAroundModuleBody:
122
+ Enabled: false
123
+
124
+ # I personally don't care about the format style.
125
+ # In most cases I like to use %, but not at the point I want to enforce it
126
+ # as a convention in the entire code.
127
+ Style/FormatString:
128
+ Enabled: false
129
+
130
+ # Multi-line differs from standard indentation, they are indented twice.
131
+ Style/FirstParameterIndentation:
132
+ IndentationWidth: 4
133
+
134
+ # Prefer the latest Hash syntax
135
+ Style/HashSyntax:
136
+ Exclude:
137
+ # But Rakefiles generally have some definition like
138
+ # :default => :test
139
+ # that looks nicer with the old rocket syntax.
140
+ - 'Rakefile'
141
+
142
+ # We want to be able to decide when to use one-line if/unless modifiers.
143
+ Style/IfUnlessModifier:
144
+ Enabled: false
145
+
146
+ # Array indentation should be considered like MultilineMethodCallIndentation indentation
147
+ # and use 4 spaces instead of 2.
148
+ Style/IndentArray:
149
+ IndentationWidth: 4
150
+
151
+ # Hash indentation should be considered like MultilineMethodCallIndentation indentation
152
+ # and use 4 spaces instead of 2.
153
+ Style/IndentHash:
154
+ IndentationWidth: 4
155
+
156
+ # [codesmell]
157
+ # It's not always that bad.
158
+ Style/IfInsideElse:
159
+ Enabled: false
160
+
161
+ # Multi-line differs from standard indentation, they are indented twice.
162
+ Style/MultilineMethodCallIndentation:
163
+ EnforcedStyle: indented
164
+ IndentationWidth: 4
165
+
166
+ # Multi-line differs from standard indentation, they are indented twice.
167
+ Style/MultilineOperationIndentation:
168
+ EnforcedStyle: indented
169
+ IndentationWidth: 4
170
+
171
+ # unless is not always cool.
172
+ Style/NegatedIf:
173
+ Enabled: false
174
+
175
+ # Magic numbers are not welcomed
176
+ Style/NumericLiterals:
177
+ Exclude:
178
+ # however tests can use numeric literals for method calls,
179
+ # without the need to define a variable just for that.
180
+ - 'spec/**/*_spec.rb'
181
+ - 'test/**/*_test.rb'
182
+
183
+ # Do we care?
184
+ Style/RegexpLiteral:
185
+ Enabled: false
186
+
187
+ # There are cases were the inline rescue is ok. We can either downgrade the severity,
188
+ # or rely on the developer judgement on a case-by-case basis.
189
+ Style/RescueModifier:
190
+ Enabled: false
191
+
192
+ # We don't have a preference.
193
+ Style/SpecialGlobalVars:
194
+ Enabled: false
195
+ EnforcedStyle: use_perl_names
196
+
197
+ # We generally use double quotes, sometimes single quotes.
198
+ # Should we enforce it at code level?
199
+ Style/StringLiterals:
200
+ Enabled: false
201
+ EnforcedStyle: double_quotes
202
+
203
+ # It's nice to be consistent. The trailing comma also allows easy reordering,
204
+ # and doesn't cause a diff in Git when you add a line to the bottom.
205
+ Style/TrailingCommaInLiteral:
206
+ EnforcedStyleForMultiline: consistent_comma
207
+
208
+ Style/TrivialAccessors:
209
+ # IgnoreClassMethods because I want to be able to define class-level accessors
210
+ # that sets an instance variable on the metaclass, such as:
211
+ #
212
+ # def self.default=(value)
213
+ # @default = value
214
+ # end
215
+ #
216
+ IgnoreClassMethods: true
@@ -0,0 +1,14 @@
1
+ # This configuration was generated by
2
+ # `rubocop --auto-gen-config`
3
+ # on 2016-03-27 01:01:12 +0100 using RuboCop version 0.38.0.
4
+ # The point is for the user to remove these configuration records
5
+ # one by one as the offenses are removed from the code base.
6
+ # Note that changes in the inspected code, or installation of new
7
+ # versions of RuboCop, may require this file to be generated again.
8
+
9
+ Style/Documentation:
10
+ # Silence this check for now until we fix it.
11
+ Enabled: false
12
+ Exclude:
13
+ - 'spec/**/*'
14
+ - 'test/**/*'
@@ -3,7 +3,22 @@
3
3
  This project uses [Semantic Versioning 2.0.0](http://semver.org/).
4
4
 
5
5
 
6
- #### 3.0
6
+ #### 3.0.0
7
+
8
+ ##### stable
9
+
10
+ - FIXED: The client was using the wrong key to store the ContactsService which could cause conflicts with the DomainsService.
11
+
12
+ - FIXED: `renewDomain` used a wrong path (GH-96).
13
+
14
+ - NEW: Added registrar delegation support (GH-98).
15
+
16
+ - NEW: Added template support (GH-99).
17
+
18
+ - NEW: Added service support (GH-101).
19
+
20
+ - CHANGED: Error detection is now smarter. If the error is deserializable and contains a message, the message is attached to the exception (GH-94, GH-95, GH-100).
21
+
7
22
 
8
23
  ##### beta2
9
24
 
data/Gemfile CHANGED
@@ -4,3 +4,4 @@ gemspec
4
4
 
5
5
  gem 'rake', '< 11'
6
6
  gem 'coveralls', require: false
7
+ gem 'rubocop', require: false
data/Rakefile CHANGED
@@ -1,16 +1,21 @@
1
1
  require 'bundler/gem_tasks'
2
2
 
3
- # Run test by default.
4
- task :default => :spec
3
+ # By default, run tests and linter.
4
+ task default: [:spec, :rubocop]
5
5
 
6
6
 
7
7
  require 'rspec/core/rake_task'
8
8
 
9
9
  RSpec::Core::RakeTask.new do |t|
10
- t.verbose = !!ENV["VERBOSE"]
10
+ t.verbose = !ENV["VERBOSE"].nil?
11
11
  end
12
12
 
13
13
 
14
+ require 'rubocop/rake_task'
15
+
16
+ RuboCop::RakeTask.new
17
+
18
+
14
19
  require 'yard'
15
20
 
16
21
  YARD::Rake::YardocTask.new(:yardoc) do |y|
@@ -11,13 +11,12 @@ module Dnsimple
11
11
  # @see https://developer.dnsimple.com/
12
12
  class Client
13
13
 
14
- HEADER_DOMAIN_API_TOKEN = "X-DNSimple-Domain-Token"
15
- HEADER_AUTHORIZATION = "Authorization"
16
- WILDCARD_ACCOUNT = "_"
14
+ HEADER_AUTHORIZATION = "Authorization".freeze
15
+ WILDCARD_ACCOUNT = "_".freeze
17
16
 
18
17
 
19
18
  # @return [String] The current API version.
20
- API_VERSION = "v2"
19
+ API_VERSION = "v2".freeze
21
20
 
22
21
 
23
22
  # Prepends the correct API version to +path+.
@@ -83,7 +82,7 @@ module Dnsimple
83
82
  # @param [Hash] data The body for the request
84
83
  # @param [Hash] options The query and header params for the request
85
84
  # @return [HTTParty::Response]
86
- def post(path, data = nil, options= {})
85
+ def post(path, data = nil, options = {})
87
86
  execute :post, path, data, options
88
87
  end
89
88
 
@@ -134,11 +133,11 @@ module Dnsimple
134
133
  when 200..299
135
134
  response
136
135
  when 401
137
- raise AuthenticationFailed.new(response["message"])
136
+ raise AuthenticationFailed, response["message"]
138
137
  when 404
139
- raise NotFoundError.new(response)
138
+ raise NotFoundError, response
140
139
  else
141
- raise RequestError.new(response)
140
+ raise RequestError, response
142
141
  end
143
142
  end
144
143
 
@@ -173,8 +172,8 @@ module Dnsimple
173
172
  options = {
174
173
  format: :json,
175
174
  headers: {
176
- 'Accept' => 'application/json',
177
- 'User-Agent' => user_agent
175
+ 'Accept' => 'application/json',
176
+ 'User-Agent' => user_agent,
178
177
  },
179
178
  }
180
179
 
@@ -185,8 +184,6 @@ module Dnsimple
185
184
 
186
185
  if password
187
186
  options[:basic_auth] = { username: username, password: password }
188
- elsif domain_api_token
189
- options[:headers][HEADER_DOMAIN_API_TOKEN] = domain_api_token
190
187
  elsif access_token
191
188
  options[:headers][HEADER_AUTHORIZATION] = "Bearer #{access_token}"
192
189
  else
@@ -3,7 +3,7 @@ module Dnsimple
3
3
 
4
4
  # @return [Dnsimple::Client::ContactsService] The contact-related API proxy.
5
5
  def contacts
6
- @services[:domains] ||= Client::ContactsService.new(self)
6
+ @services[:contacts] ||= Client::ContactsService.new(self)
7
7
  end
8
8
 
9
9
  # @return [Dnsimple::Client::DomainsService] The domain-related API proxy.
@@ -26,6 +26,16 @@ module Dnsimple
26
26
  @services[:registrar] ||= Client::RegistrarService.new(self)
27
27
  end
28
28
 
29
+ # @return [Dnsimple::Client::ServicesService] The one-click-service-related API proxy.
30
+ def services
31
+ @services[:services] ||= Client::ServicesService.new(self)
32
+ end
33
+
34
+ # @return [Dnsimple::Client::TemplatesService] The templates-related API proxy.
35
+ def templates
36
+ @services[:templates] ||= Client::TemplatesService.new(self)
37
+ end
38
+
29
39
  # @return [Dnsimple::Client::TldsService] The tld-related API proxy.
30
40
  def tlds
31
41
  @services[:tlds] ||= Client::TldsService.new(self)
@@ -43,7 +53,14 @@ module Dnsimple
43
53
 
44
54
 
45
55
  # @!class Struct
46
- class ClientService < ::Struct.new(:client)
56
+ class ClientService
57
+
58
+ # @return [Dnsimple::Client]
59
+ attr_reader :client
60
+
61
+ def initialize(client)
62
+ @client = client
63
+ end
47
64
 
48
65
  # Internal helper that loops over a paginated response and returns all the records in the collection.
49
66
  #
@@ -107,11 +124,27 @@ module Dnsimple
107
124
  require_relative 'registrar'
108
125
  require_relative 'registrar_auto_renewal'
109
126
  require_relative 'registrar_whois_privacy'
127
+ require_relative 'registrar_delegation'
110
128
 
111
129
  class RegistrarService < ClientService
112
130
  include Client::Registrar
113
131
  include Client::RegistrarAutoRenewal
114
132
  include Client::RegistrarWhoisPrivacy
133
+ include Client::RegistrarDelegation
134
+ end
135
+
136
+
137
+ require_relative 'services'
138
+
139
+ class ServicesService < ClientService
140
+ include Client::Services
141
+ end
142
+
143
+
144
+ require_relative 'templates'
145
+
146
+ class TemplatesService < ClientService
147
+ include Client::Templates
115
148
  end
116
149
 
117
150
 
@@ -130,6 +163,7 @@ module Dnsimple
130
163
  include Client::ZonesRecords
131
164
  end
132
165
 
166
+
133
167
  require_relative 'webhooks'
134
168
 
135
169
  class WebhooksService < ClientService