sparqcode-dnsimple-ruby 1.2.6
Sign up to get free protection for your applications and to get access to all the features.
- 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
|