Организация модулей, сервисов и их общих методов в ruby - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь разделить метод между двумя службами ruby, у этих служб много общего и они находятся внутри одного модуля.

TranslatorManager - это модуль, который включает службы: CacheEraser и Translator.

Общий метод - key_cache, и мне нужно вызывать его из CacheEraser и Translator сервисов, только для них он связан только с TranslatorManager, поэтому я полагаю, что этот код должен быть в файле модуля translator_anager.rb

Каждый сервис имеет свой файл, и все эти файлы находятся в папке app/services/site/translator_manager/

enter image description here

Для меня это правильная организация файлов, не так ли?

Как я могу позвонить key_cache из call сервисного метода? это не работает

  • Я не могу включить Site :: TranslatorManager из вложенного класса
  • Нужно key_cache, чтобы быть методом класса? как его можно расширить , учитывая, что это разные файлы ? Я пробовал ответить и не работал.

cache_eraser.rb

module Site
  module TranslatorManager
    class CacheEraser < ApplicationService
      def initialize(company_id, text, head_locale, locale)
        @company_id, @text, @head_locale, @locale = company_id, text, head_locale, locale
      end

      def call
        #             ---> Don't work <----
        Rails.cache.delete key_cache(@company_id, @text, @head_locale, @locale)
      end
    end
  end
end

translator_manager.rb

module Site
  module TranslatorManager
    def key_cache(company_id, text, head_locale, locale)
      # return a string
    end

    def translatable_key?(key)
      # return true or false
    end
  end
end

1 Ответ

0 голосов
/ 31 октября 2018

Вы должны включить свой Site::TranslatorManager модуль внутри CacheEraser класса:

module Site
  module TranslatorManager
    class CacheEraser < ApplicationService
      include Site::TranslatorManager # include module methods
      def initialize(company_id, text, head_locale, locale)
        @company_id, @text, @head_locale, @locale = company_id, text, head_locale, locale
      end

      def call
        #             ---> will work <----
        Rails.cache.delete key_cache(@company_id, @text, @head_locale, @locale)
      end
    end
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...