class RailsCriticalCssServer::Rewrite

Attributes

block[R]
cache[R]
manifest[R]
skip[R]
template[R]
version[R]

Public Class Methods

new(template, manifest: template.asset_url('application.css'), version: Config.version, skip: false, cache: true, &block) click to toggle source
# File lib/rails_critical_css_server/rewrite.rb, line 9
def initialize(template, manifest: template.asset_url('application.css'), version: Config.version, skip: false, cache: true, &block)
  @template = template
  @manifest = manifest
  @version = version
  @skip = skip
  @block = block
  @cache = cache
end

Public Instance Methods

cache_key() click to toggle source
# File lib/rails_critical_css_server/rewrite.rb, line 27
def cache_key
  [version, manifest, key].join(':')
end
call() click to toggle source
# File lib/rails_critical_css_server/rewrite.rb, line 18
def call
  return original_html unless should_run?
  return cached_value if cache && cached_value.present?
  return original_html unless content_ready?

  Rails.cache.write(self, rewritten_html) if cache
  rewritten_html
end

Private Instance Methods

cached_value() click to toggle source
# File lib/rails_critical_css_server/rewrite.rb, line 33
def cached_value
  return @cached_value if defined? @cached_value
  @cached_value = Rails.cache.read(self)
end
client() click to toggle source
# File lib/rails_critical_css_server/rewrite.rb, line 71
def client
  @client ||= Client.new(key, request.original_url, manifest)
end
content() click to toggle source
# File lib/rails_critical_css_server/rewrite.rb, line 38
def content
  @content ||= client.read!
end
content_ready?() click to toggle source
# File lib/rails_critical_css_server/rewrite.rb, line 42
def content_ready?
  content.present? && content.ok?
end
key() click to toggle source
# File lib/rails_critical_css_server/rewrite.rb, line 75
def key
  "#{params[:controller]}##{params[:action]}:#{version}"
end
original_html() click to toggle source
# File lib/rails_critical_css_server/rewrite.rb, line 46
def original_html
  return @original_html if defined? @original_html
  @original_html = template.capture { block.call }
end
phantomjs_useragent?() click to toggle source
# File lib/rails_critical_css_server/rewrite.rb, line 67
def phantomjs_useragent?
  request.user_agent.present? && request.user_agent.match(/PhantomJS/)
end
rewritten_html() click to toggle source
# File lib/rails_critical_css_server/rewrite.rb, line 51
def rewritten_html
  return @rewritten_html if defined? @rewritten_html
  css_files = ExtractCssFromHtml.call(original_html)

  @rewritten_html = template.capture do
    template.render 'rails_critical_css_server/css_load',
                    css_files: css_files,
                    critical_css: content,
                    original_html: original_html
  end
end
should_run?() click to toggle source
# File lib/rails_critical_css_server/rewrite.rb, line 63
def should_run?
  !skip && !phantomjs_useragent? && Config.host.present?
end
to_s() click to toggle source
# File lib/rails_critical_css_server/rewrite.rb, line 79
def to_s
  self.class.to_s
end