sparqcode-dnsimple-ruby 1.2.6
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.
- data/.bundle/config +3 -0
- data/.rvmrc +1 -0
- data/Gemfile +16 -0
- data/Gemfile.lock +71 -0
- data/LICENSE +22 -0
- data/README +125 -0
- data/README.rdoc +125 -0
- data/README.textile +161 -0
- data/Rakefile +33 -0
- data/VERSION +1 -0
- data/bin/dnsimple +4 -0
- data/bin/dnsimple.rb +153 -0
- data/dnsimple-ruby.gemspec +191 -0
- data/features/README +12 -0
- data/features/cli/certificates/purchase_certificate.feature +10 -0
- data/features/cli/contacts/create_contact.feature +10 -0
- data/features/cli/domains/check_domain.feature +10 -0
- data/features/cli/domains/create_domain.feature +10 -0
- data/features/cli/domains/delete_domain.feature +11 -0
- data/features/cli/domains/register_domain.feature +10 -0
- data/features/cli/records/create_ptr_record.feature +11 -0
- data/features/cli/records/create_record.feature +12 -0
- data/features/cli/records/delete_record.feature +14 -0
- data/features/cli/templates/apply_template.feature +11 -0
- data/features/step_definitions/certificate_steps.rb +3 -0
- data/features/step_definitions/cli_steps.rb +8 -0
- data/features/step_definitions/domain_steps.rb +32 -0
- data/features/step_definitions/record_steps.rb +38 -0
- data/features/step_definitions/template_steps.rb +9 -0
- data/features/support/env.rb +17 -0
- data/fixtures/vcr_cassettes/DNSimple_Certificate/_all.yml +44 -0
- data/fixtures/vcr_cassettes/DNSimple_Certificate/_purchase.yml +44 -0
- data/fixtures/vcr_cassettes/DNSimple_Certificate/_submit.yml +44 -0
- data/fixtures/vcr_cassettes/DNSimple_Contact/a_new_contact.yml +42 -0
- data/fixtures/vcr_cassettes/DNSimple_Contact/an_existing_contact.yml +42 -0
- data/fixtures/vcr_cassettes/DNSimple_Domain/_all.yml +130 -0
- data/fixtures/vcr_cassettes/DNSimple_Domain/applying_templates.yml +216 -0
- data/fixtures/vcr_cassettes/DNSimple_Domain/creating_a_new_domain.yml +44 -0
- data/fixtures/vcr_cassettes/DNSimple_Domain/finding_an_existing_domain/by_id.yml +44 -0
- data/fixtures/vcr_cassettes/DNSimple_Domain/finding_an_existing_domain/by_name.yml +44 -0
- data/fixtures/vcr_cassettes/DNSimple_Domain/registration/with_a_new_registrant_contact.yml +44 -0
- data/fixtures/vcr_cassettes/DNSimple_Domain/registration/with_an_existing_contact.yml +44 -0
- data/fixtures/vcr_cassettes/DNSimple_Domain/setting_name_servers.yml +30 -0
- data/fixtures/vcr_cassettes/DNSimple_ExtendedAttribute/list_extended_attributes/for_ca.yml +40 -0
- data/fixtures/vcr_cassettes/DNSimple_ExtendedAttribute/list_extended_attributes/for_com.yml +40 -0
- data/fixtures/vcr_cassettes/DNSimple_Record/_all.yml +173 -0
- data/fixtures/vcr_cassettes/DNSimple_Record/creating_a_new_record.yml +44 -0
- data/fixtures/vcr_cassettes/DNSimple_Record/find_a_record.yml +44 -0
- data/fixtures/vcr_cassettes/DNSimple_Template/a_template.yml +44 -0
- data/fixtures/vcr_cassettes/DNSimple_User/_me.yml +42 -0
- data/lib/dnsimple.rb +19 -0
- data/lib/dnsimple/certificate.rb +158 -0
- data/lib/dnsimple/cli.rb +122 -0
- data/lib/dnsimple/client.rb +74 -0
- data/lib/dnsimple/command.rb +10 -0
- data/lib/dnsimple/commands/add_service.rb +16 -0
- data/lib/dnsimple/commands/add_template_record.rb +18 -0
- data/lib/dnsimple/commands/apply_template.rb +15 -0
- data/lib/dnsimple/commands/check_domain.rb +11 -0
- data/lib/dnsimple/commands/clear_domain.rb +16 -0
- data/lib/dnsimple/commands/create_contact.rb +21 -0
- data/lib/dnsimple/commands/create_domain.rb +16 -0
- data/lib/dnsimple/commands/create_record.rb +20 -0
- data/lib/dnsimple/commands/create_template.rb +14 -0
- data/lib/dnsimple/commands/delete_contact.rb +14 -0
- data/lib/dnsimple/commands/delete_domain.rb +14 -0
- data/lib/dnsimple/commands/delete_record.rb +16 -0
- data/lib/dnsimple/commands/delete_template.rb +13 -0
- data/lib/dnsimple/commands/delete_template_record.rb +16 -0
- data/lib/dnsimple/commands/describe_certificate.rb +34 -0
- data/lib/dnsimple/commands/describe_contact.rb +25 -0
- data/lib/dnsimple/commands/describe_domain.rb +14 -0
- data/lib/dnsimple/commands/describe_record.rb +16 -0
- data/lib/dnsimple/commands/describe_service.rb +12 -0
- data/lib/dnsimple/commands/describe_user.rb +18 -0
- data/lib/dnsimple/commands/list_applied_services.rb +16 -0
- data/lib/dnsimple/commands/list_available_services.rb +16 -0
- data/lib/dnsimple/commands/list_certificates.rb +15 -0
- data/lib/dnsimple/commands/list_contacts.rb +13 -0
- data/lib/dnsimple/commands/list_domains.rb +13 -0
- data/lib/dnsimple/commands/list_extended_attributes.rb +25 -0
- data/lib/dnsimple/commands/list_records.rb +21 -0
- data/lib/dnsimple/commands/list_services.rb +14 -0
- data/lib/dnsimple/commands/list_template_records.rb +17 -0
- data/lib/dnsimple/commands/list_templates.rb +13 -0
- data/lib/dnsimple/commands/purchase_certificate.rb +19 -0
- data/lib/dnsimple/commands/register_domain.rb +33 -0
- data/lib/dnsimple/commands/remove_service.rb +14 -0
- data/lib/dnsimple/commands/submit_certificate.rb +19 -0
- data/lib/dnsimple/commands/transfer_domain.rb +21 -0
- data/lib/dnsimple/commands/update_contact.rb +25 -0
- data/lib/dnsimple/commands/update_record.rb +23 -0
- data/lib/dnsimple/contact.rb +181 -0
- data/lib/dnsimple/domain.rb +246 -0
- data/lib/dnsimple/error.rb +32 -0
- data/lib/dnsimple/extended_attribute.rb +73 -0
- data/lib/dnsimple/record.rb +128 -0
- data/lib/dnsimple/service.rb +58 -0
- data/lib/dnsimple/template.rb +91 -0
- data/lib/dnsimple/template_record.rb +103 -0
- data/lib/dnsimple/transfer_order.rb +45 -0
- data/lib/dnsimple/user.rb +44 -0
- data/spec/README +10 -0
- data/spec/certificate_spec.rb +46 -0
- data/spec/command_spec.rb +19 -0
- data/spec/commands/add_service_spec.rb +29 -0
- data/spec/commands/create_record_spec.rb +23 -0
- data/spec/commands/list_records_spec.rb +34 -0
- data/spec/commands/purchase_certificate_spec.rb +24 -0
- data/spec/commands/submit_certificate_spec.rb +19 -0
- data/spec/contact_spec.rb +35 -0
- data/spec/domain_spec.rb +97 -0
- data/spec/extended_attributes_spec.rb +19 -0
- data/spec/record_spec.rb +59 -0
- data/spec/spec_helper.rb +22 -0
- data/spec/template_spec.rb +11 -0
- data/spec/user_spec.rb +23 -0
- metadata +353 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
module DNSimple
|
|
2
|
+
class Error < StandardError
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
class DomainError < DNSimple::Error
|
|
6
|
+
def initialize(domain, messages)
|
|
7
|
+
@domain = domain
|
|
8
|
+
@messages = messages
|
|
9
|
+
super "An error occurred: #{messages}"
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
class RecordExists < DomainError
|
|
14
|
+
def initialize(domain, message)
|
|
15
|
+
super(domain, message)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
class RecordNotFound < DNSimple::Error; end
|
|
20
|
+
|
|
21
|
+
class AuthenticationFailed < DNSimple::Error
|
|
22
|
+
def initialize(message="Authentication failed")
|
|
23
|
+
super(message)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
class UserNotFound < DNSimple::Error; end
|
|
28
|
+
|
|
29
|
+
class CertificateExists < DNSimple::Error; end
|
|
30
|
+
|
|
31
|
+
class CertificateNotFound < DNSimple::Error; end
|
|
32
|
+
end
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
module DNSimple #:nodoc:
|
|
2
|
+
# Used for domains that require extended attributes.
|
|
3
|
+
class ExtendedAttribute
|
|
4
|
+
# An option for an extended attribute
|
|
5
|
+
class Option
|
|
6
|
+
# The option name
|
|
7
|
+
attr_accessor :title
|
|
8
|
+
|
|
9
|
+
# The option value
|
|
10
|
+
attr_accessor :value
|
|
11
|
+
|
|
12
|
+
# A long description of the option
|
|
13
|
+
attr_accessor :description
|
|
14
|
+
|
|
15
|
+
#:nodoc:
|
|
16
|
+
def initialize(attributes)
|
|
17
|
+
attributes.each do |key, value|
|
|
18
|
+
m = "#{key}=".to_sym
|
|
19
|
+
self.send(m, value) if self.respond_to?(m)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
include HTTParty
|
|
25
|
+
|
|
26
|
+
# The extended attribute name
|
|
27
|
+
attr_accessor :name
|
|
28
|
+
|
|
29
|
+
# A description of the extended attribute
|
|
30
|
+
attr_accessor :description
|
|
31
|
+
|
|
32
|
+
# Boolean indicating if the extended attribute is required
|
|
33
|
+
attr_accessor :required
|
|
34
|
+
|
|
35
|
+
#:nodoc:
|
|
36
|
+
def initialize(attributes)
|
|
37
|
+
attributes.each do |key, value|
|
|
38
|
+
m = "#{key}=".to_sym
|
|
39
|
+
self.send(m, value) if self.respond_to?(m)
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# An array of options for the extended attribute
|
|
44
|
+
def options
|
|
45
|
+
@options ||= []
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def options=(opts)
|
|
49
|
+
@options = []
|
|
50
|
+
opts.each do |opt|
|
|
51
|
+
@options << Option.new(opt)
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Find the extended attributes for the given TLD
|
|
56
|
+
def self.find(tld, options={})
|
|
57
|
+
options.merge!({:basic_auth => Client.credentials})
|
|
58
|
+
|
|
59
|
+
response = self.get("#{Client.base_uri}/extended_attributes/#{tld}.json", options)
|
|
60
|
+
|
|
61
|
+
pp response if Client.debug?
|
|
62
|
+
|
|
63
|
+
case response.code
|
|
64
|
+
when 200
|
|
65
|
+
response.map { |r| ExtendedAttribute.new(r) }
|
|
66
|
+
when 401
|
|
67
|
+
raise RuntimeError, "Authentication failed"
|
|
68
|
+
else
|
|
69
|
+
raise RuntimeError, "Error: #{response.code}"
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
module DNSimple
|
|
2
|
+
class Record
|
|
3
|
+
include HTTParty
|
|
4
|
+
|
|
5
|
+
attr_accessor :id
|
|
6
|
+
|
|
7
|
+
attr_accessor :domain
|
|
8
|
+
|
|
9
|
+
attr_accessor :name
|
|
10
|
+
|
|
11
|
+
attr_accessor :content
|
|
12
|
+
|
|
13
|
+
attr_accessor :record_type
|
|
14
|
+
|
|
15
|
+
attr_accessor :ttl
|
|
16
|
+
|
|
17
|
+
attr_accessor :prio
|
|
18
|
+
|
|
19
|
+
#:nodoc:
|
|
20
|
+
def initialize(attributes)
|
|
21
|
+
attributes.each do |key, value|
|
|
22
|
+
m = "#{key}=".to_sym
|
|
23
|
+
self.send(m, value) if self.respond_to?(m)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def fqdn
|
|
28
|
+
[name, domain.name].delete_if { |v| v !~ DNSimple::BLANK_REGEX }.join(".")
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def save(options={})
|
|
32
|
+
record_hash = {}
|
|
33
|
+
%w(name content ttl prio).each do |attribute|
|
|
34
|
+
record_hash[DNSimple::Record.resolve(attribute)] = self.send(attribute)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
options.merge!(DNSimple::Client.standard_options_with_credentials)
|
|
38
|
+
options.merge!(:body => {:record => record_hash})
|
|
39
|
+
|
|
40
|
+
response = self.class.put("#{DNSimple::Client.base_uri}/domains/#{domain.id}/records/#{id}.json", options)
|
|
41
|
+
|
|
42
|
+
pp response if DNSimple::Client.debug?
|
|
43
|
+
|
|
44
|
+
case response.code
|
|
45
|
+
when 200
|
|
46
|
+
return self
|
|
47
|
+
when 401
|
|
48
|
+
raise DNSimple::AuthenticationFailed
|
|
49
|
+
else
|
|
50
|
+
raise DNSimple::Error, "Failed to update record: #{response.inspect}"
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def delete(options={})
|
|
55
|
+
options.merge!(DNSimple::Client.standard_options_with_credentials)
|
|
56
|
+
self.class.delete("#{DNSimple::Client.base_uri}/domains/#{domain.id}/records/#{id}", options)
|
|
57
|
+
end
|
|
58
|
+
alias :destroy :delete
|
|
59
|
+
|
|
60
|
+
def self.resolve(name)
|
|
61
|
+
aliases = {
|
|
62
|
+
'priority' => 'prio',
|
|
63
|
+
'time-to-live' => 'ttl'
|
|
64
|
+
}
|
|
65
|
+
aliases[name] || name
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def self.create(domain, name, record_type, content, options={})
|
|
69
|
+
record_hash = {:name => name, :record_type => record_type, :content => content}
|
|
70
|
+
record_hash[:ttl] = options.delete(:ttl) || 3600
|
|
71
|
+
record_hash[:prio] = options.delete(:priority)
|
|
72
|
+
record_hash[:prio] = options.delete(:prio) || ''
|
|
73
|
+
|
|
74
|
+
options.merge!(DNSimple::Client.standard_options_with_credentials)
|
|
75
|
+
options.merge!({:body => {:record => record_hash}})
|
|
76
|
+
|
|
77
|
+
response = self.post("#{DNSimple::Client.base_uri}/domains/#{domain.name}/records", options)
|
|
78
|
+
|
|
79
|
+
pp response if DNSimple::Client.debug?
|
|
80
|
+
|
|
81
|
+
case response.code
|
|
82
|
+
when 201
|
|
83
|
+
return DNSimple::Record.new({:domain => domain}.merge(response["record"]))
|
|
84
|
+
when 401
|
|
85
|
+
raise DNSimple::AuthenticationFailed
|
|
86
|
+
when 406
|
|
87
|
+
raise DNSimple::RecordExists.new("#{name}.#{domain.name}", response["errors"])
|
|
88
|
+
else
|
|
89
|
+
raise DNSimple::Error, "Failed to create #{name}.#{domain.name}: #{response["errors"]}"
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def self.find(domain, id, options={})
|
|
94
|
+
options.merge!(DNSimple::Client.standard_options_with_credentials)
|
|
95
|
+
response = self.get("#{DNSimple::Client.base_uri}/domains/#{domain.name}/records/#{id}", options)
|
|
96
|
+
|
|
97
|
+
pp response if DNSimple::Client.debug?
|
|
98
|
+
|
|
99
|
+
case response.code
|
|
100
|
+
when 200
|
|
101
|
+
return DNSimple::Record.new({:domain => domain}.merge(response["record"]))
|
|
102
|
+
when 401
|
|
103
|
+
raise DNSimple::AuthenticationFailed
|
|
104
|
+
when 404
|
|
105
|
+
raise DNSimple::RecordNotFound, "Could not find record #{id} for domain #{domain.name}"
|
|
106
|
+
else
|
|
107
|
+
raise DNSimple::Error, "Failed to find domain #{domain.name}/#{id}: #{response["errors"]}"
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def self.all(domain, options={})
|
|
112
|
+
options.merge!(DNSimple::Client.standard_options_with_credentials)
|
|
113
|
+
response = self.get("#{DNSimple::Client.base_uri}/domains/#{domain.name}/records", options)
|
|
114
|
+
|
|
115
|
+
pp response if DNSimple::Client.debug?
|
|
116
|
+
|
|
117
|
+
case response.code
|
|
118
|
+
when 200
|
|
119
|
+
response.map { |r| DNSimple::Record.new({:domain => domain}.merge(r["record"])) }
|
|
120
|
+
when 401
|
|
121
|
+
raise DNSimple::AuthenticationFailed, "Authentication failed"
|
|
122
|
+
else
|
|
123
|
+
raise DNSimple::Error, "Error listing domains: #{response.code}"
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
end
|
|
128
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
module DNSimple #:nodoc:
|
|
2
|
+
# Class representing a service that can be applied to a domain
|
|
3
|
+
class Service
|
|
4
|
+
include HTTParty
|
|
5
|
+
|
|
6
|
+
attr_accessor :id
|
|
7
|
+
|
|
8
|
+
attr_accessor :name
|
|
9
|
+
|
|
10
|
+
attr_accessor :short_name
|
|
11
|
+
|
|
12
|
+
attr_accessor :description
|
|
13
|
+
|
|
14
|
+
#:nodoc:
|
|
15
|
+
def initialize(attributes)
|
|
16
|
+
attributes.each do |key, value|
|
|
17
|
+
m = "#{key}=".to_sym
|
|
18
|
+
self.send(m, value) if self.respond_to?(m)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Find a service by its ID or short name
|
|
23
|
+
def self.find(id_or_short_name, options={})
|
|
24
|
+
options.merge!({:basic_auth => Client.credentials})
|
|
25
|
+
response = self.get("#{Client.base_uri}/services/#{id_or_short_name}.json", options)
|
|
26
|
+
|
|
27
|
+
pp response if Client.debug?
|
|
28
|
+
|
|
29
|
+
case response.code
|
|
30
|
+
when 200
|
|
31
|
+
return Service.new(response["service"])
|
|
32
|
+
when 401
|
|
33
|
+
raise RuntimeError, "Authentication failed"
|
|
34
|
+
when 404
|
|
35
|
+
raise RuntimeError, "Could not find service #{id_or_short_name}"
|
|
36
|
+
else
|
|
37
|
+
raise DNSimple::Error.new(id_or_short_name, response["errors"])
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Get all of the services that can be applied to a domain
|
|
42
|
+
def self.all(options={})
|
|
43
|
+
options.merge!({:basic_auth => Client.credentials})
|
|
44
|
+
response = self.get("#{Client.base_uri}/services.json", options)
|
|
45
|
+
|
|
46
|
+
pp response if Client.debug?
|
|
47
|
+
|
|
48
|
+
case response.code
|
|
49
|
+
when 200
|
|
50
|
+
response.map { |r| Service.new(r["service"]) }
|
|
51
|
+
when 401
|
|
52
|
+
raise RuntimeError, "Authentication failed"
|
|
53
|
+
else
|
|
54
|
+
raise RuntimeError, "Error: #{response.code}"
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
module DNSimple
|
|
2
|
+
class Template
|
|
3
|
+
include HTTParty
|
|
4
|
+
|
|
5
|
+
# The template ID in DNSimple
|
|
6
|
+
attr_accessor :id
|
|
7
|
+
|
|
8
|
+
# The template name
|
|
9
|
+
attr_accessor :name
|
|
10
|
+
|
|
11
|
+
# The template short name
|
|
12
|
+
attr_accessor :short_name
|
|
13
|
+
|
|
14
|
+
# The template description
|
|
15
|
+
attr_accessor :description
|
|
16
|
+
|
|
17
|
+
#:nodoc:
|
|
18
|
+
def initialize(attributes)
|
|
19
|
+
attributes.each do |key, value|
|
|
20
|
+
m = "#{key}=".to_sym
|
|
21
|
+
self.send(m, value) if self.respond_to?(m)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Delete the template from DNSimple. WARNING: this cannot
|
|
26
|
+
# be undone.
|
|
27
|
+
def delete(options={})
|
|
28
|
+
options.merge!(DNSimple::Client.standard_options_with_credentials)
|
|
29
|
+
self.class.delete("#{Client.base_uri}/templates/#{id}", options)
|
|
30
|
+
end
|
|
31
|
+
alias :destroy :delete
|
|
32
|
+
|
|
33
|
+
def self.create(name, short_name, description=nil, options={})
|
|
34
|
+
options.merge!(DNSimple::Client.standard_options_with_credentials)
|
|
35
|
+
template_hash = {
|
|
36
|
+
:name => name,
|
|
37
|
+
:short_name => short_name,
|
|
38
|
+
:description => description
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
options.merge!(:body => {:dns_template => template_hash})
|
|
42
|
+
|
|
43
|
+
response = self.post("#{Client.base_uri}/templates", options)
|
|
44
|
+
|
|
45
|
+
pp response if Client.debug?
|
|
46
|
+
|
|
47
|
+
case response.code
|
|
48
|
+
when 201
|
|
49
|
+
return Template.new(response["dns_template"])
|
|
50
|
+
when 401
|
|
51
|
+
raise RuntimeError, "Authentication failed"
|
|
52
|
+
else
|
|
53
|
+
raise DNSimple::Error.new(name, response["errors"])
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def self.find(id_or_short_name, options={})
|
|
58
|
+
options.merge!(DNSimple::Client.standard_options_with_credentials)
|
|
59
|
+
response = self.get("#{Client.base_uri}/templates/#{id_or_short_name}", options)
|
|
60
|
+
|
|
61
|
+
pp response if Client.debug?
|
|
62
|
+
|
|
63
|
+
case response.code
|
|
64
|
+
when 200
|
|
65
|
+
return Template.new(response["dns_template"])
|
|
66
|
+
when 401
|
|
67
|
+
raise RuntimeError, "Authentication failed"
|
|
68
|
+
when 404
|
|
69
|
+
raise RuntimeError, "Could not find template #{id_or_short_name}"
|
|
70
|
+
else
|
|
71
|
+
raise DNSimple::Error.new(id_or_short_name, response["errors"])
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def self.all(options={})
|
|
76
|
+
options.merge!(DNSimple::Client.standard_options_with_credentials)
|
|
77
|
+
response = self.get("#{Client.base_uri}/templates", options)
|
|
78
|
+
|
|
79
|
+
pp response if Client.debug?
|
|
80
|
+
|
|
81
|
+
case response.code
|
|
82
|
+
when 200
|
|
83
|
+
response.map { |r| Template.new(r["dns_template"]) }
|
|
84
|
+
when 401
|
|
85
|
+
raise RuntimeError, "Authentication failed"
|
|
86
|
+
else
|
|
87
|
+
raise RuntimeError, "Error: #{response.code}"
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
module DNSimple #:nodoc:
|
|
2
|
+
# A single record in a template
|
|
3
|
+
class TemplateRecord
|
|
4
|
+
include HTTParty
|
|
5
|
+
|
|
6
|
+
# The id of the template record
|
|
7
|
+
attr_accessor :id
|
|
8
|
+
|
|
9
|
+
# The template the record belongs to
|
|
10
|
+
attr_accessor :template
|
|
11
|
+
|
|
12
|
+
# The name the record points to. This may be blank.
|
|
13
|
+
attr_accessor :name
|
|
14
|
+
|
|
15
|
+
# The content for the record.
|
|
16
|
+
attr_accessor :content
|
|
17
|
+
|
|
18
|
+
# The record type
|
|
19
|
+
attr_accessor :record_type
|
|
20
|
+
|
|
21
|
+
# The time-to-live
|
|
22
|
+
attr_accessor :ttl
|
|
23
|
+
|
|
24
|
+
# The priority (only for MX records)
|
|
25
|
+
attr_accessor :prio
|
|
26
|
+
|
|
27
|
+
#:nodoc:
|
|
28
|
+
def initialize(attributes)
|
|
29
|
+
attributes.each do |key, value|
|
|
30
|
+
m = "#{key}=".to_sym
|
|
31
|
+
self.send(m, value) if self.respond_to?(m)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def delete(options={})
|
|
36
|
+
options.merge!(:basic_auth => Client.credentials)
|
|
37
|
+
self.class.delete("#{Client.base_uri}/templates/#{template.id}/template_records/#{id}.json", options)
|
|
38
|
+
end
|
|
39
|
+
alias :destroy :delete
|
|
40
|
+
|
|
41
|
+
def self.create(short_name, name, record_type, content, options={})
|
|
42
|
+
template = Template.find(short_name)
|
|
43
|
+
|
|
44
|
+
record_hash = {:name => name, :record_type => record_type, :content => content}
|
|
45
|
+
record_hash[:ttl] = options.delete(:ttl) || 3600
|
|
46
|
+
record_hash[:prio] = options.delete(:prio) || ''
|
|
47
|
+
|
|
48
|
+
options.merge!({:query => {:dns_template_record => record_hash}})
|
|
49
|
+
options.merge!({:basic_auth => Client.credentials})
|
|
50
|
+
|
|
51
|
+
response = self.post("#{Client.base_uri}/templates/#{template.id}/template_records.json", options)
|
|
52
|
+
|
|
53
|
+
pp response if Client.debug?
|
|
54
|
+
|
|
55
|
+
case response.code
|
|
56
|
+
when 201
|
|
57
|
+
return TemplateRecord.new({:template => template}.merge(response["dns_template_record"]))
|
|
58
|
+
when 401
|
|
59
|
+
raise RuntimeError, "Authentication failed"
|
|
60
|
+
else
|
|
61
|
+
raise DNSimple::Error.new("#{name}", response["errors"])
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def self.find(short_name, id, options={})
|
|
66
|
+
template = Template.find(short_name)
|
|
67
|
+
options.merge!(:basic_auth => Client.credentials)
|
|
68
|
+
response = self.get("#{Client.base_uri}/templates/#{template.id}/template_records/#{id}.json", options)
|
|
69
|
+
|
|
70
|
+
pp response if Client.debug?
|
|
71
|
+
|
|
72
|
+
case response.code
|
|
73
|
+
when 200
|
|
74
|
+
return TemplateRecord.new({:template => template}.merge(response["dns_template_record"]))
|
|
75
|
+
when 401
|
|
76
|
+
raise RuntimeError, "Authentication failed"
|
|
77
|
+
when 404
|
|
78
|
+
raise RuntimeError, "Could not find template record #{id} for template #{short_name}"
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# Get all of the template records for the template with the
|
|
83
|
+
# given short name.
|
|
84
|
+
def self.all(short_name, options={})
|
|
85
|
+
template = Template.find(short_name)
|
|
86
|
+
options.merge!({:basic_auth => Client.credentials})
|
|
87
|
+
response = self.get("#{Client.base_uri}/templates/#{template.id}/template_records.json", options)
|
|
88
|
+
|
|
89
|
+
pp response if Client.debug?
|
|
90
|
+
|
|
91
|
+
case response.code
|
|
92
|
+
when 200
|
|
93
|
+
response.map { |r| TemplateRecord.new({:template => template}.merge(r["dns_template_record"])) }
|
|
94
|
+
when 401
|
|
95
|
+
raise RuntimeError, "Authentication failed"
|
|
96
|
+
else
|
|
97
|
+
raise RuntimeError, "Error: #{response.code}"
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
end
|