Sha256: 2e1749e17dce5cc954a2722460974f12b4eb8cf837fed2862560476b4a90ef63

Contents?: true

Size: 1.92 KB

Versions: 5

Compression:

Stored size: 1.92 KB

Contents

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 self[target] 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.16.0 lib/plezi/render/sass.rb
plezi-0.15.1 lib/plezi/render/sass.rb
plezi-0.15.0 lib/plezi/render/sass.rb
plezi-0.14.9 lib/plezi/render/sass.rb
plezi-0.14.8 lib/plezi/render/sass.rb