Sha256: bf581bd3b8ec86b29477a51328750dea488b3d3af9958db57a05bb47f07ca486

Contents?: true

Size: 1.62 KB

Versions: 16

Compression:

Stored size: 1.62 KB

Contents

class Avo::SvgFinder
  def self.find_asset(filename)
    new(filename)
  end

  def initialize(filename)
    @filename = filename
  end

  # Use the default static finder logic. If that doesn't find anything, search according to our pattern:
  def pathname
    found_asset = default_strategy

    # Use the found asset
    return found_asset if found_asset.present?

    paths.find do |path|
      File.exist? path
    end
  end

  def paths
    [
      Rails.root.join("app", "assets", "svgs", @filename),
      Rails.root.join(@filename),
      Avo::Engine.root.join("app", "assets", "svgs", @filename),
      Avo::Engine.root.join("app", "assets", "svgs", "avo", @filename),
      Avo::Engine.root.join("app", "assets", "svgs", "heroicons", "outline", @filename),
      Avo::Engine.root.join(@filename).to_s,
      # Add all paths from Rails including engines
      *Rails.application.config.assets&.paths&.map { |path| File.join(path, @filename) }
    ].map(&:to_s).uniq
  end

  def default_strategy
    # If the app uses Propshaft, grab it from there
    if defined?(Propshaft)
      asset_path = ::Rails.application.assets.load_path.find(@filename)
      asset_path&.path
    elsif ::Rails.application.config.assets.compile
      # Grab the asset from the compiled asset manifest
      asset = ::Rails.application.assets[@filename]
      Pathname.new(asset.filename) if asset.present?
    else
      # Grab the asset from the manifest
      manifest = ::Rails.application.assets_manifest
      asset_path = manifest.assets[@filename]
      unless asset_path.nil?
        ::Rails.root.join(manifest.directory, asset_path)
      end
    end
  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
avo-3.14.4 lib/avo/svg_finder.rb
avo-3.14.3 lib/avo/svg_finder.rb
avo-3.14.2 lib/avo/svg_finder.rb
avo-3.14.1 lib/avo/svg_finder.rb
avo-3.14.0 lib/avo/svg_finder.rb
avo-3.13.7 lib/avo/svg_finder.rb
avo-3.13.6 lib/avo/svg_finder.rb
avo-3.13.5 lib/avo/svg_finder.rb
avo-3.13.4 lib/avo/svg_finder.rb
avo-3.13.3 lib/avo/svg_finder.rb
avo-3.13.2 lib/avo/svg_finder.rb
avo-3.13.1 lib/avo/svg_finder.rb
avo-3.13.0 lib/avo/svg_finder.rb
avo-3.12.0 lib/avo/svg_finder.rb
avo-3.11.10 lib/avo/svg_finder.rb
avo-3.11.9 lib/avo/svg_finder.rb