nanoc3 3.2.4 → 3.3.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.
- metadata +14 -313
- data/.gemtest +0 -0
- data/ChangeLog +0 -3
- data/Gemfile +0 -29
- data/LICENSE +0 -19
- data/NEWS.md +0 -449
- data/README.md +0 -108
- data/Rakefile +0 -14
- data/bin/nanoc3 +0 -12
- data/doc/yardoc_templates/default/layout/html/footer.erb +0 -10
- data/lib/nanoc3.rb +0 -28
- data/lib/nanoc3/base.rb +0 -49
- data/lib/nanoc3/base/compilation/checksum_store.rb +0 -57
- data/lib/nanoc3/base/compilation/compiled_content_cache.rb +0 -62
- data/lib/nanoc3/base/compilation/compiler.rb +0 -455
- data/lib/nanoc3/base/compilation/compiler_dsl.rb +0 -214
- data/lib/nanoc3/base/compilation/dependency_tracker.rb +0 -196
- data/lib/nanoc3/base/compilation/filter.rb +0 -165
- data/lib/nanoc3/base/compilation/item_rep_proxy.rb +0 -102
- data/lib/nanoc3/base/compilation/item_rep_recorder_proxy.rb +0 -88
- data/lib/nanoc3/base/compilation/outdatedness_checker.rb +0 -223
- data/lib/nanoc3/base/compilation/outdatedness_reasons.rb +0 -46
- data/lib/nanoc3/base/compilation/rule.rb +0 -73
- data/lib/nanoc3/base/compilation/rule_context.rb +0 -84
- data/lib/nanoc3/base/compilation/rule_memory_calculator.rb +0 -40
- data/lib/nanoc3/base/compilation/rule_memory_store.rb +0 -53
- data/lib/nanoc3/base/compilation/rules_collection.rb +0 -231
- data/lib/nanoc3/base/context.rb +0 -47
- data/lib/nanoc3/base/core_ext.rb +0 -6
- data/lib/nanoc3/base/core_ext/array.rb +0 -62
- data/lib/nanoc3/base/core_ext/hash.rb +0 -63
- data/lib/nanoc3/base/core_ext/pathname.rb +0 -26
- data/lib/nanoc3/base/core_ext/string.rb +0 -46
- data/lib/nanoc3/base/directed_graph.rb +0 -275
- data/lib/nanoc3/base/errors.rb +0 -174
- data/lib/nanoc3/base/memoization.rb +0 -67
- data/lib/nanoc3/base/notification_center.rb +0 -84
- data/lib/nanoc3/base/ordered_hash.rb +0 -200
- data/lib/nanoc3/base/plugin_registry.rb +0 -165
- data/lib/nanoc3/base/result_data/item_rep.rb +0 -488
- data/lib/nanoc3/base/source_data/code_snippet.rb +0 -58
- data/lib/nanoc3/base/source_data/configuration.rb +0 -24
- data/lib/nanoc3/base/source_data/data_source.rb +0 -234
- data/lib/nanoc3/base/source_data/item.rb +0 -301
- data/lib/nanoc3/base/source_data/layout.rb +0 -130
- data/lib/nanoc3/base/source_data/site.rb +0 -361
- data/lib/nanoc3/base/store.rb +0 -135
- data/lib/nanoc3/cli.rb +0 -133
- data/lib/nanoc3/cli/command.rb +0 -139
- data/lib/nanoc3/cli/commands/autocompile.rb +0 -60
- data/lib/nanoc3/cli/commands/compile.rb +0 -280
- data/lib/nanoc3/cli/commands/create_item.rb +0 -62
- data/lib/nanoc3/cli/commands/create_layout.rb +0 -75
- data/lib/nanoc3/cli/commands/create_site.rb +0 -410
- data/lib/nanoc3/cli/commands/debug.rb +0 -119
- data/lib/nanoc3/cli/commands/info.rb +0 -98
- data/lib/nanoc3/cli/commands/nanoc.rb +0 -37
- data/lib/nanoc3/cli/commands/update.rb +0 -72
- data/lib/nanoc3/cli/commands/view.rb +0 -84
- data/lib/nanoc3/cli/commands/watch.rb +0 -125
- data/lib/nanoc3/cli/error_handler.rb +0 -193
- data/lib/nanoc3/cli/logger.rb +0 -91
- data/lib/nanoc3/data_sources.rb +0 -29
- data/lib/nanoc3/data_sources/deprecated/delicious.rb +0 -42
- data/lib/nanoc3/data_sources/deprecated/last_fm.rb +0 -87
- data/lib/nanoc3/data_sources/deprecated/twitter.rb +0 -38
- data/lib/nanoc3/data_sources/filesystem.rb +0 -299
- data/lib/nanoc3/data_sources/filesystem_unified.rb +0 -116
- data/lib/nanoc3/data_sources/filesystem_verbose.rb +0 -86
- data/lib/nanoc3/extra.rb +0 -22
- data/lib/nanoc3/extra/auto_compiler.rb +0 -103
- data/lib/nanoc3/extra/chick.rb +0 -125
- data/lib/nanoc3/extra/core_ext.rb +0 -4
- data/lib/nanoc3/extra/core_ext/enumerable.rb +0 -33
- data/lib/nanoc3/extra/core_ext/time.rb +0 -19
- data/lib/nanoc3/extra/deployers.rb +0 -11
- data/lib/nanoc3/extra/deployers/rsync.rb +0 -114
- data/lib/nanoc3/extra/file_proxy.rb +0 -40
- data/lib/nanoc3/extra/validators.rb +0 -12
- data/lib/nanoc3/extra/validators/links.rb +0 -264
- data/lib/nanoc3/extra/validators/w3c.rb +0 -95
- data/lib/nanoc3/extra/vcs.rb +0 -66
- data/lib/nanoc3/extra/vcses.rb +0 -17
- data/lib/nanoc3/extra/vcses/bazaar.rb +0 -25
- data/lib/nanoc3/extra/vcses/dummy.rb +0 -24
- data/lib/nanoc3/extra/vcses/git.rb +0 -25
- data/lib/nanoc3/extra/vcses/mercurial.rb +0 -25
- data/lib/nanoc3/extra/vcses/subversion.rb +0 -25
- data/lib/nanoc3/filters.rb +0 -53
- data/lib/nanoc3/filters/asciidoc.rb +0 -38
- data/lib/nanoc3/filters/bluecloth.rb +0 -19
- data/lib/nanoc3/filters/coderay.rb +0 -21
- data/lib/nanoc3/filters/colorize_syntax.rb +0 -261
- data/lib/nanoc3/filters/erb.rb +0 -35
- data/lib/nanoc3/filters/erubis.rb +0 -27
- data/lib/nanoc3/filters/haml.rb +0 -27
- data/lib/nanoc3/filters/kramdown.rb +0 -20
- data/lib/nanoc3/filters/less.rb +0 -53
- data/lib/nanoc3/filters/markaby.rb +0 -20
- data/lib/nanoc3/filters/maruku.rb +0 -20
- data/lib/nanoc3/filters/mustache.rb +0 -24
- data/lib/nanoc3/filters/rainpress.rb +0 -19
- data/lib/nanoc3/filters/rdiscount.rb +0 -22
- data/lib/nanoc3/filters/rdoc.rb +0 -33
- data/lib/nanoc3/filters/redcarpet.rb +0 -27
- data/lib/nanoc3/filters/redcloth.rb +0 -47
- data/lib/nanoc3/filters/relativize_paths.rb +0 -45
- data/lib/nanoc3/filters/rubypants.rb +0 -20
- data/lib/nanoc3/filters/sass.rb +0 -66
- data/lib/nanoc3/filters/slim.rb +0 -25
- data/lib/nanoc3/filters/typogruby.rb +0 -23
- data/lib/nanoc3/filters/uglify_js.rb +0 -42
- data/lib/nanoc3/helpers.rb +0 -16
- data/lib/nanoc3/helpers/blogging.rb +0 -319
- data/lib/nanoc3/helpers/breadcrumbs.rb +0 -40
- data/lib/nanoc3/helpers/capturing.rb +0 -138
- data/lib/nanoc3/helpers/filtering.rb +0 -50
- data/lib/nanoc3/helpers/html_escape.rb +0 -55
- data/lib/nanoc3/helpers/link_to.rb +0 -151
- data/lib/nanoc3/helpers/rendering.rb +0 -140
- data/lib/nanoc3/helpers/tagging.rb +0 -71
- data/lib/nanoc3/helpers/text.rb +0 -44
- data/lib/nanoc3/helpers/xml_sitemap.rb +0 -76
- data/lib/nanoc3/tasks.rb +0 -10
- data/lib/nanoc3/tasks/clean.rake +0 -16
- data/lib/nanoc3/tasks/clean.rb +0 -29
- data/lib/nanoc3/tasks/deploy/rsync.rake +0 -14
- data/lib/nanoc3/tasks/validate.rake +0 -92
- data/nanoc3.gemspec +0 -49
- data/tasks/doc.rake +0 -16
- data/tasks/test.rake +0 -44
- data/test/base/core_ext/array_spec.rb +0 -73
- data/test/base/core_ext/hash_spec.rb +0 -98
- data/test/base/core_ext/pathname_spec.rb +0 -27
- data/test/base/core_ext/string_spec.rb +0 -37
- data/test/base/test_checksum_store.rb +0 -35
- data/test/base/test_code_snippet.rb +0 -31
- data/test/base/test_compiler.rb +0 -316
- data/test/base/test_compiler_dsl.rb +0 -161
- data/test/base/test_context.rb +0 -31
- data/test/base/test_data_source.rb +0 -46
- data/test/base/test_dependency_tracker.rb +0 -262
- data/test/base/test_directed_graph.rb +0 -283
- data/test/base/test_filter.rb +0 -83
- data/test/base/test_item.rb +0 -179
- data/test/base/test_item_rep.rb +0 -553
- data/test/base/test_layout.rb +0 -59
- data/test/base/test_memoization.rb +0 -90
- data/test/base/test_notification_center.rb +0 -34
- data/test/base/test_outdatedness_checker.rb +0 -394
- data/test/base/test_plugin.rb +0 -30
- data/test/base/test_rule.rb +0 -19
- data/test/base/test_rule_context.rb +0 -65
- data/test/base/test_site.rb +0 -190
- data/test/cli/commands/test_compile.rb +0 -33
- data/test/cli/commands/test_create_item.rb +0 -14
- data/test/cli/commands/test_create_layout.rb +0 -28
- data/test/cli/commands/test_create_site.rb +0 -24
- data/test/cli/commands/test_help.rb +0 -12
- data/test/cli/commands/test_info.rb +0 -11
- data/test/cli/commands/test_update.rb +0 -10
- data/test/cli/test_cli.rb +0 -102
- data/test/cli/test_error_handler.rb +0 -29
- data/test/cli/test_logger.rb +0 -10
- data/test/data_sources/test_filesystem.rb +0 -433
- data/test/data_sources/test_filesystem_unified.rb +0 -536
- data/test/data_sources/test_filesystem_verbose.rb +0 -357
- data/test/extra/core_ext/test_enumerable.rb +0 -30
- data/test/extra/core_ext/test_time.rb +0 -15
- data/test/extra/deployers/test_rsync.rb +0 -232
- data/test/extra/test_auto_compiler.rb +0 -417
- data/test/extra/test_file_proxy.rb +0 -19
- data/test/extra/test_vcs.rb +0 -22
- data/test/extra/validators/test_links.rb +0 -51
- data/test/extra/validators/test_w3c.rb +0 -47
- data/test/filters/test_asciidoc.rb +0 -22
- data/test/filters/test_bluecloth.rb +0 -18
- data/test/filters/test_coderay.rb +0 -44
- data/test/filters/test_colorize_syntax.rb +0 -283
- data/test/filters/test_erb.rb +0 -99
- data/test/filters/test_erubis.rb +0 -70
- data/test/filters/test_haml.rb +0 -96
- data/test/filters/test_kramdown.rb +0 -18
- data/test/filters/test_less.rb +0 -113
- data/test/filters/test_markaby.rb +0 -24
- data/test/filters/test_maruku.rb +0 -18
- data/test/filters/test_mustache.rb +0 -25
- data/test/filters/test_rainpress.rb +0 -29
- data/test/filters/test_rdiscount.rb +0 -31
- data/test/filters/test_rdoc.rb +0 -18
- data/test/filters/test_redcarpet.rb +0 -63
- data/test/filters/test_redcloth.rb +0 -33
- data/test/filters/test_relativize_paths.rb +0 -332
- data/test/filters/test_rubypants.rb +0 -18
- data/test/filters/test_sass.rb +0 -229
- data/test/filters/test_slim.rb +0 -35
- data/test/filters/test_typogruby.rb +0 -21
- data/test/filters/test_uglify_js.rb +0 -30
- data/test/gem_loader.rb +0 -11
- data/test/helper.rb +0 -179
- data/test/helpers/test_blogging.rb +0 -754
- data/test/helpers/test_breadcrumbs.rb +0 -81
- data/test/helpers/test_capturing.rb +0 -41
- data/test/helpers/test_filtering.rb +0 -106
- data/test/helpers/test_html_escape.rb +0 -32
- data/test/helpers/test_link_to.rb +0 -249
- data/test/helpers/test_rendering.rb +0 -89
- data/test/helpers/test_tagging.rb +0 -87
- data/test/helpers/test_text.rb +0 -24
- data/test/helpers/test_xml_sitemap.rb +0 -103
- data/test/tasks/test_clean.rb +0 -67
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
|
|
3
|
-
describe 'Array#symbolize_keys' do
|
|
4
|
-
|
|
5
|
-
it 'should convert keys to symbols' do
|
|
6
|
-
array_old = [ :abc, 'xyz', { 'foo' => 'bar', :baz => :qux } ]
|
|
7
|
-
array_new = [ :abc, 'xyz', { :foo => 'bar', :baz => :qux } ]
|
|
8
|
-
array_old.symbolize_keys.must_equal array_new
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
describe 'Array#stringify_keys' do
|
|
14
|
-
|
|
15
|
-
it 'should convert keys to strings' do
|
|
16
|
-
array_old = [ :abc, 'xyz', { :foo => 'bar', 'baz' => :qux } ]
|
|
17
|
-
array_new = [ :abc, 'xyz', { 'foo' => 'bar', 'baz' => :qux } ]
|
|
18
|
-
array_old.stringify_keys.must_equal array_new
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
describe 'Array#freeze_recursively' do
|
|
24
|
-
|
|
25
|
-
it 'should prevent first-level elements from being modified' do
|
|
26
|
-
array = [ :a, [ :b, :c ], :d ]
|
|
27
|
-
array.freeze_recursively
|
|
28
|
-
|
|
29
|
-
raised = false
|
|
30
|
-
begin
|
|
31
|
-
array[0] = 123
|
|
32
|
-
rescue => e
|
|
33
|
-
raised = true
|
|
34
|
-
assert_match /^can't modify frozen /, e.message
|
|
35
|
-
end
|
|
36
|
-
assert raised
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
it 'should prevent second-level elements from being modified' do
|
|
40
|
-
array = [ :a, [ :b, :c ], :d ]
|
|
41
|
-
array.freeze_recursively
|
|
42
|
-
|
|
43
|
-
raised = false
|
|
44
|
-
begin
|
|
45
|
-
array[1][0] = 123
|
|
46
|
-
rescue => e
|
|
47
|
-
raised = true
|
|
48
|
-
assert_match /^can't modify frozen /, e.message
|
|
49
|
-
end
|
|
50
|
-
assert raised
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
it 'should not freeze infinitely' do
|
|
54
|
-
a = []
|
|
55
|
-
a << a
|
|
56
|
-
|
|
57
|
-
a.freeze_recursively
|
|
58
|
-
|
|
59
|
-
assert a.frozen?
|
|
60
|
-
assert a[0].frozen?
|
|
61
|
-
assert_equal a, a[0]
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
describe 'Array#checksum' do
|
|
67
|
-
|
|
68
|
-
it 'should work' do
|
|
69
|
-
expectation = '78468f950645150238a26f5b8f2dde39a75a7028'
|
|
70
|
-
[ [ :foo, 123 ]].checksum.must_equal expectation
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
end
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
|
|
3
|
-
describe 'Hash#symbolize_keys' do
|
|
4
|
-
|
|
5
|
-
it 'should convert keys to symbols' do
|
|
6
|
-
hash_old = { 'foo' => 'bar' }
|
|
7
|
-
hash_new = { :foo => 'bar' }
|
|
8
|
-
hash_old.symbolize_keys.must_equal hash_new
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
describe 'Hash#stringify_keys' do
|
|
14
|
-
|
|
15
|
-
it 'should leave strings as strings' do
|
|
16
|
-
hash_old = { 'foo' => 'bar' }
|
|
17
|
-
hash_new = { 'foo' => 'bar' }
|
|
18
|
-
hash_old.stringify_keys.must_equal hash_new
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
it 'should convert symbols to strings' do
|
|
22
|
-
hash_old = { :foo => 'bar' }
|
|
23
|
-
hash_new = { 'foo' => 'bar' }
|
|
24
|
-
hash_old.stringify_keys.must_equal hash_new
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
it 'should convert integers to strings' do
|
|
28
|
-
hash_old = { 123 => 'bar' }
|
|
29
|
-
hash_new = { '123' => 'bar' }
|
|
30
|
-
hash_old.stringify_keys.must_equal hash_new
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
it 'should convert nil to an empty string' do
|
|
34
|
-
hash_old = { nil => 'bar' }
|
|
35
|
-
hash_new = { '' => 'bar' }
|
|
36
|
-
hash_old.stringify_keys.must_equal hash_new
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
describe 'Hash#freeze_recursively' do
|
|
42
|
-
|
|
43
|
-
it 'should prevent first-level elements from being modified' do
|
|
44
|
-
hash = { :a => { :b => :c } }
|
|
45
|
-
hash.freeze_recursively
|
|
46
|
-
|
|
47
|
-
raised = false
|
|
48
|
-
begin
|
|
49
|
-
hash[:a] = 123
|
|
50
|
-
rescue => e
|
|
51
|
-
raised = true
|
|
52
|
-
assert_match /^can't modify frozen /, e.message
|
|
53
|
-
end
|
|
54
|
-
assert raised
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
it 'should prevent second-level elements from being modified' do
|
|
58
|
-
hash = { :a => { :b => :c } }
|
|
59
|
-
hash.freeze_recursively
|
|
60
|
-
|
|
61
|
-
raised = false
|
|
62
|
-
begin
|
|
63
|
-
hash[:a][:b] = 123
|
|
64
|
-
rescue => e
|
|
65
|
-
raised = true
|
|
66
|
-
assert_match /^can't modify frozen /, e.message
|
|
67
|
-
end
|
|
68
|
-
assert raised
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
it 'should not freeze infinitely' do
|
|
72
|
-
a = {}
|
|
73
|
-
a[:x] = a
|
|
74
|
-
|
|
75
|
-
a.freeze_recursively
|
|
76
|
-
|
|
77
|
-
assert a.frozen?
|
|
78
|
-
assert a[:x].frozen?
|
|
79
|
-
assert_equal a, a[:x]
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
describe 'Hash#checksum' do
|
|
85
|
-
|
|
86
|
-
it 'should work' do
|
|
87
|
-
expectation = '78468f950645150238a26f5b8f2dde39a75a7028'
|
|
88
|
-
{ :foo => 123 }.checksum.must_equal expectation
|
|
89
|
-
[ [ :foo, 123 ]].checksum.must_equal expectation
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
it 'should sort keys' do
|
|
93
|
-
a = { :a => 1, :c => 2, :b => 3 }.checksum
|
|
94
|
-
b = { :a => 1, :b => 3, :c => 2 }.checksum
|
|
95
|
-
a.must_equal b
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
end
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
|
|
3
|
-
describe 'Pathname#checksum' do
|
|
4
|
-
|
|
5
|
-
it 'should work on empty files' do
|
|
6
|
-
begin
|
|
7
|
-
FileUtils.mkdir_p('tmp')
|
|
8
|
-
File.open('tmp/myfile', 'w') { |io| io.write('') }
|
|
9
|
-
pathname = Pathname.new('tmp/myfile')
|
|
10
|
-
pathname.checksum.must_equal 'da39a3ee5e6b4b0d3255bfef95601890afd80709'
|
|
11
|
-
ensure
|
|
12
|
-
FileUtils.rm_rf('tmp')
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
it 'should work on all files' do
|
|
17
|
-
begin
|
|
18
|
-
FileUtils.mkdir_p('tmp')
|
|
19
|
-
File.open('tmp/myfile', 'w') { |io| io.write('abc') }
|
|
20
|
-
pathname = Pathname.new('tmp/myfile')
|
|
21
|
-
pathname.checksum.must_equal 'a9993e364706816aba3e25717850c26c9cd0d89d'
|
|
22
|
-
ensure
|
|
23
|
-
FileUtils.rm_rf('tmp')
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
end
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
|
|
3
|
-
describe 'String#cleaned_identifier' do
|
|
4
|
-
|
|
5
|
-
it 'should not convert already clean paths' do
|
|
6
|
-
'/foo/bar/'.cleaned_identifier.must_equal '/foo/bar/'
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
it 'should prepend slash if necessary' do
|
|
10
|
-
'foo/bar/'.cleaned_identifier.must_equal '/foo/bar/'
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
it 'should append slash if necessary' do
|
|
14
|
-
'/foo/bar'.cleaned_identifier.must_equal '/foo/bar/'
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
it 'should remove double slashes at start' do
|
|
18
|
-
'//foo/bar/'.cleaned_identifier.must_equal '/foo/bar/'
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
it 'should remove double slashes at end' do
|
|
22
|
-
'/foo/bar//'.cleaned_identifier.must_equal '/foo/bar/'
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
describe 'String#checksum' do
|
|
28
|
-
|
|
29
|
-
it 'should work on empty strings' do
|
|
30
|
-
''.checksum.must_equal 'da39a3ee5e6b4b0d3255bfef95601890afd80709'
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
it 'should work on all strings' do
|
|
34
|
-
'abc'.checksum.must_equal 'a9993e364706816aba3e25717850c26c9cd0d89d'
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
end
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
|
|
3
|
-
class Nanoc3::ChecksumStoreTest < MiniTest::Unit::TestCase
|
|
4
|
-
|
|
5
|
-
include Nanoc3::TestHelpers
|
|
6
|
-
|
|
7
|
-
def test_get_with_existing_object
|
|
8
|
-
require 'pstore'
|
|
9
|
-
|
|
10
|
-
# Create store
|
|
11
|
-
FileUtils.mkdir_p('tmp')
|
|
12
|
-
pstore = PStore.new('tmp/checksums')
|
|
13
|
-
pstore.transaction do
|
|
14
|
-
pstore[:data] = { [ :item, '/moo/' ] => 'zomg' }
|
|
15
|
-
pstore[:version] = 1
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
# Check
|
|
19
|
-
store = Nanoc3::ChecksumStore.new
|
|
20
|
-
store.load
|
|
21
|
-
obj = Nanoc3::Item.new('Moo?', {}, '/moo/')
|
|
22
|
-
assert_equal 'zomg', store[obj]
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def test_get_with_nonexistant_object
|
|
26
|
-
store = Nanoc3::ChecksumStore.new
|
|
27
|
-
store.load
|
|
28
|
-
|
|
29
|
-
# Check
|
|
30
|
-
obj = Nanoc3::Item.new('Moo?', {}, '/animals/cow/')
|
|
31
|
-
new_checksum = 'Moo?'.checksum + '-' + {}.checksum
|
|
32
|
-
assert_equal nil, store[obj]
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
end
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
|
|
3
|
-
class Nanoc3::CodeSnippetTest < MiniTest::Unit::TestCase
|
|
4
|
-
|
|
5
|
-
include Nanoc3::TestHelpers
|
|
6
|
-
|
|
7
|
-
def test_load
|
|
8
|
-
# Initialize
|
|
9
|
-
$complete_insane_parrot = 'meow'
|
|
10
|
-
|
|
11
|
-
# Create code and load it
|
|
12
|
-
code_snippet = Nanoc3::CodeSnippet.new("$complete_insane_parrot = 'woof'", 'parrot.rb')
|
|
13
|
-
code_snippet.load
|
|
14
|
-
|
|
15
|
-
# Ensure code is loaded
|
|
16
|
-
assert_equal('woof', $complete_insane_parrot)
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def test_load_with_toplevel_binding
|
|
20
|
-
# Initialize
|
|
21
|
-
@foo = 'meow'
|
|
22
|
-
|
|
23
|
-
# Create code and load it
|
|
24
|
-
code_snippet = Nanoc3::CodeSnippet.new("@foo = 'woof'", 'dog.rb')
|
|
25
|
-
code_snippet.load
|
|
26
|
-
|
|
27
|
-
# Ensure binding is correct
|
|
28
|
-
assert_equal('meow', @foo)
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
end
|
data/test/base/test_compiler.rb
DELETED
|
@@ -1,316 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
|
|
3
|
-
class Nanoc3::CompilerTest < MiniTest::Unit::TestCase
|
|
4
|
-
|
|
5
|
-
include Nanoc3::TestHelpers
|
|
6
|
-
|
|
7
|
-
def test_compilation_rule_for
|
|
8
|
-
# Mock rules
|
|
9
|
-
rules = [ mock, mock, mock ]
|
|
10
|
-
rules[0].expects(:applicable_to?).returns(false)
|
|
11
|
-
rules[1].expects(:applicable_to?).returns(true)
|
|
12
|
-
rules[1].expects(:rep_name).returns('wrong')
|
|
13
|
-
rules[2].expects(:applicable_to?).returns(true)
|
|
14
|
-
rules[2].expects(:rep_name).returns('right')
|
|
15
|
-
|
|
16
|
-
# Create compiler
|
|
17
|
-
compiler = Nanoc3::Compiler.new(nil)
|
|
18
|
-
compiler.rules_collection.instance_eval { @item_compilation_rules = rules }
|
|
19
|
-
|
|
20
|
-
# Mock rep
|
|
21
|
-
rep = mock
|
|
22
|
-
rep.stubs(:name).returns('right')
|
|
23
|
-
item = mock
|
|
24
|
-
rep.stubs(:item).returns(item)
|
|
25
|
-
|
|
26
|
-
# Test
|
|
27
|
-
assert_equal rules[2], compiler.rules_collection.compilation_rule_for(rep)
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def test_routing_rule_for
|
|
31
|
-
# Mock rules
|
|
32
|
-
rules = [ mock, mock, mock ]
|
|
33
|
-
rules[0].expects(:applicable_to?).returns(false)
|
|
34
|
-
rules[1].expects(:applicable_to?).returns(true)
|
|
35
|
-
rules[1].expects(:rep_name).returns('wrong')
|
|
36
|
-
rules[2].expects(:applicable_to?).returns(true)
|
|
37
|
-
rules[2].expects(:rep_name).returns('right')
|
|
38
|
-
|
|
39
|
-
# Create compiler
|
|
40
|
-
compiler = Nanoc3::Compiler.new(nil)
|
|
41
|
-
compiler.rules_collection.instance_eval { @item_routing_rules = rules }
|
|
42
|
-
|
|
43
|
-
# Mock rep
|
|
44
|
-
rep = mock
|
|
45
|
-
rep.stubs(:name).returns('right')
|
|
46
|
-
item = mock
|
|
47
|
-
rep.stubs(:item).returns(item)
|
|
48
|
-
|
|
49
|
-
# Test
|
|
50
|
-
assert_equal rules[2], compiler.rules_collection.routing_rule_for(rep)
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
def test_filter_for_layout_with_existant_layout
|
|
54
|
-
# Mock site
|
|
55
|
-
site = mock
|
|
56
|
-
|
|
57
|
-
# Create compiler
|
|
58
|
-
compiler = Nanoc3::Compiler.new(site)
|
|
59
|
-
compiler.rules_collection.layout_filter_mapping[/.*/] = [ :erb, { :foo => 'bar' } ]
|
|
60
|
-
|
|
61
|
-
# Mock layout
|
|
62
|
-
layout = MiniTest::Mock.new
|
|
63
|
-
layout.expect(:identifier, '/some_layout/')
|
|
64
|
-
|
|
65
|
-
# Check
|
|
66
|
-
assert_equal([ :erb, { :foo => 'bar' } ], compiler.rules_collection.filter_for_layout(layout))
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
def test_filter_for_layout_with_existant_layout_and_unknown_filter
|
|
70
|
-
# Mock site
|
|
71
|
-
site = mock
|
|
72
|
-
|
|
73
|
-
# Create compiler
|
|
74
|
-
compiler = Nanoc3::Compiler.new(site)
|
|
75
|
-
compiler.rules_collection.layout_filter_mapping[/.*/] = [ :some_unknown_filter, { :foo => 'bar' } ]
|
|
76
|
-
|
|
77
|
-
# Mock layout
|
|
78
|
-
layout = MiniTest::Mock.new
|
|
79
|
-
layout.expect(:identifier, '/some_layout/')
|
|
80
|
-
|
|
81
|
-
# Check
|
|
82
|
-
assert_equal([ :some_unknown_filter, { :foo => 'bar' } ], compiler.rules_collection.filter_for_layout(layout))
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
def test_filter_for_layout_with_nonexistant_layout
|
|
86
|
-
# Mock site
|
|
87
|
-
site = mock
|
|
88
|
-
|
|
89
|
-
# Create compiler
|
|
90
|
-
compiler = Nanoc3::Compiler.new(site)
|
|
91
|
-
compiler.rules_collection.layout_filter_mapping[%r{^/foo/$}] = [ :erb, { :foo => 'bar' } ]
|
|
92
|
-
|
|
93
|
-
# Mock layout
|
|
94
|
-
layout = MiniTest::Mock.new
|
|
95
|
-
layout.expect(:identifier, '/bar/')
|
|
96
|
-
|
|
97
|
-
# Check
|
|
98
|
-
assert_equal(nil, compiler.rules_collection.filter_for_layout(layout))
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
def test_filter_for_layout_with_many_layouts
|
|
102
|
-
# Mock site
|
|
103
|
-
site = mock
|
|
104
|
-
|
|
105
|
-
# Create compiler
|
|
106
|
-
compiler = Nanoc3::Compiler.new(site)
|
|
107
|
-
compiler.rules_collection.layout_filter_mapping[%r{^/a/b/c/.*/$}] = [ :erb, { :char => 'd' } ]
|
|
108
|
-
compiler.rules_collection.layout_filter_mapping[%r{^/a/.*/$}] = [ :erb, { :char => 'b' } ]
|
|
109
|
-
compiler.rules_collection.layout_filter_mapping[%r{^/a/b/.*/$}] = [ :erb, { :char => 'c' } ] # never used!
|
|
110
|
-
compiler.rules_collection.layout_filter_mapping[%r{^/.*/$}] = [ :erb, { :char => 'a' } ]
|
|
111
|
-
|
|
112
|
-
# Mock layout
|
|
113
|
-
layouts = [ mock, mock, mock, mock ]
|
|
114
|
-
layouts[0].stubs(:identifier).returns('/a/b/c/d/')
|
|
115
|
-
layouts[1].stubs(:identifier).returns('/a/b/c/')
|
|
116
|
-
layouts[2].stubs(:identifier).returns('/a/b/')
|
|
117
|
-
layouts[3].stubs(:identifier).returns('/a/')
|
|
118
|
-
|
|
119
|
-
# Get expectations
|
|
120
|
-
expectations = {
|
|
121
|
-
0 => 'd',
|
|
122
|
-
1 => 'b', # never used! not c, because b takes priority
|
|
123
|
-
2 => 'b',
|
|
124
|
-
3 => 'a'
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
# Check
|
|
128
|
-
expectations.each_pair do |num, char|
|
|
129
|
-
filter_and_args = compiler.rules_collection.filter_for_layout(layouts[num])
|
|
130
|
-
refute_nil(filter_and_args)
|
|
131
|
-
assert_equal(char, filter_and_args[1][:char])
|
|
132
|
-
end
|
|
133
|
-
end
|
|
134
|
-
|
|
135
|
-
def test_compile_rep_should_write_proper_snapshots
|
|
136
|
-
# Mock rep
|
|
137
|
-
item = Nanoc3::Item.new('<%= 1 %> <%%= 2 %> <%%%= 3 %>', {}, '/moo/')
|
|
138
|
-
rep = Nanoc3::ItemRep.new(item, :blah)
|
|
139
|
-
|
|
140
|
-
# Set snapshot filenames
|
|
141
|
-
rep.raw_paths = {
|
|
142
|
-
:raw => 'raw.txt',
|
|
143
|
-
:pre => 'pre.txt',
|
|
144
|
-
:post => 'post.txt',
|
|
145
|
-
:last => 'last.txt'
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
# Create rule
|
|
149
|
-
rule_block = proc do
|
|
150
|
-
filter :erb
|
|
151
|
-
filter :erb
|
|
152
|
-
layout '/blah/'
|
|
153
|
-
filter :erb
|
|
154
|
-
end
|
|
155
|
-
rule = Nanoc3::Rule.new(/blah/, :meh, rule_block)
|
|
156
|
-
|
|
157
|
-
# Create layout
|
|
158
|
-
layout = Nanoc3::Layout.new('head <%= yield %> foot', {}, '/blah/')
|
|
159
|
-
|
|
160
|
-
# Create site
|
|
161
|
-
site = mock
|
|
162
|
-
site.stubs(:config).returns({})
|
|
163
|
-
site.stubs(:items).returns([])
|
|
164
|
-
site.stubs(:layouts).returns([ layout ])
|
|
165
|
-
|
|
166
|
-
# Create compiler
|
|
167
|
-
compiler = Nanoc3::Compiler.new(site)
|
|
168
|
-
compiler.rules_collection.expects(:compilation_rule_for).times(2).with(rep).returns(rule)
|
|
169
|
-
compiler.rules_collection.layout_filter_mapping[%r{^/blah/$}] = [ :erb, {} ]
|
|
170
|
-
site.stubs(:compiler).returns(compiler)
|
|
171
|
-
|
|
172
|
-
# Compile
|
|
173
|
-
compiler.send(:compile_rep, rep)
|
|
174
|
-
|
|
175
|
-
# Test
|
|
176
|
-
assert File.file?('raw.txt')
|
|
177
|
-
assert File.file?('pre.txt')
|
|
178
|
-
assert File.file?('post.txt')
|
|
179
|
-
assert File.file?('last.txt')
|
|
180
|
-
assert_equal '<%= 1 %> <%%= 2 %> <%%%= 3 %>', File.read('raw.txt')
|
|
181
|
-
assert_equal '1 2 <%= 3 %>', File.read('pre.txt')
|
|
182
|
-
assert_equal 'head 1 2 3 foot', File.read('post.txt')
|
|
183
|
-
assert_equal 'head 1 2 3 foot', File.read('last.txt')
|
|
184
|
-
end
|
|
185
|
-
|
|
186
|
-
def test_compile_with_no_reps
|
|
187
|
-
with_site do |site|
|
|
188
|
-
site.compile
|
|
189
|
-
|
|
190
|
-
assert Dir['output/*'].empty?
|
|
191
|
-
end
|
|
192
|
-
end
|
|
193
|
-
|
|
194
|
-
def test_compile_with_one_rep
|
|
195
|
-
with_site do |site|
|
|
196
|
-
File.open('content/index.html', 'w') { |io| io.write('o hello') }
|
|
197
|
-
|
|
198
|
-
site.compile
|
|
199
|
-
|
|
200
|
-
assert Dir['output/*'].size == 1
|
|
201
|
-
assert File.file?('output/index.html')
|
|
202
|
-
assert File.read('output/index.html') == 'o hello'
|
|
203
|
-
end
|
|
204
|
-
end
|
|
205
|
-
|
|
206
|
-
def test_compile_with_two_independent_reps
|
|
207
|
-
with_site do |site|
|
|
208
|
-
File.open('content/foo.html', 'w') { |io| io.write('o hai') }
|
|
209
|
-
File.open('content/bar.html', 'w') { |io| io.write('o bai') }
|
|
210
|
-
|
|
211
|
-
site.compile
|
|
212
|
-
|
|
213
|
-
assert Dir['output/*'].size == 2
|
|
214
|
-
assert File.file?('output/foo/index.html')
|
|
215
|
-
assert File.file?('output/bar/index.html')
|
|
216
|
-
assert File.read('output/foo/index.html') == 'o hai'
|
|
217
|
-
assert File.read('output/bar/index.html') == 'o bai'
|
|
218
|
-
end
|
|
219
|
-
end
|
|
220
|
-
|
|
221
|
-
def test_compile_with_two_dependent_reps
|
|
222
|
-
with_site(:compilation_rule_content => 'filter :erb') do |site|
|
|
223
|
-
File.open('content/foo.html', 'w') do |io|
|
|
224
|
-
io.write('<%= @items.find { |i| i.identifier == "/bar/" }.compiled_content %>!!!')
|
|
225
|
-
end
|
|
226
|
-
File.open('content/bar.html', 'w') do |io|
|
|
227
|
-
io.write('manatee')
|
|
228
|
-
end
|
|
229
|
-
|
|
230
|
-
site.compile
|
|
231
|
-
|
|
232
|
-
assert Dir['output/*'].size == 2
|
|
233
|
-
assert File.file?('output/foo/index.html')
|
|
234
|
-
assert File.file?('output/bar/index.html')
|
|
235
|
-
assert File.read('output/foo/index.html') == 'manatee!!!'
|
|
236
|
-
assert File.read('output/bar/index.html') == 'manatee'
|
|
237
|
-
end
|
|
238
|
-
end
|
|
239
|
-
|
|
240
|
-
def test_compile_with_two_mutually_dependent_reps
|
|
241
|
-
with_site(:compilation_rule_content => 'filter :erb') do |site|
|
|
242
|
-
File.open('content/foo.html', 'w') do |io|
|
|
243
|
-
io.write('<%= @items.find { |i| i.identifier == "/bar/" }.compiled_content %>')
|
|
244
|
-
end
|
|
245
|
-
File.open('content/bar.html', 'w') do |io|
|
|
246
|
-
io.write('<%= @items.find { |i| i.identifier == "/foo/" }.compiled_content %>')
|
|
247
|
-
end
|
|
248
|
-
|
|
249
|
-
assert_raises Nanoc3::Errors::RecursiveCompilation do
|
|
250
|
-
site.compile
|
|
251
|
-
end
|
|
252
|
-
end
|
|
253
|
-
end
|
|
254
|
-
|
|
255
|
-
def test_disallow_routes_not_starting_with_slash
|
|
256
|
-
# Create site
|
|
257
|
-
Nanoc3::CLI.run %w( create_site bar)
|
|
258
|
-
|
|
259
|
-
FileUtils.cd('bar') do
|
|
260
|
-
# Create routes
|
|
261
|
-
File.open('Rules', 'w') do |io|
|
|
262
|
-
io.write "compile '*' do\n"
|
|
263
|
-
io.write " layout 'default'\n"
|
|
264
|
-
io.write "end\n"
|
|
265
|
-
io.write "\n"
|
|
266
|
-
io.write "route '*' do\n"
|
|
267
|
-
io.write " 'index.html'\n"
|
|
268
|
-
io.write "end\n"
|
|
269
|
-
io.write "\n"
|
|
270
|
-
io.write "layout '*', :erb\n"
|
|
271
|
-
end
|
|
272
|
-
|
|
273
|
-
# Create site
|
|
274
|
-
site = Nanoc3::Site.new('.')
|
|
275
|
-
error = assert_raises(RuntimeError) do
|
|
276
|
-
site.compile
|
|
277
|
-
end
|
|
278
|
-
assert_match /^The path returned for the.*does not start with a slash. Please ensure that all routing rules return a path that starts with a slash./, error.message
|
|
279
|
-
end
|
|
280
|
-
end
|
|
281
|
-
|
|
282
|
-
def test_load_should_be_idempotent
|
|
283
|
-
# Create site
|
|
284
|
-
Nanoc3::CLI.run %w( create_site bar)
|
|
285
|
-
|
|
286
|
-
FileUtils.cd('bar') do
|
|
287
|
-
site = Nanoc3::Site.new('.')
|
|
288
|
-
|
|
289
|
-
compiler = Nanoc3::Compiler.new(site)
|
|
290
|
-
def compiler.route_reps
|
|
291
|
-
raise 'oh my gosh it is borken'
|
|
292
|
-
end
|
|
293
|
-
|
|
294
|
-
assert site.instance_eval { !@loaded }
|
|
295
|
-
assert_raises(RuntimeError) { compiler.load }
|
|
296
|
-
assert site.instance_eval { !@loaded }
|
|
297
|
-
assert_raises(RuntimeError) { compiler.load }
|
|
298
|
-
end
|
|
299
|
-
end
|
|
300
|
-
|
|
301
|
-
def test_compile_should_recompile_all_reps
|
|
302
|
-
Nanoc3::CLI.run %w( create_site bar )
|
|
303
|
-
|
|
304
|
-
FileUtils.cd('bar') do
|
|
305
|
-
Nanoc3::CLI.run %w( compile )
|
|
306
|
-
|
|
307
|
-
site = Nanoc3::Site.new('.')
|
|
308
|
-
site.compile
|
|
309
|
-
|
|
310
|
-
# At this point, even the already compiled items in the previous pass
|
|
311
|
-
# should have their compiled content assigned, so this should work:
|
|
312
|
-
site.items[0].reps[0].compiled_content
|
|
313
|
-
end
|
|
314
|
-
end
|
|
315
|
-
|
|
316
|
-
end
|