【问题标题】:Rubocop cop to find out if method is present on classRubocop cop 找出类上是否存在方法
【发布时间】:2019-04-06 05:39:23
【问题描述】:

我有以下课程:

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)

而且它有效,代码不依赖于方法的名称。但!我也想让它在没有其他方法存在或有更多方法时工作。

基本上,最终目标是检查类上是否定义了方法。我该怎么做?

【问题讨论】:

    标签: ruby rubocop


    【解决方案1】:

    我不确定 Rubocop 和节点解析方法是其中的一部分,但你可以只使用常规的 Ruby 内省吗?

    XXX.instance_methods.include?(:authorized?)

    如果它需要在XXX 类本身上(而不是任何包含的模块或超类),

    XXX.instance_methods.include?(:authorized?) && XXX.instance_method(:authorized?).owner == XXX

    【讨论】:

      猜你喜欢
      • 2020-05-11
      • 1970-01-01
      • 2010-11-12
      • 2018-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-06
      • 1970-01-01
      相关资源
      最近更新 更多