class Roadie::ProviderList

An asset provider that just composes a list of other asset providers.

Give it a list of providers and they will all be tried in order.

{ProviderList} behaves like an Array, and an asset provider, and can be coerced into an array.

Public Class Methods

empty() click to toggle source

Returns a new empty list.

# File lib/roadie/provider_list.rb, line 36
def self.empty
  new([])
end
new(providers) click to toggle source
# File lib/roadie/provider_list.rb, line 40
def initialize(providers)
  @providers = providers
end
wrap(*providers) click to toggle source

Wrap a single provider, or a list of providers into a {ProviderList}.

@overload wrap(provider_list)

@param [ProviderList] provider_list An actual instance of {ProviderList}.
@return The passed in provider_list

@overload wrap(provider)

@param [asset provider] provider
@return a new {ProviderList} with just the passed provider in it

@overload wrap(provider1, provider2, …)

@return a new {ProviderList} with all the passed providers in it.
# File lib/roadie/provider_list.rb, line 27
def self.wrap(*providers)
  if providers.size == 1 && providers.first.instance_of?(self)
    providers.first
  else
    new(providers.flatten)
  end
end

Public Instance Methods

find_stylesheet(name) click to toggle source

@return [Stylesheet, nil]

# File lib/roadie/provider_list.rb, line 45
def find_stylesheet(name)
  @providers.each do |provider|
    css = provider.find_stylesheet(name)
    return css if css
  end
  nil
end
find_stylesheet!(name) click to toggle source

Tries to find the given stylesheet and raises an {ProvidersFailed} error if no provider could find the asset.

@return [Stylesheet]

# File lib/roadie/provider_list.rb, line 57
def find_stylesheet!(name)
  errors = []
  @providers.each do |provider|
    return provider.find_stylesheet!(name)
  rescue CssNotFound => error
    errors << error
  end
  raise ProvidersFailed.new(
    css_name: name, providers: self, errors: errors
  )
end
to_ary() click to toggle source

ProviderList can be coerced to an array. This makes Array#flatten work with it, among other things.

# File lib/roadie/provider_list.rb, line 79
def to_ary
  to_a
end
to_s() click to toggle source
# File lib/roadie/provider_list.rb, line 69
def to_s
  list = @providers.map { |provider|
    # Indent every line one level
    provider.to_s.split("\n").join("\n\t")
  }
  "ProviderList: [\n\t#{list.join(",\n\t")}\n]\n"
end