Как автоматически создать заглушку для метода, сгенерированного метапрограммированием - PullRequest
0 голосов
/ 01 мая 2019

Один из служебных классов в моей кодовой базе генерирует методы классов динамически, используя метапрограммирование.

Моя проблема:

  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 модуль

1 Ответ

0 голосов
/ 02 мая 2019

Это можно сделать с помощью YARD @!macro, но, к сожалению, в RubyMine такая возможность еще не поддерживается, есть соответствующий запрос: https://youtrack.jetbrains.com/issue/RUBY-20130

...