webgen 0.5.2 → 0.5.3

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 (85) hide show
  1. data/Rakefile +15 -4
  2. data/VERSION +1 -1
  3. data/data/webgen/webgui/controller/main.rb +1 -1
  4. data/data/webgen/website_skeleton/ext/init.rb +6 -0
  5. data/data/webgen/website_styles/1024px/src/default.css +188 -188
  6. data/data/webgen/website_styles/1024px/src/default.template +51 -51
  7. data/data/webgen/website_styles/andreas00/src/default.template +1 -1
  8. data/data/webgen/website_styles/andreas01/src/default.css +8 -8
  9. data/data/webgen/website_styles/andreas01/src/default.template +1 -1
  10. data/data/webgen/website_styles/andreas03/src/default.css +3 -3
  11. data/data/webgen/website_styles/andreas03/src/default.template +2 -2
  12. data/data/webgen/website_styles/andreas04/src/default.css +1 -1
  13. data/data/webgen/website_styles/andreas05/src/default.css +3 -3
  14. data/data/webgen/website_styles/andreas05/src/default.template +26 -26
  15. data/data/webgen/website_styles/andreas06/src/default.css +6 -6
  16. data/data/webgen/website_styles/andreas06/src/default.template +1 -1
  17. data/data/webgen/website_styles/andreas07/src/default.css +6 -6
  18. data/data/webgen/website_styles/andreas08/src/default.css +7 -7
  19. data/data/webgen/website_styles/andreas08/src/default.template +2 -2
  20. data/data/webgen/website_styles/andreas09/src/default.css +3 -3
  21. data/data/webgen/website_styles/andreas09/src/default.template +1 -1
  22. data/data/webgen/website_styles/simple/src/default.css +84 -84
  23. data/data/webgen/website_styles/simple/src/default.template +1 -1
  24. data/doc/index.page +27 -12
  25. data/doc/manual.page +52 -10
  26. data/doc/reference_configuration.page +108 -52
  27. data/doc/reference_metainfo.page +77 -2
  28. data/doc/sourcehandler/feed.page +82 -0
  29. data/doc/sourcehandler/metainfo.page +3 -2
  30. data/doc/sourcehandler/sitemap.page +46 -0
  31. data/doc/tag.template +2 -3
  32. data/doc/tag/breadcrumbtrail.page +11 -3
  33. data/doc/tag/menu.page +6 -4
  34. data/doc/tag/sitemap.page +31 -0
  35. data/doc/upgrading.page +67 -0
  36. data/lib/webgen/cli/utils.rb +4 -4
  37. data/lib/webgen/cli/webgui_command.rb +2 -1
  38. data/lib/webgen/common.rb +10 -0
  39. data/lib/webgen/common/sitemap.rb +76 -0
  40. data/lib/webgen/configuration.rb +64 -1
  41. data/lib/webgen/contentprocessor.rb +1 -1
  42. data/lib/webgen/contentprocessor/builder.rb +1 -1
  43. data/lib/webgen/contentprocessor/erb.rb +1 -1
  44. data/lib/webgen/contentprocessor/haml.rb +1 -1
  45. data/lib/webgen/contentprocessor/maruku.rb +1 -1
  46. data/lib/webgen/contentprocessor/sass.rb +1 -1
  47. data/lib/webgen/coreext.rb +10 -0
  48. data/lib/webgen/default_config.rb +35 -4
  49. data/lib/webgen/node.rb +12 -6
  50. data/lib/webgen/page.rb +1 -1
  51. data/lib/webgen/path.rb +1 -1
  52. data/lib/webgen/sourcehandler.rb +11 -6
  53. data/lib/webgen/sourcehandler/base.rb +5 -2
  54. data/lib/webgen/sourcehandler/feed.rb +121 -0
  55. data/lib/webgen/sourcehandler/metainfo.rb +22 -13
  56. data/lib/webgen/sourcehandler/page.rb +5 -3
  57. data/lib/webgen/sourcehandler/sitemap.rb +60 -0
  58. data/lib/webgen/sourcehandler/template.rb +5 -1
  59. data/lib/webgen/sourcehandler/virtual.rb +1 -0
  60. data/lib/webgen/tag.rb +1 -0
  61. data/lib/webgen/tag/breadcrumbtrail.rb +42 -10
  62. data/lib/webgen/tag/langbar.rb +1 -1
  63. data/lib/webgen/tag/menu.rb +10 -14
  64. data/lib/webgen/tag/sitemap.rb +42 -0
  65. data/lib/webgen/tree.rb +1 -1
  66. data/lib/webgen/version.rb +1 -1
  67. data/lib/webgen/website.rb +5 -6
  68. data/misc/default.css +6 -2
  69. data/test/helper.rb +13 -0
  70. data/test/test_common_sitemap.rb +56 -0
  71. data/test/test_configuration.rb +24 -0
  72. data/test/test_contentprocessor_maruku.rb +4 -1
  73. data/test/test_node.rb +4 -1
  74. data/test/test_page.rb +11 -5
  75. data/test/test_path.rb +10 -10
  76. data/test/test_sourcehandler_feed.rb +74 -0
  77. data/test/test_sourcehandler_metainfo.rb +26 -12
  78. data/test/test_sourcehandler_page.rb +1 -0
  79. data/test/test_sourcehandler_sitemap.rb +47 -0
  80. data/test/test_sourcehandler_template.rb +3 -0
  81. data/test/test_sourcehandler_virtual.rb +4 -1
  82. data/test/test_tag_breadcrumbtrail.rb +33 -23
  83. data/test/test_tag_menu.rb +24 -25
  84. data/test/test_tag_sitemap.rb +44 -0
  85. metadata +37 -4
@@ -0,0 +1,42 @@
1
+ require 'webgen/websiteaccess'
2
+ require 'webgen/tag'
3
+
4
+ module Webgen::Tag
5
+
6
+ # Generates a sitemap. The sitemap contains the hierarchy of all pages on the web site.
7
+ class Sitemap
8
+
9
+ include Base
10
+ include Webgen::WebsiteAccess
11
+
12
+ # Create the sitemap.
13
+ def call(tag, body, context)
14
+ tree = website.blackboard.invoke(:create_sitemap, context.dest_node, context.content_node.lang, @params)
15
+ (tree.children.empty? ? '' : output_sitemap(tree, context))
16
+ end
17
+
18
+ #######
19
+ private
20
+ #######
21
+
22
+ # The modified tag base to support the easy specification of common.sitemap.* options.
23
+ def tag_config_base
24
+ 'common.sitemap'
25
+ end
26
+
27
+ # Create the HTML representation of the sitemap nodes in +tree+ in respect to +context+.
28
+ def output_sitemap(tree, context)
29
+ out = "<ul>"
30
+ tree.children.each do |child|
31
+ sub = (child.children.length > 0 ? output_sitemap(child, context) : '')
32
+ out << "<li>" + context.dest_node.link_to(child.node, :lang => child.node.lang || context.content_node.lang)
33
+ out << sub
34
+ out << "</li>"
35
+ end
36
+ out << "</ul>"
37
+ out
38
+ end
39
+
40
+ end
41
+
42
+ end
@@ -64,7 +64,7 @@ module Webgen
64
64
  n = node_or_alcn.kind_of?(Node) ? node_or_alcn : @node_access[:alcn][node_or_alcn]
65
65
  return if n.nil? || n == @dummy_root || (n.is_directory? && !delete_dir)
66
66
 
67
- n.children.dup.each {|child| delete_node(child, true)}
67
+ n.children.dup.each {|child| delete_node(child, delete_dir)}
68
68
 
69
69
  website.blackboard.dispatch_msg(:before_node_deleted, n)
70
70
  n.parent.children.delete(n)
@@ -1,6 +1,6 @@
1
1
  module Webgen
2
2
 
3
3
  # The version of webgen.
4
- VERSION = '0.5.2'
4
+ VERSION = '0.5.3'
5
5
 
6
6
  end
@@ -4,6 +4,7 @@ require 'set'
4
4
  require 'fileutils'
5
5
 
6
6
  # Requirements for Website
7
+ require 'webgen/coreext'
7
8
  require 'webgen/loggable'
8
9
  require 'webgen/logger'
9
10
  require 'webgen/configuration'
@@ -13,6 +14,7 @@ require 'webgen/cache'
13
14
  require 'webgen/tree'
14
15
 
15
16
  # Files for autoloading
17
+ require 'webgen/common'
16
18
  require 'webgen/source'
17
19
  require 'webgen/output'
18
20
  require 'webgen/sourcehandler'
@@ -194,12 +196,9 @@ module Webgen
194
196
  config = YAML::load(File.read(file)) || {}
195
197
  raise 'Structure of config file is not valid, has to be a Hash' if !config.kind_of?(Hash)
196
198
  config.each do |key, value|
197
- if key == 'default_meta_info'
198
- value.each do |klass_name, options|
199
- @config['sourcehandler.default_meta_info'][klass_name].update(options)
200
- end
201
- else
202
- @config[key] = value
199
+ case key
200
+ when *Webgen::Configuration::Helpers.public_instance_methods(false) then @config.send(key, value)
201
+ else @config[key] = value
203
202
  end
204
203
  end
205
204
  rescue RuntimeError, ArgumentError => e
@@ -54,8 +54,8 @@ h3 { font-size: 1.3em; }
54
54
 
55
55
  #sidebar h1 {
56
56
  font: bold 1.4em 'Trebuchet MS', Arial, Sans-serif;
57
- background: url(images/arrow.gif) no-repeat 5px .6em;
58
- padding: 7px 0 7px 30px;
57
+ background: url(images/arrow.gif) no-repeat 0px .6em;
58
+ padding: 7px 0 7px 25px;
59
59
  color: #193441;
60
60
  }
61
61
 
@@ -217,6 +217,10 @@ blockquote pre {
217
217
  margin: 0; padding: 10px;
218
218
  background-color: #91AA9D;
219
219
  }
220
+ #sidebar p {
221
+ margin: 0px;
222
+ padding-left: 10px;
223
+ }
220
224
  #sidebar ul {
221
225
  list-style: inside square;
222
226
  margin: 0px;
@@ -23,6 +23,19 @@ module Test
23
23
  path
24
24
  end
25
25
 
26
+ def create_sitemap_nodes
27
+ {
28
+ :root => root = Webgen::Node.new(Webgen::Tree.new.dummy_root, '/', '/', {'index_path' => 'index.html'}),
29
+ :dir1 => dir1 = Webgen::Node.new(root, '/dir1/', 'dir1/'),
30
+ :file11_en => file11 = Webgen::Node.new(dir1, '/dir1/file11.en.html', 'file11.html', {'lang' => 'en', 'in_menu' => true, 'kind' => 'page'}),
31
+ :file11_en_f1 => file11_f1 = Webgen::Node.new(file11, '/dir1/file11.en.html#f1', '#f1', {'in_menu' => true}),
32
+ :dir2 => dir2 = Webgen::Node.new(root, '/dir2/', 'dir2/', {'kind' => 'directory'}),
33
+ :file21_en => Webgen::Node.new(dir2, '/dir2/file21.en.html', 'file21.html', {'lang' => 'en', 'in_menu' => false, 'kind' => 'other'}),
34
+ :file1_de => Webgen::Node.new(root, '/file1.de.html', 'file1.html', {'lang' => 'de', 'in_menu' => true, 'kind' => 'page'}),
35
+ :index_en => Webgen::Node.new(root, '/index.en.html', 'index.html', {'lang' => 'en', 'kind' => 'page'}),
36
+ }
37
+ end
38
+
26
39
  end
27
40
 
28
41
  end
@@ -0,0 +1,56 @@
1
+ require 'test/unit'
2
+ require 'helper'
3
+ require 'webgen/tree'
4
+ require 'webgen/contentprocessor'
5
+ require 'webgen/common'
6
+
7
+ class TestCommonSitemap < Test::Unit::TestCase
8
+
9
+ include Test::WebsiteHelper
10
+
11
+ def setup
12
+ super
13
+ @obj = Webgen::Common::Sitemap.new
14
+ @nodes = create_sitemap_nodes
15
+ end
16
+
17
+ def do_assert(node, lang, honor_in_menu, any_lang, used_kinds, result)
18
+ assert_equal(result.map {|name| @nodes[name].absolute_lcn },
19
+ @obj.create_sitemap(node, lang, {
20
+ 'common.sitemap.honor_in_menu' => honor_in_menu,
21
+ 'common.sitemap.any_lang' => any_lang,
22
+ 'common.sitemap.used_kinds' => used_kinds
23
+ }).to_lcn_list.flatten)
24
+ end
25
+
26
+ def test_create_sitemap_and_node_chagned
27
+ do_assert(@nodes[:file11_en], 'en', false, false, ['page'],
28
+ [:dir1, :file11_en, :index_en])
29
+ do_assert(@nodes[:file11_en], 'en', true, false, ['page'],
30
+ [:dir1, :file11_en])
31
+ do_assert(@nodes[:file11_en], 'en', false, false, ['page', 'other'],
32
+ [:dir1, :file11_en, :dir2, :file21_en, :index_en])
33
+ do_assert(@nodes[:file11_en], 'en', false, false, [],
34
+ [:dir1, :file11_en, :file11_en_f1, :dir2, :file21_en, :index_en])
35
+ do_assert(@nodes[:file11_en], 'en', false, false, ['noone'],
36
+ [])
37
+ do_assert(@nodes[:file11_en], 'en', false, false, ['page', 'directory'],
38
+ [:dir1, :file11_en, :dir2, :index_en])
39
+ do_assert(@nodes[:file11_en], 'en', true, false, ['page', 'directory'],
40
+ [:dir1, :file11_en])
41
+
42
+ do_assert(@nodes[:file1_de], 'de', false, false, ['page'],
43
+ [:file1_de])
44
+ do_assert(@nodes[:file1_de], 'de', false, true, ['page'],
45
+ [:dir1, :file11_en, :file1_de, :index_en])
46
+
47
+ @nodes[:file11_en].dirty = false
48
+ @website.blackboard.dispatch_msg(:node_changed?, @nodes[:file11_en])
49
+ assert(!@nodes[:file11_en].dirty)
50
+
51
+ @nodes[:file11_en].dirty_meta_info = true
52
+ @website.blackboard.dispatch_msg(:node_changed?, @nodes[:file11_en])
53
+ assert(@nodes[:file11_en].dirty)
54
+ end
55
+
56
+ end
@@ -1,5 +1,6 @@
1
1
  require 'test/unit'
2
2
  require 'webgen/configuration'
3
+ require 'webgen/sourcehandler'
3
4
 
4
5
  class TestConfiguration < Test::Unit::TestCase
5
6
 
@@ -32,4 +33,27 @@ class TestConfiguration < Test::Unit::TestCase
32
33
  assert_raise(ArgumentError) { @config['not.existing'] = :newvalue}
33
34
  end
34
35
 
36
+ def test_set_options_using_helpers
37
+ @config = Webgen::Configuration.new
38
+ @config.sourcehandler.default_meta_info({'Webgen::SourceHandler::Page' => {'in_menu' => true}})
39
+ @config.sourcehandler.patterns({'Webgen::SourceHandler::Page' => ['**/*.page']})
40
+
41
+ @config.default_meta_info('Page' => {'in_menu' => false, 'test' => true})
42
+ assert_equal({'in_menu' => false, 'test' => true}, @config['sourcehandler.default_meta_info']['Webgen::SourceHandler::Page'])
43
+ @config.default_meta_info('Webgen::SourceHandler::Page' => {'in_menu' => true, :action => 'replace'})
44
+ assert_equal({'in_menu' => true}, @config['sourcehandler.default_meta_info']['Webgen::SourceHandler::Page'])
45
+ @config.default_meta_info('Other' => {'in_menu' => false})
46
+ assert_equal({'in_menu' => false}, @config['sourcehandler.default_meta_info']['Other'])
47
+ assert_raise(ArgumentError) { @config.default_meta_info([5,6]) }
48
+
49
+ @config.patterns('Page' => ['**/*.html'])
50
+ assert_equal(['**/*.html'], @config['sourcehandler.patterns']['Webgen::SourceHandler::Page'])
51
+ @config.patterns('Page' => {'del' => ['**/*.html'], 'add' => ['**/*.page']})
52
+ assert_equal(['**/*.page'], @config['sourcehandler.patterns']['Webgen::SourceHandler::Page'])
53
+ @config.patterns('Other' => {'del' => ['**/*.html'], 'add' => ['**/*.page']})
54
+ assert_equal(['**/*.page'], @config['sourcehandler.patterns']['Other'])
55
+ assert_raise(ArgumentError) { @config.patterns([5,6]) }
56
+ assert_raise(ArgumentError) { @config.patterns('Page' => 5) }
57
+ end
58
+
35
59
  end
@@ -1,11 +1,14 @@
1
1
  require 'test/unit'
2
+ require 'webgen/node'
3
+ require 'webgen/tree'
2
4
  require 'webgen/contentprocessor'
3
5
 
4
6
  class TestContentProcessorMaruku < Test::Unit::TestCase
5
7
 
6
8
  def test_call
7
9
  @obj = Webgen::ContentProcessor::Maruku.new
8
- context = Webgen::ContentProcessor::Context.new(:content => '# header')
10
+ node = Webgen::Node.new(Webgen::Node.new(Webgen::Tree.new.dummy_root, '/', '/'), 'test', 'test')
11
+ context = Webgen::ContentProcessor::Context.new(:content => '# header', :chain => [node])
9
12
  assert_equal('<h1 id=\'header\'>header</h1>', @obj.call(context).content)
10
13
 
11
14
  context.content = "# head*d* {#das .dsaf "
@@ -27,6 +27,7 @@ class TestNode < Test::Unit::TestCase
27
27
  :dir_file_frag => Webgen::Node.new(dir_file, '/dir/file.html#frag', '#frag'),
28
28
  :dir2 => dir2 = Webgen::Node.new(node, '/dir2/', 'dir2/', {'index_path' => 'index.html', 'title' => 'dir2'}),
29
29
  :dir2_index_en => Webgen::Node.new(dir2, '/dir2/index.html', 'index.html', {'lang' => 'en', 'routed_title' => 'routed', 'title' => 'index'}),
30
+ :dir2_index_de => Webgen::Node.new(dir2, '/dir2/index.de.html', 'index.html', {'lang' => 'de', 'routed_title' => 'routed_de', 'title' => 'index'}),
30
31
  }
31
32
  end
32
33
 
@@ -308,10 +309,12 @@ class TestNode < Test::Unit::TestCase
308
309
  nodes[:somename_en].link_to(nodes[:somename_en_frag], :link_text => 'link_text', 'attr1' => 'val1'))
309
310
 
310
311
  # links to directories
311
- assert_equal('<a href="dir2/">dir2</a>',
312
+ assert_equal('<a href="dir2/index.de.html">routed_de</a>',
312
313
  nodes[:somename_de].link_to(nodes[:dir2]))
313
314
  assert_equal('<a href="dir2/index.html">routed</a>',
314
315
  nodes[:somename_en].link_to(nodes[:dir2]))
316
+ assert_equal('<a href="dir2/index.de.html">routed_de</a>',
317
+ nodes[:somename_en].link_to(nodes[:dir2], :lang => 'de'))
315
318
  assert_equal('<span>routed</span>',
316
319
  nodes[:dir2_index_en].link_to(nodes[:dir2]))
317
320
 
@@ -64,6 +64,16 @@ class TestPage < Test::Unit::TestCase
64
64
  - name: content
65
65
  content: ''
66
66
 
67
+ # with only meta information, no blocks
68
+ - in: |
69
+ ---
70
+ key: value
71
+
72
+ meta_info: {key: value}
73
+ blocks:
74
+ - name: content
75
+ content: ''
76
+
67
77
  # block with escaped ---
68
78
  - in: |
69
79
  before
@@ -123,11 +133,6 @@ EOF
123
133
  ---
124
134
  asdf kadsfakl
125
135
 
126
- # no block specified
127
- - |
128
- ---
129
- doit: now
130
-
131
136
  # two blocks with same name
132
137
  - |
133
138
  aasdf
@@ -156,6 +161,7 @@ EOF
156
161
  YAML::load(VALID).each_with_index do |data, oindex|
157
162
  d = Webgen::Page.from_data(data['in'])
158
163
  assert_equal(data['meta_info'], d.meta_info, "test item #{oindex} - meta info")
164
+ assert_equal(data['blocks'].length*2, d.blocks.length)
159
165
  data['blocks'].each_with_index do |b, index|
160
166
  index += 1
161
167
  assert_equal(b['name'], d.blocks[index].name, "test item #{oindex} - name")
@@ -18,26 +18,26 @@ class TestPath < Test::Unit::TestCase
18
18
  check_proc.call(Webgen::Path.new('5.base_name-one.de.page'),
19
19
  '5.base_name-one.de.page', './', 'base_name-one', 'de', 'page', 'base_name-one.page', 5, 'Base name one')
20
20
  check_proc.call(Webgen::Path.new('dir/default.png'),
21
- 'dir/default.png', 'dir/', 'default', nil, 'png', 'default.png', 0, 'Default')
21
+ 'dir/default.png', 'dir/', 'default', nil, 'png', 'default.png', nil, 'Default')
22
22
  check_proc.call(Webgen::Path.new('default.en.png'),
23
- 'default.en.png', './', 'default', 'en', 'png', 'default.png', 0, 'Default')
23
+ 'default.en.png', './', 'default', 'en', 'png', 'default.png', nil, 'Default')
24
24
  check_proc.call(Webgen::Path.new('default.deu.png'),
25
- 'default.deu.png', './', 'default', 'de', 'png', 'default.png', 0, 'Default')
25
+ 'default.deu.png', './', 'default', 'de', 'png', 'default.png', nil, 'Default')
26
26
  check_proc.call(Webgen::Path.new('default.template'),
27
- 'default.template', './', 'default', nil, 'template', 'default.template', 0, 'Default')
27
+ 'default.template', './', 'default', nil, 'template', 'default.template', nil, 'Default')
28
28
  check_proc.call(Webgen::Path.new('default.en.tar.bz2'),
29
- 'default.en.tar.bz2', './', 'default', 'en', 'tar.bz2', 'default.tar.bz2', 0, 'Default')
29
+ 'default.en.tar.bz2', './', 'default', 'en', 'tar.bz2', 'default.tar.bz2', nil, 'Default')
30
30
  check_proc.call(Webgen::Path.new('default.tar.bz2'),
31
- 'default.tar.bz2', './', 'default', nil, 'tar.bz2', 'default.tar.bz2', 0, 'Default')
31
+ 'default.tar.bz2', './', 'default', nil, 'tar.bz2', 'default.tar.bz2', nil, 'Default')
32
32
  check_proc.call(Webgen::Path.new('default'),
33
- 'default', './', 'default', nil, '', 'default', 0, 'Default')
33
+ 'default', './', 'default', nil, '', 'default', nil, 'Default')
34
34
  check_proc.call(Webgen::Path.new('.htaccess'),
35
- '.htaccess', './', '', nil, 'htaccess', '.htaccess', 0, '')
35
+ '.htaccess', './', '', nil, 'htaccess', '.htaccess', nil, '')
36
36
 
37
37
  check_proc.call(Webgen::Path.new('/'),
38
- '/', '/', '/', nil, '', '/', 0, '/')
38
+ '/', '/', '/', nil, '', '/', nil, '/')
39
39
  check_proc.call(Webgen::Path.new('/dir/'),
40
- '/dir/', '/', 'dir', nil, '', 'dir', 0, 'Dir')
40
+ '/dir/', '/', 'dir', nil, '', 'dir', nil, 'Dir')
41
41
  end
42
42
 
43
43
  def test_mount_at
@@ -0,0 +1,74 @@
1
+ require 'test/unit'
2
+ require 'helper'
3
+ require 'webgen/sourcehandler/feed'
4
+ require 'stringio'
5
+
6
+ class TestSourceHandlerFeed < Test::Unit::TestCase
7
+
8
+ include Test::WebsiteHelper
9
+
10
+ FEED_CONTENT = <<EOF
11
+ ---
12
+ site_url: http://example.com
13
+ entries: *.html
14
+ author: Thomas Leitner
15
+ --- name:rss_template
16
+ hallo
17
+ EOF
18
+ def setup
19
+ super
20
+ @nodes = {
21
+ :root => root = Webgen::Node.new(Webgen::Tree.new.dummy_root, '/', '/', {'index_path' => 'index.html'}),
22
+ :file1_en => Webgen::Node.new(root, '/file1.en.html', 'file1.html', {'lang' => 'en', 'in_menu' => true, 'modified_at' => Time.now}),
23
+ :index_en => Webgen::Node.new(root, '/index.en.html', 'index.html', {'lang' => 'en', 'modified_at' => Time.now - 1, 'author' => 'test'}),
24
+ }
25
+ @nodes[:index_en].node_info[:page] = Webgen::Page.from_data("hallo")
26
+ @obj = Webgen::SourceHandler::Feed.new
27
+ @path = path_with_meta_info('/test.feed', {}, @obj.class.name) {StringIO.new(FEED_CONTENT)}
28
+ end
29
+
30
+ def test_create_node
31
+ atom_node, rss_node = @obj.create_node(@nodes[:root], @path)
32
+
33
+ assert_not_nil(atom_node)
34
+ assert_not_nil(rss_node)
35
+ assert_kind_of(Webgen::Page, atom_node.node_info[:feed])
36
+ assert_equal('atom', atom_node.node_info[:feed_type])
37
+ assert_equal('rss', rss_node.node_info[:feed_type])
38
+
39
+ assert_equal([nil, nil], @obj.create_node(@nodes[:root], @path))
40
+ end
41
+
42
+ def test_content
43
+ atom_node, rss_node = @obj.create_node(@nodes[:root], @path)
44
+ assert_equal('hallo', rss_node.content)
45
+ assert(atom_node.content =~ /Thomas Leitner/)
46
+ end
47
+
48
+ def test_feed_entries
49
+ atom_node, rss_node = @obj.create_node(@nodes[:root], @path)
50
+ assert_equal([@nodes[:index_en]], atom_node.feed_entries)
51
+ assert_equal([@nodes[:index_en]], rss_node.feed_entries)
52
+ end
53
+
54
+ def test_node_changed
55
+ atom_node, rss_node = @obj.create_node(@nodes[:root], @path)
56
+ assert(atom_node.changed?)
57
+
58
+ atom_node.content # populate cache
59
+ @website.cache.old_data.update(@website.cache.new_data)
60
+
61
+ atom_node.dirty = false
62
+ assert(atom_node.changed?)
63
+
64
+ atom_node.dirty = false
65
+ @nodes[:file1_en].dirty = false
66
+ @nodes[:index_en].dirty = false
67
+ assert(!atom_node.changed?)
68
+
69
+ atom_node.dirty = false
70
+ atom_node['entries'] = 'file.*.html'
71
+ assert(atom_node.changed?)
72
+ end
73
+
74
+ end
@@ -34,11 +34,18 @@ EOF
34
34
  assert_equal({'/**/*' => {'after' => 'valaft'}}, @node.node_info[:mi_alcn])
35
35
  end
36
36
 
37
+ def test_meta_info_changed
38
+ other = TestSH.new.create_node(@root, path_with_meta_info('/default.css'))
39
+ assert(@obj.send(:meta_info_changed?, @node, other))
40
+ @website.cache.old_data.update(@website.cache.new_data)
41
+ assert(!@obj.send(:meta_info_changed?, @node, other))
42
+ end
43
+
37
44
  def test_mark_all_matched_dirty
38
45
  other = TestSH.new.create_node(@root, path_with_meta_info('/default.css'))
39
- other.dirty = false
46
+ other.dirty_meta_info = false
40
47
  @obj.send(:mark_all_matched_dirty, @node)
41
- assert(other.dirty)
48
+ assert(other.dirty_meta_info)
42
49
  end
43
50
 
44
51
  def test_before_node_created
@@ -55,21 +62,28 @@ EOF
55
62
 
56
63
  def test_before_node_deleted
57
64
  other = TestSH.new.create_node(@root, path_with_meta_info('/default.css'))
58
- other.dirty = false
65
+ other.dirty_meta_info = false
66
+
67
+ @website.blackboard.del_service(:source_paths)
68
+ @website.blackboard.add_service(:source_paths) { {'/metainfo' => ''} }
69
+ @website.blackboard.dispatch_msg(:before_node_deleted, @node)
70
+ assert(!other.dirty_meta_info)
71
+
72
+ @website.blackboard.del_service(:source_paths)
73
+ @website.blackboard.add_service(:source_paths) { {} }
59
74
  @website.blackboard.dispatch_msg(:before_node_deleted, @node)
60
- assert(other.dirty)
75
+ assert(other.dirty_meta_info)
61
76
  end
62
77
 
63
- def test_node_changed
64
- @node.dirty = false
65
- @website.blackboard.dispatch_msg(:node_changed?, @node)
66
- assert(!@node.dirty)
78
+ def test_node_meta_info_changed
79
+ @node.dirty_meta_info = false
80
+ @website.blackboard.dispatch_msg(:node_meta_info_changed?, @node)
81
+ assert(!@node.dirty_meta_info)
67
82
 
68
- @node.dirty = true
69
83
  other = TestSH.new.create_node(@root, path_with_meta_info('/default.css'))
70
- other.dirty = false
71
- @website.blackboard.dispatch_msg(:node_changed?, other)
72
- assert(other.dirty)
84
+ other.dirty_meta_info = false
85
+ @website.blackboard.dispatch_msg(:node_meta_info_changed?, other)
86
+ assert(other.dirty_meta_info)
73
87
  end
74
88
 
75
89
  def test_content