module ActsAsRealTime::ClassMethods

Public Instance Methods

acts_as_realtime(modelo, selector, insertion_method = 'prepend') { |ws, channel, self| ... } click to toggle source
# File lib/acts_as_realtime.rb, line 52
    def acts_as_realtime(modelo, selector, insertion_method = 'prepend', &blk)

=begin
    Se había manejado cómo posible solución el manejar un token(*-*)
    para interporlar los valores de los registros que se estan creando, cómo
    por ejemplo el nombre de un usuario.

    La idea consistia que el nombre del campo que se quiere interpolar debe de ir entre el token
    identificador(*-*) en el html que sea pasado a la gema, para se parseado(interpolado) por la gema.
    Ej:

    html = "<tr><td><div class=" + '"prueba1"' + " > *-*#{'nombre'}*-* </div></td><td>R</td><td>o</td><td>R</td></tr>"

    Esta solución puede causar problemas futuros, es por eso que se busco otra solución, que es el código
    actual, esto se deja comentado por si se necesitara usar despues



      start_index = html.index("*-*")
      sub_html = html[start_index+3..-1]
      finish_index = sub_html.index('*-*') + 2
      attr = sub_html[0..finish_index-3]


=end

      #Se define el método update_index en lo modelos que se ejecute el método acts_as_real_time
      modelo.class_eval {
        define_method(:update_index) do

          #eval("html[start_index..finish_index] = #{attr}") Esta instrucción se usaba para la solución que se planteó arriba

          res_yield = yield ActsAsRealTime.ws, ActsAsRealTime.channel, self if block_given?
          ActsAsRealTime.mod_app, ActsAsRealTime.html = res_yield[0], res_yield[1]
          ActsAsRealTime.mod_app::Application.config.chanel = ActsAsRealTime::channel
          ActsAsRealTime.mod_app::Application.config.chanel.push "$('#{selector}').#{insertion_method}('#{ActsAsRealTime.html}');"
        end
        after_create :update_index
      }
    end