class RailsDevTweaks::GranularAutoload::Middleware

Here’s an idea, let’s not reload the entire dev environment for each asset request. Let’s only do that on regular content requests.

Attributes

processed_a_request[W]

Public Class Methods

new(app) click to toggle source
# File lib/rails_dev_tweaks/granular_autoload/middleware.rb, line 13
def initialize(app)
  @app = app
end
processed_a_request?() click to toggle source
# File lib/rails_dev_tweaks/granular_autoload/middleware.rb, line 8
def processed_a_request?
  @processed_a_request
end

Public Instance Methods

call(env) click to toggle source
# File lib/rails_dev_tweaks/granular_autoload/middleware.rb, line 17
def call(env)
  request = ActionDispatch::Request.new(env.dup)

  # reload, or no?
  if Rails.application.config.dev_tweaks.granular_autoload_config.should_reload?(request)
    # Confusingly, we flip the request prepare/cleanup life cycle around so that we're only cleaning up on those
    # requests that want to be reloaded

    # No-op if this is the first request.  The initializers take care of that one.
    if self.class.processed_a_request? && reload_dependencies?
      ActionDispatch::Reloader.cleanup!
      ActionDispatch::Reloader.prepare!
    end
    self.class.processed_a_request = true

  elsif Rails.application.config.dev_tweaks.log_autoload_notice
    Rails.logger.info 'RailsDevTweaks: Skipping ActionDispatch::Reloader hooks for this request.'
  end

  return @app.call(env)
end

Private Instance Methods

reload_dependencies?() click to toggle source
# File lib/rails_dev_tweaks/granular_autoload/middleware.rb, line 41
def reload_dependencies?
  application = Rails.application

  application.config.reload_classes_only_on_change != true || application.reloaders.map(&:updated?).any?
end