diff --git a/app/controllers/scores_controller.rb b/app/controllers/scores_controller.rb index cf6b7db..e75308a 100644 --- a/app/controllers/scores_controller.rb +++ b/app/controllers/scores_controller.rb @@ -7,10 +7,9 @@ class ScoresController < ApplicationController # GET /scores def index @pagy, @scores = pagy(Score.all) - # logger.info("#{HotConstants.boolean}") - logger.info('start', dimensions: AnsiDimensions.start) - logger.info('end', dimensions: AnsiDimensions.end) - logger.info('around', dimensions: AnsiDimensions.around) + # logger.info('start', dimensions: AnsiDimensions.start) + # logger.info('end', dimensions: AnsiDimensions.end) + # logger.info('around', dimensions: AnsiDimensions.around) end # GET /scores/1 diff --git a/config/initializers/hot_constants.rb b/config/initializers/hot_changes.rb similarity index 93% rename from config/initializers/hot_constants.rb rename to config/initializers/hot_changes.rb index 101f809..046ed6d 100644 --- a/config/initializers/hot_constants.rb +++ b/config/initializers/hot_changes.rb @@ -2,6 +2,5 @@ return unless defined?(Rails::Server) require Rails.root.join('lib', 'hot_constants', 'hot_constants') -HotConstants.initialize HotConstants.on_change(:log_active_record) { |bool| ActiveRecord::Base.logger.level = bool ? :debug : :fatal } HotConstants.on_change(:log_action_view) { |bool| ActionView::Base.logger.level = bool ? :debug : :fatal } diff --git a/config/initializers/rails_live_reload.rb b/config/initializers/rails_live_reload.rb index bd48385..570df71 100644 --- a/config/initializers/rails_live_reload.rb +++ b/config/initializers/rails_live_reload.rb @@ -5,6 +5,7 @@ if defined?(RailsLiveReload) && Rails.env.development? # HOT Constants config.watch(%r{/\.env$}, reload: :always) config.watch(%r{/\.env\.sample$}) + config.watch(%r{/config/initializers/hot_changes.rb$}) # USEFUL for tailwind changes!!!! config.watch %r{app/assets/builds/tailwind.css}, reload: :always diff --git a/lib/hot_constants/hot_constants.rb b/lib/hot_constants/hot_constants.rb index a60c1e7..80e7227 100644 --- a/lib/hot_constants/hot_constants.rb +++ b/lib/hot_constants/hot_constants.rb @@ -15,24 +15,28 @@ module HotConstants singleton_class.define_method(dkey) { method.call(key, value) } LOGGER.info("create method <#{dkey}> performing <#{method.name}> with default value <#{value}> ") end - reload! end def reload! HOTENV.replace Dotenv.parse # TODO: detect true changes before processing block below (or yield) LISTENERS.each_pair do |key, block| - old_value = nil # TODO: remember last previous value - new_value = method(key).call - block.call(new_value, old_value) + perform_change(key, block) end end def on_change(key, &block) LISTENERS[key.downcase.to_sym] = block + perform_change(key, block) end private + def perform_change(key, block) + old_value = nil # TODO: remember last previous value + new_value = method(key).call + block.call(new_value, old_value) + end + def load_boolean(key, default) = HOTENV.fetch(key, default).to_s.downcase == 'true' def load_integer(key, default) = HOTENV.fetch(key, default).to_i def load_string(key, default) = HOTENV.fetch(key, default) @@ -45,4 +49,7 @@ module HotConstants end end end + + # initialize on first require + initialize end diff --git a/lib/monkey_patches/rails_live_reload/watcher.rb b/lib/monkey_patches/rails_live_reload/watcher.rb index d5def0e..eedc6d3 100644 --- a/lib/monkey_patches/rails_live_reload/watcher.rb +++ b/lib/monkey_patches/rails_live_reload/watcher.rb @@ -1,6 +1,7 @@ module RailsLiveReload ENV_FILE = Rails.root.join('.env').to_s ENV_SAMPLE_FILE = Rails.root.join('.env.sample').to_s + INITIALIZER = Rails.root.join('config/initializers/hot_changes.rb').to_s CHECKSUMS = {} # MonkeyPath Watcher @@ -14,20 +15,19 @@ module RailsLiveReload private def before_reload(files) - if files.include?(ENV_SAMPLE_FILE) - current_checksum = files[ENV_SAMPLE_FILE] - if current_checksum != CHECKSUMS[ENV_SAMPLE_FILE] - HotConstants.initialize - CHECKSUMS[ENV_SAMPLE_FILE] = current_checksum - end - end - return unless files.include?(ENV_FILE) + perform_when_change(files, ENV_SAMPLE_FILE) { HotConstants.initialize } + perform_when_change(files, ENV_FILE) { HotConstants.reload! } + perform_when_change(files, INITIALIZER) { load Rails.root.join('config', 'initializers', 'hot_changes.rb') } + end + + def perform_when_change(files, key, &) + return unless files.include?(key) - current_checksum = files[ENV_FILE] - return unless current_checksum != CHECKSUMS[ENV_FILE] + current_checksum = files[key] + return unless current_checksum != CHECKSUMS[key] - HotConstants.reload! - CHECKSUMS[ENV_FILE] = current_checksum + yield + CHECKSUMS[key] = current_checksum end end end