cyprus-street-names 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/README.md +32 -1
- data/data/street_names_en.dat +0 -0
- data/data/street_names_gr.dat +0 -0
- data/lib/street_names.rb +1 -0
- data/lib/street_names/database.rb +3 -4
- data/lib/street_names/finder.rb +26 -0
- data/lib/street_names/parser.rb +1 -11
- data/lib/street_names/version.rb +1 -1
- data/spec/street_names/database_spec.rb +6 -17
- data/spec/street_names/finder_spec.rb +47 -0
- data/spec/street_names/parser_spec.rb +0 -16
- metadata +5 -2
- data/data/street_names.dat +0 -0
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -1,2 +1,33 @@
|
|
1
|
-
# Cyprus
|
1
|
+
# Cyprus Street Finder
|
2
2
|
[![Build Status](https://secure.travis-ci.org/despo/cyprus-paf.png)](http://travis-ci.org/despo/cyprus-paf) [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/despo/cyprus-paf)
|
3
|
+
|
4
|
+
#### Data from ![Cyprus Postal Services] (http://www.mcw.gov.cy/mcw/dps/dps.nsf/index_en/index_en?opendocument)
|
5
|
+
|
6
|
+
## Usage
|
7
|
+
|
8
|
+
### Finding streets
|
9
|
+
|
10
|
+
```ruby
|
11
|
+
street_finder = StreetNames::Finder.new
|
12
|
+
|
13
|
+
street_finder.find_by_postcode 8020
|
14
|
+
street_finder.find_by_name "Demosthenous Georgiou"
|
15
|
+
street_finder.find_by_area "Pafos"
|
16
|
+
```
|
17
|
+
#### Search στα Ελληνικά
|
18
|
+
|
19
|
+
```ruby
|
20
|
+
street_finder = StreetNames::Finder.new "gr" # load greek datastore
|
21
|
+
|
22
|
+
street_finder.find_by_postcode 8020
|
23
|
+
street_finder.find_by_name "Δημοσθένους Γεωργίου"
|
24
|
+
street_finder.find_by_area "Πάφος"
|
25
|
+
```
|
26
|
+
|
27
|
+
**Note:** you may need to add `#encoding: utf-8` to the top of your file when searching using Greek characters
|
28
|
+
|
29
|
+
## License
|
30
|
+
|
31
|
+
Licensed under the [MIT] Licence
|
32
|
+
|
33
|
+
[MIT]:https://raw.github.com/despo/cyprus-paf/master/MIT-LICENSE.txt
|
Binary file
|
Binary file
|
data/lib/street_names.rb
CHANGED
@@ -15,15 +15,14 @@ module StreetNames
|
|
15
15
|
datastore.transaction { datastore[:"streets_#{@locale}"] = data[:streets] }
|
16
16
|
end
|
17
17
|
|
18
|
-
def path
|
19
|
-
"./data/street_names.dat"
|
20
|
-
end
|
21
|
-
|
22
18
|
private
|
23
19
|
def datastore
|
24
20
|
@datastore ||= PStore.new(path)
|
25
21
|
end
|
26
22
|
|
23
|
+
def path
|
24
|
+
"./data/street_names_#{@locale}.dat"
|
25
|
+
end
|
27
26
|
|
28
27
|
end
|
29
28
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module StreetNames
|
2
|
+
class Finder
|
3
|
+
attr_reader :streets
|
4
|
+
|
5
|
+
def initialize locale=LOCALE
|
6
|
+
@database = StreetNames::Database.new locale
|
7
|
+
convert!
|
8
|
+
end
|
9
|
+
|
10
|
+
[ :postcode, :name, :area ].each do |key|
|
11
|
+
define_method(:"find_by_#{key}") do |value|
|
12
|
+
@streets.select { |street| eval("street.#{key}") == value }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def convert!
|
19
|
+
@streets = @database.load_streets.map do |street|
|
20
|
+
Street.new [ street[:name], street[:postcode], street[:area] ]
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
data/lib/street_names/parser.rb
CHANGED
@@ -14,21 +14,11 @@ module StreetNames
|
|
14
14
|
end.inject(:+)
|
15
15
|
end
|
16
16
|
|
17
|
-
[ :postcode, :name, :area ].each do |key|
|
18
|
-
define_method(:"find_by_#{key}") do |value|
|
19
|
-
@streets.select { |street| eval("street.#{key}") == value }
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
17
|
def save!
|
24
|
-
db = StreetNames::Database.new
|
18
|
+
db = StreetNames::Database.new @locale
|
25
19
|
db.save! :streets => @streets.map(&:to_hash)
|
26
20
|
end
|
27
21
|
|
28
|
-
def load_from_pstore
|
29
|
-
::Database.new.load_streets
|
30
|
-
end
|
31
|
-
|
32
22
|
private
|
33
23
|
def spreadsheet
|
34
24
|
@spreadsheet ||= Spreadsheet.open("./data/cyprus_postcode_dir_#{@locale}.xls")
|
data/lib/street_names/version.rb
CHANGED
@@ -2,29 +2,18 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe StreetNames::Database do
|
4
4
|
|
5
|
-
let(:
|
6
|
-
let(:database) { StreetNames::Database.new }
|
7
|
-
|
8
|
-
before(:all) do
|
9
|
-
`rm ./data/street_names.dat`
|
10
|
-
end
|
11
|
-
|
12
|
-
it 'is nil' do
|
13
|
-
database.load_streets.should == nil
|
14
|
-
end
|
5
|
+
let(:database) { StreetNames::Database.new "en" }
|
15
6
|
|
16
7
|
it 'can store a hash of streets' do
|
17
|
-
|
8
|
+
datastore = mock
|
9
|
+
database.should_receive(:datastore).and_return(datastore)
|
10
|
+
datastore.should_receive(:transaction)
|
18
11
|
|
19
|
-
database.
|
12
|
+
database.save! :streets => :streets
|
20
13
|
end
|
21
14
|
|
22
15
|
it 'can retrieve a hash of streets' do
|
23
|
-
|
24
|
-
database.load_streets.should == streets
|
16
|
+
database.load_streets.first.should be_a Hash
|
25
17
|
end
|
26
18
|
|
27
|
-
after(:all) do
|
28
|
-
`git checkout data/street_names.dat`
|
29
|
-
end
|
30
19
|
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
#encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
describe StreetNames::Finder do
|
4
|
+
|
5
|
+
let (:street_finder) { StreetNames::Finder.new "en" }
|
6
|
+
|
7
|
+
it 'load streets from spreadsheet' do
|
8
|
+
street = { :name => "Agias Marinas", :postcode => 8041, :area => "Pafos"}
|
9
|
+
|
10
|
+
street_finder.streets.map(&:to_json).should include street.to_json
|
11
|
+
end
|
12
|
+
|
13
|
+
context 'finders' do
|
14
|
+
let(:street) { { :name => "Dimosthenous Georgiou", :postcode => 8020, :area => "Pafos"} }
|
15
|
+
|
16
|
+
it 'find streets by postcode' do
|
17
|
+
street_finder.find_by_postcode(8020).map(&:to_json).should include street.to_json
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'find street by name' do
|
21
|
+
street_finder.find_by_name("Dimosthenous Georgiou").map(&:to_json).should include street.to_json
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'find area by street name' do
|
25
|
+
street_finder.find_by_area("Pafos").map(&:to_json).should include street.to_json
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'greek finders' do
|
30
|
+
let (:street_finder) { StreetNames::Finder.new "gr" }
|
31
|
+
|
32
|
+
let(:street) { { :name => "Δημοσθένους Γεωργίου", :postcode => 8020, :area => "Πάφος"} }
|
33
|
+
|
34
|
+
it 'find streets by postcode' do
|
35
|
+
street_finder.find_by_postcode(8020).map(&:to_json).should include street.to_json
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'find street by name' do
|
39
|
+
street_finder.find_by_name("Δημοσθένους Γεωργίου").map(&:to_json).should include street.to_json
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'find area by street name' do
|
43
|
+
street_finder.find_by_area("Πάφος").map(&:to_json).should include street.to_json
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
@@ -11,22 +11,6 @@ describe StreetNames::Parser do
|
|
11
11
|
|
12
12
|
street_parser.streets.map(&:to_json).should include street.to_json
|
13
13
|
end
|
14
|
-
|
15
|
-
context '#finders' do
|
16
|
-
let(:street) { { :name => "Dimosthenous Georgiou", :postcode => 8020, :area => "Pafos"} }
|
17
|
-
|
18
|
-
it 'find streets by postcode' do
|
19
|
-
street_parser.find_by_postcode(8020).map(&:to_json).should include street.to_json
|
20
|
-
end
|
21
|
-
|
22
|
-
it 'find street by name' do
|
23
|
-
street_parser.find_by_name("Dimosthenous Georgiou").map(&:to_json).should include street.to_json
|
24
|
-
end
|
25
|
-
|
26
|
-
it 'find area by street name' do
|
27
|
-
street_parser.find_by_area("Pafos").map(&:to_json).should include street.to_json
|
28
|
-
end
|
29
|
-
end
|
30
14
|
end
|
31
15
|
|
32
16
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cyprus-street-names
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -75,14 +75,17 @@ files:
|
|
75
75
|
- cyprus-paf.gemspec
|
76
76
|
- data/cyprus_postcode_dir_en.xls
|
77
77
|
- data/cyprus_postcode_dir_gr.xls
|
78
|
-
- data/
|
78
|
+
- data/street_names_en.dat
|
79
|
+
- data/street_names_gr.dat
|
79
80
|
- lib/street.rb
|
80
81
|
- lib/street_names.rb
|
81
82
|
- lib/street_names/database.rb
|
83
|
+
- lib/street_names/finder.rb
|
82
84
|
- lib/street_names/parser.rb
|
83
85
|
- lib/street_names/version.rb
|
84
86
|
- spec/spec_helper.rb
|
85
87
|
- spec/street_names/database_spec.rb
|
88
|
+
- spec/street_names/finder_spec.rb
|
86
89
|
- spec/street_names/parser_spec.rb
|
87
90
|
- spec/street_spec.rb
|
88
91
|
homepage: https://github.com/despo/cyprus-paf
|
data/data/street_names.dat
DELETED
Binary file
|