Sha256: e114b9fb03c4e07c4420d82637886b7833a8d4216b969be0b1e1875ce672475d

Contents?: true

Size: 1.4 KB

Versions: 11

Compression:

Stored size: 1.4 KB

Contents

# frozen_string_literal: true

module RailsCriticalCss::Actions
  class BeforeRender
    include RailsCriticalCss::Actions::Helpers

    def initialize(filter_options)
      @packed_options = filter_options.slice(:css, :cache_key, :cache_prefix)
    end

    def around(controller)
      @controller = controller

      options = eval_options(controller, @packed_options)
      cache_path = gen_critical_css_cache_path(options, options[:cache_key])

      # load already compiled css from cache
      critical_css_cache = cache_path.presence && Rails.cache.read(cache_path)
      controller.critical_css_cache = critical_css_cache
      controller.critical_css_enabled = true

      yield
      return unless css_extracting_allowed?

      if critical_css_cache.present? && critical_css_cache[:lazy_css_blocks].present?
        controller.response.body = inject_lazy_css_to_footer(critical_css_cache[:lazy_css_blocks])
      end
    end

    private

      def css_extracting_allowed?
        @controller.request.get? \
          && @controller.response.status == 200 \
          && @controller.full_html_response.present?
      end

      def inject_lazy_css_to_footer(css)
        html = @controller.full_html_response
        lazy_css_injection_index = html.index('</body>')

        [
          html[0..lazy_css_injection_index - 1],
          css,
          html[lazy_css_injection_index..-1],
        ].join('')
      end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
rails_critical_css-0.5.1 lib/rails_critical_css/actions/before_render.rb
rails_critical_css-0.5.0 lib/rails_critical_css/actions/before_render.rb
rails_critical_css-0.4.1 lib/rails_critical_css/actions/before_render.rb
rails_critical_css-0.4.0 lib/rails_critical_css/actions/before_render.rb
rails_critical_css-0.3.9 lib/rails_critical_css/actions/before_render.rb
rails_critical_css-0.3.8 lib/rails_critical_css/actions/before_render.rb
rails_critical_css-0.3.7 lib/rails_critical_css/actions/before_render.rb
rails_critical_css-0.3.6 lib/rails_critical_css/actions/before_render.rb
rails_critical_css-0.3.5 lib/rails_critical_css/actions/before_render.rb
rails_critical_css-0.3.4 lib/rails_critical_css/actions/before_render.rb
rails_critical_css-0.3.3 lib/rails_critical_css/actions/before_render.rb