【问题标题】:How to automatically generate stub for method generated by meta programming如何为元编程生成的方法自动生成存根
【发布时间】:2019-05-01 09:09:48
【问题描述】:

我的代码库中的一个实用程序类使用元编程动态生成类方法。

我的问题:

  1. 目前,Rubymine 无法建议此类方法,并且 抱怨找不到FeatureFlagHandler.foo_enabled? 方法。
  2. 如何让 Rubymine 了解这些动态方法?一世 希望 Rubymine 建议这样的代码完成方法,以便 当我输入 FeatureFlagHandler.fo 它应该能够建议 FeatureFlagHandler.foo_enabled? 方法。


类的源代码:

class FeatureFlagHandler
  class << self
    # Generates `_enabled?` and `_disabled?` helper methods for feature flags
    # for all Constants defined in AppUtils::FeatureFlags
    # 
    #      module AppUtils
    #        module FeatureFlags
    #          FOO = "FOO"
    #          BAR = "BAR"
    #        end
    #      end
    #
    # e.g. If AppUtils::FeatureFlags contains FOO and BAR constant, then
    #      below code will generate following method definitions:
    #
    #      def self.foo_enabled?
    #        enabled?("FOO")
    #      end
    #      def self.bar_enabled?
    #        enabled?("BAR")
    #      end
    #
    # Then above methods can be used as:
    #
    # do_something if FeatureFlagHandler.foo_enabled?
    #
    AppUtils::FeatureFlags.constants.each do |flag|
      define_method("#{flag.to_s.downcase}_enabled?") do
        # Logic to check if `feature_flag` is ON or OFF
        # For eg:
        ENV[feature_flag] == "ENABLE"
      end
    end
  end
end

注意:功能标志会定期从 AppUtils::FeatureFlags 模块上方添加/删除

【问题讨论】:

    标签: ruby-on-rails ruby metaprogramming rubymine


    【解决方案1】:

    可以使用 YARD @!macro 完成,但不幸的是,RubyMine 尚不支持,有一个相应的请求:https://youtrack.jetbrains.com/issue/RUBY-20130

    【讨论】:

      猜你喜欢
      • 2019-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-29
      • 1970-01-01
      • 2012-05-16
      • 1970-01-01
      • 2011-10-23
      相关资源
      最近更新 更多