geonames_dump 0.0.4 → 0.0.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 449ac0186316849284960960df5200fa5830053c
4
- data.tar.gz: 647d2b017b3c9cdc5ef44c4fde827e74b3492ebd
3
+ metadata.gz: 51ed09afdea83aa1dc645d29853e3ebbb6df359d
4
+ data.tar.gz: 7a93c55528d389494eaecdf5bf3636fe5e920372
5
5
  SHA512:
6
- metadata.gz: df1f520a053206501c209a3b23a9b1cd9385ac18dbc05d91f3176c533dd355853b733aa066e3f9d1afd6f07da856fc2d5a3455797d5027bfe0fd123e939591ef
7
- data.tar.gz: 1e3a7f6ed3f2b63dcc83565a532fdad2bb4cb3e70a56006c87e9097a963cedb61e5e26bbc9491cfc6caa37289f54652460a0990e4dbd3dfafdf340594da34dbe
6
+ metadata.gz: e6d5480e18e38dce459baf68b3e05eb84bed0e0af2d96af3930aca5e3528913e5c09d99fc73c72e5ca7d6cb649f1986f8823ad4b61a9265d0855f52b3843fa4c
7
+ data.tar.gz: b23c2d146145bdeb3427e72c41a93fdc4bb7a6af88d7d56fc6bc2b6546e9c3b9684f1f25143b8a707770934fee84ce0f4afbcd54944844f61913a6c8089f9f8c
data/README.md CHANGED
@@ -89,13 +89,13 @@ Search order is the following :
89
89
  2. Alternate names (names in non-latin alphabets)
90
90
  3. First level admin subdivisions
91
91
  4. Second level admin subdivisions
92
- 5. Countries
93
- 6. Features (lakes, montains and others various features)
92
+ 5. Features (lakes, mountains and others various features)
94
93
 
95
94
  Now to find a city for example :
96
95
 
97
96
  ```
98
97
  GeonamesDump.search('paris')
98
+ GeonamesDump.search('東京') # tokyo :-)
99
99
  ```
100
100
 
101
101
  If your request is ambiguous, like not searching Dublin in Ireland but Dublin
@@ -116,14 +116,22 @@ GeonamesDump.search('dublin, us', type: :city)
116
116
  GeonamesDump.search('paris', type: :feature)
117
117
  ```
118
118
 
119
+ As `GeonamesDump.search` is returning `Feature` objects by default, type should
120
+ specified to search for Countries :
121
+
122
+ ```
123
+ GeonamesDump.search('Ireland', type: :country)
124
+ ```
125
+
119
126
  The following types are available :
120
127
 
121
- - admin1, for first level of adminstrative subdivision
122
- - admin2, for second level of adminstrative subdivision
123
- - city, for city names
124
- - feature, for generic names including all the above
125
- - alternate_name, for names in non-latin alphabets
126
- - country, for country names
128
+ - `:admin1`, for first level of adminstrative subdivision
129
+ - `:admin2`, for second level of adminstrative subdivision
130
+ - `:city`, for city names
131
+ - `:feature`, for generic names including all the above
132
+ - `:auto`, to find any type of feature (even with non-latin characters) matching the query
133
+ - `:alternate_name`, for names in non-latin alphabets (may be useless)
134
+ - `:country`, for country names
127
135
 
128
136
  ## Contributing
129
137
 
@@ -1,3 +1,4 @@
1
+ require 'pry'
1
2
  module GeonamesDump
2
3
  module Generators
3
4
  class InstallGenerator < Rails::Generators::Base
@@ -11,7 +12,13 @@ DESC
11
12
  def copy_migrations_files
12
13
  Dir.glob(File.join(File.expand_path(File.join('..', 'templates', 'db', 'migrate'), __FILE__), '*')).each do |full_path|
13
14
  file = File.basename(full_path, File.extname(full_path))
14
- migration_template File.join('db', 'migrate', "#{file}.rb")
15
+ migration_folder = File.join('db', 'migrate')
16
+
17
+ if self.class.migration_exists?(migration_folder, file)
18
+ say_status("skip", "Migration #{file} already exists", :yellow)
19
+ else
20
+ migration_template File.join(migration_folder, "#{file}.rb")
21
+ end
15
22
  end
16
23
  end
17
24
 
@@ -1,13 +1,15 @@
1
1
  class GeonamesAlternateName < ActiveRecord::Base
2
2
  validates_uniqueness_of :alternate_name_id
3
- validates_uniqueness_of :geonameid
4
3
  before_save :set_alternate_name_first_letters
5
4
 
5
+ belongs_to :geonames_feature, :foreign_key => 'geonameid', :inverse_of => :geonames_alternate_names, :primary_key => 'geonameid'
6
+ alias_method :feature, :geonames_feature
7
+
6
8
  ##
7
9
  # default search (by alternate name)
8
10
  #
9
11
  scope :search, lambda { |q|
10
- by_alternate_name(q)
12
+ by_alternate_name_featured(q)
11
13
  }
12
14
 
13
15
  ##
@@ -24,6 +26,13 @@ class GeonamesAlternateName < ActiveRecord::Base
24
26
  where(is_preferred_name: true)
25
27
  }
26
28
 
29
+ ##
30
+ # search by name for available features
31
+ #
32
+ scope :by_alternate_name_featured, lambda { |q|
33
+ joins(:geonames_feature).by_alternate_name(q).where(GeonamesFeature.arel_table[:id].not_eq(nil))
34
+ }
35
+
27
36
  ##
28
37
  # search by name
29
38
  #
@@ -33,13 +42,6 @@ class GeonamesAlternateName < ActiveRecord::Base
33
42
  ret = ret.where("alternate_name LIKE ?", "#{q}%")
34
43
  }
35
44
 
36
- ##
37
- # Get associated feature
38
- #
39
- def feature
40
- GeonamesFeature.where(geonameid: self.geonameid)
41
- end
42
-
43
45
  protected
44
46
 
45
47
  ##
@@ -2,6 +2,9 @@ class GeonamesFeature < ActiveRecord::Base
2
2
  validates_uniqueness_of :geonameid
3
3
  before_save :set_asciiname_first_letters
4
4
 
5
+ has_many :geonames_alternate_names, :inverse_of => :geonames_feature
6
+ alias_method :alternate_names, :geonames_alternate_names
7
+
5
8
  ##
6
9
  # Search for feature, searches might include country (separated by ',')
7
10
  #
@@ -39,11 +42,6 @@ class GeonamesFeature < ActiveRecord::Base
39
42
  ret
40
43
  }
41
44
 
42
- def alternate_names
43
- GeonamesAlternateName.where(geonameid: self.geonameid)
44
- end
45
-
46
-
47
45
  protected
48
46
 
49
47
  ##
@@ -24,7 +24,7 @@ class CreateGeonamesFeatures < ActiveRecord::Migration
24
24
  t.integer :geonameid
25
25
  t.string :name, length: 200
26
26
  t.string :asciiname, length: 200
27
- t.string :alternatenames, length: 5000
27
+ t.text :alternatenames, length: 5000
28
28
  t.float :latitude
29
29
  t.float :longitude
30
30
  t.string :feature_class
@@ -1,3 +1,3 @@
1
1
  module GeonamesDump
2
- VERSION = '0.0.4'
2
+ VERSION = '0.0.5'
3
3
  end
data/lib/geonames_dump.rb CHANGED
@@ -3,37 +3,32 @@ require "geonames_dump/blocks"
3
3
  require "geonames_dump/railtie" #if defined?(Rails)
4
4
 
5
5
  module GeonamesDump
6
- # TODO: remove this logger
7
- #ActiveRecord::Base.logger = Logger.new(STDOUT) if Rails.env.development? && !ENV['SILENT']
8
-
9
6
  def self.search(query, options = {})
10
7
  ret = nil
11
8
 
12
9
  type = options[:type] || :auto
13
10
  begin
14
11
  case type
15
- when :auto
12
+ when :auto # return an array of features
16
13
  # city name
17
14
  ret = GeonamesCity.search(query)
18
15
  # alternate name
19
- ret = GeonamesAlternateName.search(query) if ret.blank?
16
+ ret = GeonamesAlternateName.search(query).map { |alternate| alternate.feature }.compact if ret.blank?
20
17
  # admin1
21
18
  ret = GeonamesAdmin1.search(query) if ret.blank?
22
19
  # admin2
23
20
  ret = GeonamesAdmin2.search(query) if ret.blank?
24
- # country
25
- ret = GeonamesCountry.search(query) if ret.blank?
26
21
  # feature
27
22
  ret = GeonamesFeature.search(query) if ret.blank?
28
- else
23
+ else # country, or specific type
29
24
  model = "geonames_#{type.to_s}".camelcase.constantize
30
25
  ret = model.search(query)
31
26
  end
32
27
  rescue NameError => e
33
- Rails.logger.error "Unknown type for GeonamesDump : #{e}"
34
- #raise
28
+ raise $!, "Unknown type for GeonamesDump, #{$!}", $!.backtrace
35
29
  end
36
30
 
31
+
37
32
  ret
38
33
  end
39
34
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: geonames_dump
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Pooley
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-11-26 00:00:00.000000000 Z
12
+ date: 2013-11-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: ruby-progressbar