class SacspGateway::Client

Public Instance Methods

conn() click to toggle source
# File lib/sacsp_gateway/client.rb, line 6
def conn
  @conn ||= Connection.new
end
get_subjects() click to toggle source
# File lib/sacsp_gateway/client.rb, line 10
def get_subjects
  #Busca todos os assuntos:
  resp_doc = conn.get('/')
  validate_field_presence(resp_doc, "comboAssunto")
  assuntos = resp_doc.xpath('//*[@name="comboAssunto"]/option').map do |it|
    {key: it.attr(:value), text: it.text }
  end
end
step_1(subject_key) click to toggle source
# File lib/sacsp_gateway/client.rb, line 19
def step_1 subject_key
  #send_ticket_subject - Select the ticket subject
  resp_doc = conn.post('/default.asp', {
    txtAssu: '',
    comboAssunto: subject_key,
    acao2: 'Continuar'
  })
  validate_field_presence(resp_doc, "comboSubAssunto")
  specification = resp_doc.xpath('//*[@name="comboSubAssunto"]/option').map do |it|
    {key: it.attr(:value), text: it.text}
  end
end
step_2(specification_key) click to toggle source
# File lib/sacsp_gateway/client.rb, line 32
def step_2 specification_key
  #send_ticket_subject_specification - Select the subject specification
  resp_doc = conn.post('/solicitacaoCadastro.asp', {
    comboSubAssunto: specification_key,
    acao: 'Continuar'
  })
  validate_field_presence(resp_doc, "txtDescricao")
  return true #TODO: deve mesmo retornar algo? true?
end
step_3(ticket_data) click to toggle source
# File lib/sacsp_gateway/client.rb, line 42
def step_3 ticket_data
  #send_ticket_request_data
  ticket_data.merge(acao: 'Continuar')
  resp_doc = conn.post('/CadastroParametro/Logradouro.asp', ticket_data)
  validate_field_presence(resp_doc, "comboLogradouro")
  streets = resp_doc.xpath('//*[@name="comboLogradouro"]').map do |opt|
    {key: opt.attr(:value), text: opt.attr(:value).split(" ", 2).last }
  end
end
step_3_1(ticket_data) click to toggle source
# File lib/sacsp_gateway/client.rb, line 52
def step_3_1 ticket_data
  #send_ticket_request_data_confirmation
  ticket_data.merge(acao: 'Continuar')
  resp_doc = conn.post('/CadastroParametro/Logradouro.asp', ticket_data)
  validate_field_presence(resp_doc, "txtRG")
  return true #TODO: deve mesmo retornar algo? true?
end
step_4(id_info) click to toggle source
# File lib/sacsp_gateway/client.rb, line 60
def step_4 id_info
  #send_citizen_id_info
  id_info.merge(acao: 'Continuar')
  resp_doc = conn.post('/CadastroParametro/Logradouro.asp', id_info)
  citizen_id = id_info[:txtRG]
  validate_content_value_presence(resp_doc, "td", citizen_id)
  return true #TODO: deve mesmo retornar algo? true?
end
step_5!(citizen_data) click to toggle source
# File lib/sacsp_gateway/client.rb, line 69
def step_5! citizen_data
  #send_citizen_data_confirmation
  resp_doc = conn.post('/CadastroParametro/Solicitante.asp?Acao=ENVIAR', citizen_data)
  ticket_number = resp_doc.xpath('//*[@id="conteudo2"]/table/tr/td/font/b').text
  fail SacspGatewayException.new("Response is not the expected") if !ticket_number
  ticket_number
end

Private Instance Methods

validate_content_value_presence(resp_doc, node_name, value) click to toggle source
# File lib/sacsp_gateway/client.rb, line 84
def validate_content_value_presence resp_doc, node_name, value
  if !resp_doc.at("#{node_name}:contains('#{value}')")
    fail SacspGatewayException.new("Response is not the expected")
  end
end
validate_field_presence(resp_doc, attribute_name) click to toggle source
# File lib/sacsp_gateway/client.rb, line 78
def validate_field_presence resp_doc, attribute_name
  if resp_doc.xpath("//*[@name='#{attribute_name}']").size == 0
    fail SacspGatewayException.new("Response is not the expected")
  end
end