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

4
app/models/log.rb

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

32
app/services/address_client.rb

@ -1,14 +1,14 @@
require "net/http"
class AddressClient class AddressClient
attr_reader :address, :uprn attr_reader :address
attr_accessor :error attr_accessor :error
ADDRESS = "api.os.uk".freeze ADDRESS = "api.os.uk".freeze
PATH_FIND = "/search/places/v1/find".freeze PATH = "/search/places/v1/find".freeze
PATH_UPRN = "/search/places/v1/uprn".freeze
def initialize(address: nil, uprn: nil) def initialize(address)
@address = address @address = address
@uprn = uprn
end end
def call def call
@ -27,14 +27,6 @@ class AddressClient
end end
end end
def result_by_uprn
if response.is_a?(Net::HTTPSuccess)
@result ||= JSON.parse(response.body)["result"]
else
@result = nil
end
end
private private
def http_client def http_client
@ -47,7 +39,7 @@ class AddressClient
end end
def endpoint_uri def endpoint_uri
uri = URI(PATH_FIND) uri = URI(PATH)
params = { params = {
query: address, query: address,
key: ENV["OS_DATA_KEY"], key: ENV["OS_DATA_KEY"],
@ -58,17 +50,7 @@ class AddressClient
uri.to_s uri.to_s
end 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 def response
@response ||= http_client.request_get(address ? endpoint_uri : endpoint_uri_by_uprn) @response ||= http_client.request_get(endpoint_uri)
end end
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(:question_definition) { nil }
let(:page) { instance_double(Form::Page, skip_href: "skip_href") } 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(: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 before do
allow(AddressClient).to receive(:new).and_return(address_client_instance) 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(:question_definition) { nil }
let(:page) { instance_double(Form::Page, skip_href: "skip_href") } 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(: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 before do
allow(AddressClient).to receive(:new).and_return(address_client_instance) allow(AddressClient).to receive(:new).and_return(address_client_instance)

Loading…
Cancel
Save