zenweb 2.18.1 → 3.0.0.b1

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.
Files changed (110) hide show
  1. data.tar.gz.sig +0 -0
  2. data/.autotest +18 -0
  3. data/.gemtest +0 -0
  4. data/History.txt +6 -0
  5. data/Manifest.txt +52 -50
  6. data/README.txt +27 -22
  7. data/Rakefile +8 -9
  8. data/example-site/.isolate.rb +8 -0
  9. data/example-site/Rakefile +32 -0
  10. data/example-site/_config.yml +3 -0
  11. data/example-site/_includes/analytics.html.erb +11 -0
  12. data/example-site/_includes/header.html.erb +3 -0
  13. data/example-site/_includes/page_list_item.html +5 -0
  14. data/example-site/_includes/post_list_item.html +5 -0
  15. data/example-site/_layouts/post.erb +13 -0
  16. data/example-site/_layouts/project.erb +39 -0
  17. data/example-site/_layouts/site.erb +62 -0
  18. data/example-site/about/index.html.md +8 -0
  19. data/example-site/atom.xml.erb +43 -0
  20. data/example-site/blog/2012-01-02-page1.html.md +5 -0
  21. data/example-site/blog/2012-01-03-page2.html.md +5 -0
  22. data/example-site/blog/2012-01-04-page3.html.md +5 -0
  23. data/example-site/blog/_config.yml +1 -0
  24. data/example-site/blog/index.html.erb +19 -0
  25. data/example-site/config.ru +33 -0
  26. data/example-site/css/colors.css.less +71 -0
  27. data/example-site/css/styles.css +223 -0
  28. data/example-site/css/syntax.css +171 -0
  29. data/example-site/img/bg.png +0 -0
  30. data/example-site/index.html.erb +27 -0
  31. data/example-site/js/jquery.js +154 -0
  32. data/example-site/js/site.js +37 -0
  33. data/example-site/pages/index.html.erb +17 -0
  34. data/example-site/pages/nonblogpage.html.md +8 -0
  35. data/example-site/projects/index.html.erb +18 -0
  36. data/example-site/projects/zenweb.html.erb +9 -0
  37. data/example-site/sitemap.xml.erb +24 -0
  38. data/lib/zenweb.rb +12 -0
  39. data/lib/zenweb/config.rb +126 -0
  40. data/lib/zenweb/extensions.rb +51 -0
  41. data/lib/zenweb/page.rb +409 -0
  42. data/lib/zenweb/plugins/disqus.rb +18 -0
  43. data/lib/zenweb/plugins/erb.rb +43 -0
  44. data/lib/zenweb/plugins/google.rb +20 -0
  45. data/lib/zenweb/plugins/less.rb +10 -0
  46. data/lib/zenweb/plugins/markdown.rb +121 -0
  47. data/lib/zenweb/site.rb +237 -0
  48. data/lib/zenweb/tasks.rake +165 -0
  49. data/test/helper.rb +53 -0
  50. data/test/test_zenweb_config.rb +90 -0
  51. data/test/test_zenweb_extensions.rb +33 -0
  52. data/test/test_zenweb_page.rb +381 -0
  53. data/test/test_zenweb_plugins_disqus.rb +41 -0
  54. data/test/test_zenweb_plugins_erb.rb +60 -0
  55. data/test/test_zenweb_plugins_google.rb +38 -0
  56. data/test/test_zenweb_plugins_less.rb +33 -0
  57. data/test/test_zenweb_plugins_markdown.rb +227 -0
  58. data/test/test_zenweb_site.rb +294 -0
  59. metadata +230 -86
  60. metadata.gz.sig +0 -0
  61. data/bin/zenweb +0 -27
  62. data/bin/zenwebpage +0 -66
  63. data/bin/zenwebsite +0 -39
  64. data/design/REQUIREMENTS.txt +0 -52
  65. data/design/ZENWEB_2.txt +0 -69
  66. data/design/heirarchy.png +0 -0
  67. data/design/heirarchy.tgif +0 -311
  68. data/docs/Customizing +0 -76
  69. data/docs/FAQ +0 -12
  70. data/docs/Features +0 -128
  71. data/docs/Presentation +0 -88
  72. data/docs/QuickStart +0 -32
  73. data/docs/Renderers +0 -85
  74. data/docs/SiteMap +0 -13
  75. data/docs/YourOwnWebsite +0 -32
  76. data/docs/index +0 -14
  77. data/docs/metadata.txt +0 -10
  78. data/lib/ZenWeb.rb +0 -850
  79. data/lib/ZenWeb/CalendarRenderer.rb +0 -162
  80. data/lib/ZenWeb/CompactRenderer.rb +0 -45
  81. data/lib/ZenWeb/CompositeRenderer.rb +0 -63
  82. data/lib/ZenWeb/FileAttachmentRenderer.rb +0 -57
  83. data/lib/ZenWeb/FooterRenderer.rb +0 -38
  84. data/lib/ZenWeb/GenericRenderer.rb +0 -143
  85. data/lib/ZenWeb/HeaderRenderer.rb +0 -52
  86. data/lib/ZenWeb/HtmlRenderer.rb +0 -81
  87. data/lib/ZenWeb/HtmlTableRenderer.rb +0 -94
  88. data/lib/ZenWeb/HtmlTemplateRenderer.rb +0 -173
  89. data/lib/ZenWeb/MetadataRenderer.rb +0 -83
  90. data/lib/ZenWeb/RelativeRenderer.rb +0 -97
  91. data/lib/ZenWeb/RubyCodeRenderer.rb +0 -56
  92. data/lib/ZenWeb/SitemapRenderer.rb +0 -56
  93. data/lib/ZenWeb/StandardRenderer.rb +0 -40
  94. data/lib/ZenWeb/StupidRenderer.rb +0 -91
  95. data/lib/ZenWeb/SubpageRenderer.rb +0 -45
  96. data/lib/ZenWeb/TextToHtmlRenderer.rb +0 -219
  97. data/lib/ZenWeb/TocRenderer.rb +0 -60
  98. data/lib/ZenWeb/XXXRenderer.rb +0 -32
  99. data/test/SiteMap +0 -14
  100. data/test/Something +0 -4
  101. data/test/include.txt +0 -3
  102. data/test/index +0 -8
  103. data/test/metadata.txt +0 -10
  104. data/test/ryand/SiteMap +0 -10
  105. data/test/ryand/blah +0 -4
  106. data/test/ryand/blah-blah +0 -4
  107. data/test/ryand/index +0 -52
  108. data/test/ryand/metadata.txt +0 -2
  109. data/test/ryand/stuff/index +0 -4
  110. data/test/test_zenweb.rb +0 -1619
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/ruby -w
2
+
3
+ require "rubygems"
4
+ require "minitest/autorun"
5
+
6
+ require "zenweb/site"
7
+ require "test/helper"
8
+
9
+ class TestZenwebPageDisqus < MiniTest::Unit::TestCase
10
+ attr_accessor :site, :page
11
+
12
+ def setup
13
+ super
14
+
15
+ self.site = Zenweb::Site.new
16
+ self.page = Zenweb::Page.new site, "blog/2012-01-02-page1.html.md"
17
+ end
18
+
19
+ def js name
20
+ <<-EOM.gsub(/^ {6}/, '')
21
+ <script type=\"text/javascript\">
22
+ (function() {
23
+ var s = document.createElement('script');
24
+ s.type = 'text/javascript';
25
+ s.async = true;
26
+ s.src = 'http://myshortname.disqus.com/#{name}.js';
27
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(s);
28
+ })();
29
+ </script>
30
+ EOM
31
+ end
32
+
33
+ def test_render_disqus
34
+ div = "<div id=\"disqus_thread\"></div>"
35
+ assert_equal div + js("embed"), page.disqus("myshortname")
36
+ end
37
+
38
+ def test_render_disqus_counts
39
+ assert_equal js("count"), page.disqus_counts("myshortname")
40
+ end
41
+ end
@@ -0,0 +1,60 @@
1
+ #!/usr/bin/ruby -w
2
+
3
+ require "rubygems"
4
+ require "minitest/autorun"
5
+
6
+ require "zenweb/site"
7
+ require "test/helper"
8
+
9
+ class TestZenwebPageErb < MiniTest::Unit::TestCase
10
+ include ChdirTest("example-site")
11
+
12
+ attr_accessor :site, :page
13
+
14
+ def setup
15
+ super
16
+
17
+ self.site = Zenweb::Site.new
18
+ self.page = Zenweb::Page.new site, "blog/2012-01-02-page1.html.md"
19
+ end
20
+
21
+ def test_render_erb
22
+ act = page.render_erb page, nil
23
+ exp = "Not really much here to see."
24
+
25
+ assert_equal exp, act
26
+ end
27
+
28
+ def test_erb
29
+ act = page.erb "this is some content", page
30
+ exp = "this is some content"
31
+
32
+ assert_equal exp, act
33
+ end
34
+
35
+ def test_erb_embedded
36
+ act = page.erb "this is {{ 1 + 1 }} content", page
37
+ exp = "this is 2 content"
38
+
39
+ assert_equal exp, act
40
+ end
41
+
42
+ def test_erb_other_error
43
+ e = assert_raises RuntimeError do
44
+ page.erb "this is {{ raise 'no' }} content", page
45
+ end
46
+
47
+ assert_equal "no", e.message
48
+
49
+ assert e.backtrace.grep('Page["blog/2012-01-02-page1.html.md"]:1')
50
+ end
51
+
52
+ def test_erb_syntax_error
53
+ e = assert_raises SyntaxError do
54
+ page.erb "this is {{ 1 + }} content", page
55
+ end
56
+
57
+ assert_includes e.message, "concat(( 1 + ).to_s)"
58
+ assert e.backtrace.grep('Page["blog/2012-01-02-page1.html.md"]:1')
59
+ end
60
+ end
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/ruby -w
2
+
3
+ require "rubygems"
4
+ require "minitest/autorun"
5
+
6
+ require "zenweb/site"
7
+ require "test/helper"
8
+
9
+ class TestZenwebPageGoogle < MiniTest::Unit::TestCase
10
+ include ChdirTest("example-site")
11
+
12
+ attr_accessor :site, :page
13
+
14
+ def setup
15
+ super
16
+
17
+ self.site = Zenweb::Site.new
18
+ self.page = Zenweb::Page.new site, "blog/2012-01-02-page1.html.md"
19
+
20
+ site.config.h["google_ad_client"] = "mygooglethingy"
21
+ end
22
+
23
+ def test_render_google_ad
24
+ exp = <<-EOM.gsub(/^ {6}/, '')
25
+ <script><!--
26
+ google_ad_client = "mygooglethingy";
27
+ google_ad_slot = "myslot";
28
+ google_ad_width = 1;
29
+ google_ad_height = 2;
30
+ //-->
31
+ </script>
32
+ <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
33
+ </script>
34
+ EOM
35
+
36
+ assert_equal exp, page.google_ad("myslot", 1, 2)
37
+ end
38
+ end
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/ruby -w
2
+
3
+ require "rubygems"
4
+ require "minitest/autorun"
5
+
6
+ require "zenweb/site"
7
+ require "test/helper"
8
+
9
+ class TestZenwebPageLess < MiniTest::Unit::TestCase
10
+ include ChdirTest("example-site")
11
+
12
+ attr_accessor :site, :page
13
+
14
+ def setup
15
+ super
16
+
17
+ self.site = Zenweb::Site.new
18
+ self.page = Zenweb::Page.new site, "blog/2012-01-02-page1.html.md"
19
+ end
20
+
21
+ def test_render_less
22
+ skip "soooo fucking slow!" unless ENV["RCOV"]
23
+ css = "h1 {color: red}"
24
+ act = nil
25
+
26
+ capture_io do # TODO: why?
27
+ act = page.render_less page, css
28
+ end
29
+ exp = "h1 { color: red; }\n"
30
+
31
+ assert_equal exp, act
32
+ end
33
+ end
@@ -0,0 +1,227 @@
1
+ #!/usr/bin/ruby -w
2
+
3
+ require "rubygems"
4
+ require "minitest/autorun"
5
+
6
+ require "zenweb/site"
7
+ require "test/helper"
8
+
9
+ class TestZenwebPageMarkdown < MiniTest::Unit::TestCase
10
+ include ChdirTest("example-site")
11
+
12
+ attr_accessor :site, :page
13
+
14
+ def setup
15
+ super
16
+
17
+ self.site = Zenweb::Site.new
18
+ self.page = Zenweb::Page.new site, "blog/2012-01-02-page1.html.md"
19
+ end
20
+
21
+ def test_attr_h
22
+ assert_equal "{:blah=\"42\"}", page.attr("blah" => 42)
23
+ end
24
+
25
+ def test_attr_name
26
+ assert_equal "{:blah}", page.attr("blah")
27
+ end
28
+
29
+ def test_css_class
30
+ assert_equal "{:.blah}", page.css_class("blah")
31
+ end
32
+
33
+ def test_css_id
34
+ assert_equal "{:#blah}", page.css_id("blah")
35
+ end
36
+
37
+ def test_link
38
+ assert_equal "[mytitle](myurl)", page.link("myurl", "mytitle")
39
+ end
40
+
41
+ def test_image
42
+ assert_equal "![myurl](myurl)", page.image("myurl")
43
+ assert_equal "![myalt](myurl)", page.image("myurl", "myalt")
44
+ end
45
+
46
+ def test_render_md
47
+ act = page.render_md page, nil
48
+ exp = "<p>Not really much here to see.</p>\n"
49
+
50
+ assert_equal exp, act
51
+ end
52
+
53
+ def test_render_md_content
54
+ skip "not yet"
55
+ act = page.render_md page, "woot"
56
+ exp = "<p>Not really much here to see.</p>\n"
57
+
58
+ assert_equal exp, act
59
+ end
60
+
61
+ def test_markdown
62
+ act = page.markdown "woot"
63
+ exp = "<p>woot</p>\n"
64
+
65
+ assert_equal exp, act
66
+ end
67
+
68
+ def test_sitemap
69
+ build_fake_site %w[a/index.html
70
+ a/b/index.html
71
+ a/b/2012-01-02-p1.html
72
+ a/b/2012-02-03-p2.html
73
+ a/b/2012-03-04-p3.html]
74
+
75
+ page = site.pages["a/index.html"]
76
+ act = page.sitemap
77
+ exp = <<-END.cleanup
78
+ * [Title for a/b/index.html](/a/b/)
79
+ * 2012-03:
80
+ * [Title for a/b/2012-03-04-p3.html](/a/b/2012/03/04/p3.html)
81
+ * 2012-02:
82
+ * [Title for a/b/2012-02-03-p2.html](/a/b/2012/02/03/p2.html)
83
+ * 2012-01:
84
+ * [Title for a/b/2012-01-02-p1.html](/a/b/2012/01/02/p1.html)
85
+ END
86
+
87
+ assert_equal exp, act
88
+ end
89
+
90
+ def test_sitemap_multidir
91
+ build_fake_site %w[a/index.html
92
+ a/b/index.html
93
+ a/b/p1.html
94
+ a/b/p2.html
95
+ a/b/p3.html]
96
+
97
+ page = site.pages["a/index.html"]
98
+ act = page.sitemap
99
+ exp = <<-END.cleanup
100
+ * [Title for a/b/index.html](/a/b/)
101
+ * [Title for a/b/p1.html](/a/b/p1.html)
102
+ * [Title for a/b/p2.html](/a/b/p2.html)
103
+ * [Title for a/b/p3.html](/a/b/p3.html)
104
+ END
105
+
106
+ assert_equal exp, act
107
+ end
108
+
109
+ def test_sitemap_subdir
110
+ build_fake_site %w[a/index.html
111
+ a/b/index.html
112
+ a/b/p1.html
113
+ a/b/p2.html
114
+ a/b/p3.html]
115
+
116
+ page = site.pages["a/b/index.html"]
117
+ act = page.sitemap
118
+ exp = <<-END.cleanup
119
+ * [Title for a/b/p1.html](/a/b/p1.html)
120
+ * [Title for a/b/p2.html](/a/b/p2.html)
121
+ * [Title for a/b/p3.html](/a/b/p3.html)
122
+ END
123
+
124
+ assert_equal exp, act
125
+ end
126
+
127
+ def test_sitemap_subdir_mixed
128
+ build_fake_site %w[index.html
129
+ a/index.html
130
+ a/a.html
131
+ a/b.html
132
+ a/c.html
133
+ a/2012-01-02-p1.html
134
+ a/2012-01-03-p2.html
135
+ a/2012-01-04-p3.html
136
+ a/2012-02-02-p1.html
137
+ a/2012-02-03-p2.html
138
+ a/2012-02-04-p3.html
139
+ c/index.html
140
+ c/a.html
141
+ c/b.html
142
+ c/c.html
143
+ c/d/index.html
144
+ c/d/e.html
145
+ c/d/f.html
146
+ c/d/g.html
147
+ d/index.html
148
+ d/2012-01-02-p1.html
149
+ d/2012-01-03-p2.html
150
+ d/2012-01-04-p3.html
151
+ some_random_page.html
152
+ ]
153
+
154
+ page = site.pages["index.html"]
155
+ act = page.sitemap
156
+ exp = <<-END.cleanup
157
+ * [Title for a/index.html](/a/)
158
+ * [Title for a/a.html](/a/a.html)
159
+ * [Title for a/b.html](/a/b.html)
160
+ * [Title for a/c.html](/a/c.html)
161
+ * 2012-02:
162
+ * [Title for a/2012-02-04-p3.html](/a/2012/02/04/p3.html)
163
+ * [Title for a/2012-02-03-p2.html](/a/2012/02/03/p2.html)
164
+ * [Title for a/2012-02-02-p1.html](/a/2012/02/02/p1.html)
165
+ * 2012-01:
166
+ * [Title for a/2012-01-04-p3.html](/a/2012/01/04/p3.html)
167
+ * [Title for a/2012-01-03-p2.html](/a/2012/01/03/p2.html)
168
+ * [Title for a/2012-01-02-p1.html](/a/2012/01/02/p1.html)
169
+ * [Title for c/index.html](/c/)
170
+ * [Title for c/a.html](/c/a.html)
171
+ * [Title for c/b.html](/c/b.html)
172
+ * [Title for c/c.html](/c/c.html)
173
+ * [Title for c/d/index.html](/c/d/)
174
+ * [Title for c/d/e.html](/c/d/e.html)
175
+ * [Title for c/d/f.html](/c/d/f.html)
176
+ * [Title for c/d/g.html](/c/d/g.html)
177
+ * [Title for d/index.html](/d/)
178
+ * 2012-01:
179
+ * [Title for d/2012-01-04-p3.html](/d/2012/01/04/p3.html)
180
+ * [Title for d/2012-01-03-p2.html](/d/2012/01/03/p2.html)
181
+ * [Title for d/2012-01-02-p1.html](/d/2012/01/02/p1.html)
182
+ * [Title for some_random_page.html](/some_random_page.html)
183
+ END
184
+
185
+ assert_equal exp, act
186
+ end
187
+
188
+ def test_sitemap_subdir_bloggish
189
+ build_fake_site %w[index.html
190
+ 2012-01-02-p1.html
191
+ 2012-01-03-p2.html
192
+ 2012-01-04-p3.html
193
+ 2012-02-02-p1.html
194
+ 2012-02-03-p2.html
195
+ 2012-02-04-p3.html
196
+ sitemap.html
197
+ some_random_page.html
198
+ ]
199
+
200
+ page = site.pages["index.html"]
201
+ act = page.sitemap
202
+ exp = <<-END.cleanup
203
+ * [Title for sitemap.html](/sitemap.html)
204
+ * [Title for some_random_page.html](/some_random_page.html)
205
+ * 2012-02:
206
+ * [Title for 2012-02-04-p3.html](/2012/02/04/p3.html)
207
+ * [Title for 2012-02-03-p2.html](/2012/02/03/p2.html)
208
+ * [Title for 2012-02-02-p1.html](/2012/02/02/p1.html)
209
+ * 2012-01:
210
+ * [Title for 2012-01-04-p3.html](/2012/01/04/p3.html)
211
+ * [Title for 2012-01-03-p2.html](/2012/01/03/p2.html)
212
+ * [Title for 2012-01-02-p1.html](/2012/01/02/p1.html)
213
+ END
214
+
215
+ assert_equal exp, act
216
+ end
217
+
218
+ def test_toc
219
+ assert_equal "* \n{:toc}\n", page.toc
220
+ end
221
+ end
222
+
223
+ class String
224
+ def cleanup indent = 4
225
+ self.gsub(/^\ {#{indent}}/, '').chomp
226
+ end
227
+ end
@@ -0,0 +1,294 @@
1
+ #!/usr/bin/ruby -w
2
+
3
+ require "rubygems"
4
+ require "minitest/autorun"
5
+
6
+ require "zenweb/site"
7
+ require "test/helper"
8
+
9
+ class Zenweb::Site
10
+ attr_writer :layouts
11
+ end
12
+
13
+ class TestZenwebSite < MiniTest::Unit::TestCase
14
+ include ChdirTest("example-site")
15
+
16
+ attr_accessor :site
17
+
18
+ def setup
19
+ super
20
+
21
+ self.site = Zenweb::Site.new
22
+ end
23
+
24
+ def test_categories
25
+ site.scan
26
+ cats = site.categories
27
+ assert_equal %w(blog pages projects), cats.keys.sort
28
+
29
+ exp = [["blog/2012-01-02-page1.html.md",
30
+ "blog/2012-01-03-page2.html.md",
31
+ "blog/2012-01-04-page3.html.md"],
32
+ ["pages/nonblogpage.html.md"],
33
+ ["projects/zenweb.html.erb"]]
34
+
35
+ assert_equal exp, cats.values.map { |a| a.map(&:path).sort }.sort
36
+ end
37
+
38
+ def test_categories_method_missing
39
+ site.scan
40
+ cats = site.categories
41
+
42
+ exp = ["blog/2012-01-02-page1.html.md",
43
+ "blog/2012-01-03-page2.html.md",
44
+ "blog/2012-01-04-page3.html.md"]
45
+
46
+ assert_equal exp, cats.blog.map(&:path).sort
47
+
48
+ assert_raises NoMethodError do
49
+ cats.wtf
50
+ end
51
+ end
52
+
53
+ def test_config
54
+ assert_equal "_config.yml", site.config.path
55
+ end
56
+
57
+ def test_configs
58
+ site.scan
59
+
60
+ exp = %w[_config.yml blog/_config.yml]
61
+
62
+ assert_equal exp, site.configs.keys.sort
63
+
64
+ exp = [Zenweb::Config]
65
+ assert_equal exp, site.configs.values.map(&:class).uniq
66
+ end
67
+
68
+ def test_generate
69
+ Rake.application = Rake::Application.new
70
+ extend Rake::DSL
71
+
72
+ ran = false
73
+ task(:site) do
74
+ ran = true
75
+ end
76
+
77
+ site.generate
78
+
79
+ assert ran, "Site#generate needs to call the site task"
80
+ end
81
+
82
+ def test_html_pages
83
+ Rake.application = Rake::Application.new
84
+ site.scan
85
+
86
+ exp = %w[about/index.html.md
87
+ blog/2012-01-02-page1.html.md
88
+ blog/2012-01-03-page2.html.md
89
+ blog/2012-01-04-page3.html.md
90
+ blog/index.html.erb
91
+ index.html.erb
92
+ pages/index.html.erb
93
+ pages/nonblogpage.html.md
94
+ projects/index.html.erb
95
+ projects/zenweb.html.erb]
96
+
97
+ assert_equal exp, site.html_pages.map(&:path).sort
98
+
99
+ diff = site.pages.values - site.html_pages
100
+
101
+ exp = %w[atom.xml.erb css/colors.css.less css/styles.css
102
+ css/syntax.css img/bg.png js/jquery.js js/site.js
103
+ sitemap.xml.erb]
104
+
105
+ assert_equal exp, diff.map(&:path).sort
106
+ end
107
+
108
+ def test_inspect
109
+ assert_equal "Site[0 pages, 0 configs]", site.inspect
110
+
111
+ site.scan
112
+
113
+ assert_equal "Site[18 pages, 2 configs]", site.inspect
114
+ end
115
+
116
+ def test_layout
117
+ site.scan
118
+ assert_equal "_layouts/post.erb", site.layout("post").path
119
+ end
120
+
121
+ def test_method_missing
122
+ assert_equal "Example Website", site.header
123
+ end
124
+
125
+ def test_pages
126
+ site.scan
127
+
128
+ excludes = %w[Rakefile config.ru]
129
+
130
+ exp = Dir["**/*"].
131
+ select { |p| File.file? p }.
132
+ reject! { |p| p =~ /(^|\/)_/ }.
133
+ sort - excludes
134
+
135
+ assert_equal exp, site.pages.keys.sort
136
+
137
+ exp = [Zenweb::Page]
138
+
139
+ assert_equal exp, site.pages.values.map(&:class).uniq
140
+ end
141
+
142
+ def test_pages_by_date
143
+ site.scan
144
+
145
+ srand 42
146
+ $dates = {}
147
+
148
+ site.html_pages.sort_by(&:title).each do |x|
149
+ $dates[x.path] = rand(100)
150
+ end
151
+
152
+ site.pages.values.each do |x|
153
+ def x.date
154
+ $dates[self.path]
155
+ end
156
+ end
157
+
158
+ exp = [[-92, "Example Page 1"],
159
+ [-86, "example.com pages"],
160
+ [-82, "example.com"],
161
+ [-74, "example.com projects"],
162
+ [-74, "zenweb"],
163
+ [-71, "Example Page 3"],
164
+ [-60, "Example Website"],
165
+ [-51, "About example.com"],
166
+ [-20, "Some regular page"],
167
+ [-14, "Example Page 2"]]
168
+
169
+ assert_equal exp, site.pages_by_date.map { |x| [-x.date.to_i, x.title] }
170
+ end
171
+
172
+ def test_pages_by_url
173
+ site.scan
174
+
175
+ exp = Hash[site.pages.values.map { |p| [p.url, p] }]
176
+ assert_equal exp, site.pages_by_url
177
+ end
178
+
179
+ def test_scan # the rest is tested via the other tests
180
+ assert_empty site.pages
181
+ assert_empty site.configs
182
+ assert_empty site.layouts
183
+
184
+ site.scan
185
+
186
+ refute_empty site.pages
187
+ refute_empty site.configs
188
+ refute_empty site.layouts
189
+ end
190
+
191
+ def test_wire
192
+ Rake.application = Rake::Application.new
193
+ site.scan
194
+ site.wire
195
+
196
+ assert_tasks do
197
+ assert_task ".site"
198
+ assert_task ".site/about"
199
+ assert_task ".site/blog"
200
+ assert_task ".site/blog/2012"
201
+ assert_task ".site/blog/2012/01"
202
+ assert_task ".site/blog/2012/01/02"
203
+ assert_task ".site/blog/2012/01/03"
204
+ assert_task ".site/blog/2012/01/04"
205
+ assert_task ".site/css"
206
+ assert_task ".site/img"
207
+ assert_task ".site/js"
208
+ assert_task ".site/pages"
209
+ assert_task ".site/projects"
210
+ assert_task "_config.yml"
211
+ assert_task "extra_wirings", nil, Rake::Task
212
+
213
+ # stupid simple deps
214
+ assert_task "_layouts/site.erb", %w[_config.yml]
215
+ assert_task "atom.xml.erb", %w[_config.yml]
216
+ assert_task "blog/_config.yml", %w[_config.yml]
217
+ assert_task "css/colors.css.less", %w[_config.yml]
218
+ assert_task "css/styles.css", %w[_config.yml]
219
+ assert_task "css/syntax.css", %w[_config.yml]
220
+ assert_task "img/bg.png", %w[_config.yml]
221
+ assert_task "js/jquery.js", %w[_config.yml]
222
+ assert_task "js/site.js", %w[_config.yml]
223
+ assert_task "sitemap.xml.erb", %w[_config.yml]
224
+
225
+ assert_task ".site/about/index.html", %w[.site/about about/index.html.md ]
226
+ assert_task ".site/atom.xml", %w[.site atom.xml.erb ]
227
+ assert_task ".site/blog/2012/01/02/page1.html", %w[.site/blog/2012/01/02 blog/2012-01-02-page1.html.md]
228
+ assert_task ".site/blog/2012/01/03/page2.html", %w[.site/blog/2012/01/03 blog/2012-01-03-page2.html.md]
229
+ assert_task ".site/blog/2012/01/04/page3.html", %w[.site/blog/2012/01/04 blog/2012-01-04-page3.html.md]
230
+ assert_task ".site/blog/index.html", %w[.site/blog
231
+ .site/blog/2012/01/02/page1.html
232
+ .site/blog/2012/01/03/page2.html
233
+ .site/blog/2012/01/04/page3.html
234
+ blog/index.html.erb]
235
+ assert_task ".site/css/colors.css", %w[.site/css css/colors.css.less ]
236
+ assert_task ".site/css/styles.css", %w[.site/css css/styles.css ]
237
+ assert_task ".site/css/syntax.css", %w[.site/css css/syntax.css ]
238
+ assert_task ".site/img/bg.png", %w[.site/img img/bg.png ]
239
+ assert_task ".site/index.html", %w[.site
240
+ .site/about/index.html
241
+ .site/blog/2012/01/02/page1.html
242
+ .site/blog/2012/01/03/page2.html
243
+ .site/blog/2012/01/04/page3.html
244
+ .site/blog/index.html
245
+ .site/pages/index.html
246
+ .site/pages/nonblogpage.html
247
+ .site/projects/index.html
248
+ .site/projects/zenweb.html
249
+ index.html.erb]
250
+ assert_task ".site/js/jquery.js", %w[.site/js js/jquery.js ]
251
+ assert_task ".site/js/site.js", %w[.site/js js/site.js ]
252
+ assert_task ".site/pages/index.html", %w[.site/pages .site/pages/nonblogpage.html pages/index.html.erb]
253
+ assert_task ".site/pages/nonblogpage.html", %w[.site/pages pages/nonblogpage.html.md ]
254
+ assert_task ".site/projects/index.html", %w[.site/projects .site/projects/zenweb.html projects/index.html.erb]
255
+ assert_task ".site/projects/zenweb.html", %w[.site/projects projects/zenweb.html.erb ]
256
+ assert_task ".site/sitemap.xml", %w[.site sitemap.xml.erb ]
257
+
258
+ assert_task "_layouts/post.erb", %w[_config.yml _layouts/site.erb]
259
+ assert_task "_layouts/project.erb", %w[_config.yml _layouts/site.erb]
260
+ assert_task "about/index.html.md", %w[_config.yml _layouts/site.erb]
261
+ assert_task "blog/2012-01-02-page1.html.md", %w[_layouts/post.erb blog/_config.yml]
262
+ assert_task "blog/2012-01-03-page2.html.md", %w[_layouts/post.erb blog/_config.yml]
263
+ assert_task "blog/2012-01-04-page3.html.md", %w[_layouts/post.erb blog/_config.yml]
264
+ assert_task "blog/index.html.erb", %w[_layouts/site.erb blog/_config.yml]
265
+ assert_task "index.html.erb", %w[_config.yml _layouts/site.erb]
266
+ assert_task "pages/index.html.erb", %w[_config.yml _layouts/site.erb]
267
+ assert_task "pages/nonblogpage.html.md", %w[_config.yml _layouts/site.erb]
268
+ assert_task "projects/index.html.erb", %w[_config.yml _layouts/site.erb]
269
+ assert_task "projects/zenweb.html.erb", %w[_config.yml _layouts/project.erb]
270
+
271
+ deps = %w[.site
272
+ .site/about/index.html
273
+ .site/atom.xml
274
+ .site/blog/2012/01/02/page1.html
275
+ .site/blog/2012/01/03/page2.html
276
+ .site/blog/2012/01/04/page3.html
277
+ .site/blog/index.html
278
+ .site/css/colors.css
279
+ .site/css/styles.css
280
+ .site/css/syntax.css
281
+ .site/img/bg.png
282
+ .site/index.html
283
+ .site/js/jquery.js
284
+ .site/js/site.js
285
+ .site/pages/index.html
286
+ .site/pages/nonblogpage.html
287
+ .site/projects/index.html
288
+ .site/projects/zenweb.html
289
+ .site/sitemap.xml]
290
+
291
+ assert_task "site", deps, Rake::Task
292
+ end
293
+ end
294
+ end