From ce1b5a3a7fd6ca1977b58388c3e0fce44687ebaa Mon Sep 17 00:00:00 2001 From: Tom Chen Date: Sat, 30 Apr 2022 07:45:53 -0400 Subject: [PATCH] Silence asset requests with config.assets.quiet (#88) * config.assets.quiet logger silencing with middleware * add test --- lib/propshaft/quiet_assets.rb | 14 ++++++++++++++ lib/propshaft/railtie.rb | 9 ++++++++- test/propshaft/quiet_assets_test.rb | 30 +++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 lib/propshaft/quiet_assets.rb create mode 100644 test/propshaft/quiet_assets_test.rb diff --git a/lib/propshaft/quiet_assets.rb b/lib/propshaft/quiet_assets.rb new file mode 100644 index 0000000..3ab8b70 --- /dev/null +++ b/lib/propshaft/quiet_assets.rb @@ -0,0 +1,14 @@ +class Propshaft::QuietAssets + def initialize(app) + @app = app + @assets_regex = %r(\A/{0,2}#{::Rails.application.config.assets.prefix}) + end + + def call(env) + if env['PATH_INFO'] =~ @assets_regex + ::Rails.logger.silence { @app.call(env) } + else + @app.call(env) + end + end +end diff --git a/lib/propshaft/railtie.rb b/lib/propshaft/railtie.rb index a8236c6..d7a02de 100644 --- a/lib/propshaft/railtie.rb +++ b/lib/propshaft/railtie.rb @@ -1,5 +1,6 @@ require "rails" require "active_support/ordered_options" +require "propshaft/quiet_assets" module Propshaft class Railtie < ::Rails::Railtie @@ -8,6 +9,7 @@ class Railtie < ::Rails::Railtie config.assets.excluded_paths = [] config.assets.version = "1" config.assets.prefix = "/assets" + config.assets.quiet = false config.assets.compilers = [ [ "text/css", Propshaft::Compilers::CssAssetUrls ], [ "text/css", Propshaft::Compilers::SourceMappingUrls ], @@ -54,6 +56,12 @@ class Railtie < ::Rails::Railtie Propshaft.logger = config.assets.logger || Rails.logger end + initializer :quiet_assets do |app| + if app.config.assets.quiet + app.middleware.insert_before ::Rails::Rack::Logger, Propshaft::QuietAssets + end + end + rake_tasks do load "propshaft/railties/assets.rake" end @@ -61,7 +69,6 @@ class Railtie < ::Rails::Railtie # Compatibility shiming (need to provide log warnings when used) config.assets.precompile = [] config.assets.debug = nil - config.assets.quiet = nil config.assets.compile = nil config.assets.version = nil config.assets.css_compressor = nil diff --git a/test/propshaft/quiet_assets_test.rb b/test/propshaft/quiet_assets_test.rb new file mode 100644 index 0000000..0aef2b6 --- /dev/null +++ b/test/propshaft/quiet_assets_test.rb @@ -0,0 +1,30 @@ +require "test_helper" +require "propshaft/quiet_assets" + +class Propshaft::QuietAssetsTest < ActiveSupport::TestCase + setup do + Rails.logger.level = Logger::DEBUG + end + + test "silences with default prefix" do + assert_equal Logger::ERROR, middleware.call("PATH_INFO" => "/assets/stylesheets/application.css") + end + + test "silences with custom prefix" do + original = Rails.application.config.assets.prefix + Rails.application.config.assets.prefix = "path/to" + assert_equal Logger::ERROR, middleware.call("PATH_INFO" => "/path/to/thing") + ensure + Rails.application.config.assets.prefix = original + end + + test "does not silence without match" do + assert_equal Logger::DEBUG, middleware.call("PATH_INFO" => "/path/to/thing") + end + + private + + def middleware + @middleware ||= Propshaft::QuietAssets.new(->(env) { Rails.logger.level }) + end +end