class Unbind::Zone
Constants
- TTL
Attributes
aliases[R]
master[R]
name[R]
slaves[R]
ttl[R]
version[R]
Public Class Methods
new(name, config)
click to toggle source
# File lib/unbind/zone.rb, line 7 def initialize name, config raise "zone should have a valid name (given: #{name})" unless name =~ /\A[\w\-\.]+\z/ @name = name raise 'zone config should include data' unless config.is_a?(Hash) && config.has_key?(:data) && config[:data].is_a?(Hash) @config = config @data = @config[:data] # raise 'zone data should include name and mail servers and at least one A record' unless # [:ns, :mx, :a].all? { |k| @data.has_key?(k) && !@data[k].empty? } sanitize_ttl sanitize_version assign_optional_data end
Public Instance Methods
generate()
click to toggle source
# File lib/unbind/zone.rb, line 26 def generate [header, essentials, resources, nil].join("\n") end
Private Instance Methods
assign_optional_data()
click to toggle source
# File lib/unbind/zone.rb, line 32 def assign_optional_data [:aliases, :master, :slaves].each do |i| instance_variable_set(:"@#{i}", @config[i] || []) end end
essentials()
click to toggle source
# File lib/unbind/zone.rb, line 55 def essentials Array(@data[:ns]).map { |name| "@ NS #{name}" } + Array(@data[:mx]).map.with_index { |name, prio| "@ MX #{prio+1} #{name}" } end
header()
click to toggle source
# File lib/unbind/zone.rb, line 48 def header [ "$TTL #{ttl}", "@ SOA ns0 root (#{version} 1d 10m 2w 10m)", ] end
resources()
click to toggle source
# File lib/unbind/zone.rb, line 60 def resources (@data.keys - [:ns, :mx]).reduce([]) { |a, type| a + @data[type].reduce([]) { |a, (names, addresses)| a + names.split(/\s*,\s*/).reduce([]) { |a, name| a + Array(addresses).reduce([]) { |a, address| a + ["#{name} #{type.upcase} #{address}"] } } } } end
sanitize_ttl()
click to toggle source
# File lib/unbind/zone.rb, line 38 def sanitize_ttl @ttl = @config[:ttl].to_i @ttl = TTL if @ttl <= 0 end
sanitize_version()
click to toggle source
# File lib/unbind/zone.rb, line 43 def sanitize_version @version = @config[:version].to_i @version = Time.now.utc.strftime("%Y%m%d%H%M") if @version <= 0 end