gettalong-webgen 0.5.5.20081001 → 0.5.5.20081010

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 (66) hide show
  1. data/doc/extensions.page +1 -1
  2. data/doc/reference_configuration.page +85 -0
  3. data/doc/tag/tikz.page +158 -0
  4. data/lib/webgen/common/sitemap.rb +2 -3
  5. data/lib/webgen/contentprocessor/blocks.rb +0 -2
  6. data/lib/webgen/contentprocessor/context.rb +0 -3
  7. data/lib/webgen/contentprocessor/erubis.rb +0 -2
  8. data/lib/webgen/default_config.rb +8 -1
  9. data/lib/webgen/node.rb +49 -24
  10. data/lib/webgen/page.rb +25 -15
  11. data/lib/webgen/path.rb +20 -10
  12. data/lib/webgen/sourcehandler/base.rb +36 -14
  13. data/lib/webgen/sourcehandler/copy.rb +2 -2
  14. data/lib/webgen/sourcehandler/directory.rb +16 -13
  15. data/lib/webgen/sourcehandler/feed.rb +3 -6
  16. data/lib/webgen/sourcehandler/fragment.rb +6 -11
  17. data/lib/webgen/sourcehandler/memory.rb +41 -0
  18. data/lib/webgen/sourcehandler/metainfo.rb +21 -21
  19. data/lib/webgen/sourcehandler/page.rb +8 -12
  20. data/lib/webgen/sourcehandler/sitemap.rb +0 -2
  21. data/lib/webgen/sourcehandler/template.rb +0 -4
  22. data/lib/webgen/sourcehandler/virtual.rb +18 -18
  23. data/lib/webgen/sourcehandler.rb +83 -70
  24. data/lib/webgen/tag/breadcrumbtrail.rb +1 -4
  25. data/lib/webgen/tag/coderay.rb +0 -3
  26. data/lib/webgen/tag/date.rb +0 -2
  27. data/lib/webgen/tag/executecommand.rb +1 -2
  28. data/lib/webgen/tag/includefile.rb +1 -3
  29. data/lib/webgen/tag/langbar.rb +1 -4
  30. data/lib/webgen/tag/menu.rb +1 -4
  31. data/lib/webgen/tag/metainfo.rb +0 -2
  32. data/lib/webgen/tag/relocatable.rb +2 -3
  33. data/lib/webgen/tag/sitemap.rb +0 -3
  34. data/lib/webgen/tag/tikz.rb +117 -0
  35. data/lib/webgen/tag.rb +1 -0
  36. data/lib/webgen/tree.rb +9 -5
  37. data/test/test_common_sitemap.rb +4 -4
  38. data/test/test_contentprocessor_context.rb +1 -1
  39. data/test/test_contentprocessor_redcloth.rb +1 -0
  40. data/test/test_contentprocessor_tags.rb +1 -1
  41. data/test/test_node.rb +33 -13
  42. data/test/test_output_filesystem.rb +1 -1
  43. data/test/test_page.rb +13 -4
  44. data/test/test_path.rb +37 -5
  45. data/test/test_source_filesystem.rb +1 -1
  46. data/test/test_source_stacked.rb +1 -1
  47. data/test/test_sourcehandler_base.rb +30 -1
  48. data/test/test_sourcehandler_copy.rb +1 -1
  49. data/test/test_sourcehandler_directory.rb +16 -1
  50. data/test/test_sourcehandler_feed.rb +6 -7
  51. data/test/test_sourcehandler_fragment.rb +1 -1
  52. data/test/test_sourcehandler_memory.rb +42 -0
  53. data/test/test_sourcehandler_metainfo.rb +23 -21
  54. data/test/test_sourcehandler_page.rb +5 -7
  55. data/test/test_sourcehandler_template.rb +1 -1
  56. data/test/test_sourcehandler_virtual.rb +2 -2
  57. data/test/test_tag_base.rb +0 -1
  58. data/test/test_tag_breadcrumbtrail.rb +4 -4
  59. data/test/test_tag_includefile.rb +3 -3
  60. data/test/test_tag_langbar.rb +5 -6
  61. data/test/test_tag_menu.rb +7 -7
  62. data/test/test_tag_metainfo.rb +1 -1
  63. data/test/test_tag_relocatable.rb +1 -1
  64. data/test/test_tag_tikz.rb +66 -0
  65. data/test/test_tree.rb +2 -7
  66. metadata +7 -2
@@ -1,6 +1,3 @@
1
- require 'webgen/tag'
2
- require 'webgen/websiteaccess'
3
-
4
1
  module Webgen::Tag
5
2
 
6
3
  # Generates a list with all the languages of the page.
@@ -41,7 +38,7 @@ module Webgen::Tag
41
38
  lang_nodes = all_lang_nodes(node.tree[acn, :acn]) rescue nil
42
39
  if !lang_nodes || lang_nodes.length != clang_nodes.length ||
43
40
  lang_nodes.any? {|n| n.meta_info_changed?}
44
- node.dirty = true
41
+ node.flag(:dirty)
45
42
  break
46
43
  end
47
44
  end
@@ -1,6 +1,3 @@
1
- require 'webgen/websiteaccess'
2
- require 'webgen/tag'
3
-
4
1
  module Webgen::Tag
5
2
 
6
3
  # Generates a menu that can be configured extensively.
@@ -90,7 +87,7 @@ module Webgen::Tag
90
87
  (tree_list && tree_list.flatten.any? do |alcn|
91
88
  (n = node.tree[alcn]) && (r = n.routing_node(cn.lang)) && r != node && r.meta_info_changed?
92
89
  end)
93
- node.dirty = true
90
+ node.flag(:dirty)
94
91
  break
95
92
  end
96
93
  end
@@ -1,5 +1,3 @@
1
- require 'webgen/tag'
2
-
3
1
  module Webgen::Tag
4
2
 
5
3
  # Provides easy access to the meta information of a node.
@@ -1,4 +1,3 @@
1
- require 'webgen/tag'
2
1
  require 'uri'
3
2
 
4
3
  module Webgen::Tag
@@ -27,11 +26,11 @@ module Webgen::Tag
27
26
  end
28
27
  if result.empty?
29
28
  log(:error) { "Could not resolve path '#{uri_string}' in <#{context.ref_node.absolute_lcn}>" }
30
- context.dest_node.dirty = true
29
+ context.dest_node.flag(:dirty)
31
30
  end
32
31
  rescue URI::InvalidURIError => e
33
32
  log(:error) { "Error while parsing path for tag relocatable in <#{context.ref_node.absolute_lcn}>: #{e.message}" }
34
- context.dest_node.dirty = true
33
+ context.dest_node.flag(:dirty)
35
34
  end
36
35
  end
37
36
  result
@@ -1,6 +1,3 @@
1
- require 'webgen/websiteaccess'
2
- require 'webgen/tag'
3
-
4
1
  module Webgen::Tag
5
2
 
6
3
  # Generates a sitemap. The sitemap contains the hierarchy of all pages on the web site.
@@ -0,0 +1,117 @@
1
+ require 'erb'
2
+ require 'tempfile'
3
+ require 'fileutils'
4
+
5
+ module Webgen::Tag
6
+
7
+ # This tag allows the creation and inclusion of complex graphics using the PGF/TikZ library of
8
+ # LaTeX. You will need a current LaTeX distribution and the +convert+ utility from ImageMagick.
9
+ class TikZ
10
+
11
+ include Webgen::Tag::Base
12
+ include Webgen::WebsiteAccess
13
+
14
+ LATEX_TEMPLATE = <<EOF
15
+ \\nonstopmode \\documentclass{article} \\usepackage{tikz} \\pagestyle{empty}
16
+ <% if param('tag.tikz.libraries') %>
17
+ \\usetikzlibrary{<%= param('tag.tikz.libraries').join(',') %>}
18
+ <% end %>
19
+ \\begin{document}
20
+ <% if param('tag.tikz.opts') %>
21
+ \\begin{tikzpicture}[<%= param('tag.tikz.opts') %>]
22
+ <% else %>
23
+ \\begin{tikzpicture}
24
+ <% end %>
25
+ <%= body %>
26
+ \\end{tikzpicture}
27
+ \\end{document}
28
+ EOF
29
+
30
+ # Create a graphic from the commands in the body of the tag.
31
+ def call(tag, body, context)
32
+ path = param('tag.tikz.path')
33
+ path = Pathname.new(path =~ /^\// ? path : File.join(context.ref_node.parent.absolute_lcn, path)).cleanpath.to_s
34
+
35
+ mem_handler = website.cache.instance('Webgen::SourceHandler::Memory')
36
+ src_path = context.ref_node.node_info[:src]
37
+ parent = website.blackboard.invoke(:create_directories, context.ref_node.tree.root, File.dirname(path), src_path)
38
+ params = @params
39
+
40
+ node = website.blackboard.invoke(:create_nodes, parent.tree, parent.absolute_lcn,
41
+ Webgen::Path.new(path, src_path), mem_handler) do |node_parent, node_path|
42
+ mem_handler.create_node(node_parent, node_path, context.ref_node.absolute_lcn) do |pic_node|
43
+ set_params(params)
44
+ document = ERB.new(LATEX_TEMPLATE).result(binding)
45
+ pic_path = compile(document, File.extname(path), context)
46
+ set_params(nil)
47
+ if pic_path
48
+ io = Webgen::Path::SourceIO.new { File.open(pic_path, 'rb') }
49
+ else
50
+ pic_node.flag(:dirty)
51
+ nil
52
+ end
53
+ end
54
+ end.first
55
+ attrs = param('tag.tikz.img_attr').collect {|name,value| "#{name.to_s}=\"#{value}\"" }.sort.unshift('').join(' ')
56
+ "<img src=\"#{context.dest_node.route_to(node)}\"#{attrs} />"
57
+ end
58
+
59
+ #######
60
+ private
61
+ #######
62
+
63
+ # Compile the LaTeX +document+ and convert the resulting PDF to the correct output image format
64
+ # specified by +ext+ (the extension needs to include the dot).
65
+ def compile(document, ext, context)
66
+ file = Tempfile.new('webgen-tikz')
67
+ file.write(document)
68
+ file.close
69
+
70
+ FileUtils.mv(file.path, file.path + '.tex')
71
+ cmd_prefix = "cd #{File.dirname(file.path)}; "
72
+ output = `#{cmd_prefix} pdflatex --shell-escape -interaction=batchmode #{File.basename(file.path)}.tex`
73
+ if $?.exitstatus != 0
74
+ errors = output.scan(/^!(.*\n.*)/).join("\n")
75
+ log(:error) { "There was an error creating a TikZ picture in <#{context.ref_node.absolute_lcn}>: #{errors}"}
76
+ context.dest_node.flag(:dirty)
77
+ nil
78
+ else
79
+ cmd = cmd_prefix + "pdfcrop #{File.basename(file.path)}.pdf #{File.basename(file.path)}.pdf; "
80
+ return unless run_command(cmd, context)
81
+
82
+ render_res, output_res = param('tag.tikz.resolution').split(' ')
83
+ if param('tag.tikz.transparent') && ext =~ /\.png/i
84
+ cmd = cmd_prefix +
85
+ "gs -dSAFER -dBATCH -dNOPAUSE -r#{render_res} -sDEVICE=pngalpha -dGraphicsAlphaBits=4 -dTextAlphaBits=4 " +
86
+ "-sOutputFile=#{File.basename(file.path)}#{ext} #{File.basename(file.path)}.pdf"
87
+ else
88
+ cmd = cmd_prefix + "convert -density #{render_res} #{File.basename(file.path)}.pdf #{File.basename(file.path)}#{ext}"
89
+ end
90
+ return unless run_command(cmd, context)
91
+
92
+ if render_res != output_res
93
+ cmd = cmd_prefix + "identify #{File.basename(file.path)}#{ext}"
94
+ return unless (output = run_command(cmd, context))
95
+ width, height = output.scan(/\s\d+x\d+\s/).first.strip.split('x').collect {|s| s.to_f * output_res.to_f / render_res.to_f }
96
+ cmd = cmd_prefix + "convert -resize #{width}x#{height} #{File.basename(file.path)}#{ext} #{File.basename(file.path)}#{ext}"
97
+ return unless run_command(cmd, context)
98
+ end
99
+ file.path + ext
100
+ end
101
+ end
102
+
103
+ # Runs the command +cmd+ and returns it's output if successful or +nil+ otherwise.
104
+ def run_command(cmd, context)
105
+ output = `#{cmd}`
106
+ if $?.exitstatus != 0
107
+ log(:error) { "There was an error running a command for a TikZ picture in <#{context.ref_node.absolute_lcn}>: #{output}"}
108
+ context.dest_node.flag(:dirty)
109
+ nil
110
+ else
111
+ output
112
+ end
113
+ end
114
+
115
+ end
116
+
117
+ end
data/lib/webgen/tag.rb CHANGED
@@ -17,6 +17,7 @@ module Webgen
17
17
  autoload :Coderay, 'webgen/tag/coderay'
18
18
  autoload :Date, 'webgen/tag/date'
19
19
  autoload :Sitemap, 'webgen/tag/sitemap'
20
+ autoload :TikZ, 'webgen/tag/tikz'
20
21
 
21
22
  end
22
23
 
data/lib/webgen/tree.rb CHANGED
@@ -51,6 +51,11 @@ module Webgen
51
51
  @node_access[:alcn][node.absolute_lcn] = node
52
52
  end
53
53
  (@node_access[:acn][node.absolute_cn] ||= []) << node
54
+ register_path(node)
55
+ end
56
+
57
+ # A utility method called by Node#reinit. This method should not be used directly!
58
+ def register_path(node)
54
59
  if @node_access[:path].has_key?(node.path)
55
60
  raise "Can't have two nodes with same output path: #{node.path}" unless node['no_output']
56
61
  else
@@ -58,13 +63,12 @@ module Webgen
58
63
  end
59
64
  end
60
65
 
61
- # Delete the node identified by +node_or_alcn+ and all of its children from the
62
- # tree. Directories are only deleted if +delete_dir+ is +true+.
63
- def delete_node(node_or_alcn, delete_dir = false)
66
+ # Delete the node identified by +node_or_alcn+ and all of its children from the tree.
67
+ def delete_node(node_or_alcn)
64
68
  n = node_or_alcn.kind_of?(Node) ? node_or_alcn : @node_access[:alcn][node_or_alcn]
65
- return if n.nil? || n == @dummy_root || (n.is_directory? && !delete_dir)
69
+ return if n.nil? || n == @dummy_root
66
70
 
67
- n.children.dup.each {|child| delete_node(child, delete_dir)}
71
+ n.children.dup.each {|child| delete_node(child)}
68
72
 
69
73
  website.blackboard.dispatch_msg(:before_node_deleted, n)
70
74
  n.parent.children.delete(n)
@@ -44,13 +44,13 @@ class TestCommonSitemap < Test::Unit::TestCase
44
44
  do_assert(@nodes[:file1_de], 'de', false, true, ['page'],
45
45
  [:dir1, :file11_en, :file1_de, :index_en])
46
46
 
47
- @nodes[:file11_en].dirty = false
47
+ @nodes[:file11_en].unflag(:dirty)
48
48
  @website.blackboard.dispatch_msg(:node_changed?, @nodes[:file11_en])
49
- assert(!@nodes[:file11_en].dirty)
49
+ assert(!@nodes[:file11_en].flagged(:dirty))
50
50
 
51
- @nodes[:file11_en].dirty_meta_info = true
51
+ @nodes[:file11_en].flag(:dirty_meta_info)
52
52
  @website.blackboard.dispatch_msg(:node_changed?, @nodes[:file11_en])
53
- assert(@nodes[:file11_en].dirty)
53
+ assert(@nodes[:file11_en].flagged(:dirty))
54
54
  end
55
55
 
56
56
  end
@@ -1,6 +1,6 @@
1
1
  require 'test/unit'
2
2
  require 'helper'
3
- require 'webgen/contentprocessor/context'
3
+ require 'webgen/contentprocessor'
4
4
 
5
5
  class TestContentProcessorContext < Test::Unit::TestCase
6
6
 
@@ -1,4 +1,5 @@
1
1
  require 'test/unit'
2
+ require 'webgen/websiteaccess'
2
3
  require 'webgen/contentprocessor'
3
4
 
4
5
  class TestContentProcessorRedCloth < Test::Unit::TestCase
@@ -1,7 +1,7 @@
1
1
  require 'test/unit'
2
2
  require 'helper'
3
3
  require 'webgen/tree'
4
- require 'webgen/contentprocessor/tags'
4
+ require 'webgen/contentprocessor'
5
5
 
6
6
  class TestContentProcessorTags < Test::Unit::TestCase
7
7
 
data/test/test_node.rb CHANGED
@@ -31,7 +31,7 @@ class TestNode < Test::Unit::TestCase
31
31
  }
32
32
  end
33
33
 
34
- def test_initialize
34
+ def test_initialize_and_reinit
35
35
  check_proc = proc do |node, parent, path, cn, lcn, alcn, lang, mi|
36
36
  assert_equal(parent, node.parent)
37
37
  assert_equal(path, node.path)
@@ -39,8 +39,8 @@ class TestNode < Test::Unit::TestCase
39
39
  assert_equal(lcn, node.lcn)
40
40
  assert_equal(alcn, node.absolute_lcn)
41
41
  assert_equal(lang, node.lang)
42
- assert(node.dirty)
43
- assert(node.created)
42
+ assert(node.flagged(:dirty))
43
+ assert(node.flagged(:created))
44
44
  assert_equal(mi, node.meta_info)
45
45
  assert_equal({:used_nodes => Set.new, :used_meta_info_nodes => Set.new}, node.node_info)
46
46
  mi.each {|k,v| assert_equal(v, node[k])}
@@ -55,9 +55,13 @@ class TestNode < Test::Unit::TestCase
55
55
 
56
56
  ['http://webgen.rubyforge.org', 'c:\\test'].each_with_index do |abspath, index|
57
57
  cn = 'test' + index.to_s + '.html'
58
- child = Webgen::Node.new(node, abspath, cn)
59
- check_proc.call(child, node, abspath, cn, cn, '/test/' + cn, nil, {})
58
+ c = Webgen::Node.new(node, abspath, cn)
59
+ check_proc.call(c, node, abspath, cn, cn, '/test/' + cn, nil, {})
60
60
  end
61
+
62
+ child.reinit('somename.en.html', {'lang' => 'de', 'title' => 'test'})
63
+ check_proc.call(child, node, 'somename.en.html', 'somename.page', 'somename.de.page',
64
+ '/test/somename.de.page', 'de', {'title' => 'test'})
61
65
  end
62
66
 
63
67
  def test_type_checkers
@@ -77,6 +81,22 @@ class TestNode < Test::Unit::TestCase
77
81
  assert_equal(:value, node[:other])
78
82
  end
79
83
 
84
+ def test_flags
85
+ node = Webgen::Node.new(@tree.dummy_root, 'test/', 'test', {'lang' => 'de', :test => :value})
86
+ assert(node.flagged(:created))
87
+ assert(node.flagged(:dirty))
88
+ node.unflag(:dirty)
89
+ assert(!node.flagged(:dirty))
90
+ node.flag(:a, :b, :c)
91
+ assert(node.flagged(:a))
92
+ assert(node.flagged(:b))
93
+ assert(node.flagged(:c))
94
+ node.unflag(:a, :b, :c)
95
+ assert(!node.flagged(:a))
96
+ assert(!node.flagged(:b))
97
+ assert(!node.flagged(:c))
98
+ end
99
+
80
100
  def test_in_lang
81
101
  nodes = create_default_nodes
82
102
 
@@ -143,16 +163,16 @@ class TestNode < Test::Unit::TestCase
143
163
 
144
164
  def test_changed
145
165
  node = Webgen::Node.new(@tree.dummy_root, 'test/', 'test', {'lang' => 'de', :test => :value})
146
- node.dirty = node.created = false
166
+ node.unflag(:dirty, :created)
147
167
 
148
168
  calls = 0
149
- @website.blackboard.add_listener(:node_changed?) {|n| assert(node, n); node.dirty = true; calls += 1}
169
+ @website.blackboard.add_listener(:node_changed?) {|n| assert(node, n); node.flag(:dirty); calls += 1}
150
170
  node.changed?
151
171
  assert_equal(1, calls)
152
172
  node.changed?
153
173
  assert_equal(1, calls)
154
174
 
155
- node.dirty = false
175
+ node.unflag(:dirty)
156
176
  node.node_info[:used_nodes] << node.absolute_lcn
157
177
  node.node_info[:used_nodes] << 'unknown alcn'
158
178
  node.node_info[:used_nodes] << @tree.dummy_root.absolute_lcn
@@ -161,8 +181,8 @@ class TestNode < Test::Unit::TestCase
161
181
 
162
182
  # Test circular depdendence
163
183
  other_node = Webgen::Node.new(@tree.dummy_root, '/other', 'test.l', {'lang' => 'de', :test => :value})
164
- other_node.dirty = node.created = false
165
- node.dirty = false
184
+ other_node.flag(:dirty, :created)
185
+ node.flag(:dirty)
166
186
  other_node.node_info[:used_nodes] = [node.absolute_lcn]
167
187
  node.node_info[:used_nodes] = [other_node.absolute_lcn]
168
188
  node.changed?
@@ -170,16 +190,16 @@ class TestNode < Test::Unit::TestCase
170
190
 
171
191
  def test_meta_info_changed
172
192
  node = Webgen::Node.new(@tree.dummy_root, '/', '/')
173
- node.dirty = node.created = false
193
+ node.unflag(:dirty, :created)
174
194
 
175
195
  calls = 0
176
- @website.blackboard.add_listener(:node_meta_info_changed?) {|n| assert(node, n); node.dirty_meta_info = true; calls += 1}
196
+ @website.blackboard.add_listener(:node_meta_info_changed?) {|n| assert(node, n); node.flag(:dirty_meta_info); calls += 1}
177
197
  assert(node.meta_info_changed?)
178
198
  assert_equal(1, calls)
179
199
  assert(node.meta_info_changed?)
180
200
  assert_equal(1, calls)
181
201
 
182
- node.dirty_meta_info = false
202
+ node.unflag(:dirty_meta_info)
183
203
  node.node_info[:used_meta_info_nodes] << node.absolute_lcn
184
204
  node.node_info[:used_meta_info_nodes] << 'unknown alcn'
185
205
  node.node_info[:used_meta_info_nodes] << @tree.dummy_root.absolute_lcn
@@ -1,6 +1,6 @@
1
1
  require 'test/unit'
2
2
  require 'helper'
3
- require 'webgen/output/filesystem'
3
+ require 'webgen/output'
4
4
  require 'tmpdir'
5
5
  require 'fileutils'
6
6
 
data/test/test_page.rb CHANGED
@@ -118,7 +118,7 @@ class TestPage < Test::Unit::TestCase
118
118
  content: "content\\n----------- some block start???\\nthings"
119
119
  EOF
120
120
 
121
- INVALID=<<EOF
121
+ INVALID_MI=<<EOF
122
122
  # invalid meta info: none specified
123
123
  - "---\\n---"
124
124
 
@@ -136,7 +136,9 @@ EOF
136
136
  : * [ }
137
137
  ---
138
138
  asdf kadsfakl
139
+ EOF
139
140
 
141
+ INVALID_BLOCKS=<<EOF
140
142
  # two blocks with same name
141
143
  - |
142
144
  aasdf
@@ -155,16 +157,23 @@ EOF
155
157
  EOF
156
158
 
157
159
  def test_invalid_pagefiles
158
- testdata = YAML::load(INVALID)
160
+ testdata = YAML::load(INVALID_MI)
161
+ testdata.each_with_index do |data, index|
162
+ assert_raise(Webgen::WebgenPageFormatError, "test mi item #{index}") { Webgen::Page.from_data(data) }
163
+ assert_raise(Webgen::WebgenPageFormatError, "test mi item #{index}") { Webgen::Page.meta_info_from_data(data) }
164
+ end
165
+ testdata = YAML::load(INVALID_BLOCKS)
159
166
  testdata.each_with_index do |data, index|
160
- assert_raise(Webgen::WebgenPageFormatError, "test item #{index}") { Webgen::Page.from_data(data) }
167
+ assert_raise(Webgen::WebgenPageFormatError, "test blocks item #{index}") { Webgen::Page.from_data(data) }
161
168
  end
162
169
  end
163
170
 
164
171
  def test_valid_pagefiles
165
172
  YAML::load(VALID).each_with_index do |data, oindex|
173
+ mi = Webgen::Page.meta_info_from_data(data['in'])
174
+ assert_equal(data['meta_info'], mi, "test item #{oindex} - meta info directly")
166
175
  d = Webgen::Page.from_data(data['in'])
167
- assert_equal(data['meta_info'], d.meta_info, "test item #{oindex} - meta info")
176
+ assert_equal(data['meta_info'], d.meta_info, "test item #{oindex} - meta info all")
168
177
  assert_equal(data['blocks'].length*2, d.blocks.length)
169
178
  data['blocks'].each_with_index do |b, index|
170
179
  index += 1
data/test/test_path.rb CHANGED
@@ -7,6 +7,7 @@ class TestPath < Test::Unit::TestCase
7
7
  def test_initialize
8
8
  check_proc = proc do |o, path, dir, bn, lang, ext, cn, oi, title|
9
9
  assert_equal(path, o.path)
10
+ assert_equal(path, o.source_path)
10
11
  assert_equal(dir, o.directory)
11
12
  assert_equal(bn, o.cnbase)
12
13
  assert_equal(lang, o.meta_info['lang'])
@@ -38,17 +39,23 @@ class TestPath < Test::Unit::TestCase
38
39
  '/', '/', '/', nil, '', '/', nil, '/')
39
40
  check_proc.call(Webgen::Path.new('/dir/'),
40
41
  '/dir/', '/', 'dir', nil, '', 'dir', nil, 'Dir')
42
+
43
+ path = Webgen::Path.new('/test/', '/other.path')
44
+ assert_equal('/other.path', path.source_path)
45
+ assert_equal('/test/', path.path)
41
46
  end
42
47
 
43
48
  def test_mount_at
44
49
  p = Webgen::Path.new('test.de.page')
45
50
  p = p.mount_at('/somedir')
46
51
  assert_equal('/somedir/test.de.page', p.path)
52
+ assert_equal('/somedir/test.de.page', p.source_path)
47
53
  assert_equal('/somedir/', p.directory)
48
54
 
49
55
  p = Webgen::Path.new('/')
50
56
  p = p.mount_at('/somedir')
51
57
  assert_equal('/somedir/', p.path)
58
+ assert_equal('/somedir/', p.source_path)
52
59
  assert_equal('/', p.directory)
53
60
  assert_equal('somedir', p.cn)
54
61
  assert_equal('Somedir', p.meta_info['title'])
@@ -56,6 +63,7 @@ class TestPath < Test::Unit::TestCase
56
63
  p = Webgen::Path.new('/source/test.rb')
57
64
  p = p.mount_at('/', '/source/')
58
65
  assert_equal('/test.rb', p.path)
66
+ assert_equal('/test.rb', p.source_path)
59
67
  assert_equal('/', p.directory)
60
68
  assert_equal('test.rb', p.cn)
61
69
  assert_equal('Test', p.meta_info['title'])
@@ -63,9 +71,18 @@ class TestPath < Test::Unit::TestCase
63
71
  p = Webgen::Path.new('/source/')
64
72
  p = p.mount_at('/', '/source')
65
73
  assert_equal('/', p.path)
74
+ assert_equal('/', p.source_path)
66
75
  assert_equal('/', p.directory)
67
76
  assert_equal('/', p.cn)
68
77
  assert_equal('/', p.meta_info['title'])
78
+
79
+ p = Webgen::Path.new('/test.rb', '/other.rb')
80
+ p = p.mount_at('/source/')
81
+ assert_equal('/source/test.rb', p.path)
82
+ assert_equal('/other.rb', p.source_path)
83
+ assert_equal('/source/', p.directory)
84
+ assert_equal('test.rb', p.cn)
85
+ assert_equal('Test', p.meta_info['title'])
69
86
  end
70
87
 
71
88
  def test_dup
@@ -110,11 +127,26 @@ class TestPath < Test::Unit::TestCase
110
127
  end
111
128
 
112
129
  def test_matching
113
- path = Webgen::Path.new('/dir/to/file.de.page')
114
- assert(path =~ '**/*')
115
- assert(path =~ '**/file.de.PAGE')
116
- assert(path =~ '/dir/*/file.*.page')
117
- assert(path !~ '**/*.test')
130
+ path = '/dir/to/file.de.page'
131
+ assert(Webgen::Path.match(path, '**/*'))
132
+ assert(Webgen::Path.match(path, '**/file.de.PAGE'))
133
+ assert(Webgen::Path.match(path, '/dir/*/file.*.page'))
134
+ assert(!Webgen::Path.match(path, '**/*.test'))
135
+
136
+ path = '/dir/'
137
+ assert(Webgen::Path.match(path, '/dir/'))
138
+ assert(Webgen::Path.match(path, '/dir'))
139
+
140
+ path = '/dir'
141
+ assert(Webgen::Path.match(path, '/dir/'))
142
+ assert(Webgen::Path.match(path, '/dir'))
143
+
144
+ path = '/'
145
+ assert(Webgen::Path.match(path, '/'))
146
+ assert(!Webgen::Path.match(path, ''))
147
+
148
+ path = ''
149
+ assert(!Webgen::Path.match(path, '/'))
118
150
  end
119
151
 
120
152
  def test_introspection
@@ -1,6 +1,6 @@
1
1
  require 'test/unit'
2
2
  require 'helper'
3
- require 'webgen/source/filesystem'
3
+ require 'webgen/source'
4
4
 
5
5
  class TestSourceFileSystemPath < Test::Unit::TestCase
6
6
 
@@ -1,6 +1,6 @@
1
1
  require 'test/unit'
2
2
  require 'helper'
3
- require 'webgen/source/stacked'
3
+ require 'webgen/source'
4
4
 
5
5
  class TestSourceFileSystemStacked < Test::Unit::TestCase
6
6
 
@@ -3,11 +3,13 @@ require 'helper'
3
3
  require 'webgen/tree'
4
4
  require 'webgen/node'
5
5
  require 'webgen/path'
6
- require 'webgen/sourcehandler/base'
6
+ require 'webgen/sourcehandler'
7
7
  require 'time'
8
8
 
9
9
  class TestSourceHandlerBase < Test::Unit::TestCase
10
10
 
11
+ class TestSH; include Webgen::SourceHandler::Base; end
12
+
11
13
  include Test::WebsiteHelper
12
14
 
13
15
  def setup
@@ -16,6 +18,33 @@ class TestSourceHandlerBase < Test::Unit::TestCase
16
18
  @obj.extend(Webgen::SourceHandler::Base)
17
19
  end
18
20
 
21
+ def test_create_node
22
+ tree = Webgen::Tree.new
23
+ path = path_with_meta_info('/path.html')
24
+ count = 0
25
+
26
+ path.instance_eval { @source_path = '/path'}
27
+ node = @obj.create_node(tree.dummy_root, path) {|n| count +=1 }
28
+ assert_equal('/path', node.node_info[:src])
29
+ assert_equal('Object', node.node_info[:processor])
30
+ assert_kind_of(Time, node['modified_at'])
31
+ assert_equal(1, count)
32
+
33
+ other_node = @obj.create_node(tree.dummy_root, path) {|n| count +=1 }
34
+ assert_equal(node, other_node)
35
+ assert_equal(1, count)
36
+
37
+ node.flag(:reinit)
38
+ other_node = @obj.create_node(tree.dummy_root, path) {|n| count +=1 }
39
+ assert_equal(node, other_node)
40
+ assert_equal(2, count)
41
+
42
+ path.instance_eval { @source_path = '/other' }
43
+ other_node = @obj.create_node(tree.dummy_root, path) {|n| count +=1 }
44
+ assert_equal(node, other_node)
45
+ assert_equal(2, count)
46
+ end
47
+
19
48
  def test_node_exists
20
49
  @tree = Webgen::Tree.new
21
50
  node = Webgen::Node.new(@tree.dummy_root, 'test/', 'test', {'lang' => 'de', :test => :value})
@@ -1,6 +1,6 @@
1
1
  require 'test/unit'
2
2
  require 'helper'
3
- require 'webgen/sourcehandler/copy'
3
+ require 'webgen/sourcehandler'
4
4
  require 'stringio'
5
5
 
6
6
  class TestSourceHandlerCopy < Test::Unit::TestCase
@@ -1,6 +1,6 @@
1
1
  require 'test/unit'
2
2
  require 'helper'
3
- require 'webgen/sourcehandler/directory'
3
+ require 'webgen/sourcehandler'
4
4
  require 'stringio'
5
5
 
6
6
  class TestSourceHandlerDirectory < Test::Unit::TestCase
@@ -14,10 +14,25 @@ class TestSourceHandlerDirectory < Test::Unit::TestCase
14
14
  assert_not_nil(node)
15
15
  assert_equal(:value, node[:key])
16
16
 
17
+ node.flag(:reinit)
17
18
  assert_equal(node, @obj.create_node(root, path_with_meta_info('/dir/', {:key => :other}) {StringIO.new('')}))
18
19
  assert_equal(:other, node[:key])
19
20
  end
20
21
 
22
+ def test_create_directories
23
+ @obj = Webgen::SourceHandler::Directory.new
24
+ shm = Webgen::SourceHandler::Main.new # for using service :create_nodes
25
+ root = Webgen::Node.new(Webgen::Tree.new.dummy_root, 'test/', 'test')
26
+ dir = @obj.create_node(root, path_with_meta_info('/dir/'))
27
+
28
+ assert_equal(dir, @obj.create_directories(root, '/dir/', path_with_meta_info('/test')))
29
+ assert_equal(dir, @obj.create_directories(root, 'dir/', path_with_meta_info('/test')))
30
+ assert_equal(dir, @obj.create_directories(root, 'dir', path_with_meta_info('/test')))
31
+
32
+ which = @obj.create_directories(root, 'dir/under/which', path_with_meta_info('/test'))
33
+ assert_equal(which, @obj.create_directories(root, 'dir/under/which', path_with_meta_info('/test')))
34
+ end
35
+
21
36
  def test_content
22
37
  assert_equal('', Webgen::SourceHandler::Directory.new.content(nil))
23
38
  end