تجاوز user_guardian.rb في إضافة (لا حاجة لعمل fork!)

إذا صادف أحدكم هذا الموضوع وكان يشعر بالضياع مثلي تمامًا، فأنا أقدم لك أدناه الكود الخاص بي بعد أن نجحت في تشغيله كما هو مخطط له. لم أقوم بتعديل أي ملفات. بل قمت ببساطة بإنشاء ملف جديد باسم plugin.rb ووضعت فيه ما يلي:

# name: noms
# about: يسمح للمستخدمين في الوضع المجهول بتغيير أسماء مستخدمينهم
# version: 0.1


require_dependency 'guardian'
require_dependency 'guardian/user_guardian'

class ::Guardian
end

module ::UserGuardian
  def can_edit_username?(user)
    return false if SiteSetting.sso_overrides_username?
    return true if is_staff?
    return false if SiteSetting.username_change_period <= 0
    return true if is_anonymous?
    is_me?(user) && ((user.post_count + user.topic_count) == 0 || user.created_at > SiteSetting.username_change_period.days.ago)
  end


  def can_edit_name?(user)
    return false unless SiteSetting.enable_names?
    return false if SiteSetting.sso_overrides_name?
    return true if is_staff?
    return true if is_anonymous?
    can_edit?(user)
  end
end

هذا الكود يقوم بتجاوز فئة user_guardian.rb في نواة Discourse للسماح للمستخدمين بتغيير اسم مستخدمهم واسم حساباتهم المجهولة.

إذا قمت بمقارنة ما لدي هنا بما هو موجود في ملف user_guardian.rb في نواة Discourse، ستلاحظ وجود مجموعة من العناصر الأخرى التي لم أكن بحاجة للتعامل معها، لذا تركتها كما هي. كل ما احتجت إليه هو تعديل طريقتين فقط: can_edit_username و can_edit_name عن طريق تغيير بعض قيم الإرجاع من false إلى true، وقد تمكنت من تحقيق ما أريده.

بالتأكيد هناك تحسينات يمكن إجراؤها، ومن المرجح أن هناك ممارسات مثلى تمكنت من استنتاجها من خلال قراءة المنشورات المرتبطة هنا وفي أماكن أخرى، ولكن إذا كنت جديدًا تمامًا على لغة Ruby مثلي وتريد فقط تعديل شيء بسيط جدًا في النواة، فهذا مثال عملي مبسط لما تحتاج إلى فعله.

شكرًا جزيلًا للأشخاص في هذا الموضوع على صبرهم وتشجيعهم ومساعدتهم! وعلى وجه الخصوص إلى @merefield الذي ساعدني بالفعل في منشور آخر في الماضي.