From 5cc10cbadff3da89a68c82e193a0afdd8079bdb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20Mart=C3=ADn?= Date: Sun, 14 Nov 2021 15:44:11 +0100 Subject: [PATCH] Allow dashes in postal codes In some countries, postal codes are defined with a dash in the middle, so we're using a colon to define ranges instead. We could also use two dots, like in Ruby ranges, but IMHO this would cause typos since people would enter codes separated with three dots or just one dot. --- app/models/setting.rb | 2 +- app/models/verification/residence.rb | 4 ++-- config/locales/en/settings.yml | 1 + config/locales/es/settings.yml | 1 + spec/models/verification/residence_spec.rb | 11 ++++++++++- 5 files changed, 15 insertions(+), 4 deletions(-) diff --git a/app/models/setting.rb b/app/models/setting.rb index 8c813dcc2..0488c2d2d 100644 --- a/app/models/setting.rb +++ b/app/models/setting.rb @@ -177,7 +177,7 @@ class Setting < ApplicationRecord "machine_learning.comments_summary": false, "machine_learning.related_content": false, "machine_learning.tags": false, - "postal_codes": "00001-99999", + "postal_codes": "00001:99999", "remote_census.general.endpoint": "", "remote_census.request.method_name": "", "remote_census.request.structure": "", diff --git a/app/models/verification/residence.rb b/app/models/verification/residence.rb index 384bbe474..d254ccaa6 100644 --- a/app/models/verification/residence.rb +++ b/app/models/verification/residence.rb @@ -105,8 +105,8 @@ class Verification::Residence def valid_postal_code? Setting["postal_codes"].split(",").any? do |code_or_range| - if code_or_range.include?("-") - Range.new(*code_or_range.split("-")).include?(postal_code) + if code_or_range.include?(":") + Range.new(*code_or_range.split(":")).include?(postal_code) else postal_code == code_or_range end diff --git a/config/locales/en/settings.yml b/config/locales/en/settings.yml index d94498cbf..0e8d1218b 100644 --- a/config/locales/en/settings.yml +++ b/config/locales/en/settings.yml @@ -61,6 +61,7 @@ en: min_age_to_participate: Minimum age needed to participate min_age_to_participate_description: "Users over this age can participate in all processes where a user verified account is needed" postal_codes: "Postal Codes" + postal_codes_description: "A comma-separated list of valid postal codes; you can also introduce ranges separated with a colon. Example: 00001:00010,00024,AB3 45FG,00031:00035 will allow postal codes between 00001 and 00010, the postal code 00024, the postal code AB3 45FG, and postal codes between 00031 and 00035." proposals: successful_proposal_id: Successful proposal successful_proposal_id_description: This proposal is used as a reference for a successful proposal in supports number and will be displayed in the dashboard graph. diff --git a/config/locales/es/settings.yml b/config/locales/es/settings.yml index d37261848..631ef0603 100644 --- a/config/locales/es/settings.yml +++ b/config/locales/es/settings.yml @@ -61,6 +61,7 @@ es: min_age_to_participate: Edad mínima para participar min_age_to_participate_description: "Los usuarios mayores de esta edad podrán participar en todos los procesos donde se necesite una cuenta verificada" postal_codes: "Códigos Postales" + postal_codes_description: "Una lista de códigos postales válidos separados por comas; también puedes usar rangos utilizando \":\". Ejemplo: 00001:00010,00024,AB3 45FG,00031:00035 permitirá códigos postales entre 00001 y 00010, el 00024, el AB3 45FG, y códigos postales entre 00031 y 00035." proposals: successful_proposal_id: Propuesta exitosa successful_proposal_id_description: Esta propuesta se utiliza como referencia de una propuesta exitosa en número de apoyos y se mostrará en el gráfico del panel de control diff --git a/spec/models/verification/residence_spec.rb b/spec/models/verification/residence_spec.rb index 895ea89bf..cdfee621b 100644 --- a/spec/models/verification/residence_spec.rb +++ b/spec/models/verification/residence_spec.rb @@ -49,7 +49,7 @@ describe Verification::Residence do describe "postal code" do before do - Setting["postal_codes"] = "28001-28100,28200" + Setting["postal_codes"] = "28001:28100,28200,28303-455" census_data = double(valid?: true, district_code: "", gender: "") allow(census_data).to receive(:postal_code) { residence.postal_code } @@ -69,6 +69,9 @@ describe Verification::Residence do residence.postal_code = "28200" expect(residence).to be_valid + + residence.postal_code = "28303-455" + expect(residence).to be_valid end it "uses string ranges and not integer ranges" do @@ -102,6 +105,12 @@ describe Verification::Residence do residence.postal_code = "28000" expect(residence).not_to be_valid + residence.postal_code = "28303-454" + expect(residence).not_to be_valid + + residence.postal_code = "28303" + expect(residence).not_to be_valid + residence.postal_code = "28101" expect(residence).not_to be_valid expect(residence.errors.count).to eq 1