# frozen_string_literal: true

require 'countries'

class MiniDefender::Rules::CountryCode < MiniDefender::Rule
  COUNTRIES = ISO3166::Country.pluck(:alpha2).flatten

  def self.signature
    'country_code'
  end

  def coerce(value)
    value.strip.upcase
  end

  def passes?(attribute, value, validator)
    value.is_a?(String) && COUNTRIES.include?(value.strip.upcase)
  end

  def message(attribute, value, validator)
    'The value must be a valid ISO3166 country code.'
  end
end