diff --git a/config/locales/en/settings.yml b/config/locales/en/settings.yml index f2eef602a..28ad0706c 100644 --- a/config/locales/en/settings.yml +++ b/config/locales/en/settings.yml @@ -132,7 +132,7 @@ en: method_name: "Request method name" method_name_description: "Request method name accepted by the City Census WebService." structure: "Request Structure" - structure_description: 'Request Structure that receives the Census WebService of the City council. The "static" values of this request should be filled. Values related to Document Type, Document Number, Date of Birth and Postal Code should be blank.' + structure_description: 'Request Structure that receives the Census WebService of the City council. The "static" values of this request should be filled. Values related to Document Type, Document Number, Date of Birth and Postal Code should be null. Example of a valid format: { "request": { "codigo_institucion": 1, "codigo_portal": 1, "codigo_usuario": 1, "documento": null, "tipo_documento": null, "codigo_idioma": 102, "nivel": 3 } }' document_type: "Path for Document Type" document_type_description: "Path in the request structure that sends the Document Type. DO NOT FILL IN if the WebService does not require the Document Type to verify a user." document_number: "Path for Document Number" diff --git a/config/locales/es/settings.yml b/config/locales/es/settings.yml index df376f702..3d1a37368 100644 --- a/config/locales/es/settings.yml +++ b/config/locales/es/settings.yml @@ -132,7 +132,7 @@ es: method_name: "Nombre del método de la petición" method_name_description: "Nombre del método qe acepta el WebService del Censo del Ayuntamiento." structure: "Estructura de la petición" - structure_description: 'Estructura de la petición que recibe el WebService del Censo del Ayuntamiento. Los valores "fijos" de esta petición deberan informarse. Los valores relacionado con Tipo de Documento, Número de Documento, Fecha de Nacimiento y Código Postal deberán dejarse en blanco.' + structure_description: 'Estructura de la petición que recibe el WebService del Censo del Ayuntamiento. Los valores "fijos" de esta petición deberan informarse. Los valores relacionado con Tipo de Documento, Número de Documento, Fecha de Nacimiento y Código Postal deberán dejarse con valor null. Ejemplo de formato válido: { "request": { "codigo_institucion": 1, "codigo_portal": 1, "codigo_usuario": 1, "documento": null, "tipo_documento": null, "codigo_idioma": 102, "nivel": 3 } }' document_type: "Ruta para Tipo de Documento" document_type_description: "Ruta donde se encuentra el campo en la estructura de la petición que envia el Tipo de Documento. NO RELLENAR en caso de que el WebService no requiera el Tipo de Documento para verificar un usuario." document_number: "Ruta para Número de Documento" diff --git a/lib/remote_census_api.rb b/lib/remote_census_api.rb index 9843aabc7..56c4cd73b 100644 --- a/lib/remote_census_api.rb +++ b/lib/remote_census_api.rb @@ -84,7 +84,7 @@ class RemoteCensusApi end def request(document_type, document_number, date_of_birth, postal_code) - structure = eval(Setting["remote_census.request.structure"]) + structure = JSON.parse(Setting["remote_census.request.structure"]) fill_in(structure, Setting["remote_census.request.document_type"], document_type) fill_in(structure, Setting["remote_census.request.document_number"], document_number) @@ -100,12 +100,11 @@ class RemoteCensusApi def fill_in(structure, path_value, value) path = parse_path(path_value) - update_value(structure, path, value) if path.present? end def parse_path(path_value) - path_value.split(".").map { |section| section.to_sym } if path_value.present? + path_value.split(".") if path_value.present? end def update_value(structure, path, value) diff --git a/spec/lib/remote_census_api_spec.rb b/spec/lib/remote_census_api_spec.rb index 5a5fe748a..83fe1464c 100644 --- a/spec/lib/remote_census_api_spec.rb +++ b/spec/lib/remote_census_api_spec.rb @@ -65,15 +65,15 @@ describe RemoteCensusApi do before do Setting["feature.remote_census"] = true - Setting["remote_census.request.structure"] = "{ request: - { codigo_institucion: 1, - codigo_portal: 1, - codigo_usuario: 1, - documento: 'xxx', - tipo_documento: 'xxx', - codigo_idioma: '102', - nivel: '3' } - }" + Setting["remote_census.request.structure"] = '{ "request": + { "codigo_institucion": 1, + "codigo_portal": 1, + "codigo_usuario": 1, + "documento": null, + "tipo_documento": null, + "codigo_idioma": 102, + "nivel": 3 } + }' Setting["remote_census.request.document_type"] = "request.tipo_documento" Setting["remote_census.request.document_number"] = "request.documento" Setting["remote_census.request.date_of_birth"] = nil @@ -86,14 +86,14 @@ describe RemoteCensusApi do request = RemoteCensusApi.new.send(:request, document_type, document_number, nil, nil) - expect(request).to eq({ :request => - { :codigo_institucion => 1, - :codigo_portal => 1, - :codigo_usuario => 1, - :documento => "0123456", - :tipo_documento => "1", - :codigo_idioma => "102", - :nivel => "3" } + expect(request).to eq({ "request" => + { "codigo_institucion" => 1, + "codigo_portal" => 1, + "codigo_usuario" => 1, + "documento" => "0123456", + "tipo_documento" => "1", + "codigo_idioma" => 102, + "nivel" => 3 } }) end @@ -105,29 +105,29 @@ describe RemoteCensusApi do request = RemoteCensusApi.new.send(:request, document_type, document_number, date_of_birth, postal_code) - expect(request).to eq({ :request => - { :codigo_institucion => 1, - :codigo_portal => 1, - :codigo_usuario => 1, - :documento => "0123456", - :tipo_documento => "1", - :codigo_idioma => "102", - :nivel => "3" } - }) + expect(request).to eq({ "request" => + { "codigo_institucion" => 1, + "codigo_portal" => 1, + "codigo_usuario" => 1, + "documento" => "0123456", + "tipo_documento" => "1", + "codigo_idioma" => 102, + "nivel" => 3 } + }) end it "when send date_of_birth and postal_code but are configured" do - Setting["remote_census.request.structure"] = "{ request: - { codigo_institucion: 1, - codigo_portal: 1, - codigo_usuario: 1, - documento: nil, - tipo_documento: nil, - fecha_nacimiento: nil, - codigo_postal: nil, - codigo_idioma: '102', - nivel: '3' } - }" + Setting["remote_census.request.structure"] = '{ "request": + { "codigo_institucion": 1, + "codigo_portal": 1, + "codigo_usuario": 1, + "documento": "nil", + "tipo_documento": "null", + "fecha_nacimiento": "null", + "codigo_postal": "nil", + "codigo_idioma": 102, + "nivel": 3 } + }' Setting["remote_census.request.date_of_birth"] = "request.fecha_nacimiento" Setting["remote_census.request.postal_code"] = "request.codigo_postal" document_type = "1" @@ -137,17 +137,17 @@ describe RemoteCensusApi do request = RemoteCensusApi.new.send(:request, document_type, document_number, date_of_birth, postal_code) - expect(request).to eq({ :request => - { :codigo_institucion => 1, - :codigo_portal => 1, - :codigo_usuario => 1, - :documento => "0123456", - :tipo_documento => "1", - :fecha_nacimiento => "1980-01-01", - :codigo_postal => "28001", - :codigo_idioma => "102", - :nivel => "3" } - }) + expect(request).to eq({ "request" => + { "codigo_institucion" => 1, + "codigo_portal" => 1, + "codigo_usuario" => 1, + "documento" => "0123456", + "tipo_documento" => "1", + "fecha_nacimiento" => "1980-01-01", + "codigo_postal" => "28001", + "codigo_idioma" => 102, + "nivel" => 3 } + }) end end