class Splicer::DnsMadeEasy::Provider
@author Matthew A. Johnston <warmwaffles@gmail.com>
Attributes
client[R]
records[R]
Public Class Methods
new(config)
click to toggle source
# File lib/splicer/dns_made_easy/provider.rb, line 8 def initialize(config) @config = config @client = Client.new(config.key, config.secret, api_mode: config.api_mode, use_ssl: config.use_ssl) end
Public Instance Methods
create_record_in_zone(record, zone)
click to toggle source
# File lib/splicer/dns_made_easy/provider.rb, line 54 def create_record_in_zone(record, zone) Splicer.logger.debug "[SPLICER][DNSMADEEASY] #create_record_in_zone record=#{record.inspect} zone=#{zone.inspect}" domain = find_domain(zone.name) unless domain.persisted? create_domain(zone) domain = find_domain(zone.name) end records = find_records(record.name, record.type, domain.id) return false unless records.empty? create_record(domain.id, record) end
create_zone(zone)
click to toggle source
# File lib/splicer/dns_made_easy/provider.rb, line 13 def create_zone(zone) Splicer.logger.debug "[SPLICER][DNSMADEEASY] #create_zone zone=#{zone.inspect}" domain = find_domain(zone.name) return false if domain.persisted? create_domain(zone) zone.records.each do |record| create_record(domain.id, record) end true end
delete_record_in_zone(record, zone)
click to toggle source
# File lib/splicer/dns_made_easy/provider.rb, line 33 def delete_record_in_zone(record, zone) Splicer.logger.debug "[SPLICER][DNSMADEEASY] #delete_record_in_zone record=#{record.inspect} zone=#{zone.inspect}" domain = find_domain(zone.name) return [] unless domain.persisted? records = find_records(record.name, record.type, domain.id) return false if records.empty? delete_record(domain.id, records.first.id) end
delete_zone(zone)
click to toggle source
# File lib/splicer/dns_made_easy/provider.rb, line 26 def delete_zone(zone) Splicer.logger.debug "[SPLICER][DNSMADEEASY] #delete_zone zone=#{zone.inspect}" domain = find_domain(zone.name) return false unless domain.persisted? client.delete(domain_resource_url(domain.id)) end
get_records_for(zone)
click to toggle source
# File lib/splicer/dns_made_easy/provider.rb, line 72 def get_records_for(zone) Splicer.logger.debug "[SPLICER][DNSMADEEASY] #get_records_for zone=#{zone.inspect}" domain = find_domain(zone.name) return [] unless domain.persisted? fetch_records(domain.id) end
get_zone_for(zone)
click to toggle source
# File lib/splicer/dns_made_easy/provider.rb, line 67 def get_zone_for(zone) Splicer.logger.debug "[SPLICER][DNSMADEEASY] #get_zone_for zone=#{zone.inspect}" find_domain(zone.name) end
update_record_in_zone(record, zone)
click to toggle source
# File lib/splicer/dns_made_easy/provider.rb, line 44 def update_record_in_zone(record, zone) Splicer.logger.debug "[SPLICER][DNSMADEEASY] #update_record_in_zone record=#{record.inspect} zone=#{zone.inspect}" domain = find_domain(zone.name) return false unless domain.persisted? records = find_records(record.name, record.type, domain.id) return false if records.empty? update_record(domain.id, records.first.id, record) end
Private Instance Methods
create_domain(zone)
click to toggle source
# File lib/splicer/dns_made_easy/provider.rb, line 118 def create_domain(zone) client.post('dns/managed', name: zone.name) end
create_record(domain_id, splicer_record)
click to toggle source
@param [Integer] domain_id @param [Splicer::Records::Record] splicer_record @return [String]
# File lib/splicer/dns_made_easy/provider.rb, line 125 def create_record(domain_id, splicer_record) url = record_url(domain_id) payload = record_payload(splicer_record) client.post(url, payload) end
delete_record(domain_id, record_id)
click to toggle source
@param [Integer] record_id @param [Integer] domain_id @return [String]
# File lib/splicer/dns_made_easy/provider.rb, line 144 def delete_record(domain_id, record_id) url = record_url(domain_id, record_id) payload = { id: record_id } client.delete(url, payload) end
domain_resource_url(domain_id)
click to toggle source
@param [Integer] domain_id @return [String]
# File lib/splicer/dns_made_easy/provider.rb, line 162 def domain_resource_url(domain_id) "dns/managed/#{domain_id}" end
fetch_records(domain_id)
click to toggle source
@param [Integer] domain_id @return [Array<Splicer::DnsMadeEasy::Record>]
# File lib/splicer/dns_made_easy/provider.rb, line 83 def fetch_records(domain_id) records_call = client.get(record_url(domain_id)) records = JSON.parse(records_call)['data'] @records = [] records.each do |record| new_record = Record.new record.each do |attribute, type| new_record.send(:"#{attribute}=", type) if new_record.respond_to?(:"#{attribute}=") end @records << new_record end @records end
find_domain(name)
click to toggle source
# File lib/splicer/dns_made_easy/provider.rb, line 166 def find_domain(name) response = JSON.parse(client.get("dns/managed/id/#{name}")) Domain.new(response) rescue Splicer::Errors::RequestError => error Domain.new({error: error.data}) end
find_records(name, type, domain_id)
click to toggle source
@param [Integer] domain_id @param [String] type @return [Array<Splicer::DnsMadeEasy::Record>]
# File lib/splicer/dns_made_easy/provider.rb, line 101 def find_records(name, type, domain_id) payload = { type: type, recordName: name || '' } response = JSON.parse(client.get(record_url(domain_id), payload)) if response['data'].is_a?(Array) list = [] response['data'].each do |params| list << Record.new(params) end list else [Record.new(response['data'])] end end
record_payload(record)
click to toggle source
Returns a hash for the record data @param [Splicer::Records::Record] record @return [Hash]
# File lib/splicer/dns_made_easy/provider.rb, line 176 def record_payload(record) payload = { type: record.type, gtdLocation: 'DEFAULT', name: record.name || '', ttl: record.ttl } case record when Splicer::Records::ARecord payload.merge!({ value: record.ip }) when Splicer::Records::AAAARecord payload.merge!({ value: record.ip }) when Splicer::Records::CNAMERecord payload.merge!({ value: record.cname }) when Splicer::Records::MXRecord payload.merge!({ value: record.exchanger, mxLevel: record.priority }) when Splicer::Records::NSRecord payload.merge!({ value: record.server }) when Splicer::Records::PTRRecord payload.merge!({ value: record.host }) when Splicer::Records::SRVRecord payload.merge!({ value: record.target, weight: record.weight, priority: record.priority, port: record.port }) when Splicer::Records::TXTRecord payload.merge!({ value: record.text }) else payload = {} end payload end
record_url(domain_id, record_id=nil)
click to toggle source
@param [Integer] domain_id @return [String]
# File lib/splicer/dns_made_easy/provider.rb, line 152 def record_url(domain_id, record_id=nil) if record_id "dns/managed/#{domain_id}/records/#{record_id}" else "dns/managed/#{domain_id}/records" end end
update_record(domain_id, record_id, splicer_record)
click to toggle source
@param [Integer] record_id @param [Integer] domain_id @param [Splicer::Records::Record] splicer_record @return [String]
# File lib/splicer/dns_made_easy/provider.rb, line 135 def update_record(domain_id, record_id, splicer_record) url = record_url(domain_id, record_id) payload = record_payload(splicer_record).merge({id: record_id}) client.put(url, payload) end