Я создаю вспомогательный модуль для инициализации объекта перед вызовом его методов.
module Initialized
extend ActiveSupport::Concern
class_methods do
def run(*args)
new(*args).run
end
def call(*args)
new(*args).call
end
def execute(*args)
new(*args).create
end
end
end
Поэтому вместо определения run
, call
и execute
в моем вспомогательном модуле мне нужно получить имя любого метода и проверить, существует ли он в основном классе после его инициализации, а затем вызвать запрошенный метод экземпляра, если он существует в основной класс или вызвать ошибку, если нет
Я бы сказал, что мой целевой код будет примерно таким
module Initialized
extend ActiveSupport::Concern
class_methods do
def _(*args, methodname)
new(*args).try(:send, "#{methodname}") || raise 'Method not exist'
end
end
end
Пример использования будет
class MyClass
include Initialized
def initialize(param1)
@param1 = param1
end
def call
puts "call '#{@param1}'"
end
end
затем звоню
MyClass.call('method param')
Я нашел эти ссылки, но еще не нашел свой ответ:
meta-dynamic-generic-programming-in-ruby
method_missing
это обычный способ сделать это... - person max pleaner   schedule 31.08.2020