/
search_address.rb
64 lines (51 loc) · 1.49 KB
/
search_address.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
class SearchAddress
def self.process(addresses)
new(addresses).process
end
def initialize(addresses)
@addresses = addresses
@mappify_client = MappifyClient.new
end
def process
address_data = @addresses.each_with_object([]) do |(address), arr|
begin
arr << build_address_from_nlp_address(address)
rescue => e
next
end
end
return if address_data.empty?
Address.import_verified(address_data)
end
private
def build_address_from_nlp_address(address)
mappify_address = search_address(address.nlp_address)
confidence = mappify_address[:confidence].round(1)
[
*address.attributes.fetch_values("id", "site_id", "nlp_address", "nlp_confidence"),
*mappify_address[:data].values,
Address.statuses[:verified],
confidence
]
end
def search_address(nlp_address)
response = @mappify_client.address_search(nlp_address)
data = transform_data(response['result'].first)
{
confidence: response['confidence'],
data: data
}
end
def transform_data(address_hash)
street_name = [address_hash['streetName']]
street_name.push(address_hash['streetType']) if address_hash['streetType']
{
street_name: street_name.join(' ').titlecase,
suburb: address_hash["suburb"].titlecase,
state: address_hash["state"],
postcode: address_hash["postCode"],
lat: address_hash.dig("location", "lat"),
lng: address_hash.dig("location", "lon")
}
end
end