Как хранить "макросы" в консоли рельсов?

У меня есть приложение для нескольких арендаторов, которое использует жемчужину квартиры. Когда я использую консоль 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 в вашей консоли. Вы, вероятно, сломаете некоторые другие вещи, и вам следует предпринять шаги, чтобы гарантировать, что это доступно только через консоль.

Другие вопросы по тегам