在模块中混合时的功能羡慕

时间:2016-11-17 22:49:05

标签: ruby reek

我目前正在为测试工具编写一个非常简单的开头。我们的想法是,您可以拥有包含我的" Testable"模块。例如:

            x   y   z
    a1  a2  8   2   85
    b1  b2  43  93  58
    c1  c2  1   46  24

Testable模块具有以下内容:

class Veilus
  include Testable
end

site = Veilus.new

当Reek签出此文件时,它会返回:

module Testable
  module_function

  def included(caller)
    caller.extend Testable::Interface::Page::Attribute
    caller.__send__ :include, Testable::Interface::Page
  end
end

但这不是所包含方法中的一点吗?

我意识到我可以将Reek的这个方面转过来,但我很好奇我将如何遵循其建议?在这种情况下,这门课程并不是我所知道的关于时间的问题。其他人写的课程将包括我的模块。

同样,我知道我可以关闭支票,但似乎我可能想要在其他情况下检查。所以我开始怀疑我是否正在做#34; mixin"接近错误,这就是Reek所指​​出的。

1 个答案:

答案 0 :(得分:0)

我找到了一种“处理”这种方法的方法,主要是使用self来引用included调用。所以,例如,我可以这样做:

module Testable
  def self.included(caller)
    caller.extend Testable::Interface::Page::Attribute
    caller.__send__ :include, Testable::Interface::Page
  end
end

我所做的是更改上面的代码,以便不再使用对module_function的调用。 (虽然这确实与某些其他样式指南规则相冲突。)然后我在self.消息前面使用了included

当我这样做时,FeatureEnvy警告不再出现。诚然,这似乎是标记FeatureEnvy条件的一种非常弱的方式。

这与其他各种问题一起使我确信不要使用Reek并坚持使用Rubocop。 (我知道在很多情况下,他们会看到非常不同的东西。)我不会提倡这种方法用于企业级开发,但是在编写测​​试工具方面,我发现你实际上做了很多“聪明”的事情,那就是西洋跳棋像Reek一样不喜欢。