city_search 0.0.2 → 0.0.3
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 +4 -4
- data/.gitignore +3 -1
- data/README.md +13 -0
- data/Rakefile +60 -0
- data/city_search.gemspec +2 -2
- data/data/russia.bin +0 -0
- data/lib/city_search.rb +17 -14
- metadata +4 -5
- data/data/all.bin +0 -0
- data/data/all_states.bin +0 -0
- data/data/russia_states.bin +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ea57bb866eda5cda691cb33823af5de355d8b4d00ba6070df1bc2059c05c4979
|
|
4
|
+
data.tar.gz: 5456b55982bee572a540a3f2906249ad076f7837b592f38b737b1b607f82b7ef
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1e27af2e20e2ed7bd0227ecf278a17d8cd9b916ce1f8375cf084bc7c1f20b01a9acc545a7b47d59e7d8d996b3c7ceb73271fd17689ec70aeb3fe6a5090d95056
|
|
7
|
+
data.tar.gz: e6b5845867e3912c30ff3df5d09083b18650c846abd18ed4d3e55f3ffee5949f183100023893ac29ffe1faf22b6ad9ad9edbd0d0713eb51dd8f3fa96191a0faa
|
data/.gitignore
CHANGED
data/README.md
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# City Search
|
|
2
|
+
|
|
3
|
+
Need automcomplete search for cities?
|
|
4
|
+
**You are in right place**
|
|
5
|
+
Sadly for now there is only russia.
|
|
6
|
+
|
|
7
|
+
This product includes GeoLite2 data created by MaxMind, available from
|
|
8
|
+
<a href="https://www.maxmind.com">https://www.maxmind.com</a>.
|
|
9
|
+
|
|
10
|
+
```ruby
|
|
11
|
+
CitySearch.new.search('нижн')
|
|
12
|
+
=> [["Нижнеангарск", "Бурятия"], ["Нижневартовск", "Ханты-Мансийский АО"], ["Нижнекамск", "Татарстан"], ["Нижнесортымский", "Ханты-Мансийский АО"], ["Нижнеудинск", "Иркутская область"], ["Нижний Бестях", "Саха (Якутия)"], ["Нижний Куранах", "Саха (Якутия)"], ["Нижний Ломов", "Пензенская область"], ["Нижний Новгород", "Нижегородская область"], ["Нижний Тагил", "Свердловская область"], ["Нижняя Салда", "Свердловская область"]]
|
|
13
|
+
```
|
data/Rakefile
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
require 'dawg'
|
|
2
|
+
|
|
3
|
+
desc 'create divisions.bin from source'
|
|
4
|
+
task :create_divisions do
|
|
5
|
+
subdivisions = []
|
|
6
|
+
|
|
7
|
+
IO.foreach('GeoLite2-City-Locations-ru.csv') do |line|
|
|
8
|
+
geoname_id, locale_code, continent_code, continent_name,
|
|
9
|
+
country_iso_code, country_name, subdivision_1_iso_code,
|
|
10
|
+
subdivision_1_name, subdivision_2_iso_code, subdivision_2_name,
|
|
11
|
+
city_name, metro_code, time_zone, is_in_european_union = line.split(',')
|
|
12
|
+
subdivisions << subdivision_1_name.strip.delete('\"')
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
subdivisions.uniq!
|
|
16
|
+
subdivisions.sort!
|
|
17
|
+
subdivisions.reject! {|d| d.empty? }
|
|
18
|
+
subdivisions_hash = {}
|
|
19
|
+
subdivisions.each_with_index do |subdivision, index|
|
|
20
|
+
subdivisions_hash[index] = subdivision
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
File.open('subdivisions.bin', 'wb') { |f| f.write(Marshal.dump(subdivisions_hash)) }
|
|
24
|
+
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
desc 'create dawg file with cities for russia'
|
|
29
|
+
task :create_dawg_russia do
|
|
30
|
+
cities = []
|
|
31
|
+
subdivisions = Marshal.load(File.read('subdivisions.bin'))
|
|
32
|
+
subdivisions_inverted = subdivisions.invert
|
|
33
|
+
|
|
34
|
+
IO.foreach('GeoLite2-City-Locations-ru.csv') do |line|
|
|
35
|
+
geoname_id, locale_code, continent_code, continent_name,
|
|
36
|
+
country_iso_code, country_name, subdivision_1_iso_code,
|
|
37
|
+
subdivision_1_name, subdivision_2_iso_code, subdivision_2_name,
|
|
38
|
+
city_name, metro_code, time_zone, is_in_european_union = line.split(',')
|
|
39
|
+
|
|
40
|
+
next if country_iso_code != 'RU'
|
|
41
|
+
|
|
42
|
+
subdivision_1_name = subdivision_1_name.strip.delete('\"')
|
|
43
|
+
city_name = city_name.strip.delete('\"').downcase
|
|
44
|
+
cities << "#{city_name} #{subdivisions_inverted[subdivision_1_name]}"
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
cities.uniq!
|
|
48
|
+
cities.sort!
|
|
49
|
+
cities.reject! {|d| d.empty? }
|
|
50
|
+
|
|
51
|
+
dawg = Dawg.new
|
|
52
|
+
cities.each do |city|
|
|
53
|
+
dawg.insert(city)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
dawg.finish
|
|
57
|
+
|
|
58
|
+
dawg.save('russia.bin')
|
|
59
|
+
end
|
|
60
|
+
|
data/city_search.gemspec
CHANGED
data/data/russia.bin
CHANGED
|
Binary file
|
data/lib/city_search.rb
CHANGED
|
@@ -1,33 +1,36 @@
|
|
|
1
1
|
require 'dawg'
|
|
2
2
|
|
|
3
3
|
class CitySearch
|
|
4
|
-
def initialize(country = :all)
|
|
5
|
-
raise 'country not found' unless country_exists?(country)
|
|
6
|
-
|
|
7
|
-
@country = country
|
|
8
|
-
end
|
|
9
|
-
|
|
10
4
|
def search(q)
|
|
11
|
-
results = db.query(q).reject {|r| r.empty? }
|
|
5
|
+
results = db.query(q.downcase).reject {|r| r.empty? }
|
|
12
6
|
results.map do |r|
|
|
13
7
|
result = r.split(' ')
|
|
14
8
|
code = result.last
|
|
15
9
|
result.pop
|
|
16
|
-
result += states[code.to_i]
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
10
|
|
|
20
|
-
|
|
21
|
-
|
|
11
|
+
city_name = result.join(' ')
|
|
12
|
+
.split
|
|
13
|
+
.map(&:capitalize)
|
|
14
|
+
.join(' ')
|
|
15
|
+
state = states[code.to_i]
|
|
16
|
+
|
|
17
|
+
[city_name, state]
|
|
18
|
+
end
|
|
22
19
|
end
|
|
23
20
|
|
|
24
21
|
def db
|
|
25
|
-
@all ||= Dawg.load(File.
|
|
22
|
+
@all ||= Dawg.load(File.join(data_path, 'russia.bin'))
|
|
26
23
|
end
|
|
27
24
|
|
|
28
25
|
def states
|
|
29
26
|
@states ||= Marshal.load(
|
|
30
|
-
File.read(File.
|
|
27
|
+
File.read(File.join(data_path, 'subdivisions.bin'))
|
|
31
28
|
)
|
|
32
29
|
end
|
|
30
|
+
|
|
31
|
+
private
|
|
32
|
+
|
|
33
|
+
def data_path
|
|
34
|
+
@data_path ||= File.join(File.dirname(__FILE__), '/../data')
|
|
35
|
+
end
|
|
33
36
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: city_search
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Maksatbek Mansurov
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2019-04
|
|
11
|
+
date: 2019-05-04 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: dawg
|
|
@@ -37,11 +37,10 @@ extensions: []
|
|
|
37
37
|
extra_rdoc_files: []
|
|
38
38
|
files:
|
|
39
39
|
- ".gitignore"
|
|
40
|
+
- README.md
|
|
41
|
+
- Rakefile
|
|
40
42
|
- city_search.gemspec
|
|
41
|
-
- data/all.bin
|
|
42
|
-
- data/all_states.bin
|
|
43
43
|
- data/russia.bin
|
|
44
|
-
- data/russia_states.bin
|
|
45
44
|
- lib/city_search.rb
|
|
46
45
|
homepage: http://rubygems.org/gems/city_search
|
|
47
46
|
licenses:
|
data/data/all.bin
DELETED
|
Binary file
|
data/data/all_states.bin
DELETED
|
Binary file
|
data/data/russia_states.bin
DELETED
|
Binary file
|