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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
diff --git a/lib/nanoc3/filters/less.rb b/lib/nanoc3/filters/less.rb
@@ -7,13 +7,19 @@ module Nanoc3::Filters
# This method takes no options.
#
# @param [String] content The content to filter
#
# @return [String] The filtered content
def run(content, params={})
require 'less'
+ # Add filename to load path
+ $LESS_LOAD_PATH << File.dirname(@item[:content_filename])
+
::Less::Engine.new(content).to_css
+ ensure
+ # Restore load path
+ $LESS_LOAD_PATH.delete_at(-1)
end
end
end
diff --git a/test/filters/test_less.rb b/test/filters/test_less.rb
@@ -3,18 +3,57 @@
require 'test/helper'
class Nanoc3::Filters::LessTest < MiniTest::Unit::TestCase
include Nanoc3::TestHelpers
def test_filter
if_have 'less' do
+ # Create item
+ @item = Nanoc3::Item.new("blah", { :content_filename => 'content/foo/bar.txt' }, '/foo/bar/')
+
# Create filter
- filter = ::Nanoc3::Filters::Less.new
+ filter = ::Nanoc3::Filters::Less.new(:item => @item)
# Run filter
result = filter.run('.foo { bar: 1 + 1 }')
assert_match /\.foo\s*\{\s*bar:\s*2;?\s*\}/, result
end
end
+ def test_filter_with_paths_relative_to_site_directory
+ if_have 'less' do
+ # Create file to import
+ FileUtils.mkdir_p('content/foo/bar')
+ File.open('content/foo/bar/imported_file.less', 'w') { |io| io.write('p { color: red; }') }
+
+ # Create item
+ @item = Nanoc3::Item.new("blah", { :content_filename => 'content/foo/bar.txt' }, '/foo/bar/')
+
+ # Create filter
+ filter = ::Nanoc3::Filters::Less.new(:item => @item)
+
+ # Run filter
+ result = filter.run('@import "content/foo/bar/imported_file.less";')
+ assert_match /p\s*\{\s*color:\s*red;?\s*\}/, result
+ end
+ end
+
+ def test_filter_with_paths_relative_to_current_file
+ if_have 'less' do
+ # Create file to import
+ FileUtils.mkdir_p('content/foo/bar')
+ File.open('content/foo/bar/imported_file.less', 'w') { |io| io.write('p { color: red; }') }
+
+ # Create item
+ @item = Nanoc3::Item.new("blah", { :content_filename => 'content/foo/bar.txt' }, '/foo/bar/')
+
+ # Create filter
+ filter = ::Nanoc3::Filters::Less.new(:item => @item)
+
+ # Run filter
+ result = filter.run('@import "bar/imported_file.less";')
+ assert_match /p\s*\{\s*color:\s*red;?\s*\}/, result
+ end
+ end
+
end
|