طريقة التفاف عن طريق alias_method_chain في البرنامج المساعد ل redmine

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

  •  21-09-2019
  •  | 
  •  

سؤال

لست متأكدًا مما إذا كانت هذه المشكلة عبارة عن مشكلة قضبان عامة أو محددة.

يوجد مستخدم فئة يحتوي على طريقة فئة try_to_login. لقد كتبت وحدة نمطية تحتوي على method_alias_chain لالتفاف هذه الطريقة وتوفير وظائف إضافية. هذا يعمل بشكل جيد إذا ذهبت إلى وحدة التحكم واتصل Try_to_login. سيتم تنفيذ غلاف بلدي وكل شيء على ما يرام. ومع ذلك ، عندما أقوم بتشغيل هذا على الخادم ، يتم استدعاء طريقة الفانيليا. الغلاف لم يلمس أبدا. لقد أضفت أمرًا مسجلًا إلى طريقة الفانيليا للتأكد من أنه يتم استدعاؤه في الفعل.

فيما يلي نسخة مبسطة من الكود:

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)

بالإضافة إلى ذلك ، مطلوب هذه الوحدة عند تحميل البرنامج المساعد.

هل كانت مفيدة؟

المحلول

كيف تتطلب الوحدة النمطية؟ إذا كنت تعمل في وضع التطوير ، فيمكن إعادة تحميل فئة المستخدم بعد الطلب الأول الذي من شأنه مسح التصحيح و alias_method_chain.

يمكنك الالتفاف حوله عن طريق القيام بالتصحيح داخل مرسل (الذي يعمل مع كل إعادة تحميل رمز):

require 'dispatcher'

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

المرجعي: http://theadmin.org/articles/2009/04/13/how-to--modify-core-redmine-classes-from-a-plugin/

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top