loqate 0.7.0 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +7 -0
- data/.yardstick.yml +21 -0
- data/CHANGELOG.md +5 -0
- data/README.md +15 -0
- data/ROADMAP.md +1 -0
- data/lib/loqate/gateway.rb +9 -0
- data/lib/loqate/geocoding/direction.rb +60 -0
- data/lib/loqate/geocoding/gateway.rb +106 -0
- data/lib/loqate/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 99e0ea7429e262e3ea0d27b5b97e47069414bc0c7f04306df780884e4827f333
|
4
|
+
data.tar.gz: c6e29931639924647a9a23eb753258c2baf1c7edf650413ebe28ab054d0dc1f2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1804077569ad841285a33eeba7edd9ab2a323069220d2782996f65d1f270acf35088a25c96ed29381609919190e230e54bded7fa3464c103fc39666832e8d250
|
7
|
+
data.tar.gz: 332955af60f1623ca8f4249b9cefda5a35a63c4a84aa4488aa674a7ca2776e7259fe1e8d378988c0382a56854f79b087335bcf2d367116a7e4b82346a2767da9
|
data/.rubocop.yml
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require: rubocop-rspec
|
2
|
+
|
1
3
|
AllCops:
|
2
4
|
DisplayCopNames: true
|
3
5
|
|
@@ -15,6 +17,11 @@ Naming/MethodName:
|
|
15
17
|
Exclude:
|
16
18
|
- lib/loqate/result.rb
|
17
19
|
|
20
|
+
# ----------------------- RSpec -----------------------
|
21
|
+
|
22
|
+
RSpec/ExampleLength:
|
23
|
+
Enabled: false
|
24
|
+
|
18
25
|
# ----------------------- Style -----------------------
|
19
26
|
|
20
27
|
Style/FrozenStringLiteralComment:
|
data/.yardstick.yml
CHANGED
@@ -121,8 +121,19 @@ rules:
|
|
121
121
|
- Loqate::Gateway#bank
|
122
122
|
- Loqate::Gateway#config
|
123
123
|
- Loqate::Gateway#email
|
124
|
+
- Loqate::Gateway#geocoding
|
124
125
|
- Loqate::Gateway#initialize
|
125
126
|
- Loqate::Gateway#phone
|
127
|
+
- Loqate::Geocoding::Gateway#initialize
|
128
|
+
- Loqate::Geocoding::Direction#segment_number
|
129
|
+
- Loqate::Geocoding::Direction#step_number
|
130
|
+
- Loqate::Geocoding::Direction#action
|
131
|
+
- Loqate::Geocoding::Direction#description
|
132
|
+
- Loqate::Geocoding::Direction#road
|
133
|
+
- Loqate::Geocoding::Direction#step_time
|
134
|
+
- Loqate::Geocoding::Direction#step_distance
|
135
|
+
- Loqate::Geocoding::Direction#total_time
|
136
|
+
- Loqate::Geocoding::Direction#total_distance
|
126
137
|
- Loqate::Phone::Gateway#initialize
|
127
138
|
- Loqate::Phone::PhoneNumberValidation#country_prefix
|
128
139
|
- Loqate::Phone::PhoneNumberValidation#is_valid
|
@@ -179,6 +190,11 @@ rules:
|
|
179
190
|
- Loqate::Email::Gateway#mapper
|
180
191
|
- Loqate::Error#attributes
|
181
192
|
- Loqate::Gateway#client
|
193
|
+
- Loqate::Geocoding::Gateway#error_mapper
|
194
|
+
- Loqate::Geocoding::Gateway#client
|
195
|
+
- Loqate::Geocoding::Gateway#mapper
|
196
|
+
- Loqate::Geocoding::Gateway#build_error_from
|
197
|
+
- Loqate::Geocoding::Gateway#build_directions_from
|
182
198
|
- Loqate::Phone::Gateway#build_error_from
|
183
199
|
- Loqate::Phone::Gateway#build_phone_validation_from
|
184
200
|
- Loqate::Phone::Gateway#client
|
@@ -228,6 +244,11 @@ rules:
|
|
228
244
|
- Loqate::Email::Gateway#mapper
|
229
245
|
- Loqate::Error#attributes
|
230
246
|
- Loqate::Gateway#client
|
247
|
+
- Loqate::Geocoding::Gateway#error_mapper
|
248
|
+
- Loqate::Geocoding::Gateway#client
|
249
|
+
- Loqate::Geocoding::Gateway#mapper
|
250
|
+
- Loqate::Geocoding::Gateway#build_error_from
|
251
|
+
- Loqate::Geocoding::Gateway#build_directions_from
|
231
252
|
- Loqate::Phone::Gateway#build_error_from
|
232
253
|
- Loqate::Phone::Gateway#build_phone_validation_from
|
233
254
|
- Loqate::Phone::Gateway#client
|
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file.
|
|
4
4
|
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
5
5
|
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
6
6
|
|
7
|
+
## [0.8.0] - 2018-12-10
|
8
|
+
### Added
|
9
|
+
- Distance service of the Geocoding API
|
10
|
+
|
7
11
|
## [0.7.0] - 2018-12-03
|
8
12
|
### Changed
|
9
13
|
- Moved the `Address`, `Email` and `Phone` APIs into their own namespaces
|
@@ -57,6 +61,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|
57
61
|
- Initial core functionality
|
58
62
|
- Codebase maintenance tools
|
59
63
|
|
64
|
+
[0.8.0]: https://github.com/wilsonsilva/loqate/compare/v0.7.0...v0.8.0
|
60
65
|
[0.7.0]: https://github.com/wilsonsilva/loqate/compare/v0.6.0...v0.7.0
|
61
66
|
[0.6.0]: https://github.com/wilsonsilva/loqate/compare/v0.5.0...v0.6.0
|
62
67
|
[0.5.0]: https://github.com/wilsonsilva/loqate/compare/v0.4.0...v0.5.0
|
data/README.md
CHANGED
@@ -19,6 +19,8 @@ Client to address verification, postcode lookup, & data quality services from Lo
|
|
19
19
|
- [Address API](#address-api)
|
20
20
|
- [Finding addresses](#finding-addresses)
|
21
21
|
- [Retrieving the details of an address](#retrieving-the-details-of-an-address)
|
22
|
+
- [Geocoding API](#geocoding-api)
|
23
|
+
- [Finding directions](#finding-directions)
|
22
24
|
- [Phone API](#phone-api)
|
23
25
|
- [Validating a phone number](#validating-a-phone-number)
|
24
26
|
- [Email API](#phone-api)
|
@@ -127,6 +129,19 @@ address.line1 # '148 Warner Road'
|
|
127
129
|
address.postal_code # 'E17 7EA'
|
128
130
|
```
|
129
131
|
|
132
|
+
### Geocoding API
|
133
|
+
|
134
|
+
The Geocoding API exposes endpoints to perform geocoding operations.
|
135
|
+
|
136
|
+
#### Finding directions
|
137
|
+
```ruby
|
138
|
+
directions = gateway.geocoding.directions!(
|
139
|
+
start: [51.5079532, -0.1266053],
|
140
|
+
finish: [51.5078677, -0.1266825]
|
141
|
+
)
|
142
|
+
directions.first.description # => 'Leave from Strand/A4'
|
143
|
+
```
|
144
|
+
|
130
145
|
### Phone API
|
131
146
|
|
132
147
|
The Phone API consists of a single API request:
|
data/ROADMAP.md
CHANGED
data/lib/loqate/gateway.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'loqate/address/gateway'
|
2
2
|
require 'loqate/bank/gateway'
|
3
3
|
require 'loqate/email/gateway'
|
4
|
+
require 'loqate/geocoding/gateway'
|
4
5
|
require 'loqate/phone/gateway'
|
5
6
|
|
6
7
|
module Loqate
|
@@ -34,6 +35,14 @@ module Loqate
|
|
34
35
|
@address ||= Address::Gateway.new(client)
|
35
36
|
end
|
36
37
|
|
38
|
+
# Gateway to the Geocoding APIs.
|
39
|
+
#
|
40
|
+
# @return [Geocoding::Gateway] An instance of a geocoding gateway.
|
41
|
+
#
|
42
|
+
def geocoding
|
43
|
+
@geocoding ||= Geocoding::Gateway.new(client)
|
44
|
+
end
|
45
|
+
|
37
46
|
# Gateway to the Phone number API.
|
38
47
|
#
|
39
48
|
# @return [Phone::Gateway] An instance of a phone gateway.
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module Loqate
|
2
|
+
module Geocoding
|
3
|
+
# A result from the directions API call.
|
4
|
+
class Direction < Dry::Struct::Value
|
5
|
+
# A zero based counter indicating the row number.
|
6
|
+
#
|
7
|
+
# @return [Integer]
|
8
|
+
#
|
9
|
+
attribute :segment_number, Types::Strict::Integer
|
10
|
+
|
11
|
+
# A zero based counter indicating the row number.
|
12
|
+
#
|
13
|
+
# @return [Integer]
|
14
|
+
#
|
15
|
+
attribute :step_number, Types::Strict::Integer
|
16
|
+
|
17
|
+
# The type of routing instruction.
|
18
|
+
#
|
19
|
+
# @return [String]
|
20
|
+
#
|
21
|
+
attribute :action, Types::Strict::String
|
22
|
+
|
23
|
+
# Textual description of the routing instruction.
|
24
|
+
#
|
25
|
+
# @return [String]
|
26
|
+
#
|
27
|
+
attribute :description, Types::Strict::String
|
28
|
+
|
29
|
+
# The name of the road to turn onto.
|
30
|
+
#
|
31
|
+
# @return [String]
|
32
|
+
#
|
33
|
+
attribute :road, Types::Strict::String
|
34
|
+
|
35
|
+
# The time in seconds for this part of the route.
|
36
|
+
#
|
37
|
+
# @return [Integer]
|
38
|
+
#
|
39
|
+
attribute :step_time, Types::Strict::Integer
|
40
|
+
|
41
|
+
# The distance in metres for this part of the route.
|
42
|
+
#
|
43
|
+
# @return [Integer]
|
44
|
+
#
|
45
|
+
attribute :step_distance, Types::Strict::Integer
|
46
|
+
|
47
|
+
# The total time in seconds for the route.
|
48
|
+
#
|
49
|
+
# @return [Integer]
|
50
|
+
#
|
51
|
+
attribute :total_time, Types::Strict::Integer
|
52
|
+
|
53
|
+
# The total distance in metres for the route.
|
54
|
+
#
|
55
|
+
# @return [Integer]
|
56
|
+
#
|
57
|
+
attribute :total_distance, Types::Strict::Integer
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
require 'loqate/client'
|
2
|
+
require 'loqate/result'
|
3
|
+
require 'loqate/geocoding/direction'
|
4
|
+
require 'loqate/mappers/error_mapper'
|
5
|
+
require 'loqate/mappers/generic_mapper'
|
6
|
+
|
7
|
+
module Loqate
|
8
|
+
module Geocoding
|
9
|
+
# Retrieves
|
10
|
+
class Gateway
|
11
|
+
DIRECTIONS_ENDPOINT = '/DistancesAndDirections/Interactive/Directions/v2.00/json3.ws'.freeze
|
12
|
+
|
13
|
+
include Result::Mixin
|
14
|
+
|
15
|
+
# Creates a geocoding gateway.
|
16
|
+
#
|
17
|
+
# @param [Client] client The client responsible for the HTTP interactions
|
18
|
+
#
|
19
|
+
def initialize(client)
|
20
|
+
@client = client
|
21
|
+
@mapper = Mappers::GenericMapper.new
|
22
|
+
@error_mapper = Mappers::ErrorMapper.new
|
23
|
+
end
|
24
|
+
|
25
|
+
# Returns the directions between two or more points.
|
26
|
+
#
|
27
|
+
# @param [Hash] options The options to find directions.
|
28
|
+
# @option options [String|Array<String>] :start The coordinates (latitude, longitude or easting, northing) of
|
29
|
+
# the start of the route. A postcode is also valid.
|
30
|
+
# @option options [String|Array<String>] :finish The coordinates (latitude, longitude or easting, northing) of
|
31
|
+
# the finish of the route. A postcode is also valid.
|
32
|
+
# @option options [String|Array<String>] :way_points The coordinates (latitude, longitude or easting, northing)
|
33
|
+
# of any waypoints. Postcodes are also valid.
|
34
|
+
# @option options [String] :distance_type Specifies how the distances between the stores are calculated. It can
|
35
|
+
# either be 'Fastest' or 'Shortest'.
|
36
|
+
# @option options [String] :start_day The day of the week the route is to start on. Provide this parameter
|
37
|
+
# only if you wish to utilise superior 'Speed Profiles' historic traffic speed data over time for avoiding
|
38
|
+
# rush hours and such.
|
39
|
+
# @option options [String] :start_time The time of day the route is to start on, measured in whole minutes
|
40
|
+
# from midnight. (E.g. 8:30am is entered as 510.) Provide this parameter only if you wish to utilise
|
41
|
+
# superior 'Speed Profiles' historic traffic speed data over time for avoiding rush hours and such.
|
42
|
+
#
|
43
|
+
# @example Finding directions using latitude and longitude coordinates
|
44
|
+
# directions = geocoding_gateway.directions(
|
45
|
+
# start: ['51.5211057', '-0.0989496'],
|
46
|
+
# finish: ['51.5213087', '-0.0981853']
|
47
|
+
# )
|
48
|
+
#
|
49
|
+
# @example Finding directions using easting and northing coordinates
|
50
|
+
# directions = geocoding_gateway.directions(
|
51
|
+
# start: [381600, 259400],
|
52
|
+
# finish: [380600, 258400],
|
53
|
+
# )
|
54
|
+
#
|
55
|
+
# @example Finding directions using postcodes
|
56
|
+
# directions = geocoding_gateway.directions(
|
57
|
+
# start: 'EC1A 4JA',
|
58
|
+
# finish: 'EC1A 4ER'
|
59
|
+
# )
|
60
|
+
#
|
61
|
+
# @example Finding directions using waypoints
|
62
|
+
# directions = geocoding_gateway.directions(
|
63
|
+
# start: 'EC1A 4JA',
|
64
|
+
# finish: 'EC1A 4ER',
|
65
|
+
# way_points: ['EC1A 4JQ']
|
66
|
+
# )
|
67
|
+
#
|
68
|
+
# @example Finding directions in a given time
|
69
|
+
# directions = geocoding_gateway.directions(
|
70
|
+
# start: ['51.5211057', '-0.0989496'],
|
71
|
+
# finish: ['51.5213087', '-0.0981853']
|
72
|
+
# start_day: 'Monday',
|
73
|
+
# start_time: 510
|
74
|
+
# )
|
75
|
+
#
|
76
|
+
# @return [Result] A result wrapping a list of directions.
|
77
|
+
#
|
78
|
+
def directions(options)
|
79
|
+
%i[start finish way_points].each do |key|
|
80
|
+
options[key] = options[key].join(',') if options[key].respond_to?(:join)
|
81
|
+
end
|
82
|
+
|
83
|
+
response = client.get(DIRECTIONS_ENDPOINT, options)
|
84
|
+
|
85
|
+
response.errors? && build_error_from(response.items.first) || build_directions_from(response.items)
|
86
|
+
end
|
87
|
+
|
88
|
+
private
|
89
|
+
|
90
|
+
# @api private
|
91
|
+
attr_reader :client, :mapper, :error_mapper
|
92
|
+
|
93
|
+
# @api private
|
94
|
+
def build_error_from(item)
|
95
|
+
error = error_mapper.map_one(item)
|
96
|
+
Failure(error)
|
97
|
+
end
|
98
|
+
|
99
|
+
# @api private
|
100
|
+
def build_directions_from(item)
|
101
|
+
direction = mapper.map(item, Direction)
|
102
|
+
Success(direction)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
data/lib/loqate/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: loqate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Wilson Silva
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-12-
|
11
|
+
date: 2018-12-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dry-struct
|
@@ -361,6 +361,8 @@ files:
|
|
361
361
|
- lib/loqate/email/gateway.rb
|
362
362
|
- lib/loqate/error.rb
|
363
363
|
- lib/loqate/gateway.rb
|
364
|
+
- lib/loqate/geocoding/direction.rb
|
365
|
+
- lib/loqate/geocoding/gateway.rb
|
364
366
|
- lib/loqate/mappers/error_mapper.rb
|
365
367
|
- lib/loqate/mappers/generic_mapper.rb
|
366
368
|
- lib/loqate/phone/gateway.rb
|