class RuboCop::Cop::Discourse::Plugins::CallRequiresPlugin
end
end
def my_action
requires_plugin PLUGIN_NAME
class MyController
# good
end
end
def my_action
class MyController
# bad
@example
being accessible when the plugin is disabled.
Plugin controllers must call ‘requires_plugin` to prevent routes from
def base_controller_path(base_class)
def base_controller_path(base_class) return if base_class.blank? base_path = "#{base_class.underscore}.rb" path = Pathname.new("#{processed_source.path}/../").cleanpath until path.root? controller_path = path.join(base_path) return controller_path if controller_path.exist? path = path.join("..").cleanpath end end
def on_class(node)
def on_class(node) return if requires_plugin_present?(node) return if requires_plugin_present_in_parent_classes(node) add_offense(node, message: MSG) end
def requires_plugin_present_in_parent_classes(node)
def requires_plugin_present_in_parent_classes(node) return unless processed_source.path controller_path = base_controller_path(node.parent_class&.const_name.to_s) return unless controller_path Commissioner .new([self.class.new(config, @options)]) .investigate(parse(controller_path.read, controller_path.to_s)) .offenses .empty? end