From 9ecb661af9dedfd14ddacc6fd66839f8edf159f5 Mon Sep 17 00:00:00 2001 From: Harald Eilertsen Date: Thu, 15 Jan 2015 23:41:11 +0100 Subject: First commit. --- lib/norwegian-postcodes.rb | 68 ++++++++++++++++++++++++++++++++++++++ lib/tasks/norwegian-postcodes.rake | 0 2 files changed, 68 insertions(+) create mode 100644 lib/norwegian-postcodes.rb create mode 100644 lib/tasks/norwegian-postcodes.rake (limited to 'lib') diff --git a/lib/norwegian-postcodes.rb b/lib/norwegian-postcodes.rb new file mode 100644 index 0000000..22d67d5 --- /dev/null +++ b/lib/norwegian-postcodes.rb @@ -0,0 +1,68 @@ +module PostCodes + + Counties = [ + "ØSTFOLD", + "AKERSHUS", + "OSLO", + "HEDMARK", + "OPPLAND", + "BUSKERUD", + "VESTFOLD", + "TELEMARK", + "AUST-AGDER", + "VEST-AGDER", + "ROGALAND", + "HORDALAND", + "(BERGEN)", + "SOGN OG FJORDANE", + "MØRE OG ROMSDAL", + "SØR-TRØNDELAG", + "NORD-TRØNDELAG", + "NORDLAND", + "TROMS", + "FINNMARK", + "SVALBARD", + "JAN MAYEN", + "KONTINENTALSOKKELEN" + ] + + class PostCode + attr_reader :postcode, :city, :municipality, :municipality_name, :cat + + def initialize(postcode, city, muni, muni_name, cat) + @postcode, @city, @municipality, @municipality_name, @cat = postcode, city, muni, muni_name, cat + end + + def county + code = @municipality[0..1].to_i + [code, PostCodes.county(code)] + end + + def >=(postcode) + @postcode.to_i >= postcode.to_i + end + + def to_s + [@postcode, @city, @municipality, @municipality_name, @cat].join("\t") + end + end + + class << self + def load(f) + @postcodes = [] + IO.foreach(f, :encoding => Encoding::ISO_8859_15) do |l| + a = l.chomp().split("\t").map{|s| s.encode(Encoding::UTF_8)} + @postcodes << PostCode.new(*a) + end + end + + def search(pc) + @postcodes.bsearch {|x| x >= pc} + end + + def county(c) + return nil unless c > 0 && c <= Counties.size + Counties[c - 1] + end + end +end diff --git a/lib/tasks/norwegian-postcodes.rake b/lib/tasks/norwegian-postcodes.rake new file mode 100644 index 0000000..e69de29 -- cgit v1.2.3