Как хранить "макросы" в консоли рельсов?
У меня есть приложение для нескольких арендаторов, которое использует жемчужину квартиры. Когда я использую консоль rails, я постоянно звоню в Apartment::Tenant.switch для навигации между квартирами. Я хотел бы создать файл конфигурации где-нибудь, где я могу сократить этот вызов, чтобы что-то более короткое, чтобы напечатать. Как бы я поступил так, чтобы при запуске консоли rails console
этот короткий звонок доступен? Я представлял что-то вроде
swtich = Apartment::Tenant.switch
И затем всякий раз, когда я вызываю switch, он вызывает исходную функцию.
3 ответа
Что ж. на самом деле не макросы, но у нас есть dynamic_method, определяющий право.
так что вы можете сделать это в вашей консоли rails:
define_method :bar do
Apartment::Tenant.switch
end
и тогда вы можете позвонить bar
метод как сокращение от вашего метода.
Чтобы добавить его в initializers
я создал один файл, скажем bar.rb
в папке инициализаторов.
тогда я сделал это, если не идеал:
class Object
def bar
Apartment::Tenant.switch
end
end
перезагрузите консоль и панель вызовов
Мне не очень нравятся глобальные переменные, но вы можете поместить это в initalizers
файл:
$switch = (Class.new do
def [](tenant, &block)
Apartment::Tenant.switch(tenant, &block)
end
end).new
и затем используйте это так:
$switch['tenant_name'] do
....
end
Должен быть лучший способ сделать это, и я не рекомендую это вообще. Перетащите это в инициализатор или application.rb
или похожие.
module Kernel
def switch
Apartment::Tenant.switch
end
end
позволит вам просто позвонить switch
в вашей консоли. Вы, вероятно, сломаете некоторые другие вещи, и вам следует предпринять шаги, чтобы гарантировать, что это доступно только через консоль.