Sha256: b890607cf28548586b624b9f4c6da61e93a127094cb0e280247ce087f63a1421

Contents?: true

Size: 1.2 KB

Versions: 5

Compression:

Stored size: 1.2 KB

Contents

class Premailer
  module Rails
    module CSSHelper
      extend self

      FileNotFound = Class.new(StandardError)

      STRATEGIES = [
        CSSLoaders::CacheLoader,
        CSSLoaders::FileSystemLoader,
        CSSLoaders::AssetPipelineLoader,
        CSSLoaders::NetworkLoader
      ]

      # Returns all linked CSS files concatenated as string.
      def css_for_doc(doc)
        css_urls_in_doc(doc).map { |url| css_for_url(url) }.join("\n")
      end

      def css_for_url(url)
        load_css(url).tap do |content|
          CSSLoaders::CacheLoader.store(url, content)
        end
      end

      private

      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

      def load_css(url)
        STRATEGIES.each do |strategy|
          css = strategy.load(url)
          return css.force_encoding('UTF-8') if css
        end

        raise FileNotFound, %{File with URL "#{url}" could not be loaded by any strategy.}
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
premailer-rails-1.9.7 lib/premailer/rails/css_helper.rb
premailer-rails-1.9.6 lib/premailer/rails/css_helper.rb
premailer-rails-1.9.5 lib/premailer/rails/css_helper.rb
premailer-rails-1.9.4 lib/premailer/rails/css_helper.rb
premailer-rails-1.9.3 lib/premailer/rails/css_helper.rb