Я думаю, что вы пытаетесь описать метод удобства:
class FooService
def initialize
@bar= Bar.new
end
# this does the actual work
def call
results = @bar.do_some_work
results.each do
# ...
end
end
# this is just a convenient wrapper
def self.call
new.call
end
end
Это позволяет вам вызывать метод класса FooService.call
вместо того, чтобы вручную создавать экземпляр класса с помощью FooService.new.call
. На самом деле он не очень похож на этот простой пример, но он действительно полезен для абстрагирования инициализации объектов в таких вещах, как служебные объекты, или для объединения аргументов инициализатора с аргументами метода.
class ApiClient
def initialize(api_key)
@api_key = api_key
end
def get(path)
# ...
end
def self.get(path, api_key: ENV['API_KEY'])
new(api_key).call(path)
end
end
ApiClient.get('foo')