class CommentResponseRequest

Constants

RESPONSE_RESULTS

Attributes

request_type[RW]
soap_action[RW]

Public Class Methods

new(opts={}) click to toggle source
Calls superclass method
# File app/models/comment_response_request.rb, line 53
def initialize(opts={})
  @request_type = opts[:request_type] || nil
  super    
end

Public Instance Methods

first_request?() click to toggle source
# File app/models/comment_response_request.rb, line 58
def first_request?
  res = self.comment_response.status.eql?('new')
end
prepare_request_data() click to toggle source

Notas sobre los datos del request: 1.- Aunque es un xml, hay que enviarlo como un textos sustituyendo los corchetes por los simbolos < y > 2.- Para que los deprtamentos coincidan, enviamos sólo el primer texto del nombre hasta la primera coma

(hay unas pequeñas diferencias en el resto del nombre)

3.- El texto en el tag descripción tiene que ir encodeado en Base64.

(si va como texto "normal" la respuesta es "Error valudaciones",
ref: http://www.java-samples.com/showtutorial.php?tutorialid=1090).
# File app/models/comment_response_request.rb, line 121
def prepare_request_data
  comment = self.comment_response.comment
  commentable = comment.commentable
  
  data_params = {}
  data_params = if self.request_type.eql?('envio')
    # enviar solicitud
    {"accion"     => 'A',
    "referencia"       => commentable.id,
    "tipo"             => commentable.is_a?(News) ? 'N' : 'P',
    "tituloCastellano" => commentable.title_es,
    "tituloEuskera"    => commentable.title_eu,
    "tituloIngles"     => commentable.title_en,
    "identificadorComentario" => comment.id,      
    "descripcion"             => Base64.b64encode(comment.body.to_s.strip),
    "departamento"            => self.comment_response.organization.name.split(",").first,
    "departamentoAnterior"    => "",
    "fechaPlazo"              => "",
    "listaTags"               => commentable.tag_list.map {|tag| "<tag>#{tag}</tag>"}.join(" "),
    "fechaRespuesta"          => "",
    "identificadorCiudadano"  => "",
    "requiereAnotacion"       => 'S'
    }
  else
    # comprobar el estado de la solicitud
    {"accion"     => 'S',
     "referencia" => commentable.id,
     "tipo"             => commentable.is_a?(News) ? 'N' : 'P',        
     "identificadorComentario" => comment.id,      
     "departamento"            => self.comment_response.organization.name.split(",").first,
     "identificadorCiudadano"  => self.comment_response.citizen_id
      }
  end
  
  txt = ""  
  data_params.each do |key, val|
    txt += "<#{key}>#{val}</#{key}>"
  end
  txt.gsub(/</,'&lt;').gsub(/>/,'&gt;')
end
pretty_result() click to toggle source
# File app/models/comment_response_request.rb, line 66
def pretty_result
  RESPONSE_RESULTS[self.result]
end
send_request() click to toggle source
# File app/models/comment_response_request.rb, line 70
def send_request
  if self.comment_response.status.eql?('published')
    self.result = "-1"
    self.response_body = ""
    self.response_error = "Comentario respondido (respuesta ID: #{self.comment_response.answer_comment_id})"
    self.response_status = 'denegado' # para indicar que no hemos podidido conectar con al aplicación rrcc
  else
    self.request_data ||= prepare_request_data

    self.soap_action = "#{self.request_type}_noticia_propuesta_irekia".to_sym
    soap_namespace = :q77

  
    Savon.env_namespace = :soapenv
    client = Savon::Client.new do |wsdl|
      wsdl.endpoint = service_data[:endpoint]
      wsdl.namespace = service_data[:namespace]
    end
  
    response = nil 
    begin
      response = client.request soap_namespace, self.soap_action do
        service_data[:soap_namespaces].each do |key, val|
          soap.namespaces[key] = val
        end      
        soap.header = {}
        soap.body = prepare_request_body() 
      end # end of request data
      self.response_body = response.to_hash
      parse_response()
      self.response_status = "received" # para indicar que sí hemos recibido respuesta de la aplicación rrcc
    rescue => error
      self.result = "0"
      self.response_body = ""
      self.response_error = error
      self.response_status = 'error' # para indicar que no hemos podidido conectar con al aplicación rrcc
    end
  end    
  return true
end