我有以下类:
class XXX
def aa
end
def authorized?
false
end
def bb
end
end并希望确保Rubocop中提供了方法authorized?。以下代码可在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)它是有效的,代码不依赖于方法的名称。但!我也想让它在没有其他方法的情况下工作,或者如果有更多的方法。
基本上,最终目标是检查是否在类上定义了方法。我该怎么做?
发布于 2019-04-06 05:39:23
我不太确定Rubocop和节点解析方法,这也是其中的一部分,但你能不能只使用常规的Ruby自省?
XXX.instance_methods.include?(:authorized?)
如果它需要在XXX类本身上(与任何包含的模块或超类相反),
XXX.instance_methods.include?(:authorized?) && XXX.instance_method(:authorized?).owner == XXX
https://stackoverflow.com/questions/55541773
复制相似问题