class Dslimple::Applier

Constants

OPERATION_COLORS

Attributes

client[R]
options[R]
shell[R]

Public Class Methods

new(client, shell, options = {}) click to toggle source
# File lib/dslimple/applier.rb, line 13
def initialize(client, shell, options = {})
  @client = client
  @shell = shell
  @options = options
end

Public Instance Methods

apply(queries) click to toggle source
# File lib/dslimple/applier.rb, line 56
def apply(queries)
  shell.say('Apply', :bold)
  queries.each do |query|
    show_query(query)
    query.execute(client, client.account_id)
  end
end
execute() click to toggle source
# File lib/dslimple/applier.rb, line 19
def execute
  dsl = Dslimple::DSL.new(options[:file], options)

  dsl.execute

  expected_zones = dsl.transform
  expected_zones.select! { |zone| options[:only].include?(zone.name) } unless options[:only].empty?

  @buildler = Dslimple::QueryBuilder.new(fetch_zones, expected_zones, options)
  @buildler.execute
  queries = @buildler.filtered_queries(options)

  if queries.empty?
    shell.say('No Changes', :bold)
    return
  end

  show_plan(queries)

  return if options[:dry_run] || !(options[:yes] || shell.yes?("Apply #{queries.size} changes. OK?(y/n) >"))

  apply(queries)
end
fetch_zones() click to toggle source
# File lib/dslimple/applier.rb, line 43
def fetch_zones
  zones = client.all_zones(with_records: true)
  zones.select! { |zone| options[:only].include?(zone.name) } if options[:only].any?
  zones
end
show_plan(queries) click to toggle source
# File lib/dslimple/applier.rb, line 49
def show_plan(queries)
  shell.say('Changes', :bold)
  queries.each do |query|
    show_query(query)
  end
end
show_query(query) click to toggle source
# File lib/dslimple/applier.rb, line 64
def show_query(query)
  shell.say("#{shell.set_color(query.operation.to_s[0..2], OPERATION_COLORS[query.operation])} #{query}")
end