Envolviendo método de la clase a través de alias_method_chain en Plugin para Redmine

StackOverflow https://stackoverflow.com/questions/2278031

  •  21-09-2019
  •  | 
  •  

Pregunta

No estoy seguro de si este problema es un general Rails problema o RedMine específica.

Hay una clase de usuario que tiene una try_to_login método de clase. Escribí un módulo que contiene un method_alias_chain para envolver ese método y proporcionar funcionalidad adicional. Esto funciona bien si entro en la consola y llamo try_to_login. Mi envoltorio será ejecutado y todo está bien. Sin embargo, cuando ejecuto esto en el servidor se llama simplemente el método de vainilla. La envoltura no se toca. He añadido un comando logger con el método de vainilla estar seguro y que es de hecho la que llama.

Esta es una versión simplificada del código:

require_dependency 'principal'
require_dependency 'user'
require 'login_attempt_count'

module UserLoginAttemptLimiterPatch

  def self.included(base)
    base.extend ClassMethods
    base.class_eval do
      class << self
        alias_method_chain :try_to_login, :attempt_limit
      end
    end
  end

  module ClassMethods
    def try_to_login_with_attempt_limit(login, password)

      user = try_to_login_without_attempt_limit login, password      

      #stuff here gets called via console but not via browser

      user
    end


    def authentication_failed(login)     
      #important code here
    end     

  end
end

User.send(:include, UserLoginAttemptLimiterPatch)

Además se requiere este módulo cuando se carga el plugin.

¿Fue útil?

Solución

¿Cómo está requiriendo el módulo? Si está ejecutando en el modo de desarrollo, la clase de usuario podría ser recargada después de la primera solicitud que limpiar su parche y alias_method_chain.

Puede llegar a su alrededor haciendo el parche en el interior de un despachador (que funciona con cada recarga de código):

require 'dispatcher'

Dispatcher.to_prepare do
  Issue.send(:include, MyMooPatch)
end

Referencia: http://theadmin.org/articles/2009/04/13/how-to-modify-core-redmine-classes-from-a-plugin/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top