-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathsorting_office.rb
65 lines (56 loc) · 1.71 KB
/
sorting_office.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
65
$:.unshift File.join( File.dirname(__FILE__), "lib")
require 'sinatra'
require 'sorting_office'
require 'json'
module SortingOffice
class App < Sinatra::Base
use Rack::Angerfist, tracker_id: ENV['GA_TRACKER_ID'], domain: ENV['GA_TRACKER_DOMAIN']
before do
response.headers['Access-Control-Allow-Origin'] = "*"
end
get '/' do
send_file 'public/index.html'
end
post '/address' do
content_type :json
if params[:address]
address = SortingOffice::Address.new(params[:address])
address.parse
if address.postcode.nil?
status 400
{
error: "We couldn't detect a real postcode in your address. Please resubmit with a valid postcode."
}.to_json
else
h = {
saon: address.saon,
paon: address.paon,
street: address.street.try(:name).try(:titleize),
locality: address.locality.try(:name),
town: address.town.try(:name).try(:titleize),
postcode: address.postcode.try(:name),
provenance: address.provenance
}
SortingOffice::Queue.perform(h) if params[:contribute]
h = h.tap do |h|
[:street, :locality, :town, :postcode].each do |part|
h[part] = add_url(address.send(part))
end
h.delete(:provenance) if params[:noprov]
end
h.to_json
end
end
end
def add_url(part)
if part.nil?
nil
else
{
name: part.class == Postcode ? part.name : part.name.titleize,
url: "http://alpha.openaddressesuk.org/#{part.class.to_s.downcase.pluralize}/#{part.token}"
}
end
end
end
end