open_street_map 1.0 → 1.2.1

Sign up to get free protection for your applications and to get access to all the features.
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