Module: Plezi::Base::BakeSASS

Extended by:
HasCache
Defined in:
lib/plezi/render/sass.rb

Constant Summary collapse

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

Class Method Summary collapse

Methods included from HasCache

extended, get, store

Class Method Details

.call(target) ⇒ Object


25
26
27
28
# File 'lib/plezi/render/sass.rb', line 25

def call(target)
  return self[target] if File.extname(target) == '.map'.freeze
  review_cache("#{target}.scss", target) || review_cache("#{target}.sass", target)
end

.refresh_sass?(sass) ⇒ Boolean

Returns:

  • (Boolean)

42
43
44
45
46
47
# File 'lib/plezi/render/sass.rb', line 42

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

.review_cache(filename, target) ⇒ Object


30
31
32
33
34
35
36
37
38
39
40
# File 'lib/plezi/render/sass.rb', line 30

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