Sha256: 9f670cee82f4cf507f26b287eb941b619d0b477697c5d81401ef745e37f265c5
Contents?: true
Size: 1.61 KB
Versions: 3
Compression:
Stored size: 1.61 KB
Contents
# frozen_string_literal: true require "digest" require_relative "../../jekyll-postcss/socket" module Jekyll module Converters class PostCss < Converter safe true priority :low def initialize(config = {}) super @socket = config.fetch("socket") { ::PostCss::Socket.new } @raw_cache = nil @import_raw_cache = {} @converted_cache = nil end def matches(ext) ext.casecmp(".css").zero? end def output_ext(_ext) ".css" end def convert(content) raise PostCssNotFoundError unless Dir.exist?("./node_modules/postcss") @raw_digest = Digest::MD5.hexdigest content @raw_import_digests = import_digests(content) if cache_miss.any? @raw_cache = @raw_digest.dup @import_raw_cache = @raw_import_digests.dup @socket.write content @converted_cache = @socket.read end reset @converted_cache end private def import_digests(content) content .scan(%r!^@import "(?<file>.*)";$!) .flatten .each_with_object({}) do |import, acc| file = "#{import}.css" acc[import] = Digest::MD5.hexdigest IO.read(file) if File.file?(file) end end def cache_miss @raw_import_digests .map { |import, hash| @import_raw_cache[import] != hash } .unshift(@raw_cache != @raw_digest) end def reset @raw_digest = nil @raw_import_digest = nil end end end end class PostCssNotFoundError < RuntimeError; end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
jekyll-postcss-0.3.2 | lib/jekyll/converters/postcss.rb |
jekyll-postcss-0.3.1 | lib/jekyll/converters/postcss.rb |
jekyll-postcss-0.3.0 | lib/jekyll/converters/postcss.rb |