Skip to content

Validate and use Icelandic postal codes with Ruby.

License

Notifications You must be signed in to change notification settings

aldavigdis/postnumer-gem

Repository files navigation

Postnumer

The Postnumer class validates, looks up and associates an Icelandic postal code with its postal locality.

Icelandic postal codes are three numeric digits and may be handled as integers (as this gem does internally) or as strings (as you should do in your database).

What this gem does not and will not do

As the role of the Icelandic postal code system is to facilitate mail sorting and distrubution. This gem will therefore mainly facilitate the validation or autocompletion of a pair of postal codes and their assigned localities.

What this gem will not do is to facilitate the assumtion of other attributes often associated with Icelandic postal codes. This means that if you plan to use postal codes to assume things such as wether an Icelandic postal code is rural, is for a P.O. box, if it is within the Reykjavik Metropolitan Area or which administrative region it belongs to, you should roll your own solution for your own application and I wish you good luck in all your future endevours.

The author of this gem will gladly provide a paid lecture on the pitfalls of postal addressing and postal code systems in Iceland and around the world.

Installation

Install the gem and add to the application's Gemfile by executing:

$ bundle add postnumer

If bundler is not being used to manage dependencies:

$ gem install postnumer-gem

Usage

Using class methods

# For getting a hash of every Icelandic postal code and its locality,
# you can use `Postnumer::all` to get a list of every valid postal code:
Postnumer.all
=>
{101=>"Reykjavík",
 102=>"Reykjavík",
 103=>"Reykjavík",
 104=>"Reykjavík"}

# `Postnumer.all_options` provides every available postal code in Iceland as an
# array of arrays:
Postnumer.all_options
=>
[["101 Reykjavík", 101],
 ["102 Reykjavík", 102],
 ["103 Reykjavík", 103],
 ["104 Reykjavík", 104]]

# In Rails, you can use features from the `FormOptionsHelper` such as `select`
# or `options_for_select` to build a form field from `Postnumer.all_options`.

# In Rails:
select('customer', 'postal_code', Postnumer.all_options)

# In Formtastic or ActiveAdmin:
f.input(:author, :as => :select,
                 :collection => options_for_select(Postnumer::all_options)
)

# If you just want to validate a postal code, you can do it like so:
Postnumer.valid?(310)
=> true

# Numeric strings can also be passed to any method and will be cast internally using `String::to_i`:
# (You should always store postal codes as strings in your database.)
Postnumer.valid?("101")
=> true

# The `Postnumer.valid?` method will return `false` if the provided code is invalid:
Postnumer.valid?(90210)
=> false

# The `Postnumer.locality` method will provide the postal locality associated with the postal code:
Postnumer.locality(310)
=> "Borgarnes"

# The `Postnumer.locality` method will simply return `nil` if the postal code is invalid.
Postnumer.locality(90210)
=> nil

Using an instance of the Postnumer class

# You can initialize an instance of Postnumer by initializing it.
# Note: Postnumer.new will throw an `ArgumentError` if the postal code is invalid.
pnr = Postnumer.new(310)
=> #<Postnumer:0x00007fe5f2401958 @code=310, @locality="Borgarnes">

# Once initialized, the locality can be read by using the `locality` accessor:
pnr.locality
=> "Borgarnes"

# The postal code is also stored in the instance and can be read using the `code` accessor:
pnr.code
=> 310

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/aldavigdis/postnumer-gem. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the code of conduct.

Don't be afraid of using Rubocop for correcting your code and to make it conform to the standards defined in .rubocop.yml. If you need to add an exception, the please do so in your pull request and it will be looked into.

You will want to run bundle exec rubocop -A to see if your code has any errors and correct them on the fly.

Any pull request is welcome. Please write rspec tests for any contributed code if you have the capacity to.

License

The gem is available as open source under the terms of the MIT License.

Code of Conduct

Everyone interacting in the Postnumer project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.

About

Validate and use Icelandic postal codes with Ruby.

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

 

Packages