Module: Kennel::ValidatePlan

Defined in:
lib/kennel/tasks/validate_plan.rb

Defined Under Namespace

Classes: DashboardValidator, MonitorValidator

Constant Summary collapse

VALIDATORS =
{
  "monitor" => MonitorValidator,
  "dashboard" => DashboardValidator
}.freeze

Class Method Summary collapse

Class Method Details

.validate(plan) ⇒ Object



83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/kennel/tasks/validate_plan.rb', line 83

def self.validate(plan)
  changes = (plan.creates + plan.updates)

  validators = changes.filter_map do |item|
    next unless (validator = VALIDATORS[item.api_resource]&.new(item))

    if item.class::TYPE == :update
      # ignore if nothing can break
      modified_fields = item.diff.map { |_, f, *| f }
      next nil if modified_fields.all? { |f| validator.class::COSMETIC_FIELDS.include?(f) }
    end

    validator
  end

  api = Kennel::Api.new
  errors = validators.filter_map { |v| v.validate(api) }
  return if errors.empty?

  abort "#{Kennel::Console.color(:red, "#{errors.size} validation(s) failed:")}\n#{errors.join("\n")}"
end