class Dslimple::Exporter

Attributes

client[R]
file[R]
onlies[R]
options[R]
zones[R]

Public Class Methods

new(client, file, options) click to toggle source
# File lib/dslimple/exporter.rb, line 7
def initialize(client, file, options)
  @client = client
  @file = file
  @options = options
  @onlies = [options[:only]].flatten.map(&:to_s).reject(&:empty?)
end

Public Instance Methods

execute() click to toggle source
# File lib/dslimple/exporter.rb, line 14
def execute
  @zones = client.all_zones(with_records: true)

  if options[:split] && options[:dir]
    split_export(file, options[:dir])
  else
    export(file, clean_zones(zones))
  end
end
export(fd, export_zones) click to toggle source
# File lib/dslimple/exporter.rb, line 24
def export(fd, export_zones)
  write_modeline(fd)
  fd.puts export_zones.map { |zone| zone.to_dsl(options) }.join("\n")
end
split_export(fd, dir) click to toggle source
# File lib/dslimple/exporter.rb, line 29
def split_export(fd, dir)
  dir = Pathname.new(dir)
  Dir.mkdir(dir.to_s) unless dir.directory?

  write_modeline(file)
  clean_zones(zones).each do |zone|
    zonefile = dir.join("#{zone.name}.zone")
    File.open(zonefile, 'w') do |fd|
      export(fd, [zone])
    end
    fd.puts "require '#{zonefile.relative_path_from(Pathname.new(fd.path).dirname)}'"
  end
end
write_modeline(fd) click to toggle source
# File lib/dslimple/exporter.rb, line 43
def write_modeline(fd)
  fd << "# -*- mode: ruby -*-\n# vi: set ft=ruby :\n\n" if options[:modeline]
end

Protected Instance Methods

clean_zones(zones) click to toggle source
# File lib/dslimple/exporter.rb, line 49
def clean_zones(zones)
  return zones if onlies.empty?

  zones.select do |zone|
    onlies.include?(zone.name)
  end
end