class PostcodeValidator

A simple postcode validator

Can be used to validate a post code, regarding a country specified through the :country option as an ISO-3166-2 code.

Constants

VERSION

Public Instance Methods

valid?(postcode, options = {}) click to toggle source
# File lib/postcode_validator.rb, line 25
def valid?(postcode, options = {})
  iso = country_as_iso(options)
  postcode = postcode.to_s.strip
  validator = validator_for(iso)
  validator ? validator.valid?(postcode) : postcode.blank?
end

Protected Instance Methods

country_as_iso(options) click to toggle source
# File lib/postcode_validator.rb, line 34
def country_as_iso(options)
  raise Error, 'Missing :country option' unless options.key?(:country) && !options[:country].nil?

  iso = TwitterCldr::Shared::Territories.normalize_territory_code(options[:country])

  # raise ArgumentError if :iso is not a valid territory code
  iso if TwitterCldr::Shared::TerritoriesContainment.contains?('001', iso.to_s.upcase)
rescue ArgumentError => e
  raise Error, e.message
end
validator_for(iso) click to toggle source
# File lib/postcode_validator.rb, line 45
def validator_for(iso)
  TwitterCldr::Shared::PostalCodes.for_territory(iso)
rescue TwitterCldr::Shared::InvalidTerritoryError
  # No validator exists for :iso_code, this country may not use postcodes at all.
  nil
end