Sha256: e48f23fa80ec47817eb5cbabe73c2c148a5f9d5359e941c15682ee29add777cf

Contents?: true

Size: 1.19 KB

Versions: 1

Compression:

Stored size: 1.19 KB

Contents

# frozen_string_literal: true

require "rack/file"

module ServiceWorker
  module Handlers
    class SprocketsHandler
      def call(env)
        path_info = env.fetch("serviceworker.asset_name")

        if config.compile
          sprockets_server.call(env.merge("PATH_INFO" => path_info))
        else
          file_server.call(env.merge("PATH_INFO" => asset_path(path_info)))
        end
      end

      private

      def sprockets_server
        ::Rails.application.assets
      end

      def file_server
        @file_server ||= ::Rack::File.new(::Rails.public_path)
      end

      def config
        ::Rails.configuration.assets
      end

      def asset_path(path)
        if controller_helpers.respond_to?(:compute_asset_path)
          controller_helpers.compute_asset_path(path)
        else
          logical_asset_path(path)
        end
      end

      def controller_helpers
        ::ActionController::Base.helpers
      end

      def logical_asset_path(path)
        asset_path = controller_helpers.asset_path(path)
        uri = URI.parse(asset_path)
        uri.host = nil
        uri.scheme = nil
        uri.to_s
      rescue URI::InvalidURIError
        asset_path
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
serviceworker-rails-0.6.0 lib/serviceworker/handlers/sprockets_handler.rb