Browse Source

added PostcodeService to extract behavior

pull/721/head
JG 3 years ago
parent
commit
5c4b5754e9
  1. 2
      app/controllers/locations_controller.rb
  2. 2
      app/models/case_log.rb
  3. 6
      app/services/postcode_service.rb
  4. 9
      spec/services/postcode_service_spec.rb

2
app/controllers/locations_controller.rb

@ -70,7 +70,7 @@ private
def location_params def location_params
required_params = params.require(:location).permit(:postcode, :name, :total_units, :type_of_unit, :wheelchair_adaptation, :add_another_location).merge(scheme_id: @scheme.id) required_params = params.require(:location).permit(:postcode, :name, :total_units, :type_of_unit, :wheelchair_adaptation, :add_another_location).merge(scheme_id: @scheme.id)
required_params[:postcode] = required_params[:postcode].delete(" ").upcase.encode("ASCII", "UTF-8", invalid: :replace, undef: :replace, replace: "") if required_params[:postcode] required_params[:postcode] = PostcodeService.clean(required_params[:postcode].delete(" ").upcase) if required_params[:postcode]
required_params required_params
end end
end end

2
app/models/case_log.rb

@ -590,7 +590,7 @@ private
postcode_lookup = nil postcode_lookup = nil
begin begin
# URI encoding only supports ASCII characters # URI encoding only supports ASCII characters
ascii_postcode = postcode.encode("ASCII", "UTF-8", invalid: :replace, undef: :replace, replace: "") ascii_postcode = PostcodeService.clean(postcode)
Timeout.timeout(5) { postcode_lookup = PIO.lookup(ascii_postcode) } Timeout.timeout(5) { postcode_lookup = PIO.lookup(ascii_postcode) }
rescue Timeout::Error rescue Timeout::Error
Rails.logger.warn("Postcodes.io lookup timed out") Rails.logger.warn("Postcodes.io lookup timed out")

6
app/services/postcode_service.rb

@ -0,0 +1,6 @@
class PostcodeService
def self.clean(postcode)
postcode.encode("ASCII", "UTF-8", invalid: :replace, undef: :replace, replace: "")
end
end

9
spec/services/postcode_service_spec.rb

@ -0,0 +1,9 @@
require "rails_helper"
describe PostcodeService do
let(:postcode) { "SR81LS\u00A0" }
it "triggers a validation error" do
expect(described_class.clean(postcode)).to eq "SR81LS"
end
end
Loading…
Cancel
Save