BuildMaster 0.9.1 → 1.0.6

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 (174) hide show
  1. data/bin/svnfix.rb +3 -0
  2. data/lib/buildmaster/ci/server.rb +55 -0
  3. data/lib/buildmaster/common.rb +3 -0
  4. data/lib/buildmaster/common/properties.rb +28 -0
  5. data/lib/buildmaster/{tree_to_object.rb → common/tree_to_object.rb} +0 -0
  6. data/lib/buildmaster/cotta.rb +1 -1
  7. data/lib/buildmaster/cotta/command_error.rb +6 -1
  8. data/lib/buildmaster/cotta/command_interface.rb +44 -0
  9. data/lib/buildmaster/cotta/command_runner.rb +39 -0
  10. data/lib/buildmaster/cotta/cotta.rb +40 -3
  11. data/lib/buildmaster/cotta/cotta_dir.rb +28 -7
  12. data/lib/buildmaster/cotta/cotta_file.rb +14 -2
  13. data/lib/buildmaster/cotta/cotta_pathname.rb +9 -0
  14. data/lib/buildmaster/cotta/in_memory_system.rb +20 -9
  15. data/lib/buildmaster/cotta/physical_system.rb +4 -8
  16. data/lib/buildmaster/project.rb +10 -0
  17. data/lib/buildmaster/{ant_driver.rb → project/ant_driver.rb} +0 -0
  18. data/lib/buildmaster/project/build.rb +3 -0
  19. data/lib/buildmaster/{build_number_file.rb → project/build_number_file.rb} +4 -0
  20. data/lib/buildmaster/project/ci.rb +3 -0
  21. data/lib/buildmaster/{cvs_driver.rb → project/cvs_driver.rb} +0 -0
  22. data/lib/buildmaster/project/ftp_driver.rb +64 -0
  23. data/lib/buildmaster/{java_manifest.rb → project/java_manifest.rb} +0 -0
  24. data/lib/buildmaster/project/pscp_driver.rb +17 -0
  25. data/lib/buildmaster/project/release.rb +67 -0
  26. data/lib/buildmaster/project/ruby_forge_project.rb +26 -0
  27. data/lib/buildmaster/{run_ant.rb → project/run_ant.rb} +0 -0
  28. data/lib/buildmaster/project/server_manager.rb +64 -0
  29. data/lib/buildmaster/project/svn_admin_driver.rb +20 -0
  30. data/lib/buildmaster/project/svn_driver.rb +94 -0
  31. data/lib/buildmaster/project/svn_helper.rb +113 -0
  32. data/lib/buildmaster/project/svn_status_info.rb +54 -0
  33. data/lib/buildmaster/{try.rb → project/try.rb} +0 -0
  34. data/lib/buildmaster/project/version_number_file.rb +45 -0
  35. data/lib/buildmaster/{windows → project/windows}/iis_driver.rb +4 -4
  36. data/lib/buildmaster/{windows → project/windows}/sql_server_driver.rb +0 -0
  37. data/lib/buildmaster/site.rb +5 -0
  38. data/lib/buildmaster/site/about_handler.rb +43 -0
  39. data/lib/buildmaster/site/content_engine_repository.rb +83 -0
  40. data/lib/buildmaster/site/element_processor_by_name.rb +18 -0
  41. data/lib/buildmaster/site/file_processor.rb +59 -0
  42. data/lib/buildmaster/site/site.rb +29 -6
  43. data/lib/buildmaster/site/site_server.rb +56 -0
  44. data/lib/buildmaster/{site_spec.rb → site/site_spec.rb} +63 -38
  45. data/lib/buildmaster/{site_tester.rb → site/site_tester.rb} +0 -0
  46. data/lib/buildmaster/site/source_content.rb +12 -0
  47. data/lib/buildmaster/{source_file_handler.rb → site/source_file_handler.rb} +13 -27
  48. data/lib/buildmaster/site/template_builder.rb +4 -0
  49. data/lib/buildmaster/site/template_error.rb +18 -0
  50. data/lib/buildmaster/{template_runner.rb → site/template_runner.rb} +6 -16
  51. data/lib/buildmaster/{templatelets.rb → site/templatelets.rb} +3 -1
  52. data/lib/buildmaster/site/templatelets/attribute.rb +21 -0
  53. data/lib/buildmaster/site/templatelets/code.rb +82 -0
  54. data/lib/buildmaster/{templatelets → site/templatelets}/each.rb +7 -5
  55. data/lib/buildmaster/{templatelets → site/templatelets}/href.rb +1 -1
  56. data/lib/buildmaster/{templatelets → site/templatelets}/include.rb +0 -0
  57. data/lib/buildmaster/{templatelets → site/templatelets}/link.rb +2 -3
  58. data/lib/buildmaster/{templatelets → site/templatelets}/text.rb +1 -1
  59. data/lib/buildmaster/{templatelets → site/templatelets}/when.rb +4 -7
  60. data/lib/buildmaster/site/templates/buildmaster/content/border_bottom.gif +0 -0
  61. data/lib/buildmaster/site/templates/buildmaster/content/buildmaster.css +370 -0
  62. data/lib/buildmaster/site/templates/buildmaster/content/logo.gif +0 -0
  63. data/lib/buildmaster/site/templates/buildmaster/content/news-rss2.xml +4 -0
  64. data/lib/buildmaster/site/templates/buildmaster/content/print.css +65 -0
  65. data/lib/buildmaster/site/templates/buildmaster/content/ruby.css +14 -0
  66. data/lib/buildmaster/site/templates/buildmaster/template.html +121 -0
  67. data/lib/buildmaster/site/templates/cotta/content/border_bottom.gif +0 -0
  68. data/lib/buildmaster/site/templates/cotta/content/cotta.css +363 -0
  69. data/lib/buildmaster/site/templates/cotta/content/cotta.gif +0 -0
  70. data/lib/buildmaster/site/templates/cotta/content/news-rss2.xml +2 -0
  71. data/lib/buildmaster/site/templates/cotta/template.html +106 -0
  72. data/lib/buildmaster/site/xtemplate.rb +26 -0
  73. data/lib/buildmaster/version +1 -0
  74. data/test/buildmaster/common/tc_properties.rb +24 -0
  75. data/test/buildmaster/{tc_tree_to_object.rb → common/tc_tree_to_object.rb} +18 -18
  76. data/test/buildmaster/cotta/cotta_specifications.rb +88 -64
  77. data/test/buildmaster/cotta/physical_system_stub.rb +3 -3
  78. data/test/buildmaster/cotta/system_file_specifications.rb +38 -47
  79. data/test/buildmaster/cotta/tc_command_interface.rb +46 -0
  80. data/test/buildmaster/cotta/tc_command_runner.rb +28 -0
  81. data/test/buildmaster/cotta/tc_cotta.rb +35 -9
  82. data/test/buildmaster/cotta/tc_cotta_dir_in_memory.rb +10 -5
  83. data/test/buildmaster/cotta/tc_cotta_file_in_memory.rb +3 -3
  84. data/test/buildmaster/cotta/tc_in_memory_system.rb +7 -2
  85. data/test/buildmaster/cotta/tc_pathname.rb +22 -0
  86. data/test/buildmaster/cotta/tc_physical_system.rb +12 -2
  87. data/test/buildmaster/{build.xml → project/build.xml} +0 -0
  88. data/test/buildmaster/{manifest.mf → project/manifest.mf} +0 -0
  89. data/test/buildmaster/{tc_ant_driver.rb → project/tc_ant_driver.rb} +3 -3
  90. data/test/buildmaster/{tc_build_number_file.rb → project/tc_build_number_file.rb} +7 -7
  91. data/test/buildmaster/{tc_cvs_driver.rb → project/tc_cvs_driver.rb} +14 -14
  92. data/test/buildmaster/{tc_java_manifest.rb → project/tc_java_manifest.rb} +7 -7
  93. data/test/buildmaster/project/tc_release.rb +61 -0
  94. data/test/buildmaster/project/tc_server_manager.rb +70 -0
  95. data/test/buildmaster/project/tc_svn_driver.rb +104 -0
  96. data/test/buildmaster/project/tc_svn_status_info.rb +37 -0
  97. data/test/buildmaster/project/tc_version_number_file.rb +46 -0
  98. data/test/buildmaster/{windows → project/windows}/tc_iis_driver.rb +5 -4
  99. data/test/buildmaster/{windows → project/windows}/tc_sql_server_driver.rb +4 -4
  100. data/test/buildmaster/site/content/tc_content_engine_repository.rb +63 -0
  101. data/test/buildmaster/site/tc_element_processor_by_name.rb +29 -0
  102. data/test/buildmaster/site/tc_file_processor.rb +141 -0
  103. data/test/buildmaster/site/tc_site.rb +42 -11
  104. data/test/buildmaster/site/tc_site_server.rb +43 -0
  105. data/test/buildmaster/{tc_site_spec.rb → site/tc_site_spec.rb} +9 -9
  106. data/test/buildmaster/{tc_source_file_handler.rb → site/tc_source_file_handler.rb} +10 -9
  107. data/test/buildmaster/site/tc_template_builder.rb +23 -23
  108. data/test/buildmaster/site/tc_template_error.rb +15 -0
  109. data/test/buildmaster/{tc_template_runner.rb → site/tc_template_runner.rb} +22 -17
  110. data/test/buildmaster/site/tc_templatelets.rb +37 -0
  111. data/test/buildmaster/{tc_xtemplate.rb → site/tc_xtemplate.rb} +14 -15
  112. data/test/buildmaster/{template.xhtml → site/template.xhtml} +0 -0
  113. data/test/buildmaster/{templatelets → site/templatelets}/common_templatelet_test.rb +11 -7
  114. data/test/buildmaster/{templatelets → site/templatelets}/tc_attribute.rb +14 -10
  115. data/test/buildmaster/site/templatelets/tc_code.rb +132 -0
  116. data/test/buildmaster/{templatelets → site/templatelets}/tc_each.rb +25 -12
  117. data/test/buildmaster/{templatelets → site/templatelets}/tc_href.rb +6 -8
  118. data/test/buildmaster/{templatelets → site/templatelets}/tc_include.rb +3 -12
  119. data/test/buildmaster/{templatelets → site/templatelets}/tc_link.rb +11 -18
  120. data/test/buildmaster/{templatelets → site/templatelets}/tc_text.rb +2 -9
  121. data/test/buildmaster/{templatelets → site/templatelets}/tc_when.rb +8 -15
  122. data/test/manual/bms.rb +10 -0
  123. data/test/tmp/svn_test/repository/README.txt +5 -0
  124. data/test/tmp/svn_test/repository/conf/authz +21 -0
  125. data/test/tmp/svn_test/repository/conf/passwd +8 -0
  126. data/test/tmp/svn_test/repository/conf/svnserve.conf +30 -0
  127. data/test/tmp/svn_test/repository/db/current +1 -0
  128. data/test/tmp/svn_test/repository/db/format +1 -0
  129. data/test/tmp/svn_test/repository/db/fs-type +1 -0
  130. data/test/tmp/svn_test/repository/db/revprops/0 +5 -0
  131. data/test/tmp/svn_test/repository/db/revprops/1 +13 -0
  132. data/test/tmp/svn_test/repository/db/revprops/2 +13 -0
  133. data/test/tmp/svn_test/repository/db/revprops/3 +13 -0
  134. data/test/tmp/svn_test/repository/db/revprops/4 +13 -0
  135. data/test/tmp/svn_test/repository/db/revs/0 +11 -0
  136. data/test/tmp/svn_test/repository/db/revs/1 +25 -0
  137. data/test/tmp/svn_test/repository/db/revs/2 +29 -0
  138. data/test/tmp/svn_test/repository/db/revs/3 +33 -0
  139. data/test/tmp/svn_test/repository/db/revs/4 +0 -0
  140. data/test/tmp/svn_test/repository/db/uuid +1 -0
  141. data/test/tmp/svn_test/repository/db/write-lock +0 -0
  142. data/test/tmp/svn_test/repository/format +1 -0
  143. data/test/tmp/svn_test/repository/hooks/post-commit.tmpl +51 -0
  144. data/test/tmp/svn_test/repository/hooks/post-lock.tmpl +44 -0
  145. data/test/tmp/svn_test/repository/hooks/post-revprop-change.tmpl +56 -0
  146. data/test/tmp/svn_test/repository/hooks/post-unlock.tmpl +42 -0
  147. data/test/tmp/svn_test/repository/hooks/pre-commit.tmpl +70 -0
  148. data/test/tmp/svn_test/repository/hooks/pre-lock.tmpl +64 -0
  149. data/test/tmp/svn_test/repository/hooks/pre-revprop-change.tmpl +66 -0
  150. data/test/tmp/svn_test/repository/hooks/pre-unlock.tmpl +60 -0
  151. data/test/tmp/svn_test/repository/hooks/start-commit.tmpl +54 -0
  152. data/test/tmp/svn_test/repository/locks/db-logs.lock +3 -0
  153. data/test/tmp/svn_test/repository/locks/db.lock +3 -0
  154. data/test/tmp/svn_test/second/test.txt +1 -0
  155. data/test/tmp/svn_test/workdir/test.txt +1 -0
  156. data/test/ts_buildmaster.rb +0 -1
  157. metadata +168 -69
  158. data/lib/buildmaster.rb +0 -10
  159. data/lib/buildmaster/build_file.rb +0 -11
  160. data/lib/buildmaster/buildnumber +0 -1
  161. data/lib/buildmaster/file_processor.rb +0 -138
  162. data/lib/buildmaster/site_server.rb +0 -33
  163. data/lib/buildmaster/source_content.rb +0 -11
  164. data/lib/buildmaster/svn_driver.rb +0 -78
  165. data/lib/buildmaster/template_error.rb +0 -8
  166. data/lib/buildmaster/templatelets/attribute.rb +0 -16
  167. data/lib/buildmaster/xtemplate.rb +0 -27
  168. data/lib/mock.rb +0 -3
  169. data/lib/mock/mock_base.rb +0 -24
  170. data/test/buildmaster/tc_file_processor.rb +0 -125
  171. data/test/buildmaster/tc_svn_driver.rb +0 -81
  172. data/test/tmp/output/index.html +0 -8
  173. data/test/tmp/output/markdown.html +0 -8
  174. data/test/tmp/output/textile.html +0 -8
@@ -1,10 +0,0 @@
1
- $:.unshift(File.dirname(__FILE__))
2
-
3
- require 'buildmaster/build_number_file'
4
- require 'buildmaster/java_manifest'
5
- require 'buildmaster/ant_driver'
6
- require 'buildmaster/cvs_driver'
7
- require 'buildmaster/svn_driver'
8
- require 'buildmaster/site_spec'
9
- require 'buildmaster/site/site'
10
- require 'buildmaster/xtemplate'
@@ -1,11 +0,0 @@
1
- class BuildFile
2
- def initialize(file_name)
3
- end
4
-
5
- def increase(property_name)
6
- return 1
7
- end
8
-
9
- def save()
10
- end
11
- end
@@ -1 +0,0 @@
1
- 41
@@ -1,138 +0,0 @@
1
- $:.unshift File.dirname(__FILE__)
2
-
3
- require 'site_spec'
4
- require 'source_content'
5
- require 'pathname'
6
-
7
- module BuildMaster
8
-
9
- class FileProcessor
10
- #todo match only beginning of the file
11
- @@TEXTILE_REGX = /---(-)*\n(.*)\n(-)*---\n/
12
-
13
- def FileProcessor::join(from, path)
14
- result = from
15
- path.each_filename do |name|
16
- result = File.join(result, name)
17
- end
18
- return result
19
- end
20
-
21
- attr_reader :content_file, :target_file
22
-
23
- def initialize(template, content_file, sitespec)
24
- @template = template
25
- @content_file = content_file
26
- @sitespec = sitespec
27
- extension = content_file.extname
28
- if (extension == '.html')
29
- @convert_method = 'process_html'
30
- elsif (extension == '.textile')
31
- @convert_method = 'process_textile'
32
- elsif (extension == '.markdown')
33
- @convert_method = 'process_markdown'
34
- end
35
- if @convert_method
36
- basename = content_file.basename
37
- @path = sitespec.relative_to_root(content_file).parent.join("#{basename}.html")
38
- @target_file = sitespec.output_dir.file(@path)
39
- else
40
- @target_file = sitespec.output_dir.file(sitespec.relative_to_root(content_file))
41
- end
42
- end
43
-
44
- def FileProcessor::for_request_path(request_path, site_spec)
45
- template = site_spec.load_template
46
- if (request_path[0,1] == '/')
47
- request_path = request_path[1, request_path.length - 1]
48
- end
49
- file = site_spec.content_dir.file(request_path)
50
- if (file.extname == '.html')
51
- file = check_source(file)
52
- end
53
- return FileProcessor.new(template, file, site_spec)
54
- end
55
-
56
- def FileProcessor::check_source(file)
57
- result = file
58
- basename = file.basename
59
- dir = file.parent
60
- ['textile', 'markdown', 'html'].find do |extension|
61
- candidate = dir.file("#{basename}.#{extension}")
62
- if (candidate.exists?)
63
- result = candidate
64
- true
65
- else
66
- false
67
- end
68
- end
69
- return result
70
- end
71
-
72
- def is_html?
73
- return target_file.extname == '.html'
74
- end
75
-
76
- def write_to_target
77
- document = generate_document
78
- if (document)
79
- target_file.write do |file|
80
- document.write(file, 0, false, true)
81
- end
82
- else
83
- content_file.copy_to(target_file)
84
- end
85
- end
86
-
87
- def generate_document
88
- send(@convert_method, load_content()) if (@convert_method)
89
- end
90
-
91
-
92
- def load_content
93
- return content_file.load
94
- end
95
-
96
- def process_textile(textile_content)
97
- require 'redcloth'
98
- return process_content_with_title(textile_content) {|content| RedCloth.new(content).to_html}
99
- end
100
-
101
- def process_markdown(markdown_content)
102
- require 'bluecloth'
103
- return process_content_with_title(markdown_content) {|content| BlueCloth.new(content).to_html}
104
- end
105
-
106
- def process_content_with_title(full_content)
107
- match_result = @@TEXTILE_REGX.match(full_content)
108
- title = ''
109
- body_content = full_content
110
- if match_result != nil
111
- title = match_result[2]
112
- body_content = match_result.post_match
113
- end
114
- html_body = yield body_content
115
- html_content = <<HTML
116
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
117
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
118
- <html xmlns="http://www.w3.org/1999/xhtml">
119
- <head>
120
- <title>#{title}</title>
121
- </head>
122
- <body>
123
- #{html_body}
124
- </body>
125
- </html>
126
- HTML
127
- return process_html(html_content)
128
- end
129
-
130
- def process_html(html_content)
131
- source = SourceContent.new(@path, REXML::Document.new(html_content))
132
- document_with_skin = @template.process(source)
133
- return document_with_skin
134
- end
135
-
136
- end
137
-
138
- end
@@ -1,33 +0,0 @@
1
- $:.unshift File.dirname(__FILE__)
2
-
3
- require 'webrick'
4
- require 'source_file_handler'
5
-
6
- module BuildMaster
7
- class SiteServer
8
- def initialize(port_number=2000, log_file=$stdout, level=WEBrick::Log::INFO, access_log=nil)
9
- mime_types = WEBrick::HTTPUtils::DefaultMimeTypes.update(
10
- {"textile" => "text/plain"}
11
- )
12
- @server = WEBrick::HTTPServer.new(
13
- :Port => port_number,
14
- :Logger => WEBrick::Log.new(log_file, level),
15
- :MimeTypes => mime_types,
16
- :AccessLog => access_log
17
- )
18
- end
19
-
20
- def start(spec)
21
- @server.mount('/', SourceFileHandler, spec)
22
- @server.mount('/source', WEBrick::HTTPServlet::FileHandler, spec.content_dir, true)
23
- ['INT', 'TERM'].each { |signal|
24
- trap(signal){ stop}
25
- }
26
- @server.start
27
- end
28
-
29
- def stop
30
- @server.shutdown
31
- end
32
- end
33
- end
@@ -1,11 +0,0 @@
1
- module BuildMaster
2
- class SourceContent
3
- attr_reader :path, :document
4
-
5
- def initialize(path, document)
6
- @path = path
7
- @document = document
8
- end
9
-
10
- end
11
- end
@@ -1,78 +0,0 @@
1
- require 'stringio'
2
- require 'rexml/document'
3
-
4
- module BuildMaster
5
-
6
- class SvnDriver
7
- def SvnDriver::from_path(directory)
8
- return SvnDriver.new(directory)
9
- end
10
-
11
- attr_reader :work_dir, :repository_url
12
-
13
- def initialize(work_dir, repository_root = nil, repository_url = nil)
14
- @system = work_dir.system
15
- @work_dir = work_dir
16
- @repository_root = repository_root
17
- @repository_url = repository_url
18
- end
19
-
20
- def repository_root
21
- load_svn_info unless @repository_root
22
- return @repository_root
23
- end
24
-
25
- def repository_url
26
- if (not @repository_url)
27
- @repository_url = "#{repository_root}/trunk"
28
- end
29
- return @repository_url
30
- end
31
-
32
- def status
33
- command_for_path('status')
34
- end
35
-
36
- def update
37
- command_for_path('update')
38
- end
39
-
40
- def commit(comment)
41
- command_for_path('commit', " -m \"#{comment}\"")
42
- end
43
-
44
- def tag(tag_name)
45
- @system.shell("svn copy #{repository_url} #{repository_root}/tags/#{tag_name} -m \"ruby buildmaster\"")
46
- end
47
-
48
- def checkout(output)
49
- @system.shell("svn checkout #{repository_root}/trunk #{output}")
50
- end
51
-
52
- def command(command)
53
- command_for_path(command)
54
- end
55
-
56
- private
57
- def load_svn_info
58
- info = @system.shell_output("svn info #{work_dir.path}")
59
- StringIO.new(info).each_line do |line|
60
- index = line.index(':')
61
- if (index)
62
- property = line[0, index].strip
63
- value = line[index + 1, line.length - index - 1].strip
64
- if (property == 'Repository Root')
65
- @repository_root = value
66
- elsif (property == 'URL')
67
- @repository_url = value
68
- end
69
- end
70
- end
71
- end
72
-
73
- def command_for_path(svn_command, argument='')
74
- @system.shell("svn #{svn_command} #{@work_dir.path}#{argument}")
75
- end
76
- end
77
-
78
- end
@@ -1,8 +0,0 @@
1
- $:.unshift File.dirname(__FILE__)
2
-
3
- module BuildMaster
4
-
5
- class TemplateError < StandardError
6
- end
7
-
8
- end
@@ -1,16 +0,0 @@
1
- module BuildMaster
2
- class Attribute
3
- def initialize(expression_evaluator)
4
- @evaluator = expression_evaluator
5
- end
6
-
7
- def process(target, template, source)
8
- name = template.attribute_value!('name')
9
- eval = template.attribute_value!('eval')
10
- if (not @evaluator.respond_to?(eval))
11
- raise TemplateError, '#{@evaluator.class} cannot evaluate expression #{eval}'
12
- end
13
- target.attributes[name] = @evaluator.send(eval, source.path)
14
- end
15
- end
16
- end
@@ -1,27 +0,0 @@
1
- $:.unshift File.dirname(__FILE__)
2
-
3
- require 'rexml/document'
4
- require 'template_runner'
5
-
6
- module BuildMaster
7
- class XTemplate
8
- def initialize(template_file, templatelets = Hash.new)
9
- @template = REXML::Document.new(template_file)
10
- @templatelets = templatelets
11
- end
12
-
13
- def process(source, &evaluator)
14
- output_xml = process_xml(source, &evaluator)
15
- return output_xml
16
- end
17
-
18
- private
19
- def process_xml(source, &evaluator)
20
- output_xml = REXML::Document.new
21
- runner = TemplateRunner.new(output_xml, @template, source, &evaluator)
22
- runner.templatelets = @templatelets
23
- runner.process
24
- return output_xml
25
- end
26
- end
27
- end
@@ -1,3 +0,0 @@
1
- $:.unshift(File.dirname(__FILE__))
2
-
3
- require 'mock/mock_base.rb'
@@ -1,24 +0,0 @@
1
- require 'set'
2
- require 'test/unit'
3
-
4
- class Mock
5
- def initialize(class_to_mock=nil)
6
- @class_to_mock = class_to_mock
7
- @expectations = Set.new
8
- end
9
-
10
- def expects(message)
11
- @expectations.add(message)
12
- end
13
-
14
- def verify
15
-
16
- end
17
-
18
- def method_missing(method, *args)
19
- if (not @expectations.include? method)
20
- raise "Unexpected extra call to #{method}"
21
- end
22
- end
23
-
24
- end
@@ -1,125 +0,0 @@
1
- $:.unshift File.join(File.dirname(__FILE__), "..", "..", "lib")
2
-
3
- require 'spec'
4
- require 'rexml/document'
5
- require 'pathname'
6
- require 'buildmaster/file_processor'
7
- require 'buildmaster/xtemplate'
8
- require 'buildmaster/cotta'
9
- require 'buildmaster/cotta/in_memory_system'
10
-
11
-
12
- module BuildMaster
13
-
14
- context 'File Processor' do
15
- setup do
16
- @cotta = Cotta.new(InMemorySystem.new)
17
- @cotta.file('content').save(<<CONTENT
18
- line one
19
- line two
20
- line three
21
- CONTENT
22
- )
23
- end
24
-
25
- teardown do
26
- @cotta = nil
27
- end
28
-
29
- specify 'should know content and target' do
30
- template = XTemplate.new(<<CONTENT
31
- <html xmlns="http://www.w3.org/1999/xhtml"
32
- xmlns:template="http://buildmaster.rubyforge.org/xtemplate/1.0">
33
- </html>
34
- CONTENT
35
- )
36
- site_spec = SiteSpec.new('file.txt', @cotta)
37
- site_spec.content_dir = 'content'
38
- site_spec.output_dir = 'output'
39
- processor = FileProcessor.new(template, @cotta.file('content/index.html'), site_spec)
40
- processor.content_file.path.should_equal(Pathname.new('content/index.html'))
41
- processor.is_html?.should_equal(true)
42
- end
43
-
44
- specify 'should know HTML target file' do
45
- template = XTemplate.new(<<CONTENT
46
- <html xmlns="http://www.w3.org/1999/xhtml"
47
- xmlns:template="http://buildmaster.rubyforge.org/xtemplate/1.0">
48
- </html>
49
- CONTENT
50
- )
51
- site_spec = SiteSpec.new(nil, @cotta)
52
- current_dir = @cotta.dir('root')
53
- site_spec.content_dir = 'root/content'
54
- site_spec.output_dir = 'root/output'
55
- processor = FileProcessor.new(template, current_dir.dir('content').file('index.gif'), site_spec)
56
- processor.content_file.path.should_equal current_dir.dir('content').file('index.gif').path
57
- processor.is_html?.should_equal false
58
- processor.generate_document.should_equal nil
59
- end
60
-
61
- specify 'should load from target file' do
62
- template_content = <<CONTENT
63
- <html xmlns="http://www.w3.org/1999/xhtml"
64
- xmlns:template="http://buildmaster.rubyforge.org/xtemplate/1.0">
65
- </html>
66
- CONTENT
67
- site_spec = SiteSpec.new(__FILE__, @cotta)
68
- current_dir = @cotta.dir(File.dirname(__FILE__))
69
- current_dir.dir('site').dir('content').file('index.html').save
70
- current_dir.dir('site').dir('content').file('index.gif').save
71
- current_dir.dir('site').dir('content').file('textile.textile').save
72
- current_dir.dir('site').dir('content').file('markdown.markdown').save
73
- site_spec.template = template_content
74
- site_spec.content_dir = 'site/content'
75
- site_spec.output_dir = 'output'
76
- processor = FileProcessor.for_request_path('/index.html', site_spec)
77
- processor.content_file.should_equal site_spec.content_dir.file('index.html')
78
-
79
- processor = FileProcessor.for_request_path('/index.gif', site_spec)
80
- processor.content_file.should_equal site_spec.content_dir.file('index.gif')
81
-
82
- processor = FileProcessor.for_request_path('/textile.html', site_spec)
83
- processor.content_file.should_equal site_spec.content_dir.file('textile.textile')
84
-
85
- processor = FileProcessor.for_request_path('/markdown.html', site_spec)
86
- processor.content_file.should_equal site_spec.content_dir.file('markdown.markdown')
87
- end
88
-
89
- def output_dir
90
- return @cotta.dir('tmp')
91
- end
92
-
93
- def relative_to_root(path)
94
- return Pathname.new('tmp')
95
- end
96
-
97
- specify 'should have support for markdown content' do
98
- template_content = <<CONTENT
99
- <html xmlns="http://www.w3.org/1999/xhtml"
100
- xmlns:template="http://buildmaster.rubyforge.org/xtemplate/1.0">
101
- <head><title><template:include elements="/html/head/title/text()"/></title></head>
102
- <body>
103
- <template:include elements="/html/body/*"/>
104
- </body>
105
- </html>
106
- CONTENT
107
- hash = {'include' => Include.new(self)}
108
- template = XTemplate.new(template_content, hash)
109
-
110
- processor = FileProcessor.new(template, @cotta.file('content_path'), self)
111
- markdown_content = <<CONTENT
112
- --------------------------------------------
113
- Title Here
114
- --------------------------------------------
115
- Header
116
- =====================
117
- CONTENT
118
- document = processor.process_markdown(markdown_content)
119
- document = REXML::Document.new(document.to_s)
120
- REXML::XPath.first(document, '/html/head/title').text.should_equal 'Title Here'
121
- REXML::XPath.first(document, '/html/body/h1').text.should_equal 'Header'
122
- end
123
-
124
- end
125
- end