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 CHANGED
@@ -1,2 +1,3 @@
1
1
  *.sw*
2
2
  .DS_Store
3
+ *.gem
data/README.md CHANGED
@@ -1,2 +1,33 @@
1
- # Cyprus's version of PAF
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
@@ -1,5 +1,6 @@
1
1
  require 'street_names/parser'
2
2
  require 'street_names/database'
3
+ require 'street_names/finder'
3
4
 
4
5
  module StreetNames
5
6
 
@@ -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
@@ -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")
@@ -1,3 +1,3 @@
1
1
  module StreetNames
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -2,29 +2,18 @@ require 'spec_helper'
2
2
 
3
3
  describe StreetNames::Database do
4
4
 
5
- let(:streets) { [ { :name => "Road A" }, { :name => "Road B" }, { :name => "Not road C"} ] }
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
- database.save! :streets => streets
8
+ datastore = mock
9
+ database.should_receive(:datastore).and_return(datastore)
10
+ datastore.should_receive(:transaction)
18
11
 
19
- database.load_streets.should == streets
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.1.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/street_names.dat
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
Binary file