Остановка кэша цепочек изменений в конфигурации инициализатора

У меня есть драгоценный камень, который я пытался сделать настраиваемым. Цель состоит в том, чтобы в файле инициализатора был установлен блок конфигурации, позволяющий разработчику настраивать точки останова media_query в файле gems scss.

Мой класс конфигурации выглядит так

# my_gem/lib/my_gem/configuration.rb
module MyGem
  class << self
    attr_accessor :configuration
  end

  def self.configure
    self.configuration ||= Configuration.new
    yield(configuration)
  end

  class Configuration
    attr_accessor :med_pixel_width, :lrg_pixel_width

    def initialize
      @med_pixel_width = 600
      @lrg_pixel_width = 1024
    end
  end
end

Я создал генератор, который работает нормально rails g my_gem который создает следующий файл инициализатора с блоком cofig

# config/initializers/my_gem.rb
MyGem.configure do |config|
  config.med_pixel_width = 768
  config.lrg_pixel_width = 1024
end

И тогда в моей таблице стилей драгоценных камней я ловлю конфигурацию

# app/assets/stylesheets/my_gem/my_style.scss.erb
@media only screen and (min-width: <%= MyGem.configuration.med_pixel_width %>px ) {
  .styles {
    color: red;
  }
}    

После запуска bundle и включения файлов ресурсов gems css в application.css моего тестового приложения я вижу, что стили в браузере применяются должным образом. И конфигурация работает. НО только при первом запуске сервера. После того, как я пытаюсь изменить конфигурацию снова, никаких изменений не происходит.

Я обнаружил, что кэширование звездочек является виновником. Я подтвердил, добавив rake tmp:clear прямо над моим блоком конфигурации, и тогда все работает всякий раз, когда я перезагружаю сервер, я вижу происходящие изменения

# config/initializers/my_gem.rb
system `rake tmp:clear`
MyGem.configure do |config|
  config.med_pixel_width = 768
  config.lrg_pixel_width = 1024
end

Мой вопрос: есть ли какое-то другое простое решение, которое я здесь упускаю? И если нет... ставит это rake tmp:clear в моем файле инициализатора плохая практика? Потенциально ли это замедлит рабочий процесс среды разработки для разработчиков, использующих гем?

0 ответов

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