module GovKit::CA::PostalCode

A collection of postal code helpers. @see en.wikipedia.org/wiki/Postal_codes_in_Canada Postal codes in Canada

Public Class Methods

find_electoral_districts_by_postal_code(postal_code) click to toggle source

Returns the electoral districts within a postal code.

Statistics Canada charges for its Postal Codes by Federal Ridings File (PCFRF). A free alternative requires scraping data from other sources.

@param [String] postal_code a postal code @return [Array<Fixnum>] the electoral districts within the postal code @raise [InvalidRequest] if the postal code is not properly formatted @raise [ResourceNotFound] if the electoral districts cannot be determined @see www.statcan.gc.ca/bsolc/olc-cel/olc-cel?lang=eng&catno=92F0193X Statistics Canada's product page for the Postal Codes by Federal Ridings File (PCFRF)

# File lib/gov_kit-ca/postal_code.rb, line 23
def self.find_electoral_districts_by_postal_code(postal_code)
  if valid?(format_postal_code(postal_code))
    StrategySet.run format_postal_code(postal_code)
  else
    raise InvalidRequest, "The postal code is not properly formatted"
  end
end
find_province_by_postal_code(postal_code) click to toggle source

Returns the province that a postal code belongs to. @param [String] postal_code a postal code @return [String] the province that the postal code belongs to @raise [ResourceNotFound] if the province cannot be determined @see en.wikipedia.org/wiki/List_of_postal_codes_in_Canada List of postal codes in Canada

# File lib/gov_kit-ca/postal_code.rb, line 36
def self.find_province_by_postal_code(postal_code)
  case format_postal_code(postal_code)
  when /\AA/
    'Newfoundland and Labrador'
  when /\AB/
    'Nova Scotia'
  when /\AC/
    'Prince Edward Island'
  when /\AE/
    'New Brunswick'
  when /\A[GHJ]/
    'Quebec'
  when /\A[KLMNP]/
    'Ontario'
  when /\AR/
    'Manitoba'
  when /\AS/
    'Saskatchewan'
  when /\AT/
    'Alberta'
  when /\AV/
    'British Columbia'
  # https://en.wikipedia.org/wiki/List_of_X_postal_codes_of_Canada
  when /\AX0[ABC]/
    'Nunavut'
  when /\AX0[EG]/, /\AX1A/
    'Northwest Territories'
  when /\AY/
    'Yukon'
  else
    raise ResourceNotFound, "The province cannot be determined from the postal code"
  end
end
format_postal_code(postal_code) click to toggle source

Formats a postal code as A1A1A1. Removes non-alphanumeric characters. @param [String] postal_code a postal code @return [String] a formatted postal code

# File lib/gov_kit-ca/postal_code.rb, line 73
def self.format_postal_code(postal_code)
  postal_code.upcase.gsub(/[^A-Z0-9]/, '')
end
valid?(postal_code) click to toggle source

@param [String] postal_code a postal code @return [Boolean] whether the postal code is properly formatted @see en.wikipedia.org/wiki/Postal_codes_in_Canada#Number_of_possible_postal_codes Possible postal codes

# File lib/gov_kit-ca/postal_code.rb, line 9
def self.valid?(postal_code)
  !!postal_code.match(/\A[ABCEGHJKLMNPRSTVXY][0-9][ABCEGHJKLMNPRSTVWXYZ][0-9][ABCEGHJKLMNPRSTVWXYZ][0-9]\z/)
end