webgen 0.5.7 → 0.5.8

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 (207) hide show
  1. data/ChangeLog +870 -0
  2. data/Rakefile +37 -36
  3. data/VERSION +1 -1
  4. data/data/webgen/resources.yaml +2 -2
  5. data/data/webgen/webgui/app.rb +11 -0
  6. data/data/webgen/webgui/controller/main.rb +30 -26
  7. data/data/webgen/webgui/{view/page.xhtml → layout/default.xhtml} +8 -8
  8. data/data/webgen/webgui/start.rb +9 -0
  9. data/data/webgen/webgui/view/create_website.xhtml +6 -14
  10. data/data/webgen/webgui/view/manage_website.xhtml +2 -2
  11. data/data/webgen/website_bundles/default/README +6 -0
  12. data/data/webgen/website_bundles/default/src/index.page +15 -0
  13. data/data/webgen/{website_styles → website_bundles/style}/1024px/README +0 -0
  14. data/data/webgen/{website_styles → website_bundles/style}/1024px/src/default.css +0 -0
  15. data/data/webgen/{website_styles → website_bundles/style}/1024px/src/default.template +0 -0
  16. data/data/webgen/{website_styles → website_bundles/style}/1024px/src/images/background.gif +0 -0
  17. data/data/webgen/{website_styles → website_bundles/style}/andreas00/README +0 -0
  18. data/data/webgen/{website_styles → website_bundles/style}/andreas00/src/default.css +0 -0
  19. data/data/webgen/{website_styles → website_bundles/style}/andreas00/src/default.template +0 -0
  20. data/data/webgen/{website_styles → website_bundles/style}/andreas00/src/images/bg.gif +0 -0
  21. data/data/webgen/{website_styles → website_bundles/style}/andreas00/src/images/front.jpg +0 -0
  22. data/data/webgen/{website_styles → website_bundles/style}/andreas00/src/images/menubg.gif +0 -0
  23. data/data/webgen/{website_styles → website_bundles/style}/andreas00/src/images/menubg2.gif +0 -0
  24. data/data/webgen/{website_styles → website_bundles/style}/andreas01/README +0 -0
  25. data/data/webgen/{website_styles → website_bundles/style}/andreas01/src/default.css +0 -0
  26. data/data/webgen/{website_styles → website_bundles/style}/andreas01/src/default.template +0 -0
  27. data/data/webgen/{website_styles → website_bundles/style}/andreas01/src/images/bg.gif +0 -0
  28. data/data/webgen/{website_styles → website_bundles/style}/andreas01/src/images/front.jpg +0 -0
  29. data/data/webgen/{website_styles → website_bundles/style}/andreas01/src/print.css +0 -0
  30. data/data/webgen/{website_styles → website_bundles/style}/andreas03/README +0 -0
  31. data/data/webgen/{website_styles → website_bundles/style}/andreas03/src/default.css +0 -0
  32. data/data/webgen/{website_styles → website_bundles/style}/andreas03/src/default.template +0 -0
  33. data/data/webgen/{website_styles → website_bundles/style}/andreas03/src/images/bodybg.png +0 -0
  34. data/data/webgen/{website_styles → website_bundles/style}/andreas03/src/images/contbg.png +0 -0
  35. data/data/webgen/{website_styles → website_bundles/style}/andreas03/src/images/footerbg.png +0 -0
  36. data/data/webgen/{website_styles → website_bundles/style}/andreas03/src/images/gradient1.png +0 -0
  37. data/data/webgen/{website_styles → website_bundles/style}/andreas03/src/images/gradient2.png +0 -0
  38. data/data/webgen/{website_styles → website_bundles/style}/andreas04/README +0 -0
  39. data/data/webgen/{website_styles → website_bundles/style}/andreas04/src/default.css +0 -0
  40. data/data/webgen/{website_styles → website_bundles/style}/andreas04/src/default.template +0 -0
  41. data/data/webgen/{website_styles → website_bundles/style}/andreas04/src/images/blinkarrow.gif +0 -0
  42. data/data/webgen/{website_styles → website_bundles/style}/andreas04/src/images/bodybg.png +0 -0
  43. data/data/webgen/{website_styles → website_bundles/style}/andreas04/src/images/contentbg.png +0 -0
  44. data/data/webgen/{website_styles → website_bundles/style}/andreas04/src/images/entrybg.png +0 -0
  45. data/data/webgen/{website_styles → website_bundles/style}/andreas04/src/images/flash.gif +0 -0
  46. data/data/webgen/{website_styles → website_bundles/style}/andreas04/src/images/flash2.gif +0 -0
  47. data/data/webgen/{website_styles → website_bundles/style}/andreas04/src/images/globe.gif +0 -0
  48. data/data/webgen/{website_styles → website_bundles/style}/andreas04/src/images/globebottom.gif +0 -0
  49. data/data/webgen/{website_styles → website_bundles/style}/andreas04/src/images/linkarrow.gif +0 -0
  50. data/data/webgen/{website_styles → website_bundles/style}/andreas04/src/images/menuhover.png +0 -0
  51. data/data/webgen/{website_styles → website_bundles/style}/andreas05/README +0 -0
  52. data/data/webgen/{website_styles → website_bundles/style}/andreas05/src/default.css +0 -0
  53. data/data/webgen/{website_styles → website_bundles/style}/andreas05/src/default.template +0 -0
  54. data/data/webgen/{website_styles → website_bundles/style}/andreas05/src/images/bodybg.gif +0 -0
  55. data/data/webgen/{website_styles → website_bundles/style}/andreas05/src/images/front.png +0 -0
  56. data/data/webgen/{website_styles → website_bundles/style}/andreas06/README +0 -0
  57. data/data/webgen/{website_styles → website_bundles/style}/andreas06/src/default.css +6 -4
  58. data/data/webgen/{website_styles → website_bundles/style}/andreas06/src/default.template +2 -2
  59. data/data/webgen/{website_styles → website_bundles/style}/andreas06/src/images/bodybg.gif +0 -0
  60. data/data/webgen/{website_styles → website_bundles/style}/andreas06/src/images/boxbg.gif +0 -0
  61. data/data/webgen/{website_styles → website_bundles/style}/andreas06/src/images/greypx.gif +0 -0
  62. data/data/webgen/{website_styles → website_bundles/style}/andreas06/src/images/header.jpg +0 -0
  63. data/data/webgen/{website_styles → website_bundles/style}/andreas06/src/images/innerbg.gif +0 -0
  64. data/data/webgen/{website_styles → website_bundles/style}/andreas06/src/images/leaves.jpg +0 -0
  65. data/data/webgen/{website_styles → website_bundles/style}/andreas06/src/images/tabs.gif +0 -0
  66. data/data/webgen/{website_styles → website_bundles/style}/andreas07/README +0 -0
  67. data/data/webgen/{website_styles → website_bundles/style}/andreas07/src/browserfix.css +0 -0
  68. data/data/webgen/{website_styles → website_bundles/style}/andreas07/src/default.css +0 -0
  69. data/data/webgen/{website_styles → website_bundles/style}/andreas07/src/default.template +0 -0
  70. data/data/webgen/{website_styles → website_bundles/style}/andreas07/src/images/bodybg.gif +0 -0
  71. data/data/webgen/{website_styles → website_bundles/style}/andreas07/src/images/sidebarbg.gif +0 -0
  72. data/data/webgen/{website_styles → website_bundles/style}/andreas08/README +0 -0
  73. data/data/webgen/{website_styles → website_bundles/style}/andreas08/src/default.css +0 -0
  74. data/data/webgen/{website_styles → website_bundles/style}/andreas08/src/default.template +0 -0
  75. data/data/webgen/{website_styles → website_bundles/style}/andreas09/README +0 -0
  76. data/data/webgen/{website_styles → website_bundles/style}/andreas09/src/default.css +0 -0
  77. data/data/webgen/{website_styles → website_bundles/style}/andreas09/src/default.template +0 -0
  78. data/data/webgen/{website_styles → website_bundles/style}/andreas09/src/images/bodybg-black.jpg +0 -0
  79. data/data/webgen/{website_styles → website_bundles/style}/andreas09/src/images/bodybg-green.jpg +0 -0
  80. data/data/webgen/{website_styles → website_bundles/style}/andreas09/src/images/bodybg-orange.jpg +0 -0
  81. data/data/webgen/{website_styles → website_bundles/style}/andreas09/src/images/bodybg-purple.jpg +0 -0
  82. data/data/webgen/{website_styles → website_bundles/style}/andreas09/src/images/bodybg-red.jpg +0 -0
  83. data/data/webgen/{website_styles → website_bundles/style}/andreas09/src/images/bodybg.jpg +0 -0
  84. data/data/webgen/{website_styles → website_bundles/style}/andreas09/src/images/footerbg.jpg +0 -0
  85. data/data/webgen/{website_styles → website_bundles/style}/andreas09/src/images/menuhover-black.jpg +0 -0
  86. data/data/webgen/{website_styles → website_bundles/style}/andreas09/src/images/menuhover-green.jpg +0 -0
  87. data/data/webgen/{website_styles → website_bundles/style}/andreas09/src/images/menuhover-orange.jpg +0 -0
  88. data/data/webgen/{website_styles → website_bundles/style}/andreas09/src/images/menuhover-purple.jpg +0 -0
  89. data/data/webgen/{website_styles → website_bundles/style}/andreas09/src/images/menuhover-red.jpg +0 -0
  90. data/data/webgen/{website_styles → website_bundles/style}/andreas09/src/images/menuhover.jpg +0 -0
  91. data/data/webgen/{website_styles → website_bundles/style}/simple/README +0 -0
  92. data/data/webgen/{website_styles → website_bundles/style}/simple/src/default.css +0 -0
  93. data/data/webgen/{website_styles → website_bundles/style}/simple/src/default.template +0 -0
  94. data/data/webgen/website_skeleton/README +1 -1
  95. data/data/webgen/website_skeleton/config.yaml +5 -4
  96. data/doc/contentprocessor/blocks.page +43 -10
  97. data/doc/contentprocessor/builder.page +1 -1
  98. data/doc/contentprocessor/erb.page +12 -11
  99. data/doc/contentprocessor/redcloth.page +3 -1
  100. data/doc/extensions.page +3 -3
  101. data/doc/faq.page +13 -10
  102. data/doc/getting_started.page +12 -15
  103. data/doc/index.page +7 -1
  104. data/doc/manual.page +78 -27
  105. data/doc/reference_configuration.page +166 -3
  106. data/doc/reference_website_styles.page +28 -0
  107. data/doc/source/filesystem.page +39 -0
  108. data/doc/source/tararchive.page +40 -0
  109. data/doc/tag/tikz.page +2 -1
  110. data/doc/webgen_page_format.page +13 -12
  111. data/doc/website_styles.metainfo +8 -0
  112. data/lib/webgen/blackboard.rb +2 -2
  113. data/lib/webgen/cache.rb +4 -4
  114. data/lib/webgen/cli.rb +29 -16
  115. data/lib/webgen/cli/apply_command.rb +66 -0
  116. data/lib/webgen/cli/create_command.rb +22 -16
  117. data/lib/webgen/cli/utils.rb +23 -0
  118. data/lib/webgen/cli/webgui_command.rb +31 -16
  119. data/lib/webgen/configuration.rb +8 -6
  120. data/lib/webgen/contentprocessor.rb +4 -5
  121. data/lib/webgen/contentprocessor/blocks.rb +2 -0
  122. data/lib/webgen/contentprocessor/builder.rb +6 -3
  123. data/lib/webgen/contentprocessor/erb.rb +6 -3
  124. data/lib/webgen/contentprocessor/erubis.rb +7 -6
  125. data/lib/webgen/contentprocessor/haml.rb +6 -3
  126. data/lib/webgen/contentprocessor/rdoc.rb +0 -1
  127. data/lib/webgen/contentprocessor/redcloth.rb +3 -1
  128. data/lib/webgen/context.rb +73 -0
  129. data/lib/webgen/context/nodes.rb +36 -0
  130. data/lib/webgen/coreext.rb +3 -2
  131. data/lib/webgen/default_config.rb +3 -1
  132. data/lib/webgen/deprecated.rb +53 -0
  133. data/lib/webgen/node.rb +24 -19
  134. data/lib/webgen/output.rb +50 -7
  135. data/lib/webgen/page.rb +45 -36
  136. data/lib/webgen/path.rb +1 -1
  137. data/lib/webgen/source.rb +32 -4
  138. data/lib/webgen/source/resource.rb +3 -3
  139. data/lib/webgen/source/stacked.rb +1 -1
  140. data/lib/webgen/source/tararchive.rb +73 -0
  141. data/lib/webgen/sourcehandler.rb +4 -4
  142. data/lib/webgen/sourcehandler/base.rb +36 -24
  143. data/lib/webgen/sourcehandler/copy.rb +1 -1
  144. data/lib/webgen/sourcehandler/feed.rb +2 -2
  145. data/lib/webgen/sourcehandler/fragment.rb +1 -1
  146. data/lib/webgen/sourcehandler/metainfo.rb +15 -6
  147. data/lib/webgen/sourcehandler/page.rb +9 -5
  148. data/lib/webgen/sourcehandler/virtual.rb +44 -7
  149. data/lib/webgen/tag/base.rb +19 -13
  150. data/lib/webgen/tag/link.rb +1 -0
  151. data/lib/webgen/version.rb +1 -1
  152. data/lib/webgen/webgentask.rb +15 -13
  153. data/lib/webgen/website.rb +42 -11
  154. data/lib/webgen/websiteaccess.rb +1 -1
  155. data/lib/webgen/websitemanager.rb +61 -66
  156. data/man/man1/webgen.1 +4 -0
  157. data/misc/default.css +13 -0
  158. data/misc/default.template +1 -1
  159. data/misc/htmldoc.metainfo +2 -1
  160. data/misc/style.page +33 -0
  161. data/test/test_cli.rb +1 -7
  162. data/test/test_common_sitemap.rb +2 -2
  163. data/test/test_contentprocessor_blocks.rb +14 -1
  164. data/test/test_contentprocessor_builder.rb +3 -1
  165. data/test/test_contentprocessor_erb.rb +3 -2
  166. data/test/test_contentprocessor_erubis.rb +3 -3
  167. data/test/test_contentprocessor_fragments.rb +3 -3
  168. data/test/test_contentprocessor_haml.rb +3 -2
  169. data/test/test_contentprocessor_maruku.rb +3 -3
  170. data/test/test_contentprocessor_rdiscount.rb +1 -1
  171. data/test/test_contentprocessor_rdoc.rb +1 -1
  172. data/test/test_contentprocessor_redcloth.rb +9 -2
  173. data/test/test_contentprocessor_sass.rb +1 -1
  174. data/test/test_contentprocessor_tags.rb +1 -1
  175. data/test/{test_contentprocessor_context.rb → test_context.rb} +9 -7
  176. data/test/test_node.rb +27 -21
  177. data/test/test_page.rb +4 -4
  178. data/test/test_source_tararchive.rb +65 -0
  179. data/test/test_sourcehandler_fragment.rb +1 -1
  180. data/test/test_sourcehandler_memory.rb +6 -6
  181. data/test/test_sourcehandler_metainfo.rb +34 -13
  182. data/test/test_sourcehandler_page.rb +8 -0
  183. data/test/test_sourcehandler_virtual.rb +51 -12
  184. data/test/test_tag_breadcrumbtrail.rb +4 -4
  185. data/test/test_tag_coderay.rb +1 -1
  186. data/test/test_tag_date.rb +1 -1
  187. data/test/test_tag_executecommand.rb +1 -1
  188. data/test/test_tag_includefile.rb +3 -3
  189. data/test/test_tag_langbar.rb +6 -6
  190. data/test/test_tag_link.rb +8 -2
  191. data/test/test_tag_menu.rb +9 -9
  192. data/test/test_tag_metainfo.rb +1 -1
  193. data/test/test_tag_relocatable.rb +1 -1
  194. data/test/test_tag_sitemap.rb +1 -1
  195. data/test/test_tag_tikz.rb +2 -2
  196. data/test/test_website.rb +17 -0
  197. data/test/test_websitemanager.rb +16 -21
  198. metadata +146 -187
  199. data/data/webgen/website_templates/default/README +0 -6
  200. data/data/webgen/website_templates/default/src/index.page +0 -8
  201. data/data/webgen/website_templates/project/README +0 -5
  202. data/data/webgen/website_templates/project/src/about.page +0 -12
  203. data/data/webgen/website_templates/project/src/download.page +0 -15
  204. data/data/webgen/website_templates/project/src/features.page +0 -8
  205. data/data/webgen/website_templates/project/src/index.page +0 -9
  206. data/data/webgen/website_templates/project/src/screenshots.page +0 -18
  207. data/lib/webgen/contentprocessor/context.rb +0 -89
@@ -10,7 +10,9 @@ class TestContentProcessorBuilder < Test::Unit::TestCase
10
10
  obj = Webgen::ContentProcessor::Builder.new
11
11
  root = Webgen::Node.new(Webgen::Tree.new.dummy_root, '/', '/')
12
12
  node = Webgen::Node.new(root, 'test', 'test')
13
- context = Webgen::ContentProcessor::Context.new(:content => "xml.div(:path => node.absolute_lcn) { xml.strong('test') }",
13
+ content = "xml.div(:path => context.node.absolute_lcn) { xml.strong('test'); " +
14
+ "context.website; context; context.ref_node; context.dest_node }"
15
+ context = Webgen::Context.new(:content => content,
14
16
  :chain => [node])
15
17
  assert_equal("<div path=\"/test\">\n <strong>test</strong>\n</div>\n", obj.call(context).content)
16
18
 
@@ -10,10 +10,11 @@ class TestContentProcessorErb < Test::Unit::TestCase
10
10
  obj = Webgen::ContentProcessor::Erb.new
11
11
  root = Webgen::Node.new(Webgen::Tree.new.dummy_root, '/', '/')
12
12
  node = Webgen::Node.new(root, 'test', 'test')
13
- context = Webgen::ContentProcessor::Context.new(:content => '<%= context[:doit] %>6', :doit => 'hallo',
13
+ content = "<%= context[:doit] %>6\n<%= context.ref_node.absolute_lcn %>\n<%= context.node.absolute_lcn %>\n<%= context.dest_node.absolute_lcn %><% website %>"
14
+ context = Webgen::Context.new(:content => content, :doit => 'hallo',
14
15
  :chain => [node])
15
16
  obj.call(context)
16
- assert_equal('hallo6', context.content)
17
+ assert_equal("hallo6\n/test\n/test\n/test", context.content)
17
18
 
18
19
  context.content = '<%= 5* %>'
19
20
  assert_raise(RuntimeError) { obj.call(context) }
@@ -15,10 +15,10 @@ class TestContentProcessorErubis < Test::Unit::TestCase
15
15
  obj = Webgen::ContentProcessor::Erubis.new
16
16
  root = Webgen::Node.new(Webgen::Tree.new.dummy_root, '/', '/')
17
17
  node = Webgen::Node.new(root, 'test', 'test')
18
- context = Webgen::ContentProcessor::Context.new(:doit => 'hallo', :chain => [node])
18
+ context = Webgen::Context.new(:doit => 'hallo', :chain => [node])
19
19
 
20
- context.content = '<%= context[:doit] %>6'
21
- assert_equal('hallo6', obj.call(context).content)
20
+ context.content = "<%= context[:doit] %>6\n<%= context.ref_node.absolute_lcn %>\n<%= context.node.absolute_lcn %>\n<%= context.dest_node.absolute_lcn %><% context.website %>"
21
+ assert_equal("hallo6\n/test\n/test\n/test", obj.call(context).content)
22
22
 
23
23
  context.content = '<%= 5* %>'
24
24
  assert_raise(RuntimeError) { obj.call(context) }
@@ -20,20 +20,20 @@ class TestContentProcessorFragments < Test::Unit::TestCase
20
20
  root.node_info[:src] = '/'
21
21
  processors = { 'fragments' => obj }
22
22
 
23
- context = Webgen::ContentProcessor::Context.new(:chain => [root], :processors => processors)
23
+ context = Webgen::Context.new(:chain => [root], :processors => processors)
24
24
  context.content = '<h1 id="test">Test</h1><h1>Test2</h1>'
25
25
  obj.call(context)
26
26
  assert(root.tree['/#test'])
27
27
  assert_equal(3, root.tree.node_access[:alcn].length)
28
28
  root.tree.delete_node('/#test')
29
29
 
30
- context[:block] = Webgen::Block.new('content', '', {})
30
+ context[:block] = Webgen::Page::Block.new('content', '', {})
31
31
  obj.call(context)
32
32
  assert(root.tree['/#test'])
33
33
  assert_equal(3, root.tree.node_access[:alcn].length)
34
34
  root.tree.delete_node('/#test')
35
35
 
36
- context[:block] = Webgen::Block.new('other', '', {})
36
+ context[:block] = Webgen::Page::Block.new('other', '', {})
37
37
  obj.call(context)
38
38
  assert(!root.tree['/#test'])
39
39
  assert_equal(2, root.tree.node_access[:alcn].length)
@@ -10,10 +10,11 @@ class TestContentProcessorHaml < Test::Unit::TestCase
10
10
  obj = Webgen::ContentProcessor::Haml.new
11
11
  root = Webgen::Node.new(Webgen::Tree.new.dummy_root, '/', '/')
12
12
  node = Webgen::Node.new(root, 'test', 'test')
13
- context = Webgen::ContentProcessor::Context.new(:content => "#content\n %h1 Hallo\n = node.absolute_lcn",
13
+ content = "#content\n %h1 Hallo\n = [context.node.absolute_lcn, context.ref_node.absolute_lcn, context.dest_node.absolute_lcn, context.website, context.dest_node.absolute_lcn].join"
14
+ context = Webgen::Context.new(:content => content,
14
15
  :chain => [node])
15
16
  obj.call(context)
16
- assert_equal("<div id='content'>\n <h1>Hallo</h1>\n /test\n</div>\n", context.content)
17
+ assert_equal("<div id='content'>\n <h1>Hallo</h1>\n /test/test/test/test\n</div>\n", context.content)
17
18
 
18
19
  context.content = "#cont\n = unknown"
19
20
  assert_raise(RuntimeError) { obj.call(context) }
@@ -10,7 +10,7 @@ class TestContentProcessorMaruku < Test::Unit::TestCase
10
10
  def test_call
11
11
  @obj = Webgen::ContentProcessor::Maruku.new
12
12
  node = Webgen::Node.new(Webgen::Node.new(Webgen::Tree.new.dummy_root, '/', '/'), 'test', 'test')
13
- context = Webgen::ContentProcessor::Context.new(:content => '# header', :chain => [node])
13
+ context = Webgen::Context.new(:content => '# header', :chain => [node])
14
14
  assert_equal('<h1 id=\'header\'>header</h1>', @obj.call(context).content)
15
15
 
16
16
  context.content = "# head*d* {#das .dsaf "
@@ -19,10 +19,10 @@ class TestContentProcessorMaruku < Test::Unit::TestCase
19
19
 
20
20
  def test_call_fix_for_invalid_id
21
21
  @obj = Webgen::ContentProcessor::Maruku.new
22
- context = Webgen::ContentProcessor::Context.new(:content => '# `test`')
22
+ context = Webgen::Context.new(:content => '# `test`')
23
23
  assert_equal('<h1 id=\'id1\'><code>test</code></h1>', @obj.call(context).content)
24
24
 
25
- context = Webgen::ContentProcessor::Context.new(:content => '# `test`')
25
+ context = Webgen::Context.new(:content => '# `test`')
26
26
  assert_equal('<h1 id=\'id1\'><code>test</code></h1>', @obj.call(context).content)
27
27
  end
28
28
 
@@ -10,7 +10,7 @@ class TestContentProcessorRDiscount < Test::Unit::TestCase
10
10
  def test_call
11
11
  @obj = Webgen::ContentProcessor::RDiscount.new
12
12
  node = Webgen::Node.new(Webgen::Node.new(Webgen::Tree.new.dummy_root, '/', '/'), 'test', 'test')
13
- context = Webgen::ContentProcessor::Context.new(:content => '# header', :chain => [node])
13
+ context = Webgen::Context.new(:content => '# header', :chain => [node])
14
14
  assert_equal("<h1>header</h1>\n", @obj.call(context).content)
15
15
  end
16
16
 
@@ -10,7 +10,7 @@ class TestContentProcessorRDoc < Test::Unit::TestCase
10
10
  obj = Webgen::ContentProcessor::RDoc.new
11
11
  root = Webgen::Node.new(Webgen::Tree.new.dummy_root, '/', '/')
12
12
  node = Webgen::Node.new(root, 'test', 'test')
13
- context = Webgen::ContentProcessor::Context.new(:content => "* hello",
13
+ context = Webgen::Context.new(:content => "* hello",
14
14
  :chain => [node])
15
15
  assert_equal("<ul>\n<li>hello\n\n</li>\n</ul>\n", obj.call(context).content)
16
16
  end
@@ -1,15 +1,22 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
 
3
3
  require 'test/unit'
4
+ require 'helper'
4
5
  require 'webgen/websiteaccess'
5
6
  require 'webgen/contentprocessor'
6
7
 
7
8
  class TestContentProcessorRedCloth < Test::Unit::TestCase
8
9
 
10
+ include Test::WebsiteHelper
11
+
9
12
  def test_call
10
13
  @obj = Webgen::ContentProcessor::RedCloth.new
11
- context = Webgen::ContentProcessor::Context.new(:content => 'h1. header')
12
- assert_equal('<h1>header</h1>', @obj.call(context).content)
14
+ context = Webgen::Context.new(:content => "h1. header\n\nthis\nis\nsome\ntext")
15
+ assert_equal("<h1>header</h1>\n<p>this\nis\nsome\ntext</p>", @obj.call(context).content)
16
+
17
+ context.content = "h1. header\n\nthis\nis\nsome\ntext"
18
+ @website.config['contentprocessor.redcloth.hard_breaks'] = true
19
+ assert_equal("<h1>header</h1>\n<p>this<br />\nis<br />\nsome<br />\ntext</p>", @obj.call(context).content)
13
20
  end
14
21
 
15
22
  end
@@ -10,7 +10,7 @@ class TestContentProcessorSass < Test::Unit::TestCase
10
10
  obj = Webgen::ContentProcessor::Sass.new
11
11
  root = Webgen::Node.new(Webgen::Tree.new.dummy_root, '/', '/')
12
12
  node = Webgen::Node.new(root, 'test', 'test')
13
- context = Webgen::ContentProcessor::Context.new(:content => "#main\n :background-color #000",
13
+ context = Webgen::Context.new(:content => "#main\n :background-color #000",
14
14
  :chain => [node])
15
15
  obj.call(context)
16
16
  assert_equal("#main {\n background-color: #000; }\n", context.content)
@@ -35,7 +35,7 @@ class TestContentProcessorTags < Test::Unit::TestCase
35
35
  end
36
36
 
37
37
  def test_call
38
- context = Webgen::ContentProcessor::Context.new(:chain => [Webgen::Tree.new.dummy_root])
38
+ context = Webgen::Context.new(:chain => [Webgen::Tree.new.dummy_root])
39
39
  context.content = "{test: }"
40
40
  assert_equal('', @obj.call(context).content)
41
41
 
@@ -2,16 +2,16 @@
2
2
 
3
3
  require 'test/unit'
4
4
  require 'helper'
5
- require 'webgen/contentprocessor'
5
+ require 'webgen/context'
6
6
 
7
- class TestContentProcessorContext < Test::Unit::TestCase
7
+ class TestContext < Test::Unit::TestCase
8
8
 
9
9
  def setup
10
- @context = Webgen::ContentProcessor::Context.new(:content => 'test', :key => :value, :chain => [:first, :last])
10
+ @context = Webgen::Context.new(:content => 'test', :key => :value, :chain => [:first, :last])
11
11
  end
12
12
 
13
13
  def test_initialize
14
- context = Webgen::ContentProcessor::Context.new
14
+ context = Webgen::Context.new
15
15
  assert_equal('', context.content)
16
16
  assert_kind_of(Webgen::ContentProcessor::AccessHash, context[:processors])
17
17
  end
@@ -27,11 +27,13 @@ class TestContentProcessorContext < Test::Unit::TestCase
27
27
  assert_equal(:value, @context[:key])
28
28
  assert_equal([:first, :last], @context[:chain])
29
29
  assert_equal('test', @context.content)
30
- assert_equal(:first, @context.ref_node)
31
- assert_equal(:last, @context.content_node)
32
- assert_equal(:value, @context[:key])
33
30
  @context[:key] = :newvalue
34
31
  assert_equal(:newvalue, @context[:key])
32
+ end
33
+
34
+ def test_node_methods
35
+ assert_equal(:first, @context.ref_node)
36
+ assert_equal(:last, @context.content_node)
35
37
  assert_equal(:last, @context.dest_node)
36
38
  @context[:dest_node] = :other
37
39
  assert_equal(:other, @context.dest_node)
@@ -42,8 +42,8 @@ class TestNode < Test::Unit::TestCase
42
42
  assert_equal(alcn, node.absolute_lcn)
43
43
  assert_equal(lang, node.lang)
44
44
  assert_kind_of(Webgen::Language, node.lang) if node.lang
45
- assert(node.flagged(:dirty))
46
- assert(node.flagged(:created))
45
+ assert(node.flagged?(:dirty))
46
+ assert(node.flagged?(:created))
47
47
  assert_equal(mi, node.meta_info)
48
48
  assert_equal({:used_nodes => Set.new, :used_meta_info_nodes => Set.new}, node.node_info)
49
49
  mi.each {|k,v| assert_equal(v, node[k])}
@@ -86,18 +86,18 @@ class TestNode < Test::Unit::TestCase
86
86
 
87
87
  def test_flags
88
88
  node = Webgen::Node.new(@tree.dummy_root, 'test/', 'test', {'lang' => 'de', :test => :value})
89
- assert(node.flagged(:created))
90
- assert(node.flagged(:dirty))
89
+ assert(node.flagged?(:created))
90
+ assert(node.flagged?(:dirty))
91
91
  node.unflag(:dirty)
92
- assert(!node.flagged(:dirty))
92
+ assert(!node.flagged?(:dirty))
93
93
  node.flag(:a, :b, :c)
94
- assert(node.flagged(:a))
95
- assert(node.flagged(:b))
96
- assert(node.flagged(:c))
94
+ assert(node.flagged?(:a))
95
+ assert(node.flagged?(:b))
96
+ assert(node.flagged?(:c))
97
97
  node.unflag(:a, :b, :c)
98
- assert(!node.flagged(:a))
99
- assert(!node.flagged(:b))
100
- assert(!node.flagged(:c))
98
+ assert(!node.flagged?(:a))
99
+ assert(!node.flagged?(:b))
100
+ assert(!node.flagged?(:c))
101
101
  end
102
102
 
103
103
  def test_in_lang
@@ -166,22 +166,34 @@ class TestNode < Test::Unit::TestCase
166
166
 
167
167
  def test_changed
168
168
  node = Webgen::Node.new(@tree.dummy_root, 'test/', 'test', {'lang' => 'de', :test => :value})
169
- node.unflag(:dirty, :created)
169
+ node.unflag(:dirty, :dirty_meta_info, :created)
170
170
 
171
171
  calls = 0
172
172
  @website.blackboard.add_listener(:node_changed?) {|n| assert(node, n); node.flag(:dirty); calls += 1}
173
- node.changed?
173
+ assert(node.changed?)
174
174
  assert_equal(1, calls)
175
- node.changed?
175
+ assert(node.changed?)
176
176
  assert_equal(1, calls)
177
177
 
178
+ # Test :used_nodes array checking
178
179
  node.unflag(:dirty)
179
180
  node.node_info[:used_nodes] << node.absolute_lcn
180
181
  node.node_info[:used_nodes] << 'unknown alcn'
181
182
  node.node_info[:used_nodes] << @tree.dummy_root.absolute_lcn
182
- node.changed?
183
+ assert(node.changed?)
183
184
  assert_equal(1, calls)
184
185
 
186
+ # Test :used_nodes array checking
187
+ node.unflag(:dirty)
188
+ node.node_info[:used_nodes] = Set.new
189
+ node.node_info[:used_meta_info_nodes] << node.absolute_lcn
190
+ assert(node.changed?)
191
+ assert_equal(2, calls)
192
+ node.unflag(:dirty)
193
+ node.node_info[:used_meta_info_nodes] << 'unknown alcn'
194
+ assert(node.changed?)
195
+ assert_equal(2, calls)
196
+
185
197
  # Test circular depdendence
186
198
  other_node = Webgen::Node.new(@tree.dummy_root, '/other', 'test.l', {'lang' => 'de', :test => :value})
187
199
  other_node.flag(:dirty, :created)
@@ -201,12 +213,6 @@ class TestNode < Test::Unit::TestCase
201
213
  assert_equal(1, calls)
202
214
  assert(node.meta_info_changed?)
203
215
  assert_equal(1, calls)
204
-
205
- node.unflag(:dirty_meta_info)
206
- node.node_info[:used_meta_info_nodes] << node.absolute_lcn
207
- node.node_info[:used_meta_info_nodes] << 'unknown alcn'
208
- assert(node.meta_info_changed?)
209
- assert_equal(1, calls)
210
216
  end
211
217
 
212
218
  def test_method_missing
@@ -6,7 +6,7 @@ require 'webgen/page'
6
6
  class TestBlock < Test::Unit::TestCase
7
7
 
8
8
  def test_render
9
- block = Webgen::Block.new('content', 'some content', {'pipeline' => 'test'})
9
+ block = Webgen::Page::Block.new('content', 'some content', {'pipeline' => 'test'})
10
10
  context = {:processors => {}}
11
11
  assert_raise(RuntimeError) { block.render(context) }
12
12
  context[:processors]['test'] = lambda {|context| context[:content] = context[:content].reverse + context[:block].name }
@@ -161,12 +161,12 @@ EOF
161
161
  def test_invalid_pagefiles
162
162
  testdata = YAML::load(INVALID_MI)
163
163
  testdata.each_with_index do |data, index|
164
- assert_raise(Webgen::WebgenPageFormatError, "test mi item #{index}") { Webgen::Page.from_data(data) }
165
- assert_raise(Webgen::WebgenPageFormatError, "test mi item #{index}") { Webgen::Page.meta_info_from_data(data) }
164
+ assert_raise(Webgen::Page::FormatError, "test mi item #{index}") { Webgen::Page.from_data(data) }
165
+ assert_raise(Webgen::Page::FormatError, "test mi item #{index}") { Webgen::Page.meta_info_from_data(data) }
166
166
  end
167
167
  testdata = YAML::load(INVALID_BLOCKS)
168
168
  testdata.each_with_index do |data, index|
169
- assert_raise(Webgen::WebgenPageFormatError, "test blocks item #{index}") { Webgen::Page.from_data(data) }
169
+ assert_raise(Webgen::Page::FormatError, "test blocks item #{index}") { Webgen::Page.from_data(data) }
170
170
  end
171
171
  end
172
172
 
@@ -0,0 +1,65 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'test/unit'
4
+ require 'helper'
5
+ require 'webgen/source'
6
+
7
+ class TestSourceTarArchive < Test::Unit::TestCase
8
+
9
+ class FakeStream
10
+
11
+ def open
12
+ require 'stringio'
13
+ sio = StringIO.new
14
+ stream = Archive::Tar::Minitar::Writer.new(sio)
15
+ stream.mkdir('/test', :mtime => (Time.now - 5).to_i, :mode => 0100755)
16
+ stream.add_file('/test/hallo.page', :mtime => (Time.now - 4).to_i, :mode => 0100644) do |os, opts|
17
+ os.write('This is the contents!')
18
+ end
19
+ stream.add_file('/other.page', :mtime => (Time.now - 4).to_i, :mode => 0100644) do |os, opts|
20
+ os.write('This is other content!')
21
+ end
22
+ sio.rewind
23
+ sio
24
+ end
25
+
26
+ end
27
+
28
+ include Test::WebsiteHelper
29
+
30
+ def setup
31
+ super
32
+ @website = Webgen::Website.new(File.join(File.dirname(__FILE__), '..'), nil)
33
+ @website.init
34
+ Thread.current[:webgen_website] = @website
35
+ @stream = FakeStream.new
36
+ end
37
+
38
+ def test_initialize
39
+ source = Webgen::Source::TarArchive.new(@stream)
40
+ assert_equal(@stream, source.uri)
41
+ end
42
+
43
+ def test_paths
44
+ source = Webgen::Source::TarArchive.new(@stream)
45
+ assert_equal(3, source.paths.length)
46
+ assert(source.paths.include?(Webgen::Path.new('/test/')))
47
+ assert(source.paths.include?(Webgen::Path.new('/test/hallo.page')))
48
+ assert_equal('This is the contents!', source.paths.find {|p| p.path == '/test/hallo.page'}.io.data)
49
+
50
+ source = Webgen::Source::TarArchive.new(@stream, '/test/*')
51
+ assert_equal(1, source.paths.length)
52
+ assert(source.paths.include?(Webgen::Path.new('/test/hallo.page')))
53
+ end
54
+
55
+ def test_path_changed?
56
+ stream = @stream
57
+ source = Webgen::Source::TarArchive.new(stream)
58
+ source.paths.each do |path|
59
+ assert(!path.changed?)
60
+ @website.cache.instance_eval { @old_data[[:tararchive_path, stream, path.path]] = Time.now - 60 }
61
+ assert(path.changed?)
62
+ end
63
+ end
64
+
65
+ end
@@ -11,7 +11,7 @@ class TestSourceHandlerFragment < Test::Unit::TestCase
11
11
 
12
12
  TEST_CONTENT=<<EOF
13
13
  - data: |
14
- <h1 id="test">Test</h1>
14
+ <h1 id="test" style="test">Test</h1>
15
15
  <h2 id="other">test</h2>
16
16
  <h1>nothing</h1>
17
17
  <h1 id="third">test</h1>
@@ -19,17 +19,17 @@ class TestSourceHandlerMemory < Test::Unit::TestCase
19
19
  node = obj.create_node(root, path_with_meta_info('/test.png'), '/', 'data')
20
20
  assert_equal('/', node.node_info[:memory_source_alcn])
21
21
  assert_equal('data', obj.content(node))
22
- assert(!node.flagged(:reinit))
22
+ assert(!node.flagged?(:reinit))
23
23
  root.tree.delete_node(node)
24
24
 
25
25
  node = obj.create_node(root, path_with_meta_info('/test.png'), '/') {|n| assert_equal(node, n); 'data'}
26
26
  assert_equal('/', node.node_info[:memory_source_alcn])
27
27
  assert_equal('data', obj.content(node))
28
- assert(!node.flagged(:reinit))
28
+ assert(!node.flagged?(:reinit))
29
29
 
30
- assert(!root.flagged(:dirty))
30
+ assert(!root.flagged?(:dirty))
31
31
  node.flag(:reinit)
32
- assert(root.flagged(:dirty))
32
+ assert(root.flagged?(:dirty))
33
33
  root.unflag(:dirty)
34
34
  root.tree.delete_node(node)
35
35
 
@@ -37,8 +37,8 @@ class TestSourceHandlerMemory < Test::Unit::TestCase
37
37
  assert_equal('/', node.node_info[:memory_source_alcn])
38
38
  obj.instance_eval { @data = nil }
39
39
  assert_nil(obj.content(node))
40
- assert(node.flagged(:reinit))
41
- assert(root.flagged(:dirty))
40
+ assert(node.flagged?(:reinit))
41
+ assert(root.flagged?(:dirty))
42
42
  end
43
43
 
44
44
  end
@@ -12,29 +12,40 @@ class TestSourceHandlerMetainfo < Test::Unit::TestCase
12
12
  class TestSH; include Webgen::SourceHandler::Base; end
13
13
 
14
14
  CONTENT=<<EOF
15
- **/*:
15
+ /default.*:
16
16
  title: new title
17
17
  before: valbef
18
18
  ---
19
- **/*/:
19
+ /default.css:
20
20
  after: valaft
21
+
22
+ /other.page:
23
+ title: Not Other
21
24
  EOF
22
25
 
23
26
  def setup
24
27
  super
25
28
  @website.blackboard.add_service(:source_paths) do
26
- {'/default.css' => path_with_meta_info('/default.css') {StringIO.new('# header')}}
29
+ {'/default.css' => path_with_meta_info('/default.css') {StringIO.new('# header')},
30
+ '/other.page' => path_with_meta_info('/other.page') {StringIO.new('other page')},
31
+ }
27
32
  end
28
33
 
29
34
  @obj = Webgen::SourceHandler::Metainfo.new
30
- @root = Webgen::Node.new(Webgen::Tree.new.dummy_root, 'test/', '/')
35
+ @root = Webgen::Node.new(Webgen::Tree.new.dummy_root, '/', '/')
31
36
  @node = @obj.create_node(@root, path_with_meta_info('/metainfo', {}, @obj.class.name) {StringIO.new(CONTENT)})
32
37
  end
33
38
 
34
39
  def test_create_node
35
- assert(@node.flagged(:dirty_meta_info))
36
- assert_equal({'/**/*' => {'title' => 'new title', 'before' => 'valbef'}}, @node.node_info[:mi_paths])
37
- assert_equal({'/**/*' => {'after' => 'valaft'}}, @node.node_info[:mi_alcn])
40
+ assert_equal({'/default.*' => {'title' => 'new title', 'before' => 'valbef'}}, @node.node_info[:mi_paths])
41
+ assert_equal({'/default.css' => {'after' => 'valaft'},
42
+ '/other.page' => {'title' => 'Not Other'}}, @node.node_info[:mi_alcn])
43
+ end
44
+
45
+ def test_empty_metainfo_file
46
+ node = @obj.create_node(@root, path_with_meta_info('/test', {}, @obj.class.name) {StringIO.new('')})
47
+ assert_equal({}, node.node_info[:mi_paths])
48
+ assert_equal({}, node.node_info[:mi_alcn])
38
49
  end
39
50
 
40
51
  def test_meta_info_changed
@@ -49,15 +60,15 @@ EOF
49
60
 
50
61
  other.unflag(:dirty_meta_info)
51
62
  @obj.send(:mark_all_matched_dirty, @node)
52
- assert(!other.flagged(:dirty_meta_info))
63
+ assert(!other.flagged?(:dirty_meta_info))
53
64
 
54
65
  other.unflag(:dirty_meta_info)
55
66
  @obj.send(:mark_all_matched_dirty, @node, :force)
56
- assert(other.flagged(:dirty_meta_info))
67
+ assert(other.flagged?(:dirty_meta_info))
57
68
 
58
69
  other.unflag(:dirty_meta_info)
59
70
  @obj.send(:mark_all_matched_dirty, @node, :no_old_data)
60
- assert(!other.flagged(:dirty_meta_info))
71
+ assert(!other.flagged?(:dirty_meta_info))
61
72
  end
62
73
 
63
74
  def test_before_node_created
@@ -75,23 +86,33 @@ EOF
75
86
  def test_before_node_deleted
76
87
  other = TestSH.new.create_node(@root, path_with_meta_info('/default.css'))
77
88
  @website.blackboard.dispatch_msg(:before_node_deleted, @node)
78
- assert(other.flagged(:dirty_meta_info))
89
+ assert(other.flagged?(:dirty_meta_info))
79
90
  assert(@obj.nodes.empty?)
80
91
  end
81
92
 
82
93
  def test_node_meta_info_changed
83
94
  @node.unflag(:dirty_meta_info)
84
95
  @website.blackboard.dispatch_msg(:node_meta_info_changed?, @node)
85
- assert(!@node.flagged(:dirty_meta_info))
96
+ assert(!@node.flagged?(:dirty_meta_info))
86
97
 
87
98
  @node.node_info[:mi_alcn] = @node.node_info[:mi_alcn].dup
88
99
  @node.node_info[:mi_alcn]['/*metainfo'] = {'other' => 'doit'}
89
100
  @website.blackboard.dispatch_msg(:node_meta_info_changed?, @node)
90
- assert(@node.flagged(:dirty_meta_info))
101
+ assert(@node.flagged?(:dirty_meta_info))
91
102
  end
92
103
 
93
104
  def test_content
94
105
  assert_nil(@obj.content(nil))
95
106
  end
96
107
 
108
+ def test_deletion_of_metainfo
109
+ other = TestSH.new.create_node(@root, path_with_meta_info('/other.page'))
110
+ @website.blackboard.dispatch_msg(:after_node_created, other)
111
+ assert_equal('Not Other', other['title'])
112
+
113
+ @node.flag(:reinit)
114
+ @node = @obj.create_node(@root, path_with_meta_info('/metainfo', {}, @obj.class.name) {StringIO.new("")})
115
+ assert(other.flagged?(:dirty_meta_info))
116
+ end
117
+
97
118
  end