Sha256: 6363004d90b905daf32c178b65d54a07f1d923217252c634f5edaee14a96dc18

Contents?: true

Size: 968 Bytes

Versions: 4

Compression:

Stored size: 968 Bytes

Contents

# frozen_string_literal: true
require "propshaft/errors"

class Propshaft::Compilers::CssAssetUrls
  attr_reader :assembly

  ASSET_URL_PATTERN = /url\(\s*["']?(?!(?:\#|data|http))([^"'\s)]+)\s*["']?\)/

  def initialize(assembly)
    @assembly = assembly
  end

  def compile(logical_path, input)
    input.gsub(ASSET_URL_PATTERN) { asset_url resolve_path(logical_path.dirname, $1) }
  end

  private
    def resolve_path(directory, filename)
      if filename.start_with?("../")
        Pathname.new(directory + filename).relative_path_from("").to_s
      elsif filename.start_with?("/")
        filename.delete_prefix("/").to_s
      else
        (directory + filename.delete_prefix("./")).to_s
      end
    end

    def asset_url(resolved_path)
      if asset = assembly.load_path.find(resolved_path)
        %[url("#{assembly.config.prefix}/#{asset.digested_path}")]
      else
        raise Propshaft::MissingAssetError.new(resolved_path)
      end
    end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
propshaft-0.3.1 lib/propshaft/compilers/css_asset_urls.rb
propshaft-0.3.0 lib/propshaft/compilers/css_asset_urls.rb
propshaft-0.2.2 lib/propshaft/compilers/css_asset_urls.rb
propshaft-0.2.1 lib/propshaft/compilers/css_asset_urls.rb