Sha256: 6c632b3cc594bfb178bbd983c69096a854f213e30dcb7e7fd7c4f51284859d4b

Contents?: true

Size: 1.79 KB

Versions: 5

Compression:

Stored size: 1.79 KB

Contents

require 'thread'
require 'plezi/render/has_cache'
# Redcarpet might not be available, if so, allow the require to throw it's exception.
unless defined?(::Sass)
  begin
    require('sass')
  rescue Exception

  end
end

if defined?(::Sass)

  module Plezi
    module Base
      # This is a baker, not a renderer
      module BakeSASS
        extend HasCache

        module_function

        SASS_OPTIONS = { cache_store: Sass::CacheStores::Memory.new, style: (ENV['SASS_STYLE'] || ((ENV['ENV'] || ENV['RACK_ENV']) == 'production' ? :compressed : :nested)) }.dup

        # Bakes the SASS for the requested target, if a SASS source file is found.
        def call(target)
          return self[target] if File.extname(target) == '.map'.freeze
          review_cache("#{target}.scss", target) || review_cache("#{target}.sass", target)
        end

        def review_cache(filename, target)
          return nil unless File.exist?(filename)
          eng = self[filename]
          return true unless eng.nil? || refresh_sass?(filename)
          self[filename] = (eng = Sass::Engine.for_file(filename, SASS_OPTIONS)).dependencies
          map_name = "#{target}.map".freeze
          css, map = eng.render_with_sourcemap(File.basename(map_name))
          self[filename.to_sym] = Time.now
          IO.write map_name, map.to_json(css_uri: File.basename(target))
          self[target] = css
        end

        def refresh_sass?(sass)
          mt = self[sass.to_sym]
          return true if mt < File.mtime(sass)
          self[sass].each { |e| return true if File.exist?(e.options[:filename]) && (File.mtime(e.options[:filename]) > mt) }
          false
        end
      end

      ::Plezi::AssetBaker.register :css, ::Plezi::Base::BakeSASS
      ::Plezi::AssetBaker.register :map, ::Plezi::Base::BakeSASS
    end
  end

end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
plezi-0.14.4 lib/plezi/render/sass.rb
plezi-0.14.3 lib/plezi/render/sass.rb
plezi-0.14.2 lib/plezi/render/sass.rb
plezi-0.14.1 lib/plezi/render/sass.rb
plezi-0.14.0 lib/plezi/render/sass.rb