class Roadie::PathRewriterProvider

@api public This provider acts a bit like a pipeline in normal UNIX parlour by enabling you to make changes to the requested path. Some uses of this include:

* Convert absolute URLs into local filesystem paths.
* Convert between external DNS name into internal naming.
* Changing path structure of filenames.
* Removing digests from filenames.
* Handle query string logic.
* Skipping known-bad paths.

There might be other useful things you could use it for. The basic premise is that a path is sent in to this provider, maybe modified and then passed on to the “upstream” provider (or {ProviderList}).

If the block returns {nil} or {false}, the upstream provider will not be invoked and it will be treated as “not found”. This makes it possible to use this provider as a filter only.

@example Simple regex

provider = Roadie::PathRewriterProvider.new(other_provider) { |path|
  path.gsub(/-[a-f0-9]+\.css$/, '.css')
}

@example Filtering assets

# Only assets containing "email" in the path will be considered by other_provider
only_email_provider = Roadie::PathRewriterProvider.new(other_provider) { |path|
  path =~ /email/ ? path : nil
}

@example Handling “external” app assets as local assets

document.external_asset_providers = [
  # Look for assets from "myapp.com" just like if we just specified a local path
  Roadie::PathRewriterProvider.new(document.asset_providers) { |url|
    uri = URI.parse(url)
    uri.path if uri.host == "myapp.com"
  },
  # Any other asset should be downloaded like normal
  Roadie::NetHttpProvider.new
]

Attributes

filter[R]
provider[R]

Public Class Methods

new(provider, &filter) click to toggle source
# File lib/roadie/path_rewriter_provider.rb, line 45
def initialize(provider, &filter)
  @provider = provider
  @filter = filter
end

Public Instance Methods

find_stylesheet(path) click to toggle source
# File lib/roadie/path_rewriter_provider.rb, line 50
def find_stylesheet(path)
  new_path = filter.call(path)
  provider.find_stylesheet(new_path) if new_path
end
find_stylesheet!(path) click to toggle source
# File lib/roadie/path_rewriter_provider.rb, line 55
def find_stylesheet!(path)
  new_path = filter.call(path)
  if new_path
    provider.find_stylesheet!(new_path)
  else
    raise CssNotFound, "Filter returned #{new_path.inspect}"
  end
end