We were getting a few errors when trying out Zeitwerk: ``` expected file lib/sms_api.rb to define constant SmsApi expected file app/components/layout/common_html_attributes_component.rb to define constant Layout::CommonHtmlAttributesComponent ``` In these cases, we aren't using an inflection because we also define the `Verification::SmsController` and a few migrations containing `Html` in their class name, and none of them would work if we defined the inflection. We were also getting an error regarding classes containing WYSIWYG in its name: ``` NameError: uninitialized constant WYSIWYGSanitizer Did you mean? WysiwygSanitizer ``` In this case, adding the acronym is easier, since we never use "Wysiwyg" in the code but we use "WYSIWYG" in many places.
58 lines
1.4 KiB
Ruby
58 lines
1.4 KiB
Ruby
require "open-uri"
|
|
class SmsApi
|
|
attr_accessor :client
|
|
|
|
def initialize
|
|
@client = Savon.client(wsdl: url)
|
|
end
|
|
|
|
def url
|
|
return "" unless end_point_available?
|
|
|
|
URI.parse(Tenant.current_secrets.sms_end_point).to_s
|
|
end
|
|
|
|
def authorization
|
|
Base64.encode64("#{Tenant.current_secrets.sms_username}:#{Tenant.current_secrets.sms_password}")
|
|
end
|
|
|
|
def sms_deliver(phone, code)
|
|
return stubbed_response unless end_point_available?
|
|
|
|
response = client.call(:enviar_sms_simples, message: request(phone, code))
|
|
success?(response)
|
|
end
|
|
|
|
def request(phone, code)
|
|
{ autorizacion: authorization,
|
|
destinatarios: { destinatario: phone },
|
|
texto_mensaje: "Clave para verificarte: #{code}. Gobierno Abierto",
|
|
solicita_notificacion: "All" }
|
|
end
|
|
|
|
def success?(response)
|
|
response.body[:respuesta_sms][:respuesta_servicio_externo][:texto_respuesta] == "Success"
|
|
end
|
|
|
|
def end_point_available?
|
|
Rails.env.staging? || Rails.env.preproduction? || Rails.env.production?
|
|
end
|
|
|
|
def stubbed_response
|
|
{
|
|
respuesta_sms: {
|
|
identificador_mensaje: "1234567",
|
|
fecha_respuesta: "Thu, 20 Aug 2015 16:28:05 +0200",
|
|
respuesta_pasarela: {
|
|
codigo_pasarela: "0000",
|
|
descripcion_pasarela: "Operación ejecutada correctamente."
|
|
},
|
|
respuesta_servicio_externo: {
|
|
codigo_respuesta: "1000",
|
|
texto_respuesta: "Success"
|
|
}
|
|
}
|
|
}
|
|
end
|
|
end
|