dnsimple 2.0.0.alpha2 → 2.0.0.alpha3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.markdown +6 -2
- data/README.markdown +32 -30
- data/dnsimple.gemspec +1 -2
- data/lib/dnsimple.rb +2 -13
- data/lib/dnsimple/client.rb +164 -53
- data/lib/dnsimple/client/certificates_service.rb +98 -0
- data/lib/dnsimple/client/client_service.rb +8 -0
- data/lib/dnsimple/client/contacts_service.rb +82 -0
- data/lib/dnsimple/client/domains_service.rb +333 -0
- data/lib/dnsimple/client/name_servers_service.rb +69 -0
- data/lib/dnsimple/client/registrars_service.rb +105 -0
- data/lib/dnsimple/client/services_service.rb +95 -0
- data/lib/dnsimple/client/templates_service.rb +180 -0
- data/lib/dnsimple/client/users_service.rb +37 -0
- data/lib/dnsimple/compatibility.rb +46 -0
- data/lib/dnsimple/default.rb +86 -0
- data/lib/dnsimple/error.rb +7 -11
- data/lib/dnsimple/extra.rb +54 -0
- data/lib/dnsimple/struct.rb +29 -0
- data/lib/dnsimple/struct/certificate.rb +56 -0
- data/lib/dnsimple/struct/contact.rb +61 -0
- data/lib/dnsimple/struct/domain.rb +40 -0
- data/lib/dnsimple/struct/email_forward.rb +14 -0
- data/lib/dnsimple/struct/extended_attribute.rb +39 -0
- data/lib/dnsimple/struct/membership.rb +22 -0
- data/lib/dnsimple/struct/price.rb +16 -0
- data/lib/dnsimple/struct/record.rb +22 -0
- data/lib/dnsimple/struct/service.rb +19 -0
- data/lib/dnsimple/struct/template.rb +19 -0
- data/lib/dnsimple/struct/template_record.rb +24 -0
- data/lib/dnsimple/struct/transfer_order.rb +10 -0
- data/lib/dnsimple/struct/user.rb +17 -0
- data/lib/dnsimple/struct/whois_privacy.rb +19 -0
- data/lib/dnsimple/version.rb +1 -1
- data/spec/dnsimple/client/certificates_service_spec.rb +196 -0
- data/spec/dnsimple/client/contacts_service_spec.rb +179 -0
- data/spec/dnsimple/client/domains_service_spec.rb +662 -0
- data/spec/dnsimple/client/name_servers_service_spec.rb +131 -0
- data/spec/dnsimple/client/registrars_service_spec.rb +160 -0
- data/spec/dnsimple/client/services_service_spec.rb +162 -0
- data/spec/dnsimple/client/templates_service_spec.rb +371 -0
- data/spec/dnsimple/client/users_service_spec.rb +70 -0
- data/spec/dnsimple/client_spec.rb +108 -99
- data/spec/dnsimple/compatibility_spec.rb +57 -0
- data/spec/files/2fa/exchange-token.http +8 -11
- data/spec/files/badgateway.http +14 -0
- data/spec/files/certificates/configure/success.http +19 -0
- data/spec/files/certificates/index/success.http +1 -1
- data/spec/files/certificates/notfound.http +19 -0
- data/spec/files/certificates/purchase/success.http +19 -0
- data/spec/files/certificates/show/success.http +1 -1
- data/spec/files/certificates/submit/success.http +19 -0
- data/spec/files/contacts/create/badrequest-missingcontact.http +19 -0
- data/spec/files/contacts/create/badrequest-validationerror.http +19 -0
- data/spec/files/contacts/create/created.http +22 -0
- data/spec/files/contacts/delete/success-204.http +18 -0
- data/spec/files/{extended_attributes/com.http → contacts/delete/success.http} +5 -5
- data/spec/files/{domains/auto_renewal_enable → contacts/index}/success.http +6 -6
- data/spec/files/contacts/notfound.http +19 -0
- data/spec/files/contacts/update/success.http +21 -0
- data/spec/files/domains/create/created.http +21 -0
- data/spec/files/domains/index/success.http +11 -9
- data/spec/files/domains/notfound.http +11 -9
- data/spec/files/domains/show/success.http +12 -10
- data/spec/files/domains_autorenewal/disable/success.http +21 -0
- data/spec/files/domains_autorenewal/enable/success.http +21 -0
- data/spec/files/domains_autorenewal/notfound-domain.http +19 -0
- data/spec/files/domains_forwards/create/created.http +22 -0
- data/spec/files/domains_forwards/delete/success.http +17 -0
- data/spec/files/domains_forwards/get/success.http +21 -0
- data/spec/files/domains_forwards/list/success.http +21 -0
- data/spec/files/domains_forwards/notfound-domain.http +19 -0
- data/spec/files/domains_forwards/notfound.http +19 -0
- data/spec/files/domains_records/create/created.http +21 -0
- data/spec/files/domains_records/delete/success-204.http +18 -0
- data/spec/files/{contacts/show/notfound.http → domains_records/delete/success.http} +9 -7
- data/spec/files/{records → domains_records}/index/success.http +0 -0
- data/spec/files/{records/show → domains_records}/notfound.http +1 -1
- data/spec/files/{records → domains_records}/show/success.http +0 -0
- data/spec/files/domains_records/update/success.http +21 -0
- data/spec/files/domains_sharing/create/success.http +21 -0
- data/spec/files/domains_sharing/delete/success.http +17 -0
- data/spec/files/domains_sharing/list/success.http +21 -0
- data/spec/files/domains_sharing/notfound-domain.http +19 -0
- data/spec/files/domains_sharing/notfound.http +19 -0
- data/spec/files/domains_whois_privacy/disable/success.http +21 -0
- data/spec/files/domains_whois_privacy/enable/success.http +22 -0
- data/spec/files/domains_zones/get/success.http +21 -0
- data/spec/files/domains_zones/notfound-domain.http +19 -0
- data/spec/files/{domains/auto_renewal_disable/notfound.http → nameservers/change/success.http} +23 -21
- data/spec/files/nameservers/deregister/success.http +17 -0
- data/spec/files/{domains/auto_renewal_enable/notfound.http → nameservers/list/success.http} +23 -21
- data/spec/files/nameservers/notfound-domain.http +19 -0
- data/spec/files/nameservers/register/badrequest-valueerror.http +19 -0
- data/spec/files/nameservers/register/success.http +21 -0
- data/spec/files/registrars/check/available.http +19 -0
- data/spec/files/registrars/check/registered.http +21 -0
- data/spec/files/registrars/register/badrequest-missingdomain.http +19 -0
- data/spec/files/registrars/register/badrequest-missingregistrant.http +19 -0
- data/spec/files/registrars/register/success.http +21 -0
- data/spec/files/registrars/renew/badrequest-missingrenewal.http +19 -0
- data/spec/files/registrars/renew/badrequest-unable.http +19 -0
- data/spec/files/registrars/renew/success.http +21 -0
- data/spec/files/registrars/transfer/success.http +21 -0
- data/spec/files/registrars_extended_attributes/list/success.http +21 -0
- data/spec/files/registrars_prices/list/success.http +21 -0
- data/spec/files/services/applied/success.http +21 -0
- data/spec/files/services/apply/success.http +21 -0
- data/spec/files/services/available/success.http +21 -0
- data/spec/files/services/index/success.http +21 -0
- data/spec/files/services/notfound.http +19 -0
- data/spec/files/services/show/success.http +21 -0
- data/spec/files/services/unapply/success.http +21 -0
- data/spec/files/subscription/show/success.http +21 -0
- data/spec/files/templates/apply/success.http +21 -0
- data/spec/files/templates/create/created.http +22 -0
- data/spec/files/templates/delete/success-204.http +21 -0
- data/spec/files/templates/delete/success.http +21 -0
- data/spec/files/templates/index/success.http +21 -0
- data/spec/files/templates/notfound.http +19 -0
- data/spec/files/templates/show/success.http +12 -10
- data/spec/files/templates/update/success.http +21 -0
- data/spec/files/templates_records/create/created.http +22 -0
- data/spec/files/templates_records/delete/success-204.http +19 -0
- data/spec/files/templates_records/delete/success.http +21 -0
- data/spec/files/templates_records/index/success.http +21 -0
- data/spec/files/templates_records/notfound.http +19 -0
- data/spec/files/templates_records/show/success.http +21 -0
- data/spec/files/templates_records/update/success.http +21 -0
- data/spec/files/users/user/success.http +21 -0
- data/spec/spec_helper.rb +0 -2
- metadata +206 -73
- data/lib/dnsimple/base.rb +0 -10
- data/lib/dnsimple/certificate.rb +0 -143
- data/lib/dnsimple/contact.rb +0 -157
- data/lib/dnsimple/domain.rb +0 -252
- data/lib/dnsimple/extended_attribute.rb +0 -52
- data/lib/dnsimple/record.rb +0 -94
- data/lib/dnsimple/service.rb +0 -42
- data/lib/dnsimple/template.rb +0 -65
- data/lib/dnsimple/template_record.rb +0 -80
- data/lib/dnsimple/transfer_order.rb +0 -34
- data/lib/dnsimple/user.rb +0 -50
- data/spec/dnsimple/certificate_spec.rb +0 -59
- data/spec/dnsimple/contact_spec.rb +0 -45
- data/spec/dnsimple/domain_spec.rb +0 -241
- data/spec/dnsimple/extended_attributes_spec.rb +0 -54
- data/spec/dnsimple/record_spec.rb +0 -51
- data/spec/dnsimple/template_spec.rb +0 -31
- data/spec/dnsimple/user_spec.rb +0 -70
- data/spec/files/account/user/success.http +0 -19
- data/spec/files/certificates/show/notfound.http +0 -17
- data/spec/files/domains/auto_renewal_disable/success.http +0 -23
- data/spec/files/domains/create/success.http +0 -19
- data/spec/files/extended_attributes/ca.http +0 -19
- data/spec/files/extended_attributes/success.http +0 -19
- data/spec/files/templates/show/notfound.http +0 -17
data/lib/dnsimple/base.rb
DELETED
data/lib/dnsimple/certificate.rb
DELETED
@@ -1,143 +0,0 @@
|
|
1
|
-
module Dnsimple
|
2
|
-
|
3
|
-
# Represents an SSL certificate that has been purchased.
|
4
|
-
#
|
5
|
-
# The certificate must also be submitted using the #submit method
|
6
|
-
# before the Certificate Authority will issue a signed certificate.
|
7
|
-
class Certificate < Base
|
8
|
-
|
9
|
-
# The Fixnum certificate ID in DNSimple.
|
10
|
-
attr_accessor :id
|
11
|
-
|
12
|
-
# The Fixnum associated domain ID.
|
13
|
-
attr_accessor :domain_id
|
14
|
-
|
15
|
-
# The Fixnum associated contact ID.
|
16
|
-
attr_accessor :contact_id
|
17
|
-
|
18
|
-
# The String subdomain on the certificate.
|
19
|
-
attr_accessor :name
|
20
|
-
|
21
|
-
# The String state.
|
22
|
-
attr_accessor :state
|
23
|
-
|
24
|
-
# The String Certificate Signing Request.
|
25
|
-
attr_accessor :csr
|
26
|
-
|
27
|
-
# The String SSL certificate.
|
28
|
-
# It is set only if the order issued by the Certificate Authority.
|
29
|
-
attr_accessor :ssl_certificate
|
30
|
-
|
31
|
-
# The String private key.
|
32
|
-
# It is set only if DNSimple generated the Certificate Signing Request.
|
33
|
-
attr_accessor :private_key
|
34
|
-
|
35
|
-
# The String approver email address
|
36
|
-
# It is set only if the state is submitted.
|
37
|
-
attr_accessor :approver_email
|
38
|
-
|
39
|
-
# The Array of all emails that can be used to approve the certificate.
|
40
|
-
# It is set only if the state is configured.
|
41
|
-
attr_accessor :approver_emails
|
42
|
-
|
43
|
-
# The Date the certificate was create in DNSimple.
|
44
|
-
attr_accessor :created_at
|
45
|
-
|
46
|
-
# The Date the certificate was last updated in DNSimple.
|
47
|
-
attr_accessor :updated_at
|
48
|
-
|
49
|
-
# The Date the certificate was configured.
|
50
|
-
attr_accessor :configured_at
|
51
|
-
|
52
|
-
# The Date the certificate will expire.
|
53
|
-
attr_accessor :expires_on
|
54
|
-
|
55
|
-
# The associated Domain.
|
56
|
-
attr_accessor :domain
|
57
|
-
|
58
|
-
|
59
|
-
# Purchases a certificate under the given domain with the given name.
|
60
|
-
#
|
61
|
-
# The name will be appended to the domain name, and thus should only be the subdomain part.
|
62
|
-
#
|
63
|
-
# Invoking this method DNSimple will immediately charge
|
64
|
-
# your credit card on file at DNSimple for the full certificate price.
|
65
|
-
#
|
66
|
-
# For wildcard certificates an asterisk must appear in the name.
|
67
|
-
#
|
68
|
-
# @example Purchase a single-hostname certificate
|
69
|
-
# Dnsimple::Certificate.purchase(domain, 'www', contact)
|
70
|
-
#
|
71
|
-
# @example Purchase a wildcard certificate
|
72
|
-
# Dnsimple::Certificate.purchase(domain, '*', contact)
|
73
|
-
#
|
74
|
-
def self.purchase(domain, name, contact, options={})
|
75
|
-
certificate_hash = {
|
76
|
-
:name => name,
|
77
|
-
:contact_id => contact.id
|
78
|
-
}
|
79
|
-
|
80
|
-
options.merge!({:body => {:certificate => certificate_hash}})
|
81
|
-
|
82
|
-
response = Client.post("/v1/domains/#{domain.name}/certificates", options)
|
83
|
-
|
84
|
-
case response.code
|
85
|
-
when 201
|
86
|
-
new({ :domain => domain }.merge(response["certificate"]))
|
87
|
-
when 406
|
88
|
-
raise RecordExists, "Certificate for #{domain.name} already exists"
|
89
|
-
else
|
90
|
-
raise RequestError.new("Error purchasing certificate", response)
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
# Get an array of all certificates for the given domain.
|
95
|
-
def self.all(domain, options={})
|
96
|
-
response = Client.get("/v1/domains/#{domain.name}/certificates", options)
|
97
|
-
|
98
|
-
case response.code
|
99
|
-
when 200
|
100
|
-
response.map { |r| new({:domain => domain}.merge(r["certificate"])) }
|
101
|
-
else
|
102
|
-
raise RequestError.new("Error listing certificates", response)
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
# Find a specific certificate for the given domain.
|
107
|
-
def self.find(domain, id, options = {})
|
108
|
-
response = Client.get("/v1/domains/#{domain.name}/certificates/#{id}", options)
|
109
|
-
|
110
|
-
case response.code
|
111
|
-
when 200
|
112
|
-
new({:domain => domain}.merge(response["certificate"]))
|
113
|
-
when 404
|
114
|
-
raise RecordNotFound, "Could not find certificate #{id} for domain #{domain.name}"
|
115
|
-
else
|
116
|
-
raise RequestError.new("Error finding certificate", response)
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
|
-
|
121
|
-
# Get the fully-qualified domain name for the certificate. This is the
|
122
|
-
# domain.name joined with the certificate name, separated by a period.
|
123
|
-
def fqdn
|
124
|
-
[name, domain.name].delete_if { |p| p !~ BLANK_REGEX }.join(".")
|
125
|
-
end
|
126
|
-
|
127
|
-
def submit(approver_email, options={})
|
128
|
-
raise Error, "Approver email is required" unless approver_email
|
129
|
-
|
130
|
-
options.merge!(:body => {:certificate => {:approver_email => approver_email}})
|
131
|
-
|
132
|
-
response = Client.put("/v1/domains/#{domain.name}/certificates/#{id}/submit", options)
|
133
|
-
|
134
|
-
case response.code
|
135
|
-
when 200
|
136
|
-
Certificate.new({ :domain => domain }.merge(response["certificate"]))
|
137
|
-
else
|
138
|
-
raise RequestError.new("Error submitting certificate", response)
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
end
|
143
|
-
end
|
data/lib/dnsimple/contact.rb
DELETED
@@ -1,157 +0,0 @@
|
|
1
|
-
module Dnsimple
|
2
|
-
|
3
|
-
# Represents a contact.
|
4
|
-
class Contact < Base
|
5
|
-
|
6
|
-
Aliases = {
|
7
|
-
'first' => 'first_name',
|
8
|
-
'last' => 'last_name',
|
9
|
-
'state' => 'state_province',
|
10
|
-
'province' => 'state_province',
|
11
|
-
'state_or_province' => 'state_province',
|
12
|
-
'email' => 'email_address',
|
13
|
-
}
|
14
|
-
|
15
|
-
# The contact ID in DNSimple
|
16
|
-
attr_accessor :id
|
17
|
-
|
18
|
-
# The contact first name
|
19
|
-
attr_accessor :first_name
|
20
|
-
|
21
|
-
# The contact last name
|
22
|
-
attr_accessor :last_name
|
23
|
-
|
24
|
-
# The contact's job title
|
25
|
-
attr_accessor :job_title
|
26
|
-
|
27
|
-
# The name of the organization in which the contact works
|
28
|
-
attr_accessor :organization_name
|
29
|
-
|
30
|
-
# The contact email address
|
31
|
-
attr_accessor :email_address
|
32
|
-
|
33
|
-
# The contact phone number
|
34
|
-
attr_accessor :phone
|
35
|
-
|
36
|
-
# The contact phone extension (may be omitted)
|
37
|
-
attr_accessor :phone_ext
|
38
|
-
|
39
|
-
# The contact fax number (may be omitted)
|
40
|
-
attr_accessor :fax
|
41
|
-
|
42
|
-
# The contact street address
|
43
|
-
attr_accessor :address1
|
44
|
-
|
45
|
-
# Apartment or suite number
|
46
|
-
attr_accessor :address2
|
47
|
-
|
48
|
-
# The city name
|
49
|
-
attr_accessor :city
|
50
|
-
|
51
|
-
# The state or province name
|
52
|
-
attr_accessor :state_province
|
53
|
-
|
54
|
-
# The contact postal code
|
55
|
-
attr_accessor :postal_code
|
56
|
-
|
57
|
-
# The contact country (as a 2-character country code)
|
58
|
-
attr_accessor :country
|
59
|
-
|
60
|
-
# When the contact was created in DNSimple
|
61
|
-
attr_accessor :created_at
|
62
|
-
|
63
|
-
# When the contact was last updated in DNSimple
|
64
|
-
attr_accessor :updated_at
|
65
|
-
|
66
|
-
|
67
|
-
# Map an aliased field name to it's real name. For example, if you
|
68
|
-
# pass "first" it will be resolved to "first_name", "email" is resolved
|
69
|
-
# to "email_address" and so on.
|
70
|
-
def self.resolve(name)
|
71
|
-
Contact::Aliases[name.to_s] || name
|
72
|
-
end
|
73
|
-
|
74
|
-
def self.resolve_attributes(attributes)
|
75
|
-
resolved_attributes = {}
|
76
|
-
attributes.each do |k, v|
|
77
|
-
resolved_attributes[resolve(k)] = v
|
78
|
-
end
|
79
|
-
resolved_attributes
|
80
|
-
end
|
81
|
-
|
82
|
-
# Create the contact with the given attributes in DNSimple.
|
83
|
-
# This method returns a Contact instance of the contact is created
|
84
|
-
# and raises an error otherwise.
|
85
|
-
def self.create(attributes, options={})
|
86
|
-
contact_hash = resolve_attributes(attributes)
|
87
|
-
|
88
|
-
options.merge!({:body => {:contact => contact_hash}})
|
89
|
-
response = Client.post("/v1/contacts", options)
|
90
|
-
|
91
|
-
case response.code
|
92
|
-
when 201
|
93
|
-
new(response["contact"])
|
94
|
-
else
|
95
|
-
raise RequestError.new("Error creating contact", response)
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
def self.find(id, options={})
|
100
|
-
response = Client.get("/v1/contacts/#{id}", options)
|
101
|
-
|
102
|
-
case response.code
|
103
|
-
when 200
|
104
|
-
new(response["contact"])
|
105
|
-
when 404
|
106
|
-
raise RecordNotFound, "Could not find contact #{id}"
|
107
|
-
else
|
108
|
-
raise RequestError.new("Error finding contact", response)
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
def self.all(options={})
|
113
|
-
response = Client.get("/v1/contacts", options)
|
114
|
-
|
115
|
-
case response.code
|
116
|
-
when 200
|
117
|
-
response.map { |r| new(r["contact"]) }
|
118
|
-
else
|
119
|
-
raise RequestError.new("Error listing contacts", response)
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
|
124
|
-
def name
|
125
|
-
[first_name, last_name].join(' ')
|
126
|
-
end
|
127
|
-
|
128
|
-
def save(options={})
|
129
|
-
contact_hash = {}
|
130
|
-
%w(first_name last_name organization_name job_title address1 address2 city
|
131
|
-
state_province postal_code country email_address phone phone_ext fax).each do |attribute|
|
132
|
-
contact_hash[Contact.resolve(attribute)] = self.send(attribute)
|
133
|
-
end
|
134
|
-
|
135
|
-
options.merge!({:body => {:contact => contact_hash}})
|
136
|
-
|
137
|
-
response = Client.put("/v1/contacts/#{id}", options)
|
138
|
-
|
139
|
-
case response.code
|
140
|
-
when 200
|
141
|
-
return self
|
142
|
-
else
|
143
|
-
raise RequestError.new("Error updating contact", response)
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
# #delete the contact from DNSimple.
|
148
|
-
#
|
149
|
-
# WARNING: this cannot be undone.
|
150
|
-
#
|
151
|
-
def delete(options={})
|
152
|
-
Client.delete("/v1/contacts/#{id}", options)
|
153
|
-
end
|
154
|
-
alias :destroy :delete
|
155
|
-
|
156
|
-
end
|
157
|
-
end
|
data/lib/dnsimple/domain.rb
DELETED
@@ -1,252 +0,0 @@
|
|
1
|
-
module Dnsimple
|
2
|
-
class Domain < Base
|
3
|
-
|
4
|
-
# The Fixnum domain ID in DNSimple.
|
5
|
-
attr_accessor :id
|
6
|
-
|
7
|
-
# The Fixnum associated user ID.
|
8
|
-
attr_accessor :user_id
|
9
|
-
|
10
|
-
# The Fixnum associated registrant ID.
|
11
|
-
attr_accessor :registrant_id
|
12
|
-
|
13
|
-
# The String name.
|
14
|
-
attr_accessor :name
|
15
|
-
|
16
|
-
# The String state.
|
17
|
-
attr_accessor :state
|
18
|
-
|
19
|
-
# The String API token
|
20
|
-
attr_accessor :token
|
21
|
-
|
22
|
-
# Is the domain set to auto renew?
|
23
|
-
attr_accessor :auto_renew
|
24
|
-
|
25
|
-
# Is the whois information protected?
|
26
|
-
attr_accessor :whois_protected
|
27
|
-
|
28
|
-
# The Date the domain will expire.
|
29
|
-
attr_accessor :expires_on
|
30
|
-
|
31
|
-
# The Date the domain was created in DNSimple.
|
32
|
-
attr_accessor :created_at
|
33
|
-
|
34
|
-
# The Date the domain was last update in DNSimple.
|
35
|
-
attr_accessor :updated_at
|
36
|
-
|
37
|
-
|
38
|
-
# Lists the domains in the DNSimple account.
|
39
|
-
#
|
40
|
-
# @return [Array<Domain>]
|
41
|
-
def self.list(options = {})
|
42
|
-
response = Client.get("/v1/domains", options)
|
43
|
-
|
44
|
-
case response.code
|
45
|
-
when 200
|
46
|
-
response.map { |r| new(r["domain"]) }
|
47
|
-
else
|
48
|
-
raise RequestError.new("Error listing domains", response)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
def self.all(*args); list(*args); end
|
53
|
-
|
54
|
-
# Creates the domain in the DNSimple account.
|
55
|
-
#
|
56
|
-
# @param [String] name The domain name.
|
57
|
-
#
|
58
|
-
# @return [Domain] The newly created domain.
|
59
|
-
# @raise [RequestError] When the request fails.
|
60
|
-
def self.create(name)
|
61
|
-
options = { body: { domain: { name: name }}}
|
62
|
-
|
63
|
-
response = Client.post("/v1/domains", options)
|
64
|
-
|
65
|
-
case response.code
|
66
|
-
when 201
|
67
|
-
new(response["domain"])
|
68
|
-
else
|
69
|
-
raise RequestError.new("Error creating domain", response)
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
# Gets a specific domain in the account.
|
74
|
-
#
|
75
|
-
# @param [Fixnum,String] id Either the numeric ID or the fully-qualified domain name.
|
76
|
-
#
|
77
|
-
# @return [Domain] The domain.
|
78
|
-
# @raise [RecordNotFound] When the domain doesn't exist.
|
79
|
-
# @raise [RequestError] When the request fails.
|
80
|
-
def self.find(id)
|
81
|
-
response = Client.get("/v1/domains/#{id}")
|
82
|
-
|
83
|
-
case response.code
|
84
|
-
when 200
|
85
|
-
new(response["domain"])
|
86
|
-
when 404
|
87
|
-
raise RecordNotFound, "Could not find domain #{id}"
|
88
|
-
else
|
89
|
-
raise RequestError.new("Error finding domain", response)
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
# Deletes a specific domain from the account.
|
94
|
-
#
|
95
|
-
# WARNING: this cannot be undone.
|
96
|
-
#
|
97
|
-
# @param [Fixnum,String] id Either the numeric ID or the fully-qualified domain name.
|
98
|
-
#
|
99
|
-
# @return [void]
|
100
|
-
# @raise [RecordNotFound] When the domain doesn't exist.
|
101
|
-
# @raise [RequestError] When the request fails.
|
102
|
-
def self.delete(id)
|
103
|
-
response = Client.delete("/v1/domains/#{id}")
|
104
|
-
|
105
|
-
case response.code
|
106
|
-
when 200, 204
|
107
|
-
true
|
108
|
-
when 404
|
109
|
-
raise RecordNotFound, "Could not find domain #{id}"
|
110
|
-
else
|
111
|
-
raise RequestError.new("Error deleting domain", response)
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
# Check the availability of a name
|
116
|
-
def self.check(name, options={})
|
117
|
-
response = Client.get("/v1/domains/#{name}/check", options)
|
118
|
-
|
119
|
-
case response.code
|
120
|
-
when 200
|
121
|
-
"registered"
|
122
|
-
when 404
|
123
|
-
"available"
|
124
|
-
else
|
125
|
-
raise RequestError.new("Error checking availability", response)
|
126
|
-
end
|
127
|
-
end
|
128
|
-
|
129
|
-
# Purchase a domain name.
|
130
|
-
def self.register(name, registrant={}, extended_attributes={}, options={})
|
131
|
-
body = {:domain => {:name => name}}
|
132
|
-
if registrant
|
133
|
-
if registrant[:id]
|
134
|
-
body[:domain][:registrant_id] = registrant[:id]
|
135
|
-
else
|
136
|
-
body.merge!(:contact => Contact.resolve_attributes(registrant))
|
137
|
-
end
|
138
|
-
end
|
139
|
-
body.merge!(:extended_attribute => extended_attributes)
|
140
|
-
options.merge!({:body => body})
|
141
|
-
|
142
|
-
response = Client.post("/v1/domain_registrations", options)
|
143
|
-
|
144
|
-
case response.code
|
145
|
-
when 201
|
146
|
-
return Domain.new(response["domain"])
|
147
|
-
else
|
148
|
-
raise RequestError.new("Error registering domain", response)
|
149
|
-
end
|
150
|
-
end
|
151
|
-
|
152
|
-
|
153
|
-
# Enable auto_renew on the domain
|
154
|
-
def enable_auto_renew
|
155
|
-
return if auto_renew
|
156
|
-
auto_renew!(:post)
|
157
|
-
end
|
158
|
-
|
159
|
-
# Disable auto_renew on the domain
|
160
|
-
def disable_auto_renew
|
161
|
-
return unless auto_renew
|
162
|
-
auto_renew!(:delete)
|
163
|
-
end
|
164
|
-
|
165
|
-
# Deletes this domain from the account.
|
166
|
-
#
|
167
|
-
# WARNING: this cannot be undone.
|
168
|
-
#
|
169
|
-
# @see .delete
|
170
|
-
def delete
|
171
|
-
self.class.delete(name)
|
172
|
-
end
|
173
|
-
alias :destroy :delete
|
174
|
-
|
175
|
-
# Apply the given named template to the domain. This will add
|
176
|
-
# all of the records in the template to the domain.
|
177
|
-
def apply(template, options={})
|
178
|
-
options.merge!(:body => {})
|
179
|
-
template = resolve_template(template)
|
180
|
-
|
181
|
-
Client.post("/v1/domains/#{name}/templates/#{template.id}/apply", options)
|
182
|
-
end
|
183
|
-
|
184
|
-
def resolve_template(template)
|
185
|
-
case template
|
186
|
-
when Template
|
187
|
-
template
|
188
|
-
else
|
189
|
-
Template.find(template)
|
190
|
-
end
|
191
|
-
end
|
192
|
-
|
193
|
-
def applied_services(options={})
|
194
|
-
response = Client.get("/v1/domains/#{name}/applied_services", options)
|
195
|
-
|
196
|
-
case response.code
|
197
|
-
when 200
|
198
|
-
response.map { |r| Service.new(r["service"]) }
|
199
|
-
else
|
200
|
-
raise RequestError.new("Error listing applied services", response)
|
201
|
-
end
|
202
|
-
end
|
203
|
-
|
204
|
-
def available_services(options={})
|
205
|
-
response = Client.get("/v1/domains/#{name}/available_services", options)
|
206
|
-
|
207
|
-
case response.code
|
208
|
-
when 200
|
209
|
-
response.map { |r| Service.new(r["service"]) }
|
210
|
-
else
|
211
|
-
raise RequestError.new("Error listing available services", response)
|
212
|
-
end
|
213
|
-
end
|
214
|
-
|
215
|
-
def add_service(id_or_short_name, options={})
|
216
|
-
options.merge!(:body => {:service => {:id => id_or_short_name}})
|
217
|
-
response = Client.post("/v1/domains/#{name}/applied_services", options)
|
218
|
-
|
219
|
-
case response.code
|
220
|
-
when 200
|
221
|
-
true
|
222
|
-
else
|
223
|
-
raise RequestError.new("Error adding service", response)
|
224
|
-
end
|
225
|
-
end
|
226
|
-
|
227
|
-
def remove_service(id, options={})
|
228
|
-
response = Client.delete("/v1/domains/#{name}/applied_services/#{id}", options)
|
229
|
-
|
230
|
-
case response.code
|
231
|
-
when 200
|
232
|
-
true
|
233
|
-
else
|
234
|
-
raise RequestError.new("Error removing service", response)
|
235
|
-
end
|
236
|
-
end
|
237
|
-
|
238
|
-
|
239
|
-
private
|
240
|
-
|
241
|
-
def auto_renew!(method)
|
242
|
-
response = Client.send(method, "/v1/domains/#{name}/auto_renewal")
|
243
|
-
case response.code
|
244
|
-
when 200
|
245
|
-
self.auto_renew = response['domain']['auto_renew']
|
246
|
-
else
|
247
|
-
raise RequestError.new("Error setting auto_renew", response)
|
248
|
-
end
|
249
|
-
end
|
250
|
-
|
251
|
-
end
|
252
|
-
end
|