regio 0.1.0 → 0.2.0
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/CHANGELOG.md +13 -1
- data/Gemfile.lock +1 -1
- data/README.md +61 -2
- data/lib/regio/core.rb +58 -0
- data/lib/regio/errors/failed.rb +13 -0
- data/lib/regio/errors/forbidden.rb +13 -0
- data/lib/regio/errors/not_found.rb +13 -0
- data/lib/regio/errors/unprocessable.rb +13 -0
- data/lib/regio/geocode.rb +4 -49
- data/lib/regio/reverse_geocode.rb +31 -0
- data/lib/regio/version.rb +1 -1
- data/lib/regio.rb +6 -0
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 58f1f77fb4ff83302a5591e138bface9f60913e2649727bee81b7460067d8d44
|
4
|
+
data.tar.gz: 7e10c3b4eb3826aaf0865888c98507f3cdf5a97e550f3100e8f91beb89bffe41
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6702d492cb1b10ee6f6795ef16be9c1d7f8e36009d2e3667e513974b642ceed446c41a83e106b832176aa90f7eadc05d7185fb5c5f24b23f1a0e8676bb68975f
|
7
|
+
data.tar.gz: a9e6cf6a456cdcda8d5abb1adb718199df81295aca6bc1fe7d488276b5f6a7ba1aa6eb94f35435fb34e551b5c6bc3da9eabab1e26534918dd68bea080914f5e8
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,18 @@
|
|
1
1
|
# Change log
|
2
2
|
|
3
|
-
## v0.
|
3
|
+
## v0.2.0 (15.10.2022)
|
4
|
+
|
5
|
+
* 1 major enhancement:
|
6
|
+
* Regio [reverse geocode](https://api.regio.ee/documentation/#docs/reverse_geocode)
|
7
|
+
* Minor refactoring
|
8
|
+
|
9
|
+
## v0.1.1 (9.10.2022)
|
10
|
+
|
11
|
+
* 1 major enhancement:
|
12
|
+
* Regio [geocode](https://api.regio.ee/documentation/#docs/geocode)
|
13
|
+
* Minor improvements
|
14
|
+
|
15
|
+
## v0.1.0 (9.10.2022)
|
4
16
|
|
5
17
|
* 1 major enhancement:
|
6
18
|
* Initial release
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# Regio
|
2
2
|
|
3
|
+
[](https://badge.fury.io/rb/regio)
|
4
|
+
|
3
5
|
[Regio geocoding API](https://api.regio.ee/documentation/#docs/geocode) lets you search for addresses from complete Estonian address database.
|
4
6
|
|
5
7
|
[Regio](https://www.regio.ee/en/)
|
@@ -9,7 +11,7 @@
|
|
9
11
|
Add this line to your application's Gemfile:
|
10
12
|
|
11
13
|
```ruby
|
12
|
-
gem 'regio'
|
14
|
+
gem 'regio', '~> 0.2.0'
|
13
15
|
```
|
14
16
|
|
15
17
|
And then execute:
|
@@ -22,7 +24,64 @@ Or install it yourself as:
|
|
22
24
|
|
23
25
|
## Usage
|
24
26
|
|
25
|
-
|
27
|
+
Get your own API key
|
28
|
+
|
29
|
+
```shell
|
30
|
+
REGIO_API_KEY=SECRET
|
31
|
+
```
|
32
|
+
|
33
|
+
### Geocoding
|
34
|
+
|
35
|
+
Use `Geocode` class in your code
|
36
|
+
|
37
|
+
```ruby
|
38
|
+
require 'regio'
|
39
|
+
|
40
|
+
class Geocoding
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def results
|
45
|
+
@results ||= Regio::Geocode.new(options).results
|
46
|
+
end
|
47
|
+
|
48
|
+
def options
|
49
|
+
{
|
50
|
+
address: 'Tartu maantee 83',
|
51
|
+
country: 'ee'
|
52
|
+
}
|
53
|
+
end
|
54
|
+
end
|
55
|
+
```
|
56
|
+
|
57
|
+
Check Regio [geocode](https://api.regio.ee/documentation/#docs/geocode) documentation
|
58
|
+
|
59
|
+
|
60
|
+
### Reverse geocoding
|
61
|
+
|
62
|
+
Use `ReverseGeocode` class in your code
|
63
|
+
|
64
|
+
```ruby
|
65
|
+
require 'regio'
|
66
|
+
|
67
|
+
class Geocoding
|
68
|
+
|
69
|
+
private
|
70
|
+
|
71
|
+
def results
|
72
|
+
@results ||= Regio::ReverseGeocode.new(options).results
|
73
|
+
end
|
74
|
+
|
75
|
+
def options
|
76
|
+
{
|
77
|
+
lat: 59.4276340999273,
|
78
|
+
lng: 24.7790924770962
|
79
|
+
}
|
80
|
+
end
|
81
|
+
end
|
82
|
+
```
|
83
|
+
|
84
|
+
Check Regio [reverse geocode](https://api.regio.ee/documentation/#docs/reverse_geocode) documentation
|
26
85
|
|
27
86
|
## Development
|
28
87
|
|
data/lib/regio/core.rb
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'httparty'
|
4
|
+
require 'json'
|
5
|
+
|
6
|
+
module Regio
|
7
|
+
class Core
|
8
|
+
include HTTParty
|
9
|
+
base_uri 'https://api.regio.ee'
|
10
|
+
|
11
|
+
attr_accessor :options
|
12
|
+
|
13
|
+
def initialize(options = {})
|
14
|
+
@options = default_options.merge(options)
|
15
|
+
end
|
16
|
+
|
17
|
+
COMPONENTS = [
|
18
|
+
{ name: :country, type: 'A0' },
|
19
|
+
{ name: :county, type: 'A1' },
|
20
|
+
{ name: :municipality, type: 'A2' },
|
21
|
+
{ name: :settlement, type: 'A3' },
|
22
|
+
{ name: :small_place, type: 'A4' },
|
23
|
+
{ name: :street, type: 'A5' },
|
24
|
+
{ name: :farmstead, type: 'A6' },
|
25
|
+
{ name: :house, type: 'A7' },
|
26
|
+
{ name: :apartment, type: 'A8' }
|
27
|
+
].freeze
|
28
|
+
|
29
|
+
def run(path, params = {})
|
30
|
+
JSON.parse(self.class.get(path, query: params).body, symbolize_names: true)
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def transform(result)
|
36
|
+
hash = default_hash_for(result)
|
37
|
+
|
38
|
+
COMPONENTS.each do |component|
|
39
|
+
item = result[:components].detect { |o| o[:type] == component[:type] }
|
40
|
+
hash[component[:name]] = item.nil? ? nil : item[:name]
|
41
|
+
end
|
42
|
+
|
43
|
+
hash
|
44
|
+
end
|
45
|
+
|
46
|
+
def default_hash_for(result)
|
47
|
+
{
|
48
|
+
regio_id: result[:id],
|
49
|
+
title: result[:address],
|
50
|
+
valid: result[:is_valid],
|
51
|
+
complete: result[:is_complete],
|
52
|
+
zipcode: result[:postcode],
|
53
|
+
lat: result[:geometry].last,
|
54
|
+
lon: result[:geometry].first
|
55
|
+
}
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
data/lib/regio/geocode.rb
CHANGED
@@ -1,32 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'httparty'
|
4
|
-
require 'json'
|
5
|
-
|
6
3
|
module Regio
|
7
|
-
class Geocode
|
8
|
-
include HTTParty
|
9
|
-
base_uri 'https://api.regio.ee'
|
10
|
-
|
11
|
-
COMPONENTS = [
|
12
|
-
{ name: :country, type: 'A0' },
|
13
|
-
{ name: :county, type: 'A1' },
|
14
|
-
{ name: :municipality, type: 'A2' },
|
15
|
-
{ name: :settlement, type: 'A3' },
|
16
|
-
{ name: :small_place, type: 'A4' },
|
17
|
-
{ name: :street, type: 'A5' },
|
18
|
-
{ name: :farmstead, type: 'A6' },
|
19
|
-
{ name: :house, type: 'A7' },
|
20
|
-
{ name: :apartment, type: 'A8' }
|
21
|
-
].freeze
|
22
|
-
|
23
|
-
attr_accessor :options
|
24
|
-
|
25
|
-
def initialize(options = {})
|
26
|
-
@options = default_options.merge(options)
|
27
|
-
end
|
28
|
-
|
4
|
+
class Geocode < Core
|
29
5
|
def results
|
6
|
+
raise Unprocessable, response[:message] if response[:message]
|
7
|
+
|
30
8
|
response.merge(
|
31
9
|
collection: response[:data]&.map { |result| transform(result) } || []
|
32
10
|
)
|
@@ -35,7 +13,7 @@ module Regio
|
|
35
13
|
private
|
36
14
|
|
37
15
|
def response
|
38
|
-
|
16
|
+
run('/geocode', options)
|
39
17
|
end
|
40
18
|
|
41
19
|
# NOTE: all options described in the documentation
|
@@ -50,28 +28,5 @@ module Regio
|
|
50
28
|
limit: 25
|
51
29
|
}
|
52
30
|
end
|
53
|
-
|
54
|
-
def transform(result)
|
55
|
-
hash = default_hash_for(result)
|
56
|
-
|
57
|
-
COMPONENTS.each do |component|
|
58
|
-
item = result[:components].detect { |o| o[:type] == component[:type] }
|
59
|
-
hash[component[:name]] = item.nil? ? nil : item[:name]
|
60
|
-
end
|
61
|
-
|
62
|
-
hash
|
63
|
-
end
|
64
|
-
|
65
|
-
def default_hash_for(result)
|
66
|
-
{
|
67
|
-
regio_id: result[:id],
|
68
|
-
title: result[:address],
|
69
|
-
valid: result[:is_valid],
|
70
|
-
complete: result[:is_complete],
|
71
|
-
zipcode: result[:postcode],
|
72
|
-
lat: result[:geometry].last,
|
73
|
-
lon: result[:geometry].first
|
74
|
-
}
|
75
|
-
end
|
76
31
|
end
|
77
32
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Regio
|
4
|
+
class ReverseGeocode < Core
|
5
|
+
def results
|
6
|
+
raise Unprocessable, response[:message] if response[:message]
|
7
|
+
|
8
|
+
response.merge(
|
9
|
+
collection: response[:data]&.map { |result| transform(result) } || []
|
10
|
+
)
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def response
|
16
|
+
run('/revgeocode', options)
|
17
|
+
end
|
18
|
+
|
19
|
+
# NOTE: all options described in the documentation
|
20
|
+
# https://api.regio.ee/documentation/#docs/reverse_geocode
|
21
|
+
def default_options
|
22
|
+
{
|
23
|
+
apikey: Configuration.api_key,
|
24
|
+
address_format: 'long_address',
|
25
|
+
details: 'id,address,postcode,type,components,geometry,is_valid,is_complete',
|
26
|
+
output_format: 'json',
|
27
|
+
limit: 25
|
28
|
+
}
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/regio/version.rb
CHANGED
data/lib/regio.rb
CHANGED
@@ -1,7 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'regio/configuration'
|
4
|
+
require 'regio/core'
|
4
5
|
require 'regio/geocode'
|
6
|
+
require 'regio/reverse_geocode'
|
7
|
+
require 'regio/errors/failed'
|
8
|
+
require 'regio/errors/forbidden'
|
9
|
+
require 'regio/errors/not_found'
|
10
|
+
require 'regio/errors/unprocessable'
|
5
11
|
require 'regio/version'
|
6
12
|
|
7
13
|
module Regio
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: regio
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- tab
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-10-
|
11
|
+
date: 2022-10-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -162,7 +162,13 @@ files:
|
|
162
162
|
- bin/setup
|
163
163
|
- lib/regio.rb
|
164
164
|
- lib/regio/configuration.rb
|
165
|
+
- lib/regio/core.rb
|
166
|
+
- lib/regio/errors/failed.rb
|
167
|
+
- lib/regio/errors/forbidden.rb
|
168
|
+
- lib/regio/errors/not_found.rb
|
169
|
+
- lib/regio/errors/unprocessable.rb
|
165
170
|
- lib/regio/geocode.rb
|
171
|
+
- lib/regio/reverse_geocode.rb
|
166
172
|
- lib/regio/version.rb
|
167
173
|
- regio.gemspec
|
168
174
|
homepage: https://github.com/tab/regio
|