open_street_map 1.0 → 1.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0245145c2c7910156d7e9104e20a8473fd68c121b03adfd362d11a6fb72de5ff
4
- data.tar.gz: 5e22a03e1249dc6ba2461c190e15d155b85c3d69a93e66f170b3de94c74263e7
3
+ metadata.gz: f61b519813aa4291018e672ee071d49f8ad671075c6b1b2b4a9839edafe7a9bf
4
+ data.tar.gz: 86c49fd6b466b9591bba96dd41772ae6a7bdab3b4878a2a63dcd773227f16d63
5
5
  SHA512:
6
- metadata.gz: e06ec27a0c5f8540a09cc107967c16ae70ec0dd700e767889806795e8aeed893d716155a93f60363ae3107e7f529206fb727a329fa625acc6696c81be9cb1d71
7
- data.tar.gz: f28a7bcf80fb0375b56502bad6aef3c7727396b1906997d2a520ab0cbfe111977c67f91477e82dcb30426d37e121c7ee2d511ede5a5168afbd989aaf4d77a6c2
6
+ metadata.gz: 18bb37b6621fdd145f4233d9dd3f6e77c857e3472816626ffeeab8abfb6832f6a905df9f2b1d663604e0d5c480921197911ff8ca87af7c3efe0e887b4b9efd77
7
+ data.tar.gz: 663e12e827c02e9290d16b852a8dac4fedd9e5ff35390316df2cba915cc345354c0697af777220eed276122e2df1f1e3c66278c38f00b00b20b1a90cba806fdd
@@ -54,4 +54,3 @@ Style/FrozenStringLiteralComment:
54
54
 
55
55
  Style/RescueStandardError:
56
56
  Enabled: false
57
-
@@ -0,0 +1 @@
1
+ 2.5.1
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2018 kortirso
3
+ Copyright (c) 2018-2020 kortirso
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -1,6 +1,13 @@
1
1
  # OpenStreetMap
2
2
 
3
- Integration of OpenStreetMap api from [Nominatim](https://wiki.openstreetmap.org/wiki/Nominatim)
3
+ Integration of OpenStreetMap api from [Nominatim](https://wiki.openstreetmap.org/wiki/Nominatim)
4
+
5
+ ## Prerequisites
6
+
7
+ This project requires:
8
+
9
+ * Ruby >= 2.3.1, but can work with earlier versions
10
+ * HTTParty >= 0.16
4
11
 
5
12
  ## Installation
6
13
 
@@ -31,10 +38,10 @@ Or install it yourself as:
31
38
  Request for search objects is #search.
32
39
 
33
40
  ```ruby
34
- client.search(q: '135 pilkington avenue, birmingham', format: 'json', addressdetails: '1')
41
+ client.search(q: '135 pilkington avenue, birmingham', format: 'json', addressdetails: '1', accept_language: 'ru')
35
42
  ```
36
43
  q - query
37
- format - one of the [xml|json|jsonv2]
44
+ format - one of the [xml|json|jsonv2], default - xml
38
45
  viewbox - The preferred area to find search results like <x1>,<y1>,<x2>,<y2>
39
46
  bounded - Restrict the results to only items contained with the viewbox, one of the [0|1]
40
47
  addressdetails - Include a breakdown of the address into elements, one of the [0|1]
@@ -42,8 +49,12 @@ Request for search objects is #search.
42
49
  limit - Limit the number of returned results, integer
43
50
  extratags - Include additional information in the result if available, one of the [0|1]
44
51
  namedetails - Include a list of alternative names in the results, one of the [0|1]
52
+ accept_language - Preferred language order for showing search results, default - en
53
+ email - If you are making large numbers of request please include a valid email address
54
+ user_agent - User-Agent identifying the application, default - webgents/open_street_map_gem_random
55
+ hostname - allow overwriting the host name for users who have their own Nominatim installation, default - https://nominatim.openstreetmap.org/
45
56
 
46
- #### Responces
57
+ #### Responses
47
58
 
48
59
  ```ruby
49
60
  [
@@ -80,17 +91,21 @@ Request for search objects is #search.
80
91
  Request for objects by coordinates is #reverse.
81
92
 
82
93
  ```ruby
83
- client.reverse(format: 'json', lat: '52.594417', lon: '39.493115')
94
+ client.reverse(format: 'json', lat: '52.594417', lon: '39.493115', accept_language: 'ru')
84
95
  ```
85
- format - one of the [xml|json|jsonv2]
96
+ format - one of the [xml|json|jsonv2], default - xml
86
97
  zoom - Level of detail required where 0 is country and 18 is house/building, one of the [0-18]
87
98
  addressdetails - Include a breakdown of the address into elements, one of the [0|1]
88
99
  lat - Latitude, required
89
100
  lon - Longitude, required
90
101
  extratags - Include additional information in the result if available, one of the [0|1]
91
102
  namedetails - Include a list of alternative names in the results, one of the [0|1]
103
+ accept_language - Preferred language order for showing search results, default - en
104
+ email - If you are making large numbers of request please include a valid email address
105
+ user_agent - User-Agent identifying the application, default - webgents/open_street_map_gem_random
106
+ hostname - allow overwriting the host name for users who have their own Nominatim installation, default - https://nominatim.openstreetmap.org/
92
107
 
93
- #### Responces
108
+ #### Responses
94
109
 
95
110
  ```ruby
96
111
  {
@@ -124,3 +139,7 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/WebGen
124
139
  ## License
125
140
 
126
141
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
142
+
143
+ ## Disclaimer
144
+
145
+ Use this package at your own peril and risk, the author tried to simplify the use of [Nominatim service](https://wiki.openstreetmap.org/wiki/Nominatim) for integration into Ruby on Rails web applications.
@@ -1,16 +1,23 @@
1
- require 'rest-client'
2
- require 'json'
3
- require_relative 'client/reverse'
4
- require_relative 'client/search'
1
+ require 'httparty'
2
+ require_relative 'client/request'
5
3
 
6
4
  module OpenStreetMap
7
5
  # Client requests
8
6
  class Client
9
- include OpenStreetMap::Client::Reverse
10
- include OpenStreetMap::Client::Search
7
+ include HTTParty
8
+ include OpenStreetMap::Client::Request
11
9
 
12
10
  BASE_URI = 'https://nominatim.openstreetmap.org/'.freeze
11
+ DEFAULT_USER_AGENT = "webgents/open_street_map_gem_#{SecureRandom.urlsafe_base64}".freeze
13
12
 
14
- def initialize(args = {}); end
13
+ # Search objects by query
14
+ def search(args = {})
15
+ call('search', args)
16
+ end
17
+
18
+ # Reverse geocoding generates an address from a latitude and longitude
19
+ def reverse(args = {})
20
+ call('reverse', args)
21
+ end
15
22
  end
16
23
  end
@@ -0,0 +1,40 @@
1
+ module OpenStreetMap
2
+ class Client
3
+ # methods for request
4
+ module Request
5
+ private
6
+
7
+ # make request to API
8
+ def call(type, args)
9
+ url = hostname(args[:hostname]) + type
10
+ headers = { 'User-Agent' => user_agent(args[:user_agent]) }
11
+ self.class.get(url, query: generate_body(type, args), headers: headers).parsed_response
12
+ end
13
+
14
+ # generate body from args
15
+ def generate_body(type, args)
16
+ args['accept-language'.to_sym] = args[:accept_language] if args.key?(:accept_language)
17
+ args.select { |key, _| valid_args(type).include?(key) }
18
+ end
19
+
20
+ # get list of permitted args
21
+ def valid_args(type)
22
+ case type
23
+ when 'search' then %i[q format addressdetails extratags namedetails viewbox bounded exclude_place_ids limit accept-language email]
24
+ when 'reverse' then %i[format lat lon zoom addressdetails extratags namedetails accept-language email]
25
+ else []
26
+ end
27
+ end
28
+
29
+ # select hostname for request
30
+ def hostname(value)
31
+ value || BASE_URI
32
+ end
33
+
34
+ # select user_agent for request
35
+ def user_agent(value)
36
+ value || DEFAULT_USER_AGENT
37
+ end
38
+ end
39
+ end
40
+ end
@@ -1,3 +1,3 @@
1
1
  module OpenStreetMap
2
- VERSION = '1.0'.freeze
2
+ VERSION = '1.2.1'.freeze
3
3
  end
@@ -9,7 +9,7 @@ Gem::Specification.new do |spec|
9
9
  spec.email = ['kortirso@gmail.com']
10
10
 
11
11
  spec.summary = 'OpenStrretMap API'
12
- spec.description = 'Integration with OpenStrretMap API'
12
+ spec.description = 'Integration with OpenStreetMap API'
13
13
  spec.homepage = 'https://github.com/WebGents/open_street_map'
14
14
  spec.license = 'MIT'
15
15
 
@@ -20,11 +20,11 @@ Gem::Specification.new do |spec|
20
20
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
21
  spec.require_paths = ['lib']
22
22
 
23
- spec.required_ruby_version = '>= 2.5.0'
23
+ spec.required_ruby_version = '>= 2.5.1'
24
24
 
25
25
  spec.add_development_dependency 'bundler', '~> 1.15'
26
- spec.add_development_dependency 'rake', '~> 10.0'
26
+ spec.add_development_dependency 'rake', '~> 13.0'
27
27
  spec.add_development_dependency 'rspec', '~> 3.0'
28
28
  spec.add_development_dependency 'rubocop', '~> 0.57.2'
29
- spec.add_dependency 'rest-client', '2.0.2'
29
+ spec.add_dependency 'httparty', '~> 0.17'
30
30
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: open_street_map
3
3
  version: !ruby/object:Gem::Version
4
- version: '1.0'
4
+ version: 1.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - JungleCoders
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2018-07-08 00:00:00.000000000 Z
12
+ date: 2020-06-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -31,14 +31,14 @@ dependencies:
31
31
  requirements:
32
32
  - - "~>"
33
33
  - !ruby/object:Gem::Version
34
- version: '10.0'
34
+ version: '13.0'
35
35
  type: :development
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - "~>"
40
40
  - !ruby/object:Gem::Version
41
- version: '10.0'
41
+ version: '13.0'
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: rspec
44
44
  requirement: !ruby/object:Gem::Requirement
@@ -68,20 +68,20 @@ dependencies:
68
68
  - !ruby/object:Gem::Version
69
69
  version: 0.57.2
70
70
  - !ruby/object:Gem::Dependency
71
- name: rest-client
71
+ name: httparty
72
72
  requirement: !ruby/object:Gem::Requirement
73
73
  requirements:
74
- - - '='
74
+ - - "~>"
75
75
  - !ruby/object:Gem::Version
76
- version: 2.0.2
76
+ version: '0.17'
77
77
  type: :runtime
78
78
  prerelease: false
79
79
  version_requirements: !ruby/object:Gem::Requirement
80
80
  requirements:
81
- - - '='
81
+ - - "~>"
82
82
  - !ruby/object:Gem::Version
83
- version: 2.0.2
84
- description: Integration with OpenStrretMap API
83
+ version: '0.17'
84
+ description: Integration with OpenStreetMap API
85
85
  email:
86
86
  - kortirso@gmail.com
87
87
  executables: []
@@ -91,6 +91,7 @@ files:
91
91
  - ".gitignore"
92
92
  - ".rspec"
93
93
  - ".rubocop.yml"
94
+ - ".ruby-version"
94
95
  - ".travis.yml"
95
96
  - CODE_OF_CONDUCT.md
96
97
  - Gemfile
@@ -101,8 +102,7 @@ files:
101
102
  - bin/setup
102
103
  - lib/open_street_map.rb
103
104
  - lib/open_street_map/client.rb
104
- - lib/open_street_map/client/reverse.rb
105
- - lib/open_street_map/client/search.rb
105
+ - lib/open_street_map/client/request.rb
106
106
  - lib/open_street_map/version.rb
107
107
  - open_street_map.gemspec
108
108
  homepage: https://github.com/WebGents/open_street_map
@@ -117,7 +117,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
117
117
  requirements:
118
118
  - - ">="
119
119
  - !ruby/object:Gem::Version
120
- version: 2.5.0
120
+ version: 2.5.1
121
121
  required_rubygems_version: !ruby/object:Gem::Requirement
122
122
  requirements:
123
123
  - - ">="
@@ -1,26 +0,0 @@
1
- module OpenStreetMap
2
- class Client
3
- # Reverse geocoding generates an address from a latitude and longitude
4
- module Reverse
5
- def reverse(args = {})
6
- response = RestClient.get("#{BASE_URI}reverse?#{reverse_args_to_url(args)}")
7
- args[:format] == 'xml' ? response.body : JSON.parse(response.body)
8
- rescue
9
- { 'errors' => 'Bad request' }
10
- end
11
-
12
- private
13
-
14
- def reverse_args_to_url(args, result = [])
15
- valid_reverse_args(args).each do |key, value|
16
- result << "#{key}=#{value}"
17
- end
18
- result.join('&')
19
- end
20
-
21
- def valid_reverse_args(args)
22
- args.slice(:format, :lat, :lon, :zoom, :addressdetails, :extratags, :namedetails)
23
- end
24
- end
25
- end
26
- end
@@ -1,30 +0,0 @@
1
- module OpenStreetMap
2
- class Client
3
- # Search objects by query
4
- module Search
5
- def search(args = {})
6
- response = RestClient.get("#{BASE_URI}search?#{search_arg(args[:q])}&#{search_args_to_url(args)}")
7
- args[:format] == 'xml' ? response.body : JSON.parse(response.body)
8
- rescue
9
- { 'errors' => 'Bad request' }
10
- end
11
-
12
- private
13
-
14
- def search_arg(arg)
15
- "q=#{arg.gsub(/\s+/, '+')}"
16
- end
17
-
18
- def search_args_to_url(args, result = [])
19
- valid_search_args(args).each do |key, value|
20
- result << "#{key}=#{value}"
21
- end
22
- result.join('&')
23
- end
24
-
25
- def valid_search_args(args)
26
- args.slice(:format, :addressdetails, :extratags, :namedetails, :viewbox, :bounded, :exclude_place_ids, :limit)
27
- end
28
- end
29
- end
30
- end