ultra-fast-mod 0.0.1

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.
Files changed (175) hide show
  1. checksums.yaml +7 -0
  2. data/geocoder-1.8.6/CHANGELOG.md +669 -0
  3. data/geocoder-1.8.6/LICENSE +20 -0
  4. data/geocoder-1.8.6/README.md +827 -0
  5. data/geocoder-1.8.6/bin/console +13 -0
  6. data/geocoder-1.8.6/bin/geocode +5 -0
  7. data/geocoder-1.8.6/examples/app_defined_lookup_services.rb +22 -0
  8. data/geocoder-1.8.6/examples/cache_bypass.rb +48 -0
  9. data/geocoder-1.8.6/examples/reverse_geocode_job.rb +40 -0
  10. data/geocoder-1.8.6/lib/easting_northing.rb +171 -0
  11. data/geocoder-1.8.6/lib/generators/geocoder/config/config_generator.rb +14 -0
  12. data/geocoder-1.8.6/lib/generators/geocoder/config/templates/initializer.rb +27 -0
  13. data/geocoder-1.8.6/lib/generators/geocoder/maxmind/geolite_city_generator.rb +30 -0
  14. data/geocoder-1.8.6/lib/generators/geocoder/maxmind/geolite_country_generator.rb +30 -0
  15. data/geocoder-1.8.6/lib/generators/geocoder/maxmind/templates/migration/geolite_city.rb +30 -0
  16. data/geocoder-1.8.6/lib/generators/geocoder/maxmind/templates/migration/geolite_country.rb +17 -0
  17. data/geocoder-1.8.6/lib/generators/geocoder/migration_version.rb +15 -0
  18. data/geocoder-1.8.6/lib/geocoder/cache.rb +77 -0
  19. data/geocoder-1.8.6/lib/geocoder/cache_stores/base.rb +40 -0
  20. data/geocoder-1.8.6/lib/geocoder/cache_stores/generic.rb +35 -0
  21. data/geocoder-1.8.6/lib/geocoder/cache_stores/redis.rb +34 -0
  22. data/geocoder-1.8.6/lib/geocoder/calculations.rb +420 -0
  23. data/geocoder-1.8.6/lib/geocoder/cli.rb +121 -0
  24. data/geocoder-1.8.6/lib/geocoder/configuration.rb +151 -0
  25. data/geocoder-1.8.6/lib/geocoder/configuration_hash.rb +11 -0
  26. data/geocoder-1.8.6/lib/geocoder/esri_token.rb +38 -0
  27. data/geocoder-1.8.6/lib/geocoder/exceptions.rb +40 -0
  28. data/geocoder-1.8.6/lib/geocoder/ip_address.rb +36 -0
  29. data/geocoder-1.8.6/lib/geocoder/kernel_logger.rb +25 -0
  30. data/geocoder-1.8.6/lib/geocoder/logger.rb +47 -0
  31. data/geocoder-1.8.6/lib/geocoder/lookup.rb +155 -0
  32. data/geocoder-1.8.6/lib/geocoder/lookups/abstract_api.rb +46 -0
  33. data/geocoder-1.8.6/lib/geocoder/lookups/amap.rb +63 -0
  34. data/geocoder-1.8.6/lib/geocoder/lookups/amazon_location_service.rb +58 -0
  35. data/geocoder-1.8.6/lib/geocoder/lookups/azure.rb +56 -0
  36. data/geocoder-1.8.6/lib/geocoder/lookups/baidu.rb +63 -0
  37. data/geocoder-1.8.6/lib/geocoder/lookups/baidu_ip.rb +30 -0
  38. data/geocoder-1.8.6/lib/geocoder/lookups/ban_data_gouv_fr.rb +143 -0
  39. data/geocoder-1.8.6/lib/geocoder/lookups/base.rb +351 -0
  40. data/geocoder-1.8.6/lib/geocoder/lookups/bing.rb +82 -0
  41. data/geocoder-1.8.6/lib/geocoder/lookups/db_ip_com.rb +52 -0
  42. data/geocoder-1.8.6/lib/geocoder/lookups/esri.rb +114 -0
  43. data/geocoder-1.8.6/lib/geocoder/lookups/freegeoip.rb +62 -0
  44. data/geocoder-1.8.6/lib/geocoder/lookups/geoapify.rb +78 -0
  45. data/geocoder-1.8.6/lib/geocoder/lookups/geocoder_ca.rb +53 -0
  46. data/geocoder-1.8.6/lib/geocoder/lookups/geocodio.rb +42 -0
  47. data/geocoder-1.8.6/lib/geocoder/lookups/geoip2.rb +49 -0
  48. data/geocoder-1.8.6/lib/geocoder/lookups/geoportail_lu.rb +65 -0
  49. data/geocoder-1.8.6/lib/geocoder/lookups/google.rb +100 -0
  50. data/geocoder-1.8.6/lib/geocoder/lookups/google_places_details.rb +64 -0
  51. data/geocoder-1.8.6/lib/geocoder/lookups/google_places_search.rb +75 -0
  52. data/geocoder-1.8.6/lib/geocoder/lookups/google_premier.rb +61 -0
  53. data/geocoder-1.8.6/lib/geocoder/lookups/here.rb +73 -0
  54. data/geocoder-1.8.6/lib/geocoder/lookups/ip2location.rb +71 -0
  55. data/geocoder-1.8.6/lib/geocoder/lookups/ip2location_io.rb +62 -0
  56. data/geocoder-1.8.6/lib/geocoder/lookups/ip2location_lite.rb +40 -0
  57. data/geocoder-1.8.6/lib/geocoder/lookups/ipapi_com.rb +82 -0
  58. data/geocoder-1.8.6/lib/geocoder/lookups/ipbase.rb +49 -0
  59. data/geocoder-1.8.6/lib/geocoder/lookups/ipdata_co.rb +62 -0
  60. data/geocoder-1.8.6/lib/geocoder/lookups/ipgeolocation.rb +51 -0
  61. data/geocoder-1.8.6/lib/geocoder/lookups/ipinfo_io.rb +44 -0
  62. data/geocoder-1.8.6/lib/geocoder/lookups/ipinfo_io_lite.rb +42 -0
  63. data/geocoder-1.8.6/lib/geocoder/lookups/ipqualityscore.rb +50 -0
  64. data/geocoder-1.8.6/lib/geocoder/lookups/ipregistry.rb +68 -0
  65. data/geocoder-1.8.6/lib/geocoder/lookups/ipstack.rb +63 -0
  66. data/geocoder-1.8.6/lib/geocoder/lookups/latlon.rb +58 -0
  67. data/geocoder-1.8.6/lib/geocoder/lookups/location_iq.rb +54 -0
  68. data/geocoder-1.8.6/lib/geocoder/lookups/mapbox.rb +60 -0
  69. data/geocoder-1.8.6/lib/geocoder/lookups/mapquest.rb +58 -0
  70. data/geocoder-1.8.6/lib/geocoder/lookups/maxmind.rb +90 -0
  71. data/geocoder-1.8.6/lib/geocoder/lookups/maxmind_geoip2.rb +70 -0
  72. data/geocoder-1.8.6/lib/geocoder/lookups/maxmind_local.rb +71 -0
  73. data/geocoder-1.8.6/lib/geocoder/lookups/melissa_street.rb +41 -0
  74. data/geocoder-1.8.6/lib/geocoder/lookups/nationaal_georegister_nl.rb +38 -0
  75. data/geocoder-1.8.6/lib/geocoder/lookups/nominatim.rb +64 -0
  76. data/geocoder-1.8.6/lib/geocoder/lookups/opencagedata.rb +65 -0
  77. data/geocoder-1.8.6/lib/geocoder/lookups/osmnames.rb +57 -0
  78. data/geocoder-1.8.6/lib/geocoder/lookups/pc_miler.rb +87 -0
  79. data/geocoder-1.8.6/lib/geocoder/lookups/pdok_nl.rb +43 -0
  80. data/geocoder-1.8.6/lib/geocoder/lookups/pelias.rb +63 -0
  81. data/geocoder-1.8.6/lib/geocoder/lookups/photon.rb +89 -0
  82. data/geocoder-1.8.6/lib/geocoder/lookups/pickpoint.rb +41 -0
  83. data/geocoder-1.8.6/lib/geocoder/lookups/pointpin.rb +69 -0
  84. data/geocoder-1.8.6/lib/geocoder/lookups/postcode_anywhere_uk.rb +50 -0
  85. data/geocoder-1.8.6/lib/geocoder/lookups/postcodes_io.rb +31 -0
  86. data/geocoder-1.8.6/lib/geocoder/lookups/smarty_streets.rb +68 -0
  87. data/geocoder-1.8.6/lib/geocoder/lookups/telize.rb +75 -0
  88. data/geocoder-1.8.6/lib/geocoder/lookups/tencent.rb +59 -0
  89. data/geocoder-1.8.6/lib/geocoder/lookups/test.rb +49 -0
  90. data/geocoder-1.8.6/lib/geocoder/lookups/twogis.rb +58 -0
  91. data/geocoder-1.8.6/lib/geocoder/lookups/uk_ordnance_survey_names.rb +59 -0
  92. data/geocoder-1.8.6/lib/geocoder/lookups/yandex.rb +61 -0
  93. data/geocoder-1.8.6/lib/geocoder/models/active_record.rb +51 -0
  94. data/geocoder-1.8.6/lib/geocoder/models/base.rb +39 -0
  95. data/geocoder-1.8.6/lib/geocoder/models/mongo_base.rb +62 -0
  96. data/geocoder-1.8.6/lib/geocoder/models/mongo_mapper.rb +26 -0
  97. data/geocoder-1.8.6/lib/geocoder/models/mongoid.rb +32 -0
  98. data/geocoder-1.8.6/lib/geocoder/query.rb +125 -0
  99. data/geocoder-1.8.6/lib/geocoder/railtie.rb +26 -0
  100. data/geocoder-1.8.6/lib/geocoder/request.rb +114 -0
  101. data/geocoder-1.8.6/lib/geocoder/results/abstract_api.rb +146 -0
  102. data/geocoder-1.8.6/lib/geocoder/results/amap.rb +87 -0
  103. data/geocoder-1.8.6/lib/geocoder/results/amazon_location_service.rb +62 -0
  104. data/geocoder-1.8.6/lib/geocoder/results/azure.rb +65 -0
  105. data/geocoder-1.8.6/lib/geocoder/results/baidu.rb +75 -0
  106. data/geocoder-1.8.6/lib/geocoder/results/baidu_ip.rb +62 -0
  107. data/geocoder-1.8.6/lib/geocoder/results/ban_data_gouv_fr.rb +282 -0
  108. data/geocoder-1.8.6/lib/geocoder/results/base.rb +79 -0
  109. data/geocoder-1.8.6/lib/geocoder/results/bing.rb +52 -0
  110. data/geocoder-1.8.6/lib/geocoder/results/db_ip_com.rb +58 -0
  111. data/geocoder-1.8.6/lib/geocoder/results/esri.rb +78 -0
  112. data/geocoder-1.8.6/lib/geocoder/results/freegeoip.rb +40 -0
  113. data/geocoder-1.8.6/lib/geocoder/results/geoapify.rb +179 -0
  114. data/geocoder-1.8.6/lib/geocoder/results/geocoder_ca.rb +60 -0
  115. data/geocoder-1.8.6/lib/geocoder/results/geocodio.rb +78 -0
  116. data/geocoder-1.8.6/lib/geocoder/results/geoip2.rb +76 -0
  117. data/geocoder-1.8.6/lib/geocoder/results/geoportail_lu.rb +71 -0
  118. data/geocoder-1.8.6/lib/geocoder/results/google.rb +150 -0
  119. data/geocoder-1.8.6/lib/geocoder/results/google_places_details.rb +39 -0
  120. data/geocoder-1.8.6/lib/geocoder/results/google_places_search.rb +52 -0
  121. data/geocoder-1.8.6/lib/geocoder/results/google_premier.rb +6 -0
  122. data/geocoder-1.8.6/lib/geocoder/results/here.rb +77 -0
  123. data/geocoder-1.8.6/lib/geocoder/results/ip2location.rb +22 -0
  124. data/geocoder-1.8.6/lib/geocoder/results/ip2location_io.rb +21 -0
  125. data/geocoder-1.8.6/lib/geocoder/results/ip2location_lite.rb +47 -0
  126. data/geocoder-1.8.6/lib/geocoder/results/ipapi_com.rb +45 -0
  127. data/geocoder-1.8.6/lib/geocoder/results/ipbase.rb +40 -0
  128. data/geocoder-1.8.6/lib/geocoder/results/ipdata_co.rb +40 -0
  129. data/geocoder-1.8.6/lib/geocoder/results/ipgeolocation.rb +59 -0
  130. data/geocoder-1.8.6/lib/geocoder/results/ipinfo_io.rb +48 -0
  131. data/geocoder-1.8.6/lib/geocoder/results/ipinfo_io_lite.rb +16 -0
  132. data/geocoder-1.8.6/lib/geocoder/results/ipqualityscore.rb +54 -0
  133. data/geocoder-1.8.6/lib/geocoder/results/ipregistry.rb +304 -0
  134. data/geocoder-1.8.6/lib/geocoder/results/ipstack.rb +60 -0
  135. data/geocoder-1.8.6/lib/geocoder/results/latlon.rb +71 -0
  136. data/geocoder-1.8.6/lib/geocoder/results/location_iq.rb +6 -0
  137. data/geocoder-1.8.6/lib/geocoder/results/mapbox.rb +80 -0
  138. data/geocoder-1.8.6/lib/geocoder/results/mapquest.rb +48 -0
  139. data/geocoder-1.8.6/lib/geocoder/results/maxmind.rb +130 -0
  140. data/geocoder-1.8.6/lib/geocoder/results/maxmind_geoip2.rb +9 -0
  141. data/geocoder-1.8.6/lib/geocoder/results/maxmind_local.rb +44 -0
  142. data/geocoder-1.8.6/lib/geocoder/results/melissa_street.rb +46 -0
  143. data/geocoder-1.8.6/lib/geocoder/results/nationaal_georegister_nl.rb +62 -0
  144. data/geocoder-1.8.6/lib/geocoder/results/nominatim.rb +121 -0
  145. data/geocoder-1.8.6/lib/geocoder/results/opencagedata.rb +100 -0
  146. data/geocoder-1.8.6/lib/geocoder/results/osmnames.rb +56 -0
  147. data/geocoder-1.8.6/lib/geocoder/results/pc_miler.rb +98 -0
  148. data/geocoder-1.8.6/lib/geocoder/results/pdok_nl.rb +62 -0
  149. data/geocoder-1.8.6/lib/geocoder/results/pelias.rb +58 -0
  150. data/geocoder-1.8.6/lib/geocoder/results/photon.rb +119 -0
  151. data/geocoder-1.8.6/lib/geocoder/results/pickpoint.rb +6 -0
  152. data/geocoder-1.8.6/lib/geocoder/results/pointpin.rb +40 -0
  153. data/geocoder-1.8.6/lib/geocoder/results/postcode_anywhere_uk.rb +42 -0
  154. data/geocoder-1.8.6/lib/geocoder/results/postcodes_io.rb +40 -0
  155. data/geocoder-1.8.6/lib/geocoder/results/smarty_streets.rb +142 -0
  156. data/geocoder-1.8.6/lib/geocoder/results/telize.rb +40 -0
  157. data/geocoder-1.8.6/lib/geocoder/results/tencent.rb +72 -0
  158. data/geocoder-1.8.6/lib/geocoder/results/test.rb +33 -0
  159. data/geocoder-1.8.6/lib/geocoder/results/twogis.rb +76 -0
  160. data/geocoder-1.8.6/lib/geocoder/results/uk_ordnance_survey_names.rb +59 -0
  161. data/geocoder-1.8.6/lib/geocoder/results/yandex.rb +292 -0
  162. data/geocoder-1.8.6/lib/geocoder/sql.rb +110 -0
  163. data/geocoder-1.8.6/lib/geocoder/stores/active_record.rb +329 -0
  164. data/geocoder-1.8.6/lib/geocoder/stores/base.rb +115 -0
  165. data/geocoder-1.8.6/lib/geocoder/stores/mongo_base.rb +58 -0
  166. data/geocoder-1.8.6/lib/geocoder/stores/mongo_mapper.rb +13 -0
  167. data/geocoder-1.8.6/lib/geocoder/stores/mongoid.rb +13 -0
  168. data/geocoder-1.8.6/lib/geocoder/util.rb +29 -0
  169. data/geocoder-1.8.6/lib/geocoder/version.rb +3 -0
  170. data/geocoder-1.8.6/lib/geocoder.rb +48 -0
  171. data/geocoder-1.8.6/lib/maxmind_database.rb +109 -0
  172. data/geocoder-1.8.6/lib/tasks/geocoder.rake +54 -0
  173. data/geocoder-1.8.6/lib/tasks/maxmind.rake +73 -0
  174. data/ultra-fast-mod.gemspec +12 -0
  175. metadata +214 -0
@@ -0,0 +1,62 @@
1
+ require 'geocoder/results/base'
2
+
3
+ module Geocoder::Result
4
+ class BaiduIp < Base
5
+ def coordinates
6
+ [point['y'].to_f, point['x'].to_f]
7
+ end
8
+
9
+ def address
10
+ @data['address']
11
+ end
12
+
13
+ def state
14
+ province
15
+ end
16
+
17
+ def province
18
+ address_detail['province']
19
+ end
20
+
21
+ def city
22
+ address_detail['city']
23
+ end
24
+
25
+ def district
26
+ address_detail['district']
27
+ end
28
+
29
+ def street
30
+ address_detail['street']
31
+ end
32
+
33
+ def street_number
34
+ address_detail['street_number']
35
+ end
36
+
37
+ def state_code
38
+ ""
39
+ end
40
+
41
+ def postal_code
42
+ ""
43
+ end
44
+
45
+ def country
46
+ "China"
47
+ end
48
+
49
+ def country_code
50
+ "CN"
51
+ end
52
+
53
+ private
54
+ def address_detail
55
+ @data['address_detail']
56
+ end
57
+
58
+ def point
59
+ @data['point']
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,282 @@
1
+ # encoding: utf-8
2
+ require 'geocoder/results/base'
3
+
4
+ module Geocoder::Result
5
+ class BanDataGouvFr < Base
6
+
7
+ STATE_CODE_MAPPINGS = {
8
+ "Guadeloupe" => "01",
9
+ "Martinique" => "02",
10
+ "Guyane" => "03",
11
+ "La Réunion" => "04",
12
+ "Mayotte" => "06",
13
+ "Île-de-France" => "11",
14
+ "Centre-Val de Loire" => "24",
15
+ "Bourgogne-Franche-Comté" => "27",
16
+ "Normandie" => "28",
17
+ "Hauts-de-France" => "32",
18
+ "Grand Est" => "44",
19
+ "Pays de la Loire" => "52",
20
+ "Bretagne" => "53",
21
+ "Nouvelle-Aquitaine" => "75",
22
+ "Occitanie" => "76",
23
+ "Auvergne-Rhône-Alpes" => "84",
24
+ "Provence-Alpes-Côte d'Azur" => "93",
25
+ "Corse" => "94"
26
+ }.freeze
27
+
28
+ #### BASE METHODS ####
29
+
30
+ def self.response_attributes
31
+ %w[limit attribution version licence type features center]
32
+ end
33
+
34
+ response_attributes.each do |a|
35
+ unless method_defined?(a)
36
+ define_method a do
37
+ @data[a]
38
+ end
39
+ end
40
+ end
41
+
42
+ #### BEST RESULT ####
43
+
44
+ def result
45
+ features[0] if features.any?
46
+ end
47
+
48
+ #### GEOMETRY ####
49
+
50
+ def geometry
51
+ result['geometry'] if result
52
+ end
53
+
54
+ def precision
55
+ geometry['type'] if geometry
56
+ end
57
+
58
+ def coordinates
59
+ coords = geometry["coordinates"]
60
+ return [coords[1].to_f, coords[0].to_f]
61
+ end
62
+
63
+ #### PROPERTIES ####
64
+
65
+ # List of raw attrbutes returned by BAN data gouv fr API:
66
+ #
67
+ # :id => [string] UUID of the result, said to be not stable
68
+ # atm, based on IGN reference (Institut national de
69
+ # l'information géographique et forestière)
70
+ #
71
+ # :type => [string] result type (housenumber, street, city,
72
+ # town, village, locality)
73
+ #
74
+ # :score => [float] value between 0 and 1 giving result's
75
+ # relevancy
76
+ #
77
+ # :housenumber => [string] street number and extra information
78
+ # (bis, ter, A, B)
79
+ #
80
+ # :street => [string] street name
81
+ #
82
+ # :name => [string] housenumber and street name
83
+ #
84
+ # :postcode => [string] city post code (used for mails by La Poste,
85
+ # beware many cities got severeal postcodes)
86
+ #
87
+ # :citycode => [string] city code (INSEE reference,
88
+ # consider it as a french institutional UUID)
89
+ #
90
+ # :city => [string] city name
91
+ #
92
+ # :context => [string] department code, department name and
93
+ # region code
94
+ #
95
+ # :label => [string] full address without state, country name
96
+ # and country code
97
+ #
98
+ # CITIES ONLY PROPERTIES
99
+ #
100
+ # :adm_weight => [string] administrative weight (importance) of
101
+ # the city
102
+ #
103
+ # :population => [float] number of inhabitants with a 1000 factor
104
+ #
105
+ # For up to date doc (in french only) : https://adresse.data.gouv.fr/api/
106
+ #
107
+ def properties
108
+ result['properties'] if result
109
+ end
110
+
111
+ # List of usable Geocoder results' methods
112
+ #
113
+ # score => [float] result relevance 0 to 1
114
+ #
115
+ # location_id => [string] location's IGN UUID
116
+ #
117
+ # result_type => [string] housenumber / street / city
118
+ # / town / village / locality
119
+ #
120
+ # international_address => [string] full address with country code
121
+ #
122
+ # national_address => [string] full address with country code
123
+ #
124
+ # street_address => [string] housenumber + extra inf
125
+ # + street name
126
+ #
127
+ # street_number => [string] housenumber + extra inf
128
+ # (bis, ter, etc)
129
+ #
130
+ # street_name => [string] street's name
131
+ #
132
+ # city_name => [string] city's name
133
+ #
134
+ # city_code => [string] city's INSEE UUID
135
+ #
136
+ # postal_code => [string] city's postal code (used for mails)
137
+ #
138
+ # context => [string] city's department code, department
139
+ # name and region name
140
+ #
141
+ # demartment_name => [string] city's department name
142
+ #
143
+ # department_code => [string] city's department INSEE UUID
144
+ #
145
+ # region_name => [string] city's region name
146
+ #
147
+ # population => [string] city's inhabitants count
148
+ #
149
+ # administrative_weight => [integer] city's importance on a scale
150
+ # from 6 (capital city) to 1 (regular village)
151
+ #
152
+ def score
153
+ properties['score']
154
+ end
155
+
156
+ def location_id
157
+ properties['id']
158
+ end
159
+
160
+ # Types
161
+ #
162
+ # housenumber
163
+ # street
164
+ # city
165
+ # town
166
+ # village
167
+ # locality
168
+ #
169
+ def result_type
170
+ properties['type']
171
+ end
172
+
173
+ def international_address
174
+ "#{national_address}, #{country}"
175
+ end
176
+
177
+ def national_address
178
+ properties['label']
179
+ end
180
+
181
+ def street_address
182
+ properties['name']
183
+ end
184
+
185
+ def street_number
186
+ properties['housenumber']
187
+ end
188
+
189
+ def street_name
190
+ properties['street']
191
+ end
192
+
193
+ def city_name
194
+ properties['city']
195
+ end
196
+
197
+ def city_code
198
+ properties['citycode']
199
+ end
200
+
201
+ def postal_code
202
+ properties['postcode']
203
+ end
204
+
205
+ def context
206
+ properties['context'].split(/,/).map(&:strip)
207
+ end
208
+
209
+ def department_code
210
+ context[0] if context.length > 0
211
+ end
212
+
213
+ # Monkey logic to handle fact Paris is both a city and a department
214
+ # in Île-de-France region
215
+ def department_name
216
+ if context.length > 1
217
+ if context[1] == "Île-de-France"
218
+ "Paris"
219
+ else
220
+ context[1]
221
+ end
222
+ end
223
+ end
224
+
225
+ def region_name
226
+ if context.length == 2 && context[1] == "Île-de-France"
227
+ context[1]
228
+ elsif context.length > 2
229
+ context[2]
230
+ end
231
+ end
232
+
233
+ def region_code
234
+ STATE_CODE_MAPPINGS[region_name]
235
+ end
236
+
237
+ def country
238
+ "France"
239
+ end
240
+
241
+ # Country code types
242
+ # FR : France
243
+ # GF : Guyane Française
244
+ # RE : Réunion
245
+ # NC : Nouvelle-Calédonie
246
+ # GP : Guadeloupe
247
+ # MQ : Martinique
248
+ # MU : Maurice
249
+ # PF : Polynésie française
250
+ #
251
+ # Will need refacto to handle different country codes, but BAN API
252
+ # is currently mainly designed for geocode FR country code addresses
253
+ def country_code
254
+ "FR"
255
+ end
256
+
257
+ #### ALIAS METHODS ####
258
+
259
+ alias_method :address, :international_address
260
+ alias_method :street, :street_name
261
+ alias_method :city, :city_name
262
+ alias_method :state, :region_name
263
+ alias_method :state_code, :region_code
264
+
265
+ #### CITIES' METHODS ####
266
+
267
+ def population
268
+ (properties['population'].to_f * 1000).to_i if city?(result_type)
269
+ end
270
+
271
+ def administrative_weight
272
+ properties['adm_weight'].to_i if city?(result_type)
273
+ end
274
+
275
+ private
276
+
277
+ def city?(result_type)
278
+ result_type == 'municipality'
279
+ end
280
+
281
+ end
282
+ end
@@ -0,0 +1,79 @@
1
+ module Geocoder
2
+ module Result
3
+ class Base
4
+
5
+ # data (hash) fetched from geocoding service
6
+ attr_accessor :data
7
+
8
+ # true if result came from cache, false if from request to geocoding
9
+ # service; nil if cache is not configured
10
+ attr_accessor :cache_hit
11
+
12
+ ##
13
+ # Takes a hash of data from a parsed geocoding service response.
14
+ #
15
+ def initialize(data)
16
+ @data = data
17
+ @cache_hit = nil
18
+ end
19
+
20
+ ##
21
+ # A string in the given format.
22
+ #
23
+ # This default implementation dumbly follows the United States address
24
+ # format and will return incorrect results for most countries. Some APIs
25
+ # return properly formatted addresses and those should be funneled
26
+ # through this method.
27
+ #
28
+ def address(format = :full)
29
+ if state_code.to_s != ""
30
+ s = ", #{state_code}"
31
+ elsif state.to_s != ""
32
+ s = ", #{state}"
33
+ else
34
+ s = ""
35
+ end
36
+ "#{city}#{s} #{postal_code}, #{country}".sub(/^[ ,]*/, '')
37
+ end
38
+
39
+ ##
40
+ # A two-element array: [lat, lon].
41
+ #
42
+ def coordinates
43
+ [@data['latitude'].to_f, @data['longitude'].to_f]
44
+ end
45
+
46
+ def latitude
47
+ coordinates[0]
48
+ end
49
+
50
+ def longitude
51
+ coordinates[1]
52
+ end
53
+
54
+ def state
55
+ fail
56
+ end
57
+
58
+ def province
59
+ state
60
+ end
61
+
62
+ def state_code
63
+ fail
64
+ end
65
+
66
+ def province_code
67
+ state_code
68
+ end
69
+
70
+ def country
71
+ fail
72
+ end
73
+
74
+ def country_code
75
+ fail
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,52 @@
1
+ require 'geocoder/results/base'
2
+
3
+ module Geocoder::Result
4
+ class Bing < Base
5
+
6
+ def address(format = :full)
7
+ @data['address']['formattedAddress']
8
+ end
9
+
10
+ def city
11
+ @data['address']['locality']
12
+ end
13
+
14
+ def state_code
15
+ @data['address']['adminDistrict']
16
+ end
17
+
18
+ alias_method :state, :state_code
19
+
20
+ def country
21
+ @data['address']['countryRegion']
22
+ end
23
+
24
+ alias_method :country_code, :country
25
+
26
+ def postal_code
27
+ @data['address']['postalCode'].to_s
28
+ end
29
+
30
+ def coordinates
31
+ @data['point']['coordinates']
32
+ end
33
+
34
+ def address_data
35
+ @data['address']
36
+ end
37
+
38
+ def viewport
39
+ @data['bbox']
40
+ end
41
+
42
+ def self.response_attributes
43
+ %w[bbox name confidence entityType]
44
+ end
45
+
46
+ response_attributes.each do |a|
47
+ define_method a do
48
+ @data[a]
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,58 @@
1
+ require 'geocoder/results/base'
2
+
3
+ module Geocoder::Result
4
+ class DbIpCom < Base
5
+
6
+ def coordinates
7
+ ['latitude', 'longitude'].map{ |coordinate_name| @data[coordinate_name] }
8
+ end
9
+
10
+ def city
11
+ @data['city']
12
+ end
13
+
14
+ def district
15
+ @data['district']
16
+ end
17
+
18
+ def state_code
19
+ @data['stateProvCode']
20
+ end
21
+ alias_method :state, :state_code
22
+
23
+ def zip_code
24
+ @data['zipCode']
25
+ end
26
+ alias_method :postal_code, :zip_code
27
+
28
+ def country_name
29
+ @data['countryName']
30
+ end
31
+ alias_method :country, :country_name
32
+
33
+ def country_code
34
+ @data['countryCode']
35
+ end
36
+
37
+ def continent_name
38
+ @data['continentName']
39
+ end
40
+ alias_method :continent, :continent_name
41
+
42
+ def continent_code
43
+ @data['continentCode']
44
+ end
45
+
46
+ def time_zone
47
+ @data['timeZone']
48
+ end
49
+
50
+ def gmt_offset
51
+ @data['gmtOffset']
52
+ end
53
+
54
+ def currency_code
55
+ @data['currencyCode']
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,78 @@
1
+ require 'geocoder/results/base'
2
+
3
+ module Geocoder::Result
4
+ class Esri < Base
5
+
6
+ def address
7
+ address_key = reverse_geocode? ? 'Address' : 'Match_addr'
8
+ attributes[address_key]
9
+ end
10
+
11
+ def city
12
+ if !reverse_geocode? && is_city?
13
+ place_name
14
+ else
15
+ attributes['City']
16
+ end
17
+ end
18
+
19
+ def state
20
+ attributes['Region']
21
+ end
22
+
23
+ def state_code
24
+ abbr = attributes['RegionAbbr']
25
+ abbr.to_s == "" ? state : abbr
26
+ end
27
+
28
+ def country
29
+ country_key = reverse_geocode? ? "CountryCode" : "Country"
30
+ attributes[country_key]
31
+ end
32
+
33
+ alias_method :country_code, :country
34
+
35
+ def postal_code
36
+ attributes['Postal']
37
+ end
38
+
39
+ def place_name
40
+ place_name_key = reverse_geocode? ? "Address" : "PlaceName"
41
+ attributes[place_name_key]
42
+ end
43
+
44
+ def place_type
45
+ reverse_geocode? ? "Address" : attributes['Type']
46
+ end
47
+
48
+ def coordinates
49
+ [geometry["y"], geometry["x"]]
50
+ end
51
+
52
+ def viewport
53
+ north = attributes['Ymax']
54
+ south = attributes['Ymin']
55
+ east = attributes['Xmax']
56
+ west = attributes['Xmin']
57
+ [south, west, north, east]
58
+ end
59
+
60
+ private
61
+
62
+ def attributes
63
+ reverse_geocode? ? @data['address'] : @data['locations'].first['feature']['attributes']
64
+ end
65
+
66
+ def geometry
67
+ reverse_geocode? ? @data["location"] : @data['locations'].first['feature']["geometry"]
68
+ end
69
+
70
+ def reverse_geocode?
71
+ @data['locations'].nil?
72
+ end
73
+
74
+ def is_city?
75
+ ['City', 'State Capital', 'National Capital'].include?(place_type)
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,40 @@
1
+ require 'geocoder/results/base'
2
+
3
+ module Geocoder::Result
4
+ class Freegeoip < Base
5
+
6
+ def city
7
+ @data['city']
8
+ end
9
+
10
+ def state
11
+ @data['region_name']
12
+ end
13
+
14
+ def state_code
15
+ @data['region_code']
16
+ end
17
+
18
+ def country
19
+ @data['country_name']
20
+ end
21
+
22
+ def country_code
23
+ @data['country_code']
24
+ end
25
+
26
+ def postal_code
27
+ @data['zipcode'] || @data['zip_code']
28
+ end
29
+
30
+ def self.response_attributes
31
+ %w[metro_code ip]
32
+ end
33
+
34
+ response_attributes.each do |a|
35
+ define_method a do
36
+ @data[a]
37
+ end
38
+ end
39
+ end
40
+ end