Sha256: fba0e92f70ab8a1c46c052db1c928db2a92fba6d36ab42fd0e8fc0fd33495313

Contents?: true

Size: 973 Bytes

Versions: 11

Compression:

Stored size: 973 Bytes

Contents

# frozen_string_literal: true

module RailsCriticalCss::Jobs
  class Extractor < ActiveJob::Base
    class << self
      def semaphore_key(cache_path)
        "semaphore-#{cache_path}"
      end

      def perform_if_semaphore_is_released(attrs)
        semaphore = semaphore_key(attrs[:cache][:path])
        return if Rails.cache.exist?(semaphore)

        Rails.cache.write(semaphore, '1', { expires_in: 15.minutes })
        perform_later(attrs)
      end
    end

    def perform(cache:, css:, html:)
      semaphore = self.class.semaphore_key(cache[:path])
      critical_css = ::RailsCriticalCss::Extractor.new(css: css, html: html).try_extract

      # store it as wrapped css, do not regenerate for
      # each request critical_css if something go wrong
      # with css-extractor
      Rails.cache.write(
        cache[:path],
        {
          css: critical_css,
        },
        cache[:store]
      )

      Rails.cache.delete(semaphore)
    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/jobs/extractor.rb
rails_critical_css-0.5.0 lib/rails_critical_css/jobs/extractor.rb
rails_critical_css-0.4.1 lib/rails_critical_css/jobs/extractor.rb
rails_critical_css-0.4.0 lib/rails_critical_css/jobs/extractor.rb
rails_critical_css-0.3.9 lib/rails_critical_css/jobs/extractor.rb
rails_critical_css-0.3.8 lib/rails_critical_css/jobs/extractor.rb
rails_critical_css-0.3.7 lib/rails_critical_css/jobs/extractor.rb
rails_critical_css-0.3.6 lib/rails_critical_css/jobs/extractor.rb
rails_critical_css-0.3.5 lib/rails_critical_css/jobs/extractor.rb
rails_critical_css-0.3.4 lib/rails_critical_css/jobs/extractor.rb
rails_critical_css-0.3.3 lib/rails_critical_css/jobs/extractor.rb