Class: Wurk::Engine::AssetMount
- Inherits:
-
Object
- Object
- Wurk::Engine::AssetMount
- Defined in:
- lib/wurk/engine.rb
Overview
Rack::Files doesn’t strip the URL prefix before file lookup, so ‘/wurk-assets/assets/foo.js` would resolve under `vendor/assets/dashboard/ wurk-assets/assets/foo.js` — a path that doesn’t exist. AssetMount rewrites PATH_INFO to drop the ‘/wurk-assets` prefix before delegating to Rack::Files, then falls through to the next middleware on 404 so host-app routes outside the mount keep working.
Constant Summary collapse
- PREFIX =
'/wurk-assets'
Instance Method Summary collapse
- #call(env) ⇒ Object
-
#initialize(app, root:) ⇒ AssetMount
constructor
A new instance of AssetMount.
Constructor Details
#initialize(app, root:) ⇒ AssetMount
Returns a new instance of AssetMount.
28 29 30 31 |
# File 'lib/wurk/engine.rb', line 28 def initialize(app, root:) @app = app @files = ::Rack::Files.new(root) end |
Instance Method Details
#call(env) ⇒ Object
33 34 35 36 37 38 39 40 41 42 |
# File 'lib/wurk/engine.rb', line 33 def call(env) path = env[::Rack::PATH_INFO] return @app.call(env) unless path == PREFIX || path.start_with?("#{PREFIX}/") inner = env.dup stripped = path.delete_prefix(PREFIX) inner[::Rack::PATH_INFO] = stripped.empty? ? '/' : stripped response = @files.call(inner) response[0] == 404 ? @app.call(env) : response end |