Browse Source

Revert address client and use uprn client

pull/2922/head
Manny Dinssa 6 days ago
parent
commit
1c169c770e
  1. 10
      app/controllers/address_options_controller.rb
  2. 4
      app/models/log.rb
  3. 32
      app/services/address_client.rb
  4. 2
      spec/models/form/lettings/questions/uprn_selection_spec.rb
  5. 2
      spec/models/form/sales/questions/uprn_selection_spec.rb

10
app/controllers/address_options_controller.rb

@ -4,7 +4,7 @@ class AddressOptionsController < ApplicationController
if query.match?(/\A\d+\z/) && query.length > 5
# Query is all numbers and greater than 5 digits, assume it's a UPRN
service = AddressClient.new(uprn: query)
service = UprnClient.new(query)
service.call
if service.error.present?
@ -14,7 +14,7 @@ class AddressOptionsController < ApplicationController
end
elsif query.match?(/[a-zA-Z]/)
# Query contains letters, assume it's an address
service = AddressClient.new(address: query)
service = AddressClient.new(query)
service.call
if service.error.present?
@ -24,8 +24,8 @@ class AddressOptionsController < ApplicationController
end
else
# Query is ambiguous, use both APIs and merge results
address_service = AddressClient.new(address: query)
uprn_service = AddressClient.new(uprn: query)
address_service = AddressClient.new(query)
uprn_service = UprnClient.new(query)
address_service.call
uprn_service.call
@ -46,7 +46,7 @@ class AddressOptionsController < ApplicationController
uprn = sales_log&.address_search
if uprn.present?
service = AddressClient.new(uprn: uprn)
service = UprnClient.new(uprn)
service.call
if service.error.present?

4
app/models/log.rb

@ -89,7 +89,7 @@ class Log < ApplicationRecord
def process_address_change!
if uprn_selection.present? || select_best_address_match.present?
if select_best_address_match
service = AddressClient.new(address: address_string)
service = AddressClient.new(address_string)
service.call
return nil if service.result.blank? || service.error.present?
@ -134,7 +134,7 @@ class Log < ApplicationRecord
@last_searched_address_string = search_query
service = AddressClient.new(address: address_string)
service = AddressClient.new(address_string)
service.call
if service.result.blank? || service.error.present?
@address_options = []

32
app/services/address_client.rb

@ -1,14 +1,14 @@
require "net/http"
class AddressClient
attr_reader :address, :uprn
attr_reader :address
attr_accessor :error
ADDRESS = "api.os.uk".freeze
PATH_FIND = "/search/places/v1/find".freeze
PATH_UPRN = "/search/places/v1/uprn".freeze
PATH = "/search/places/v1/find".freeze
def initialize(address: nil, uprn: nil)
def initialize(address)
@address = address
@uprn = uprn
end
def call
@ -27,14 +27,6 @@ class AddressClient
end
end
def result_by_uprn
if response.is_a?(Net::HTTPSuccess)
@result ||= JSON.parse(response.body)["result"]
else
@result = nil
end
end
private
def http_client
@ -47,7 +39,7 @@ class AddressClient
end
def endpoint_uri
uri = URI(PATH_FIND)
uri = URI(PATH)
params = {
query: address,
key: ENV["OS_DATA_KEY"],
@ -58,17 +50,7 @@ class AddressClient
uri.to_s
end
def endpoint_uri_by_uprn
uri = URI(PATH_UPRN)
params = {
uprn: uprn,
key: ENV["OS_DATA_KEY"],
}
uri.query = URI.encode_www_form(params)
uri.to_s
end
def response
@response ||= http_client.request_get(address ? endpoint_uri : endpoint_uri_by_uprn)
@response ||= http_client.request_get(endpoint_uri)
end
end

2
spec/models/form/lettings/questions/uprn_selection_spec.rb

@ -7,7 +7,7 @@ RSpec.describe Form::Lettings::Questions::UprnSelection, type: :model do
let(:question_definition) { nil }
let(:page) { instance_double(Form::Page, skip_href: "skip_href") }
let(:log) { build(:lettings_log, :in_progress, address_line1_input: "Address line 1", postcode_full_input: "AA1 1AA") }
let(:address_client_instance) { AddressClient.new(address: log.address_string) }
let(:address_client_instance) { AddressClient.new(log.address_string) }
before do
allow(AddressClient).to receive(:new).and_return(address_client_instance)

2
spec/models/form/sales/questions/uprn_selection_spec.rb

@ -7,7 +7,7 @@ RSpec.describe Form::Sales::Questions::UprnSelection, type: :model do
let(:question_definition) { nil }
let(:page) { instance_double(Form::Page, skip_href: "skip_href") }
let(:log) { build(:sales_log, :in_progress, address_line1_input: "Address line 1", postcode_full_input: "AA1 1AA") }
let(:address_client_instance) { AddressClient.new(address: log.address_string) }
let(:address_client_instance) { AddressClient.new(log.address_string) }
before do
allow(AddressClient).to receive(:new).and_return(address_client_instance)

Loading…
Cancel
Save