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,165 @@
1
+ require 'zenweb'
2
+
3
+ task :default => :generate
4
+
5
+ def website
6
+ $website = Zenweb::Site.new
7
+ $website.scan
8
+ $website.wire
9
+ $website
10
+ rescue RuntimeError => e
11
+ p e
12
+ puts e.backtrace.join "\n"
13
+ raise e
14
+ end
15
+
16
+ desc "Generate the website."
17
+ task :generate do
18
+ site = website
19
+
20
+ site.generate
21
+
22
+ found = Dir[".site/**/*"].select { |f| File.file? f }.sort
23
+ known = site.pages.values.map { |p| p.url_path }.sort
24
+ rm found - known
25
+ end
26
+
27
+ desc "Print out possible orphans (html pages w/o parent pages)"
28
+ task :orphans do
29
+ site = website
30
+ puts "Possible Orphans (HTML pages w/o parents):"
31
+ puts
32
+ site.pages.values.reject(&:parent).sort_by(&:clean_url).each do |page|
33
+ next unless page.url =~ /html$/
34
+ puts page
35
+ end
36
+ end
37
+
38
+ desc "Push changes to the site. (you need to define this)"
39
+ task :push
40
+
41
+ desc "Publish your website: clean, generate, push."
42
+ task :publish => [:clean, :generate, :push]
43
+
44
+ desc "Remove junk files."
45
+ task :clean do
46
+ rm_rf Dir["**/*~"]
47
+ end
48
+
49
+ desc "Remove generated .site directory."
50
+ task :realclean => :clean do
51
+ rm_rf ".site"
52
+ end
53
+
54
+ def new_file title, dated = false
55
+ path = "#{title.strip.downcase.gsub(/\W+/, '-')}.html.md"
56
+
57
+ if dated then
58
+ today = Time.now.strftime '%Y-%m-%d'
59
+ path = "#{today}-#{path}"
60
+ end
61
+
62
+ open path, 'w' do |post|
63
+ post.puts "---"
64
+ post.puts "title: \"#{title}\""
65
+ post.puts "date: #{Time.now.iso8601}"
66
+ post.puts "..."
67
+ post.puts
68
+ end
69
+
70
+ path
71
+ end
72
+
73
+ desc "Begin a new dated post: rake new_post['title']"
74
+ task :new_post, :title do |t, args|
75
+ title = args[:title] || "new-post"
76
+
77
+ path = new_file title, true
78
+
79
+ warn "Created new post: #{path}"
80
+ end
81
+
82
+ desc "Begin a new dated post: rake new_page['title']"
83
+ task :new_page, :title do |t, args|
84
+ title = args[:title] || "new-post"
85
+
86
+ path = new_file title
87
+
88
+ warn "Created new file: #{path}"
89
+ end
90
+
91
+ desc "Run a webserver and build on the fly."
92
+ task :run do
93
+ require 'zenweb/extensions'
94
+ require 'webrick'
95
+ require 'thread'
96
+
97
+ module Rake
98
+ class FileTask
99
+ def clear_timestamp
100
+ @timestamp = nil
101
+ prerequisite_tasks.each(&:clear_timestamp)
102
+ end
103
+ end
104
+ end
105
+
106
+ # TODO: implement a watcher or something... this is annoying
107
+ class ZenwebBuilder < WEBrick::HTTPServlet::FileHandler
108
+ @@semaphore = Mutex.new
109
+
110
+ def service req, res
111
+ @@site ||= @@semaphore.synchronize { website }
112
+
113
+ url = req.path
114
+ target_path = File.join(".site", url)
115
+
116
+ target_path = File.join target_path, "index.html" if
117
+ File.directory? target_path
118
+
119
+ task = Rake.application[target_path] rescue nil
120
+
121
+ warn "NOTE: No file found for #{url}" unless task
122
+
123
+ newer = task && task.needed?
124
+
125
+ if newer then
126
+ system "rake clean generate"
127
+ end
128
+
129
+ if task && newer then
130
+ @@site = nil
131
+ Rake.application = Rake::Application.new # reset
132
+ end
133
+
134
+ task.clear_timestamp if task && target_path =~ /(html|css|js)$/
135
+
136
+ super
137
+ end
138
+ end
139
+
140
+ server = WEBrick::HTTPServer.new :Port => 8000
141
+ server.mount '/', ZenwebBuilder, ".site"
142
+
143
+ trap 'INT' do
144
+ server.shutdown
145
+ end
146
+
147
+ server.start
148
+ end
149
+
150
+ website if ENV['DEBUG']
151
+
152
+ desc "Debug the generation of a file. Takes a PATH arg."
153
+ task :debug => ".site" do
154
+ site = website
155
+
156
+ path = ENV['PAGE'] || ENV['F'] || ENV['FILE'] || "index.html.erb"
157
+
158
+ if path then
159
+ page = site.pages[path]
160
+ page.generate
161
+
162
+ puts
163
+ puts File.read page.url_path
164
+ end
165
+ end
data/test/helper.rb ADDED
@@ -0,0 +1,53 @@
1
+ class MiniTest::Unit::TestCase
2
+ def self.ChdirTest path
3
+ Module.new do
4
+ define_method :setup do
5
+ super()
6
+ @old_dir = Dir.pwd
7
+ Dir.chdir path
8
+ end
9
+
10
+ define_method :teardown do
11
+ super()
12
+ Dir.chdir @old_dir
13
+ end
14
+ end
15
+ end
16
+
17
+ def assert_task name, deps = nil, type = Rake::FileTask
18
+ @tasks << name
19
+ assert_operator Rake::Task, :task_defined?, name
20
+
21
+ task = Rake.application[name]
22
+ assert_kind_of type, task
23
+ assert_equal deps, task.prerequisites.sort, name if deps
24
+ end
25
+
26
+ def assert_tasks
27
+ @tasks = []
28
+ yield
29
+ assert_empty Rake.application.tasks.map(&:name) - @tasks
30
+ end
31
+
32
+ def build_fake_site(*paths)
33
+ paths.flatten.compact.each do |path|
34
+ page = Zenweb::Page.new(site, path)
35
+ page.content = "Content for #{path}"
36
+ page.config = Zenweb::Config.new site, path
37
+ page.config.h = {
38
+ "title" => "Title for #{path}"
39
+ }
40
+ site.pages[path] = page
41
+ end
42
+
43
+ site.fix_subpages
44
+ end
45
+ end
46
+
47
+ class Zenweb::Page
48
+ attr_writer :content, :config
49
+ end
50
+
51
+ class Zenweb::Config
52
+ attr_writer :h
53
+ end
@@ -0,0 +1,90 @@
1
+ #!/usr/bin/ruby -w
2
+
3
+ require "rubygems"
4
+
5
+ gem "rake"
6
+ require "rake"
7
+ require "minitest/autorun"
8
+
9
+ require "zenweb/site"
10
+ require "test/helper"
11
+
12
+ class TestZenwebConfig < MiniTest::Unit::TestCase
13
+ include ChdirTest("example-site")
14
+
15
+ attr_accessor :site, :config
16
+
17
+ def setup
18
+ super
19
+
20
+ self.site = Zenweb::Site.new
21
+ page = Zenweb::Page.new site, "blog/2012-01-02-page1.html.md"
22
+ self.config = page.config
23
+ end
24
+
25
+ def test_h
26
+ exp = {"title"=>"Example Page 1"}
27
+ assert_equal exp, config.h
28
+ end
29
+
30
+ def test_index
31
+ assert_equal "Example Page 1", config["title"]
32
+ end
33
+
34
+ def test_inspect
35
+ exp = ['Config["blog/2012-01-02-page1.html.md"',
36
+ 'Config["blog/_config.yml"',
37
+ 'Config["_config.yml"',
38
+ 'Config::Null]]]'
39
+ ].join ", "
40
+ assert_equal exp, config.inspect
41
+ end
42
+
43
+ def test_inspect_trace
44
+ exp = ['Config["blog/2012-01-02-page1.html.md"',
45
+ 'Config["blog/_config.yml"',
46
+ 'Config["_config.yml"',
47
+ 'Config::Null',
48
+ '"exclude" => ["Rakefile", "tmp"]',
49
+ '"google_ua" => "UA-1234567-8"',
50
+ '"header" => "Example Website"]',
51
+ '"layout" => "post"]',
52
+ '"title" => "Example Page 1"]'].join ", "
53
+
54
+ assert_nil Rake.application.options.trace
55
+ Rake.application.options.trace = true
56
+ assert_equal exp, config.inspect
57
+ ensure
58
+ Rake.application.options.trace = nil
59
+ end
60
+
61
+ def test_parent
62
+ assert_equal site.configs["blog/_config.yml"], config.parent
63
+ end
64
+
65
+ def test_path
66
+ assert_equal "blog/2012-01-02-page1.html.md", config.path
67
+ end
68
+
69
+ def test_site
70
+ assert_equal site, config.site
71
+ end
72
+
73
+ def test_to_s
74
+ assert_equal "Config[\"blog/2012-01-02-page1.html.md\"]", config.to_s
75
+ end
76
+
77
+ def test_wire
78
+ Rake.application = Rake::Application.new
79
+ site.scan
80
+ self.config = site.pages["blog/2012-01-02-page1.html.md"].config
81
+
82
+ config.wire
83
+
84
+ assert_tasks do
85
+ assert_task "_config.yml"
86
+ assert_task "blog/_config.yml", %w[_config.yml]
87
+ assert_task config.path, %w[blog/_config.yml]
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/ruby -w
2
+
3
+ require "rubygems"
4
+ require "minitest/autorun"
5
+ require "zenweb/extensions"
6
+
7
+ class TestFile < MiniTest::Unit::TestCase
8
+ def test_class_each_parent
9
+ a = []
10
+
11
+ Dir.chdir "example-site" do
12
+ File.each_parent "blog/index.html.erb", "_config.yml" do |f|
13
+ a << f
14
+ end
15
+ end
16
+
17
+ assert_equal %w[blog/_config.yml _config.yml], a
18
+ end
19
+ end
20
+
21
+ class TestTime < MiniTest::Unit::TestCase
22
+ def test_date
23
+ assert_equal "1969-12-31", Time.at(0).date
24
+ end
25
+
26
+ def test_datetime
27
+ assert_equal "1969-12-31 @ 16:00", Time.at(0).datetime
28
+ end
29
+
30
+ def test_time
31
+ assert_equal "16:00", Time.at(0).time
32
+ end
33
+ end
@@ -0,0 +1,381 @@
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 TestZenwebPage < 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 setup_deps
22
+ Rake.application = Rake::Application.new
23
+ site.scan
24
+
25
+ assert_empty Rake.application.tasks
26
+
27
+ p1 = site.pages["blog/2012-01-02-page1.html.md"]
28
+ p2 = site.pages["blog/2012-01-03-page2.html.md"]
29
+
30
+ return p1, p2
31
+ end
32
+
33
+ def test_body
34
+ assert_equal "Not really much here to see.", page.body
35
+ end
36
+
37
+ def test_breadcrumbs
38
+ site.scan
39
+ self.page = site.pages[page.path]
40
+
41
+ exp = %w[/index.html /blog/index.html]
42
+
43
+ assert_equal exp, page.breadcrumbs.map(&:url)
44
+ end
45
+
46
+ def test_clean_url
47
+ act = page.clean_url
48
+ exp = "/blog/2012/01/02/page1.html"
49
+
50
+ assert_equal exp, act
51
+
52
+ page = Zenweb::Page.new site, "a/b/index.html"
53
+ act = page.clean_url
54
+ exp = "/a/b/"
55
+
56
+ assert_equal exp, act
57
+ end
58
+
59
+ def test_config
60
+ exp = {"title" => "Example Page 1"}
61
+
62
+ assert_kind_of Zenweb::Config, page.config
63
+ assert_equal exp, page.config.h
64
+ end
65
+
66
+ def test_content
67
+ assert_equal File.read(page.path), page.content
68
+ end
69
+
70
+ def test_date
71
+ assert_equal Time.local(2012, 1, 2), page.date
72
+ end
73
+
74
+ def test_date_from_path
75
+ assert_equal Time.local(2012, 1, 2), page.date_from_path
76
+ end
77
+
78
+ def test_depends_on
79
+ p1, p2 = setup_deps
80
+
81
+ p1.depends_on p2
82
+
83
+ assert_tasks do
84
+ assert_task p1.url_path, [p2.url_path]
85
+ end
86
+ end
87
+
88
+ def test_depends_on_string
89
+ p1, _ = setup_deps
90
+
91
+ p1.depends_on "somethingelse"
92
+
93
+ # TODO: double check that this should be p1.path and not p1.url_path
94
+ assert_tasks do
95
+ assert_task p1.path, ["somethingelse"]
96
+ end
97
+ end
98
+
99
+ def test_filetype
100
+ assert_equal "md", page.filetype
101
+ end
102
+
103
+ def test_filetypes
104
+ assert_equal %w[md], page.filetypes
105
+ end
106
+
107
+ def test_filetypes_odd
108
+ page = Zenweb::Page.new site, "blah.wtf"
109
+ assert_equal %w[], page.filetypes
110
+ end
111
+
112
+ def test_generate
113
+ page = Zenweb::Page.new site, "blah"
114
+
115
+ def page.render
116
+ "woot"
117
+ end
118
+
119
+ def page.open path, mode
120
+ yield $stdout
121
+ end
122
+
123
+ out = "woot\n"
124
+ err = "Rendering .site/blah\n"
125
+
126
+ assert_output out, err do
127
+ page.generate
128
+ end
129
+ end
130
+
131
+ def test_generate_via_invoke
132
+ Rake.application = Rake::Application.new
133
+ site.scan
134
+ site.wire
135
+ self.page = site.pages["blog/2012-01-02-page1.html.md"]
136
+ Rake.application[page.url_path].clear_prerequisites # no mkdir, thanks
137
+
138
+ def page.generate
139
+ raise "no generate"
140
+ end
141
+
142
+ e = assert_raises RuntimeError do
143
+ Rake.application[page.url_path].invoke
144
+ end
145
+
146
+ assert_equal "no generate", e.message
147
+ ensure
148
+ FileUtils.rm_rf ".site"
149
+ end
150
+
151
+ def test_html_eh
152
+ assert page.html?
153
+
154
+ site.scan
155
+ refute site.pages["js/site.js"].html?
156
+ end
157
+
158
+ def test_include
159
+ # test via a layout page so we can test indirect access of page vars
160
+ layout = Zenweb::Page.new(site, "_layouts/site.erb")
161
+ fragment = layout.include("analytics.html.erb", page)
162
+ assert_match(/UA-\d+/, site.config["google_ua"])
163
+ assert_match site.config["google_ua"], fragment
164
+ end
165
+
166
+ def test_include_page_var
167
+ # test via a layout page so we can test indirect access of page vars
168
+ layout = Zenweb::Page.new(site, "_layouts/site.erb")
169
+ fragment = layout.include("header.html.erb", page)
170
+ assert_match "Example Page 1 ~ Example Website", fragment
171
+ end
172
+
173
+ def test_index
174
+ assert_equal page.config["title"], page["title"]
175
+ end
176
+
177
+ def test_inspect
178
+ assert_equal 'Page["blog/2012-01-02-page1.html.md"]', page.inspect
179
+ end
180
+
181
+ def test_layout
182
+ assert_equal site.layout("post"), page.layout
183
+ end
184
+
185
+ def test_link_html
186
+ exp = "<a href=\"/blog/2012/01/02/page1.html\">Example Page 1</a>"
187
+ assert_equal exp, page.link_html
188
+
189
+ exp = "<a href=\"/blog/2012/01/02/page1.html\">blah</a>"
190
+ assert_equal exp, page.link_html("blah")
191
+ end
192
+
193
+ def test_method_missing
194
+ assert_equal page["title"], page.method_missing("title")
195
+ end
196
+
197
+ def test_meta
198
+ exp = '<meta name="title" content="Example Page 1">'
199
+ assert_equal exp, page.meta("title")
200
+ end
201
+
202
+ def test_method_missing_odd
203
+ err = "Page[\"blog/2012-01-02-page1.html.md\"] does not define \"wtf\"\n"
204
+ assert_output "", err do
205
+ assert_nil page.method_missing("wtf")
206
+ end
207
+ end
208
+
209
+ def test_method_missing_render
210
+ e = assert_raises NoMethodError do
211
+ assert_nil page.render_wtf
212
+ end
213
+ err = "undefined method `render_wtf' for Page"
214
+ assert_includes e.message, err
215
+ end
216
+
217
+ def test_parent
218
+ site.scan
219
+ self.page = site.pages[page.path]
220
+
221
+ assert_equal site.pages["blog/index.html.erb"], page.parent
222
+ end
223
+
224
+ def test_parent_top
225
+ build_fake_site %w[index.html]
226
+
227
+ page = site.pages["index.html"]
228
+
229
+ assert_nil page.parent
230
+ end
231
+
232
+ def test_parent_url
233
+ assert_equal "/blog/2012/01/02/page1.html", page.url
234
+ assert_equal "/blog/2012/01/02/index.html", page.parent_url
235
+
236
+ page = Zenweb::Page.new(site, "a/b/c.html")
237
+ assert_equal "/a/b/index.html", page.parent_url
238
+
239
+ page = Zenweb::Page.new(site, "a/b/index.html")
240
+ assert_equal "/a/index.html", page.parent_url
241
+ end
242
+
243
+ def test_path
244
+ assert_equal "blog/2012-01-02-page1.html.md", page.path
245
+ end
246
+
247
+ def test_render
248
+ assert_equal "<p>Not really much here to see.</p>\n", page.render
249
+ end
250
+
251
+ def test_render_image
252
+ self.page = Zenweb::Page.new site, "img/bg.png"
253
+ assert_equal File.binread("img/bg.png"), page.render
254
+ end
255
+
256
+ def test_run_js_script
257
+ exp = <<-EOM.gsub(/^ {6}/, '')
258
+ <script type=\"text/javascript\">
259
+ (function() {
260
+ var s = document.createElement('script');
261
+ s.type = 'text/javascript';
262
+ s.async = true;
263
+ s.src = 'my_url';
264
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(s);
265
+ })();
266
+ </script>
267
+ EOM
268
+
269
+ assert_equal exp, page.run_js_script("my_url")
270
+ end
271
+
272
+ def test_site
273
+ assert_equal site, page.site
274
+ end
275
+
276
+ def test_subpages
277
+ site.scan
278
+
279
+ page = site.pages["blog/index.html.erb"]
280
+ act = page.subpages
281
+ exp = [site.pages["blog/2012-01-04-page3.html.md"],
282
+ site.pages["blog/2012-01-03-page2.html.md"],
283
+ site.pages["blog/2012-01-02-page1.html.md"]]
284
+
285
+ assert_equal exp, act
286
+ end
287
+
288
+ def test_subpages_subdirs
289
+ build_fake_site %w[index.html
290
+ a/index.html
291
+ a/a.html
292
+ a/b.html
293
+ a/c.html
294
+ b/index.html
295
+ b/2012-01-02-p1.html
296
+ b/2012-01-03-p2.html
297
+ b/2012-01-04-p3.html
298
+ c/index.html
299
+ c/a.html
300
+ c/b.html
301
+ c/c.html
302
+ c/d/e.html
303
+ c/d/f.html
304
+ c/d/g.html
305
+ d/index.html
306
+ d/2012-01-02-p1.html
307
+ d/2012-01-03-p2.html
308
+ d/2012-01-04-p3.html
309
+ some_random_page.html
310
+ ]
311
+
312
+ urls = %w[a/index.html
313
+ b/index.html
314
+ c/index.html
315
+ d/index.html
316
+ some_random_page.html]
317
+
318
+ exp = urls.map { |url| site.pages[url] }
319
+
320
+ page = site.pages["index.html"]
321
+ assert_equal exp, page.subpages
322
+ end
323
+
324
+ def test_subrender
325
+ assert_equal "<p>Not really much here to see.</p>\n", page.subrender
326
+ end
327
+
328
+ def test_to_s
329
+ assert_equal 'Page["blog/2012-01-02-page1.html.md"]', page.to_s
330
+ end
331
+
332
+ def test_url
333
+ assert_equal "/blog/2012/01/02/page1.html", page.url
334
+ end
335
+
336
+ def test_url_date_fmt
337
+ page.config.h["date_fmt"] = "%Y/%m"
338
+ assert_equal "/blog/2012/01/page1.html", page.url
339
+ end
340
+
341
+ def test_url_regular_page
342
+ page = Zenweb::Page.new site, "pages/blah.html"
343
+ assert_equal "/pages/blah.html", page.url
344
+ end
345
+
346
+ def test_url_dir
347
+ assert_equal ".site/blog/2012/01/02", page.url_dir
348
+ end
349
+
350
+ def test_url_path
351
+ assert_equal ".site/blog/2012/01/02/page1.html", page.url_path
352
+ end
353
+
354
+ def test_wire
355
+ Rake.application = Rake::Application.new
356
+ site.scan
357
+ self.page = site.pages["blog/2012-01-02-page1.html.md"]
358
+
359
+ page.wire
360
+
361
+ assert_tasks do
362
+ # dirs
363
+ assert_task ".site"
364
+ assert_task ".site/blog"
365
+ assert_task ".site/blog/2012"
366
+ assert_task ".site/blog/2012/01"
367
+ assert_task ".site/blog/2012/01/02"
368
+
369
+ # aux
370
+ assert_task "_layouts/post.erb", %w[_config.yml _layouts/site.erb]
371
+ assert_task "_layouts/site.erb", %w[_config.yml]
372
+ assert_task "blog/_config.yml", %w[_config.yml]
373
+ assert_task "_config.yml"
374
+
375
+ # page down to site
376
+ assert_task page.path, %w[_layouts/post.erb blog/_config.yml]
377
+ assert_task page.url_path, [page.url_dir, page.path]
378
+ assert_task "site", [page.url_path], Rake::Task
379
+ end
380
+ end
381
+ end