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.
This commit is contained in:
Javi Martín
2021-11-14 15:44:11 +01:00
parent b8b4336266
commit 5cc10cbadf
5 changed files with 15 additions and 4 deletions

View File

@@ -177,7 +177,7 @@ class Setting < ApplicationRecord
"machine_learning.comments_summary": false, "machine_learning.comments_summary": false,
"machine_learning.related_content": false, "machine_learning.related_content": false,
"machine_learning.tags": false, "machine_learning.tags": false,
"postal_codes": "00001-99999", "postal_codes": "00001:99999",
"remote_census.general.endpoint": "", "remote_census.general.endpoint": "",
"remote_census.request.method_name": "", "remote_census.request.method_name": "",
"remote_census.request.structure": "", "remote_census.request.structure": "",

View File

@@ -105,8 +105,8 @@ class Verification::Residence
def valid_postal_code? def valid_postal_code?
Setting["postal_codes"].split(",").any? do |code_or_range| Setting["postal_codes"].split(",").any? do |code_or_range|
if code_or_range.include?("-") if code_or_range.include?(":")
Range.new(*code_or_range.split("-")).include?(postal_code) Range.new(*code_or_range.split(":")).include?(postal_code)
else else
postal_code == code_or_range postal_code == code_or_range
end end

View File

@@ -61,6 +61,7 @@ en:
min_age_to_participate: Minimum age needed to participate 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" 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: "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: proposals:
successful_proposal_id: Successful proposal 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. 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.

View File

@@ -61,6 +61,7 @@ es:
min_age_to_participate: Edad mínima para participar 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" 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: "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: proposals:
successful_proposal_id: Propuesta exitosa 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 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

View File

@@ -49,7 +49,7 @@ describe Verification::Residence do
describe "postal code" do describe "postal code" do
before 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: "") census_data = double(valid?: true, district_code: "", gender: "")
allow(census_data).to receive(:postal_code) { residence.postal_code } allow(census_data).to receive(:postal_code) { residence.postal_code }
@@ -69,6 +69,9 @@ describe Verification::Residence do
residence.postal_code = "28200" residence.postal_code = "28200"
expect(residence).to be_valid expect(residence).to be_valid
residence.postal_code = "28303-455"
expect(residence).to be_valid
end end
it "uses string ranges and not integer ranges" do it "uses string ranges and not integer ranges" do
@@ -102,6 +105,12 @@ describe Verification::Residence do
residence.postal_code = "28000" residence.postal_code = "28000"
expect(residence).not_to be_valid 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" residence.postal_code = "28101"
expect(residence).not_to be_valid expect(residence).not_to be_valid
expect(residence.errors.count).to eq 1 expect(residence.errors.count).to eq 1