Class: Amber::Render::Asset

Inherits:
Object
  • Object
show all
Defined in:
lib/amber/render/asset.rb

Constant Summary collapse

RENDER_MAP =
{
  '.sass' => {:method => 'render_sass', :new_suffix => '.css', :args => [:sass]},
  '.scss' => {:method => 'render_sass', :new_suffix => '.css', :args => [:scss]}
}
SOURCE_MAP =
{
  '.css' => ['.sass', '.scss']
}

Class Method Summary collapse

Class Method Details

.render(src_file, dst_file) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/amber/render/asset.rb', line 21

def self.render(src_file, dst_file)
  unless Dir.exist?(File.dirname(dst_file))
    FileUtils.mkdir_p(File.dirname(dst_file))
  end
  File.unlink(dst_file) if File.exist?(dst_file)
  src_ext = File.extname(src_file)
  renderer = RENDER_MAP[src_ext]
  if renderer
    if File.basename(src_file) !~ /^_/  # skip partials
      content = self.send(renderer[:method], *([src_file] + renderer[:args]))
      new_dst_file = dst_file.sub(/#{Regexp.escape(src_ext)}$/, renderer[:new_suffix])
      File.open(new_dst_file,'w') do |w|
        w.write(content)
      end
    end
  elsif File.basename(src_file) == '.htaccess'
    # existing htaccess file must be copied, not linked, since
    # the render will change its contents.
    FileUtils.cp(src_file, dst_file)
  else
    File.link(src_file, dst_file)
  end
rescue SystemCallError => exc
  Amber.log_exception(exc)
end

.render_dir(src_dir, dst_dir) ⇒ Object

Render assets in a single directory (does not walk directory tree). Files prefixed with an _ are treated as partials and not rendered.



52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/amber/render/asset.rb', line 52

def self.render_dir(src_dir, dst_dir)
  Dir.chdir(src_dir) do
    Dir.glob('*').each do |file|
      if File.directory?(file) ||
        file =~ /^\./ ||
        file =~ /^_/
        next
      end
      src_file = File.join(src_dir, file)
      dst_file = File.join(dst_dir, file)
      render(src_file, dst_file)
    end
  end
end

.render_sass(src_file, syntax) ⇒ Object



67
68
69
70
71
72
73
74
75
# File 'lib/amber/render/asset.rb', line 67

def self.render_sass(src_file, syntax)
  engine = Sass::Engine.new(
    File.read(src_file),
    :syntax => syntax,
    :load_paths => [File.dirname(src_file)],
    :style => self.sass_render_style
  )
  engine.render
end

.sass_render_styleObject



77
78
79
# File 'lib/amber/render/asset.rb', line 77

def self.sass_render_style
  Amber::env == :production ? :compact : :nested
end