postcodes-norway 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/Rakefile +8 -0
- data/lib/postcodes-norway.rb +117 -0
- data/lib/postcodes-norway/railtie.rb +11 -0
- data/lib/tasks/postcodes-norway.rake +13 -0
- metadata +48 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: 9e3861331f84d0c758a22530aecf954efe4cbbf1
|
|
4
|
+
data.tar.gz: 3e2491f1ddef57901818350aac11281dfd1ff033
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 23606f575671ddd6d4df7763aef77bf514bcdc011c21e55c1c328e88aa44a8c7536e0ea11e36ac8376124ecd28de806bd076ad17af9424ae307cfd8913677e90
|
|
7
|
+
data.tar.gz: 931f601d6acf5841bcc4d0cdec1b68d348706e49ef6d6e448ec48e1bf9520fcb6906387090165070a67125152ab864321628478a8665d6c677b6b4d034198a8c
|
data/Rakefile
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
module PostCodes
|
|
2
|
+
|
|
3
|
+
require 'norwegian-postcodes/railtie' if defined?(Rails)
|
|
4
|
+
|
|
5
|
+
# Correspond to the Norwegian 'Fylke'
|
|
6
|
+
Counties = [
|
|
7
|
+
"ØSTFOLD",
|
|
8
|
+
"AKERSHUS",
|
|
9
|
+
"OSLO",
|
|
10
|
+
"HEDMARK",
|
|
11
|
+
"OPPLAND",
|
|
12
|
+
"BUSKERUD",
|
|
13
|
+
"VESTFOLD",
|
|
14
|
+
"TELEMARK",
|
|
15
|
+
"AUST-AGDER",
|
|
16
|
+
"VEST-AGDER",
|
|
17
|
+
"ROGALAND",
|
|
18
|
+
"HORDALAND",
|
|
19
|
+
"(BERGEN)",
|
|
20
|
+
"SOGN OG FJORDANE",
|
|
21
|
+
"MØRE OG ROMSDAL",
|
|
22
|
+
"SØR-TRØNDELAG",
|
|
23
|
+
"NORD-TRØNDELAG",
|
|
24
|
+
"NORDLAND",
|
|
25
|
+
"TROMS",
|
|
26
|
+
"FINNMARK",
|
|
27
|
+
"SVALBARD",
|
|
28
|
+
"JAN MAYEN",
|
|
29
|
+
"KONTINENTALSOKKELEN"
|
|
30
|
+
]
|
|
31
|
+
|
|
32
|
+
# Class for holding postcode data
|
|
33
|
+
class PostCode
|
|
34
|
+
# Four digit post code
|
|
35
|
+
attr_reader :postcode
|
|
36
|
+
|
|
37
|
+
# Name of city
|
|
38
|
+
attr_reader :city
|
|
39
|
+
|
|
40
|
+
# Four digit municipality ('kommune') id
|
|
41
|
+
attr_reader :municipality
|
|
42
|
+
|
|
43
|
+
# Name of municipality ('kommune')
|
|
44
|
+
attr_reader :municipality_name
|
|
45
|
+
|
|
46
|
+
# Category
|
|
47
|
+
# * 'G' = street address
|
|
48
|
+
# * 'P' = Postboxes
|
|
49
|
+
# * 'B' = Both street addresses and postboxes
|
|
50
|
+
# * 'S' = Service addresses
|
|
51
|
+
# * 'K' = Customer with its own post code
|
|
52
|
+
# * 'F' = Multiple uses
|
|
53
|
+
attr_reader :cat
|
|
54
|
+
|
|
55
|
+
# Create a new post code.
|
|
56
|
+
# This method should generally not be used by users of the library.
|
|
57
|
+
def initialize(postcode, city, muni, muni_name, cat)
|
|
58
|
+
@postcode, @city, @municipality, @municipality_name, @cat = postcode, city, muni, muni_name, cat
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# Return the County ('kommune') from the postcode data.
|
|
62
|
+
# The returned format is `[county_id, county_name]`
|
|
63
|
+
def county
|
|
64
|
+
code = @municipality[0..1].to_i
|
|
65
|
+
[code, PostCodes.county(code)]
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# Output postcode data in the same format as in the original postcode database.
|
|
69
|
+
def to_s
|
|
70
|
+
[@postcode, @city, @municipality, @municipality_name, @cat].join("\t")
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
class << self
|
|
75
|
+
|
|
76
|
+
# Load the postcode data into memory.
|
|
77
|
+
#
|
|
78
|
+
# +file+ is a file name or IO object to read the data from.
|
|
79
|
+
def load(file)
|
|
80
|
+
@postcodes = []
|
|
81
|
+
if file.is_a?(String)
|
|
82
|
+
f = File.open(file, :encoding => Encoding::ISO_8859_15)
|
|
83
|
+
else
|
|
84
|
+
f = file
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
f.each_line do |l|
|
|
88
|
+
a = l.chomp().split("\t").map{|s| s.encode(Encoding::UTF_8)}
|
|
89
|
+
@postcodes << PostCode.new(*a)
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# Search for a given postcode.
|
|
94
|
+
#
|
|
95
|
+
# Takes a 4 digit postcode as a string, and returns an object of
|
|
96
|
+
# type PostCodes::PostCode, or +nil+ if the postcode was not found.
|
|
97
|
+
#
|
|
98
|
+
def search(postcode)
|
|
99
|
+
res = @postcodes.bsearch {|x| x.postcode.to_i >= postcode.to_i}
|
|
100
|
+
unless res.nil?
|
|
101
|
+
res.postcode.to_i == postcode.to_i ? res : nil
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# Return the county by number.
|
|
106
|
+
#
|
|
107
|
+
# Takes a number between 1 and 23 as input. This corresponds to the
|
|
108
|
+
# first two digits in the municipality number.
|
|
109
|
+
#
|
|
110
|
+
# The county name as a string is returned.
|
|
111
|
+
#
|
|
112
|
+
def county(index)
|
|
113
|
+
return nil unless index > 0 && index <= Counties.size
|
|
114
|
+
Counties[index - 1]
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
require 'uri'
|
|
2
|
+
require 'open-uri'
|
|
3
|
+
|
|
4
|
+
namespace :postcodes do
|
|
5
|
+
desc "Fetch postcode database from Bring"
|
|
6
|
+
task :fetch, [:data_path] do |t, args|
|
|
7
|
+
args.with_defaults(:data_path => 'data')
|
|
8
|
+
uri = URI.parse('http://www.bring.no/hele-bring/forside/_attachment/159761')
|
|
9
|
+
filename = File.join(args.data_path, 'Postnummerregister_ansi.txt')
|
|
10
|
+
puts "Downloading postcodes to: #{filename}..."
|
|
11
|
+
IO.write(filename, uri.read)
|
|
12
|
+
end
|
|
13
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: postcodes-norway
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Harald Eilertsen
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2015-02-02 00:00:00.000000000 Z
|
|
12
|
+
dependencies: []
|
|
13
|
+
description: Parses the Norwegian postcode database as published by Bring, and lets
|
|
14
|
+
you search and use the data from Ruby.
|
|
15
|
+
email: haraldei@anduin.net
|
|
16
|
+
executables: []
|
|
17
|
+
extensions: []
|
|
18
|
+
extra_rdoc_files: []
|
|
19
|
+
files:
|
|
20
|
+
- Rakefile
|
|
21
|
+
- lib/postcodes-norway.rb
|
|
22
|
+
- lib/postcodes-norway/railtie.rb
|
|
23
|
+
- lib/tasks/postcodes-norway.rake
|
|
24
|
+
homepage: https://github.com/snake66/postcodes-norway
|
|
25
|
+
licenses:
|
|
26
|
+
- GPLv3
|
|
27
|
+
metadata: {}
|
|
28
|
+
post_install_message:
|
|
29
|
+
rdoc_options: []
|
|
30
|
+
require_paths:
|
|
31
|
+
- lib
|
|
32
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
33
|
+
requirements:
|
|
34
|
+
- - ">="
|
|
35
|
+
- !ruby/object:Gem::Version
|
|
36
|
+
version: '0'
|
|
37
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
38
|
+
requirements:
|
|
39
|
+
- - ">="
|
|
40
|
+
- !ruby/object:Gem::Version
|
|
41
|
+
version: '0'
|
|
42
|
+
requirements: []
|
|
43
|
+
rubyforge_project:
|
|
44
|
+
rubygems_version: 2.4.5
|
|
45
|
+
signing_key:
|
|
46
|
+
specification_version: 4
|
|
47
|
+
summary: A simple interface to the Norwegian postcode database.
|
|
48
|
+
test_files: []
|