46 lines
1.4 KiB
Ruby
46 lines
1.4 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
if !Guardian.new.respond_to?(:can_see_topic?)
|
||
|
raise "Guardian no longer implements a `can_see_topic?` method making this consistency check invalid"
|
||
|
end
|
||
|
|
||
|
# Monkey patches `TopicGuardian#can_see_topic?` to ensure that `TopicGuardian#can_see_topic_ids` returns the same
|
||
|
# result for the same inputs. We're using this check to bridge the transition to `TopicGuardian#can_see_topic_ids` as the
|
||
|
# backing implementation for `TopicGuardian#can_see_topic?` in the near future.
|
||
|
module TopicGuardianCanSeeConsistencyCheck
|
||
|
extend ActiveSupport::Concern
|
||
|
|
||
|
module ClassMethods
|
||
|
def enable_topic_can_see_consistency_check
|
||
|
@enable_can_see_consistency_check = true
|
||
|
end
|
||
|
|
||
|
def disable_topic_can_see_consistency_check
|
||
|
@enable_can_see_consistency_check = false
|
||
|
end
|
||
|
|
||
|
def run_topic_can_see_consistency_check?
|
||
|
@enable_can_see_consistency_check
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def can_see_topic?(topic, hide_deleted = true)
|
||
|
result = super
|
||
|
|
||
|
if self.class.run_topic_can_see_consistency_check?
|
||
|
new_result =
|
||
|
self.can_see_topic_ids(topic_ids: [topic&.id], hide_deleted: hide_deleted).present?
|
||
|
|
||
|
if result != new_result
|
||
|
raise "result between TopicGuardian#can_see_topic? (#{result}) and TopicGuardian#can_see_topic_ids (#{new_result}) has drifted and returned different results for the same input"
|
||
|
end
|
||
|
end
|
||
|
|
||
|
result
|
||
|
end
|
||
|
end
|
||
|
|
||
|
class Guardian
|
||
|
prepend TopicGuardianCanSeeConsistencyCheck
|
||
|
end
|