-
Notifications
You must be signed in to change notification settings - Fork 9
/
haml.rb
71 lines (55 loc) · 1.72 KB
/
haml.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
require 'rubygems'
require 'haml'
require 'sass'
module Jekyll
class Site
def haml2html
folder = self.config['haml_folder'] || '**/*.haml'
compile( ["*.haml", folder], /\.haml$/, ".html", Haml::Engine )
end
def sass2css
folder = self.config['folder'] || '**/*.sass'
compile( ["*.sass", folder], /\.sass$/, ".css", Sass::Engine )
end
def scss2css
folder = self.config['scss_folder'] || '**/*.scss'
compile( ["*.scss", folder], /\.scss$/, ".css", Sass::Engine, syntax: :scss )
end
private
def compile( files, input_regex, output_extension, engine, options = {} )
Dir.glob(files).each do |f|
origin = File.open(f).read
result = engine.new( origin, options ).render
if !result.empty?
puts "Rendering #{f}"
output_file_name = f.gsub!( input_regex, output_extension )
if file_outdated?( output_file_name, result )
File.open( output_file_name, 'w' ) do |f|
f.write( result )
end
end
end
end
end
def file_outdated?( file, result )
!File.exists?(file) or (File.exists?(file) and result != File.read(file))
end
end
AOP.before(Site, :render) do |site_instance, result, args|
site_instance.haml2html
end
AOP.before(Site, :render) do |site_instance, result, args|
site_instance.sass2css
end
AOP.before(Site, :render) do |site_instance, result, args|
site_instance.scss2css
end
AOP.around(Site, :filter_entries) do |site_instance, args, proceed, abort|
result = proceed.call
result.reject do |entry|
entry.match(/\.haml$/) ||
entry.match(/\.sass$/) ||
entry.match(/\.scss$/)
end
end
end