我有以下课程:
class XXX
def aa
end
def authorized?
false
end
def bb
end
end
并希望确保方法authorized?
随Rubocop一起提供。以下代码在Rubocop控制台中有效:
code = "
class XXX
def aa
end
def authorized?
false
end
def bb
end
end
"
node = RuboCop::ProcessedSource.new(code, RUBY_VERSION.to_f).ast
NodePattern.new('(class ... (begin (def :aa ...)(def :authorized? ...)(def :bb ...) ) )').match(node)
最后一行返回true
。但是,我不想依赖任何方法。所以我将最后一行替换为
NodePattern.new('(class ... (begin (...)(def :authorized? ...)(...) ) )').match(node)
它有效,代码不依赖于方法的名称。但!我也想在没有其他方法或没有其他方法的情况下使它工作。
基本上,最终目标是检查方法是否在类上定义。我该怎么办?
答案 0 :(得分:1)
我不确定Rubocop和节点解析方法是其中的一部分,但是您可以只使用常规的Ruby自省吗?
XXX.instance_methods.include?(:authorized?)
如果它本身必须位于XXX
类中(与任何包含的模块或超类相对),
XXX.instance_methods.include?(:authorized?) && XXX.instance_method(:authorized?).owner == XXX