lib/react/server_rendering/manifest_container.rb
# frozen_string_literal: true
module React
module ServerRendering
# Get asset content by reading the compiled file from disk using a Sprockets::Manifest.
#
# This is good for Rails production when assets are compiled to public/assets
# but sometimes, they're compiled to other directories (or other servers)
class ManifestContainer
def initialize
@manifest = ::Rails.application.assets_manifest
end
def find_asset(logical_path)
asset_path = @manifest.assets[logical_path] || raise(
"No compiled asset for #{logical_path}, was it precompiled?"
)
asset_full_path = ::Rails.root.join("public", @manifest.dir, asset_path)
File.read(asset_full_path)
end
# sprockets-rails < 2.2.2 does not have `application.assets_manifest`
def self.compatible?
::Rails.application.respond_to?(:assets_manifest)
end
end
end
end