nanoc-filesystem-i18n 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +68 -15
- data/lib/{nanoc3 → nanoc}/data_sources/filesystem_i18n.rb +27 -22
- data/lib/nanoc/data_sources/filesystem_i18n/version.rb +8 -0
- data/lib/{nanoc3 → nanoc}/extra/i18n.rb +6 -1
- metadata +66 -108
- data/Rakefile +0 -30
- data/lib/nanoc3/data_sources/filesystem_i18n/version.rb +0 -12
- data/test/helper.rb +0 -90
- data/test/test_filesystem.rb +0 -347
- data/test/test_filesystem_i18n.rb +0 -61
- data/test/test_filesystem_unified.rb +0 -461
- data/test/test_filesystem_verbose.rb +0 -260
@@ -1,61 +0,0 @@
|
|
1
|
-
require 'helper'
|
2
|
-
|
3
|
-
class TestNanocFilesystemI18n < MiniTest::Unit::TestCase
|
4
|
-
|
5
|
-
include Nanoc3::TestHelpers
|
6
|
-
|
7
|
-
def new_data_source(params=nil)
|
8
|
-
# Mock site
|
9
|
-
site = Nanoc3::Site.new({})
|
10
|
-
|
11
|
-
# Create data source
|
12
|
-
data_source = Nanoc3::DataSources::FilesystemI18n.new(site, nil, nil, params)
|
13
|
-
data_source.up
|
14
|
-
|
15
|
-
# Done
|
16
|
-
data_source
|
17
|
-
end
|
18
|
-
|
19
|
-
def test_create_object_not_at_root
|
20
|
-
# Create item
|
21
|
-
data_source = new_data_source
|
22
|
-
data_source.send(:create_object, 'foobar', 'content here', { :foo => 'bar' }, '/asdf/')
|
23
|
-
|
24
|
-
# Check file existance
|
25
|
-
assert File.directory?('foobar')
|
26
|
-
assert !File.directory?('foobar/content')
|
27
|
-
assert !File.directory?('foobar/asdf')
|
28
|
-
assert File.file?('foobar/asdf.yaml')
|
29
|
-
assert File.file?('foobar/asdf.html')
|
30
|
-
|
31
|
-
# Check file meta
|
32
|
-
expected = "--- \nfoo: bar\n"
|
33
|
-
assert_equal expected, File.read('foobar/asdf.yaml')
|
34
|
-
|
35
|
-
# Check file content
|
36
|
-
expected = "content here"
|
37
|
-
assert_equal expected, File.read('foobar/asdf.html')
|
38
|
-
end
|
39
|
-
|
40
|
-
def test_create_object_at_root
|
41
|
-
# Create item
|
42
|
-
data_source = new_data_source
|
43
|
-
data_source.send(:create_object, 'foobar', 'content here', { :foo => 'bar' }, '/')
|
44
|
-
|
45
|
-
# Check file existance
|
46
|
-
assert File.directory?('foobar')
|
47
|
-
assert !File.directory?('foobar/index')
|
48
|
-
assert !File.directory?('foobar/foobar')
|
49
|
-
assert File.file?('foobar/index.yaml')
|
50
|
-
assert File.file?('foobar/index.html')
|
51
|
-
|
52
|
-
# Check file meta
|
53
|
-
expected = "--- \nfoo: bar\n"
|
54
|
-
assert_equal expected, File.read('foobar/index.yaml')
|
55
|
-
|
56
|
-
# Check file content
|
57
|
-
expected = "content here"
|
58
|
-
assert_equal expected, File.read('foobar/index.html')
|
59
|
-
end
|
60
|
-
|
61
|
-
end
|
@@ -1,461 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'test/helper'
|
4
|
-
|
5
|
-
class Nanoc3::DataSources::FilesystemUnifiedTest < MiniTest::Unit::TestCase
|
6
|
-
|
7
|
-
include Nanoc3::TestHelpers
|
8
|
-
|
9
|
-
def new_data_source(params=nil)
|
10
|
-
# Mock site
|
11
|
-
site = Nanoc3::Site.new({})
|
12
|
-
|
13
|
-
# Create data source
|
14
|
-
# I18n: call `up` to setup locale config
|
15
|
-
data_source = Nanoc3::DataSources::FilesystemI18n.new(site, nil, nil, params)
|
16
|
-
data_source.up
|
17
|
-
|
18
|
-
# Done
|
19
|
-
data_source
|
20
|
-
end
|
21
|
-
|
22
|
-
def test_load_objects
|
23
|
-
# Create data source
|
24
|
-
data_source = new_data_source
|
25
|
-
|
26
|
-
# Create a fake class
|
27
|
-
klass = Class.new do
|
28
|
-
attr_reader :stuff
|
29
|
-
def initialize(*stuff)
|
30
|
-
@stuff = stuff
|
31
|
-
end
|
32
|
-
def ==(other)
|
33
|
-
@stuff == other.stuff
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
# Create sample files
|
38
|
-
FileUtils.mkdir_p('foo')
|
39
|
-
FileUtils.mkdir_p('foo/a/b')
|
40
|
-
File.open('foo/bar.html', 'w') { |io| io.write("---\nnum: 1\n---\ntest 1") }
|
41
|
-
File.open('foo/b.c.html', 'w') { |io| io.write("---\nnum: 2\n---\ntest 2") }
|
42
|
-
File.open('foo/a/b/c.html', 'w') { |io| io.write("---\nnum: 3\n---\ntest 3") }
|
43
|
-
File.open('foo/ugly.html~', 'w') { |io| io.write("---\nnum: 4\n---\ntest 4") }
|
44
|
-
File.open('foo/ugly.html.orig', 'w') { |io| io.write("---\nnum: 5\n---\ntest 5") }
|
45
|
-
File.open('foo/ugly.html.rej', 'w') { |io| io.write("---\nnum: 6\n---\ntest 6") }
|
46
|
-
File.open('foo/ugly.html.bak', 'w') { |io| io.write("---\nnum: 7\n---\ntest 7") }
|
47
|
-
|
48
|
-
# Get expected and actual output
|
49
|
-
expected_out = [
|
50
|
-
klass.new(
|
51
|
-
'test 1',
|
52
|
-
{ 'num' => 1, :filename => 'foo/bar.html', :extension => 'html', :file => File.open('foo/bar.html') },
|
53
|
-
'/bar/',
|
54
|
-
:binary => false, :mtime => File.mtime('foo/bar.html')
|
55
|
-
),
|
56
|
-
klass.new(
|
57
|
-
'test 2',
|
58
|
-
{ 'num' => 2, :filename => 'foo/b.c.html', :extension => 'c.html', :file => File.open('foo/b.c.html') },
|
59
|
-
'/b/',
|
60
|
-
:binary => false, :mtime => File.mtime('foo/b.c.html')
|
61
|
-
),
|
62
|
-
klass.new(
|
63
|
-
'test 3',
|
64
|
-
{ 'num' => 3, :filename => 'foo/a/b/c.html', :extension => 'html', :file => File.open('foo/a/b/c.html') },
|
65
|
-
'/a/b/c/',
|
66
|
-
:binary => false, :mtime => File.mtime('foo/a/b/c.html')
|
67
|
-
)
|
68
|
-
]
|
69
|
-
actual_out = data_source.send(:load_objects, 'foo', 'The Foo', klass).sort_by { |i| i.stuff[0] }
|
70
|
-
|
71
|
-
# Check
|
72
|
-
(0..expected_out.size-1).each do |i|
|
73
|
-
assert_equal expected_out[i].stuff[0], actual_out[i].stuff[0], 'content must match'
|
74
|
-
assert_equal expected_out[i].stuff[2], actual_out[i].stuff[2], 'identifier must match'
|
75
|
-
assert_equal expected_out[i].stuff[3][:mtime], actual_out[i].stuff[3][:mtime], 'mtime must match'
|
76
|
-
assert_equal expected_out[i].stuff[1][:file].path, actual_out[i].stuff[1][:file].path, 'file paths must match'
|
77
|
-
[ 'num', :filename, :extension ].each do |key|
|
78
|
-
assert_equal expected_out[i].stuff[1][key], actual_out[i].stuff[1][key], "attribute key #{key} must match"
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
def test_load_binary_objects
|
84
|
-
# Create data source
|
85
|
-
data_source = new_data_source
|
86
|
-
|
87
|
-
# Create sample files
|
88
|
-
FileUtils.mkdir_p('foo')
|
89
|
-
File.open('foo/stuff.dat', 'w') { |io| io.write("random binary data") }
|
90
|
-
|
91
|
-
# Load
|
92
|
-
items = data_source.send(:load_objects, 'foo', 'item', Nanoc3::Item)
|
93
|
-
|
94
|
-
# Check
|
95
|
-
assert_equal 1, items.size
|
96
|
-
assert items[0].binary?
|
97
|
-
assert_equal 'foo/stuff.dat', items[0].raw_filename
|
98
|
-
assert_nil items[0].raw_content
|
99
|
-
end
|
100
|
-
|
101
|
-
def test_load_binary_layouts
|
102
|
-
# Create data source
|
103
|
-
data_source = new_data_source
|
104
|
-
|
105
|
-
# Create sample files
|
106
|
-
FileUtils.mkdir_p('foo')
|
107
|
-
File.open('foo/stuff.dat', 'w') { |io| io.write("random binary data") }
|
108
|
-
|
109
|
-
# Load
|
110
|
-
items = data_source.send(:load_objects, 'foo', 'item', Nanoc3::Layout)
|
111
|
-
|
112
|
-
# Check
|
113
|
-
assert_equal 1, items.size
|
114
|
-
assert_equal 'random binary data', items[0].raw_content
|
115
|
-
end
|
116
|
-
|
117
|
-
def test_identifier_for_filename_allowing_periods_in_identifiers
|
118
|
-
# Create data source
|
119
|
-
data_source = new_data_source(:allow_periods_in_identifiers => true)
|
120
|
-
|
121
|
-
# Get input and expected output
|
122
|
-
expected = {
|
123
|
-
'/foo' => '/foo/',
|
124
|
-
'/foo.html' => '/foo/',
|
125
|
-
'/foo/index.html' => '/foo/',
|
126
|
-
'/foo.entry.html' => '/foo.entry/'
|
127
|
-
}
|
128
|
-
|
129
|
-
# Check
|
130
|
-
expected.each_pair do |input, expected_output|
|
131
|
-
actual_output = data_source.send(:identifier_for_filename, input)
|
132
|
-
assert_equal(
|
133
|
-
expected_output, actual_output,
|
134
|
-
"identifier_for_filename(#{input.inspect}) should equal #{expected_output.inspect}, not #{actual_output.inspect}"
|
135
|
-
)
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
def test_identifier_for_filename_disallowing_periods_in_identifiers
|
140
|
-
# Create data source
|
141
|
-
data_source = new_data_source
|
142
|
-
|
143
|
-
# Get input and expected output
|
144
|
-
expected = {
|
145
|
-
'/foo' => '/foo/',
|
146
|
-
'/foo.html' => '/foo/',
|
147
|
-
'/foo/index.html' => '/foo/',
|
148
|
-
'/foo.html.erb' => '/foo/'
|
149
|
-
}
|
150
|
-
|
151
|
-
# Check
|
152
|
-
expected.each_pair do |input, expected_output|
|
153
|
-
actual_output = data_source.send(:identifier_for_filename, input)
|
154
|
-
assert_equal(
|
155
|
-
expected_output, actual_output,
|
156
|
-
"identifier_for_filename(#{input.inspect}) should equal #{expected_output.inspect}, not #{actual_output.inspect}"
|
157
|
-
)
|
158
|
-
end
|
159
|
-
end
|
160
|
-
|
161
|
-
def test_identifier_for_filename_with_subfilename_allowing_periods_in_identifiers
|
162
|
-
# Create data source
|
163
|
-
data_source = new_data_source(:allow_periods_in_identifiers => true)
|
164
|
-
|
165
|
-
# Build directory
|
166
|
-
FileUtils.mkdir_p('foo')
|
167
|
-
File.open('foo/bar.yaml', 'w') { |io| io.write('test') }
|
168
|
-
File.open('foo/bar.html', 'w') { |io| io.write('test') }
|
169
|
-
File.open('foo/quxbar.yaml', 'w') { |io| io.write('test') }
|
170
|
-
File.open('foo/quxbar.html', 'w') { |io| io.write('test') }
|
171
|
-
File.open('foo/barqux.yaml', 'w') { |io| io.write('test') }
|
172
|
-
File.open('foo/barqux.html', 'w') { |io| io.write('test') }
|
173
|
-
File.open('foo/quxbarqux.yaml', 'w') { |io| io.write('test') }
|
174
|
-
File.open('foo/quxbarqux.html', 'w') { |io| io.write('test') }
|
175
|
-
File.open('foo/qux.bar.yaml', 'w') { |io| io.write('test') }
|
176
|
-
File.open('foo/qux.bar.html', 'w') { |io| io.write('test') }
|
177
|
-
File.open('foo/bar.qux.yaml', 'w') { |io| io.write('test') }
|
178
|
-
File.open('foo/bar.qux.html', 'w') { |io| io.write('test') }
|
179
|
-
File.open('foo/qux.bar.qux.yaml', 'w') { |io| io.write('test') }
|
180
|
-
File.open('foo/qux.bar.qux.html', 'w') { |io| io.write('test') }
|
181
|
-
|
182
|
-
# Check content filename
|
183
|
-
{
|
184
|
-
'foo/bar.yaml' => '/foo/bar/',
|
185
|
-
'foo/quxbar.yaml' => '/foo/quxbar/',
|
186
|
-
'foo/barqux.yaml' => '/foo/barqux/',
|
187
|
-
'foo/quxbarqux.yaml' => '/foo/quxbarqux/',
|
188
|
-
'foo/qux.bar.yaml' => '/foo/qux.bar/',
|
189
|
-
'foo/bar.qux.yaml' => '/foo/bar.qux/',
|
190
|
-
'foo/qux.bar.qux.yaml' => '/foo/qux.bar.qux/'
|
191
|
-
}.each_pair do |meta_filename, expected_identifier|
|
192
|
-
assert_equal(
|
193
|
-
expected_identifier,
|
194
|
-
data_source.instance_eval { identifier_for_filename(meta_filename) }
|
195
|
-
)
|
196
|
-
end
|
197
|
-
end
|
198
|
-
|
199
|
-
def test_identifier_for_filename_with_subfilename_disallowing_periods_in_identifiers
|
200
|
-
# Create data source
|
201
|
-
data_source = new_data_source
|
202
|
-
|
203
|
-
# Build directory
|
204
|
-
FileUtils.mkdir_p('foo')
|
205
|
-
File.open('foo/bar.yaml', 'w') { |io| io.write('test') }
|
206
|
-
File.open('foo/bar.html', 'w') { |io| io.write('test') }
|
207
|
-
File.open('foo/quxbar.yaml', 'w') { |io| io.write('test') }
|
208
|
-
File.open('foo/quxbar.html', 'w') { |io| io.write('test') }
|
209
|
-
File.open('foo/barqux.yaml', 'w') { |io| io.write('test') }
|
210
|
-
File.open('foo/barqux.html', 'w') { |io| io.write('test') }
|
211
|
-
File.open('foo/quxbarqux.yaml', 'w') { |io| io.write('test') }
|
212
|
-
File.open('foo/quxbarqux.html', 'w') { |io| io.write('test') }
|
213
|
-
File.open('foo/qux.bar.yaml', 'w') { |io| io.write('test') }
|
214
|
-
File.open('foo/qux.bar.html', 'w') { |io| io.write('test') }
|
215
|
-
File.open('foo/bar.qux.yaml', 'w') { |io| io.write('test') }
|
216
|
-
File.open('foo/bar.qux.html', 'w') { |io| io.write('test') }
|
217
|
-
File.open('foo/qux.bar.qux.yaml', 'w') { |io| io.write('test') }
|
218
|
-
File.open('foo/qux.bar.qux.html', 'w') { |io| io.write('test') }
|
219
|
-
|
220
|
-
# Check content filename
|
221
|
-
{
|
222
|
-
'foo/bar.yaml' => '/foo/bar/',
|
223
|
-
'foo/quxbar.yaml' => '/foo/quxbar/',
|
224
|
-
'foo/barqux.yaml' => '/foo/barqux/',
|
225
|
-
'foo/quxbarqux.yaml' => '/foo/quxbarqux/',
|
226
|
-
'foo/qux.bar.yaml' => '/foo/qux/',
|
227
|
-
'foo/bar.qux.yaml' => '/foo/bar/',
|
228
|
-
'foo/qux.bar.qux.yaml' => '/foo/qux/'
|
229
|
-
}.each_pair do |meta_filename, expected_identifier|
|
230
|
-
assert_equal(
|
231
|
-
expected_identifier,
|
232
|
-
data_source.instance_eval { identifier_for_filename(meta_filename) }
|
233
|
-
)
|
234
|
-
end
|
235
|
-
end
|
236
|
-
|
237
|
-
def test_load_objects_allowing_periods_in_identifiers
|
238
|
-
# Create data source
|
239
|
-
data_source = new_data_source(:allow_periods_in_identifiers => true)
|
240
|
-
|
241
|
-
# Create a fake class
|
242
|
-
klass = Class.new do
|
243
|
-
attr_reader :stuff
|
244
|
-
def initialize(*stuff)
|
245
|
-
@stuff = stuff
|
246
|
-
end
|
247
|
-
def ==(other)
|
248
|
-
@stuff == other.stuff
|
249
|
-
end
|
250
|
-
end
|
251
|
-
|
252
|
-
# Create sample files
|
253
|
-
FileUtils.mkdir_p('foo')
|
254
|
-
FileUtils.mkdir_p('foo/a/b')
|
255
|
-
File.open('foo/a/b/c.yaml', 'w') { |io| io.write("---\nnum: 1\n") }
|
256
|
-
File.open('foo/b.c.yaml', 'w') { |io| io.write("---\nnum: 2\n") }
|
257
|
-
File.open('foo/b.c.html', 'w') { |io| io.write("test 2") }
|
258
|
-
File.open('foo/car.html', 'w') { |io| io.write("test 3") }
|
259
|
-
File.open('foo/ugly.yaml~', 'w') { |io| io.write("blah") }
|
260
|
-
File.open('foo/ugly.html~', 'w') { |io| io.write("blah") }
|
261
|
-
File.open('foo/ugly.html.orig', 'w') { |io| io.write("blah") }
|
262
|
-
File.open('foo/ugly.html.rej', 'w') { |io| io.write("blah") }
|
263
|
-
File.open('foo/ugly.html.bak', 'w') { |io| io.write("blah") }
|
264
|
-
|
265
|
-
# Get expected output
|
266
|
-
expected_out = [
|
267
|
-
klass.new(
|
268
|
-
'',
|
269
|
-
{
|
270
|
-
'num' => 1,
|
271
|
-
:content_filename => nil,
|
272
|
-
:meta_filename => 'foo/a/b/c.yaml',
|
273
|
-
:extension => nil,
|
274
|
-
:file => nil
|
275
|
-
},
|
276
|
-
'/a/b/c/',
|
277
|
-
:binary => false, :mtime => File.mtime('foo/a/b/c.yaml')
|
278
|
-
),
|
279
|
-
klass.new(
|
280
|
-
'test 2',
|
281
|
-
{
|
282
|
-
'num' => 2,
|
283
|
-
:content_filename => 'foo/b.c.html',
|
284
|
-
:meta_filename => 'foo/b.c.yaml',
|
285
|
-
:extension => 'html',
|
286
|
-
:file => File.open('foo/b.c.html')
|
287
|
-
},
|
288
|
-
'/b.c/',
|
289
|
-
:binary => false, :mtime => File.mtime('foo/b.c.html') > File.mtime('foo/b.c.yaml') ? File.mtime('foo/b.c.html') : File.mtime('foo/b.c.yaml')
|
290
|
-
),
|
291
|
-
klass.new(
|
292
|
-
'test 3',
|
293
|
-
{
|
294
|
-
:content_filename => 'foo/car.html',
|
295
|
-
:meta_filename => nil,
|
296
|
-
:extension => 'html',
|
297
|
-
:file => File.open('foo/car.html')
|
298
|
-
},
|
299
|
-
'/car/',
|
300
|
-
:binary => false, :mtime => File.mtime('foo/car.html')
|
301
|
-
)
|
302
|
-
]
|
303
|
-
|
304
|
-
# Get actual output ordered by identifier
|
305
|
-
actual_out = data_source.send(:load_objects, 'foo', 'The Foo', klass).sort_by { |i| i.stuff[2] }
|
306
|
-
|
307
|
-
# Check
|
308
|
-
(0..expected_out.size-1).each do |i|
|
309
|
-
assert_equal expected_out[i].stuff[0], actual_out[i].stuff[0], 'content must match'
|
310
|
-
assert_equal expected_out[i].stuff[2], actual_out[i].stuff[2], 'identifier must match'
|
311
|
-
assert_equal expected_out[i].stuff[3][:mtime], actual_out[i].stuff[3][:mtime], 'mtime must match'
|
312
|
-
|
313
|
-
actual_file = actual_out[i].stuff[1][:file]
|
314
|
-
expected_file = expected_out[i].stuff[1][:file]
|
315
|
-
assert(actual_file == expected_file || actual_file.path == expected_file.path, 'file paths must match')
|
316
|
-
|
317
|
-
[ 'num', :content_filename, :meta_filename, :extension ].each do |key|
|
318
|
-
assert_equal expected_out[i].stuff[1][key], actual_out[i].stuff[1][key], "attribute key #{key} must match"
|
319
|
-
end
|
320
|
-
end
|
321
|
-
end
|
322
|
-
|
323
|
-
def test_load_objects_disallowing_periods_in_identifiers
|
324
|
-
# Create data source
|
325
|
-
data_source = new_data_source
|
326
|
-
|
327
|
-
# Create a fake class
|
328
|
-
klass = Class.new do
|
329
|
-
attr_reader :stuff
|
330
|
-
def initialize(*stuff)
|
331
|
-
@stuff = stuff
|
332
|
-
end
|
333
|
-
def ==(other)
|
334
|
-
@stuff == other.stuff
|
335
|
-
end
|
336
|
-
end
|
337
|
-
|
338
|
-
# Create sample files
|
339
|
-
FileUtils.mkdir_p('foo')
|
340
|
-
FileUtils.mkdir_p('foo/a/b')
|
341
|
-
File.open('foo/a/b/c.yaml', 'w') { |io| io.write("---\nnum: 1\n") }
|
342
|
-
File.open('foo/b.yaml', 'w') { |io| io.write("---\nnum: 2\n") }
|
343
|
-
File.open('foo/b.html.erb', 'w') { |io| io.write("test 2") }
|
344
|
-
File.open('foo/car.html', 'w') { |io| io.write("test 3") }
|
345
|
-
File.open('foo/ugly.yaml~', 'w') { |io| io.write("blah") }
|
346
|
-
File.open('foo/ugly.html~', 'w') { |io| io.write("blah") }
|
347
|
-
File.open('foo/ugly.html.orig', 'w') { |io| io.write("blah") }
|
348
|
-
File.open('foo/ugly.html.rej', 'w') { |io| io.write("blah") }
|
349
|
-
File.open('foo/ugly.html.bak', 'w') { |io| io.write("blah") }
|
350
|
-
|
351
|
-
# Get expected output
|
352
|
-
expected_out = [
|
353
|
-
klass.new(
|
354
|
-
'',
|
355
|
-
{
|
356
|
-
'num' => 1,
|
357
|
-
:content_filename => nil,
|
358
|
-
:meta_filename => 'foo/a/b/c.yaml',
|
359
|
-
:extension => nil,
|
360
|
-
:file => nil
|
361
|
-
},
|
362
|
-
'/a/b/c/',
|
363
|
-
:binary => false, :mtime => File.mtime('foo/a/b/c.yaml')
|
364
|
-
),
|
365
|
-
klass.new(
|
366
|
-
'test 2',
|
367
|
-
{
|
368
|
-
'num' => 2,
|
369
|
-
:content_filename => 'foo/b.html.erb',
|
370
|
-
:meta_filename => 'foo/b.yaml',
|
371
|
-
:extension => 'html.erb',
|
372
|
-
:file => File.open('foo/b.html.erb')
|
373
|
-
},
|
374
|
-
'/b/',
|
375
|
-
:binary => false, :mtime => File.mtime('foo/b.html.erb') > File.mtime('foo/b.yaml') ? File.mtime('foo/b.html.erb') : File.mtime('foo/b.yaml')
|
376
|
-
),
|
377
|
-
klass.new(
|
378
|
-
'test 3',
|
379
|
-
{
|
380
|
-
:content_filename => 'foo/car.html',
|
381
|
-
:meta_filename => nil,
|
382
|
-
:extension => 'html',
|
383
|
-
:file => File.open('foo/car.html')
|
384
|
-
},
|
385
|
-
'/car/',
|
386
|
-
:binary => false, :mtime => File.mtime('foo/car.html')
|
387
|
-
)
|
388
|
-
]
|
389
|
-
|
390
|
-
# Get actual output ordered by identifier
|
391
|
-
actual_out = data_source.send(:load_objects, 'foo', 'The Foo', klass).sort_by { |i| i.stuff[2] }
|
392
|
-
|
393
|
-
# Check
|
394
|
-
(0..expected_out.size-1).each do |i|
|
395
|
-
assert_equal expected_out[i].stuff[0], actual_out[i].stuff[0], 'content must match'
|
396
|
-
assert_equal expected_out[i].stuff[2], actual_out[i].stuff[2], 'identifier must match'
|
397
|
-
assert_equal expected_out[i].stuff[3][:mtime], actual_out[i].stuff[3][:mtime], 'mtime must match'
|
398
|
-
|
399
|
-
actual_file = actual_out[i].stuff[1][:file]
|
400
|
-
expected_file = expected_out[i].stuff[1][:file]
|
401
|
-
assert(actual_file == expected_file || actual_file.path == expected_file.path, 'file paths must match')
|
402
|
-
|
403
|
-
[ 'num', :content_filename, :meta_filename, :extension ].each do |key|
|
404
|
-
assert_equal expected_out[i].stuff[1][key], actual_out[i].stuff[1][key], "attribute key #{key} must match"
|
405
|
-
end
|
406
|
-
end
|
407
|
-
end
|
408
|
-
|
409
|
-
def test_create_object_allowing_periods_in_identifiers
|
410
|
-
# Create data source
|
411
|
-
data_source = new_data_source(:allow_periods_in_identifiers => true)
|
412
|
-
|
413
|
-
# Create object without period
|
414
|
-
data_source.send(:create_object, 'foo', 'some content', { :some => 'attributes' }, '/asdf/')
|
415
|
-
assert File.file?('foo/asdf.html')
|
416
|
-
data = data_source.send(:parse, 'foo/asdf.html', 'foo/asdf.yaml', 'moo', false)
|
417
|
-
assert_equal({ 'some' => 'attributes' }, data[0])
|
418
|
-
assert_equal('some content', data[1])
|
419
|
-
|
420
|
-
# Create object with period
|
421
|
-
data_source.send(:create_object, 'foo', 'some content', { :some => 'attributes' }, '/as.df/')
|
422
|
-
assert File.file?('foo/as.df.html')
|
423
|
-
data = data_source.send(:parse, 'foo/as.df.html', 'foo/asdf.yaml', 'moo', false)
|
424
|
-
assert_equal({ 'some' => 'attributes' }, data[0])
|
425
|
-
assert_equal('some content', data[1])
|
426
|
-
end
|
427
|
-
|
428
|
-
def test_create_object_disallowing_periods_in_identifiers
|
429
|
-
# Create data source
|
430
|
-
data_source = new_data_source
|
431
|
-
|
432
|
-
# Create object without period
|
433
|
-
data_source.send(:create_object, 'foo', 'some content', { :some => 'attributes' }, '/asdf/')
|
434
|
-
assert File.file?('foo/asdf.html')
|
435
|
-
data = data_source.send(:parse, 'foo/asdf.html', 'foo/asdf.yaml', 'moo', false)
|
436
|
-
assert_equal({ 'some' => 'attributes' }, data[0])
|
437
|
-
assert_equal('some content', data[1])
|
438
|
-
|
439
|
-
# Create object with period
|
440
|
-
assert_raises(RuntimeError) do
|
441
|
-
data_source.send(:create_object, 'foo', 'some content', { :some => 'attributes' }, '/as.df/')
|
442
|
-
end
|
443
|
-
end
|
444
|
-
|
445
|
-
def test_compile_huge_site
|
446
|
-
# Create data source
|
447
|
-
data_source = new_data_source
|
448
|
-
|
449
|
-
# Create a lot of items
|
450
|
-
count = Process.getrlimit(Process::RLIMIT_NOFILE)[0] + 5
|
451
|
-
count.times do |i|
|
452
|
-
FileUtils.mkdir_p("content/#{i}")
|
453
|
-
File.open("content/#{i}/#{i}.html", 'w') { |io| io << "This is item #{i}." }
|
454
|
-
File.open("content/#{i}/#{i}.yaml", 'w') { |io| io << "title: Item #{i}" }
|
455
|
-
end
|
456
|
-
|
457
|
-
# Read all items
|
458
|
-
data_source.items
|
459
|
-
end
|
460
|
-
|
461
|
-
end
|