module Premailer::Rails::CSSHelper

Constants

FileNotFound

Attributes

cache[RW]

Public Instance Methods

css_for_doc(doc) click to toggle source

Returns all linked CSS files concatenated as string.

# File lib/premailer/rails/css_helper.rb, line 12
def css_for_doc(doc)
  css_urls_in_doc(doc).map { |url| css_for_url(url) }.join("\n")
end
css_for_url(url) click to toggle source
# File lib/premailer/rails/css_helper.rb, line 16
def css_for_url(url)
  if cache_enabled?
    load_css_with_cache(url)
  else
    load_css(url)
  end
end

Private Instance Methods

cache_enabled?() click to toggle source
# File lib/premailer/rails/css_helper.rb, line 41
def cache_enabled?
  defined?(::Rails.env) && ::Rails.env.production?
end
css_urls_in_doc(doc) click to toggle source
# File lib/premailer/rails/css_helper.rb, line 26
def css_urls_in_doc(doc)
  doc.search('link[@rel="stylesheet"]:not([@data-premailer="ignore"])').map do |link|
    if link.respond_to?(:remove)
      link.remove
    else
      link.parent.children.delete(link)
    end
    link.attributes['href'].to_s
  end
end
find_strategy(key) click to toggle source
# File lib/premailer/rails/css_helper.rb, line 54
def find_strategy(key)
  case key
  when :filesystem
    CSSLoaders::FileSystemLoader
  when :asset_pipeline
    CSSLoaders::AssetPipelineLoader
  when :network
    CSSLoaders::NetworkLoader
  else
    key
  end
end
load_css(url) click to toggle source
# File lib/premailer/rails/css_helper.rb, line 45
def load_css(url)
  Premailer::Rails.config.fetch(:strategies).each do |strategy|
    css = find_strategy(strategy).load(url)
    return css if css
  end

  raise FileNotFound, %{File with URL "#{url}" could not be loaded by any strategy.}
end
load_css_with_cache(url) click to toggle source
# File lib/premailer/rails/css_helper.rb, line 37
def load_css_with_cache(url)
  self.cache[url] ||= load_css(url)
end