blowmage-webby 0.9.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (247) hide show
  1. data/History.txt +214 -0
  2. data/Manifest.txt +249 -0
  3. data/README.rdoc +92 -0
  4. data/Rakefile +56 -0
  5. data/bin/webby +41 -0
  6. data/bin/webby-gen +41 -0
  7. data/examples/blog/Sitefile +7 -0
  8. data/examples/blog/tasks/blog.rake +72 -0
  9. data/examples/blog/templates/atom_feed.erb +40 -0
  10. data/examples/blog/templates/blog/month.erb +22 -0
  11. data/examples/blog/templates/blog/post.erb +16 -0
  12. data/examples/blog/templates/blog/year.erb +22 -0
  13. data/examples/presentation/Sitefile +10 -0
  14. data/examples/presentation/content/css/uv/twilight.css +137 -0
  15. data/examples/presentation/content/presentation/_sample_code.txt +10 -0
  16. data/examples/presentation/content/presentation/index.txt +63 -0
  17. data/examples/presentation/content/presentation/s5/blank.gif +0 -0
  18. data/examples/presentation/content/presentation/s5/bodybg.gif +0 -0
  19. data/examples/presentation/content/presentation/s5/framing.css +23 -0
  20. data/examples/presentation/content/presentation/s5/iepngfix.htc +42 -0
  21. data/examples/presentation/content/presentation/s5/opera.css +7 -0
  22. data/examples/presentation/content/presentation/s5/outline.css +15 -0
  23. data/examples/presentation/content/presentation/s5/pretty.css +86 -0
  24. data/examples/presentation/content/presentation/s5/print.css +25 -0
  25. data/examples/presentation/content/presentation/s5/s5-core.css +9 -0
  26. data/examples/presentation/content/presentation/s5/slides.css +3 -0
  27. data/examples/presentation/content/presentation/s5/slides.js +553 -0
  28. data/examples/presentation/layouts/presentation.txt +43 -0
  29. data/examples/presentation/templates/_code_partial.erb +13 -0
  30. data/examples/presentation/templates/presentation.erb +40 -0
  31. data/examples/tumblog/Sitefile +9 -0
  32. data/examples/tumblog/content/css/tumblog.css +308 -0
  33. data/examples/tumblog/content/images/tumblog/permalink.gif +0 -0
  34. data/examples/tumblog/content/images/tumblog/rss.gif +0 -0
  35. data/examples/tumblog/content/tumblog/200806/the-noble-chicken/index.txt +12 -0
  36. data/examples/tumblog/content/tumblog/200807/historical-perspectives-on-the-classic-chicken-joke/index.txt +12 -0
  37. data/examples/tumblog/content/tumblog/200807/mad-city-chickens/index.txt +10 -0
  38. data/examples/tumblog/content/tumblog/200807/the-wisdom-of-the-dutch/index.txt +11 -0
  39. data/examples/tumblog/content/tumblog/200807/up-a-tree/index.txt +13 -0
  40. data/examples/tumblog/content/tumblog/index.txt +37 -0
  41. data/examples/tumblog/content/tumblog/rss.txt +37 -0
  42. data/examples/tumblog/layouts/tumblog/default.txt +44 -0
  43. data/examples/tumblog/layouts/tumblog/post.txt +15 -0
  44. data/examples/tumblog/lib/tumblog_helper.rb +32 -0
  45. data/examples/tumblog/tasks/tumblog.rake +30 -0
  46. data/examples/tumblog/templates/atom_feed.erb +40 -0
  47. data/examples/tumblog/templates/tumblog/conversation.erb +12 -0
  48. data/examples/tumblog/templates/tumblog/link.erb +10 -0
  49. data/examples/tumblog/templates/tumblog/photo.erb +13 -0
  50. data/examples/tumblog/templates/tumblog/post.erb +12 -0
  51. data/examples/tumblog/templates/tumblog/quote.erb +11 -0
  52. data/examples/webby/Sitefile +19 -0
  53. data/examples/webby/content/communicate/index.txt +28 -0
  54. data/examples/webby/content/css/background.gif +0 -0
  55. data/examples/webby/content/css/blueprint/print.css +76 -0
  56. data/examples/webby/content/css/blueprint/screen.css +696 -0
  57. data/examples/webby/content/css/coderay.css +96 -0
  58. data/examples/webby/content/css/site.css +196 -0
  59. data/examples/webby/content/css/uv/twilight.css +137 -0
  60. data/examples/webby/content/index.txt +37 -0
  61. data/examples/webby/content/learn/index.txt +28 -0
  62. data/examples/webby/content/reference/index.txt +204 -0
  63. data/examples/webby/content/release-notes/index.txt +21 -0
  64. data/examples/webby/content/release-notes/rel-0-9-0/index.txt +74 -0
  65. data/examples/webby/content/release-notes/rel-0-9-1/index.txt +93 -0
  66. data/examples/webby/content/release-notes/rel-0-9-2/index.txt +14 -0
  67. data/examples/webby/content/release-notes/rel-0-9-3/index.txt +47 -0
  68. data/examples/webby/content/robots.txt +6 -0
  69. data/examples/webby/content/script/jquery.corner.js +152 -0
  70. data/examples/webby/content/script/jquery.js +31 -0
  71. data/examples/webby/content/sitemap.txt +31 -0
  72. data/examples/webby/content/tips_and_tricks/index.txt +97 -0
  73. data/examples/webby/content/tutorial/index.txt +135 -0
  74. data/examples/webby/content/user-manual/index.txt +419 -0
  75. data/examples/webby/layouts/default.txt +49 -0
  76. data/examples/webby/templates/page.erb +10 -0
  77. data/examples/website/Sitefile +7 -0
  78. data/examples/website/content/css/blueprint/ie.css +26 -0
  79. data/examples/website/content/css/blueprint/plugins/buttons/icons/cross.png +0 -0
  80. data/examples/website/content/css/blueprint/plugins/buttons/icons/key.png +0 -0
  81. data/examples/website/content/css/blueprint/plugins/buttons/icons/tick.png +0 -0
  82. data/examples/website/content/css/blueprint/plugins/buttons/readme.txt +32 -0
  83. data/examples/website/content/css/blueprint/plugins/buttons/screen.css +97 -0
  84. data/examples/website/content/css/blueprint/plugins/fancy-type/readme.txt +14 -0
  85. data/examples/website/content/css/blueprint/plugins/fancy-type/screen.css +71 -0
  86. data/examples/website/content/css/blueprint/plugins/link-icons/icons/doc.png +0 -0
  87. data/examples/website/content/css/blueprint/plugins/link-icons/icons/email.png +0 -0
  88. data/examples/website/content/css/blueprint/plugins/link-icons/icons/external.png +0 -0
  89. data/examples/website/content/css/blueprint/plugins/link-icons/icons/feed.png +0 -0
  90. data/examples/website/content/css/blueprint/plugins/link-icons/icons/im.png +0 -0
  91. data/examples/website/content/css/blueprint/plugins/link-icons/icons/pdf.png +0 -0
  92. data/examples/website/content/css/blueprint/plugins/link-icons/icons/visited.png +0 -0
  93. data/examples/website/content/css/blueprint/plugins/link-icons/icons/xls.png +0 -0
  94. data/examples/website/content/css/blueprint/plugins/link-icons/readme.txt +18 -0
  95. data/examples/website/content/css/blueprint/plugins/link-icons/screen.css +40 -0
  96. data/examples/website/content/css/blueprint/plugins/rtl/readme.txt +10 -0
  97. data/examples/website/content/css/blueprint/plugins/rtl/screen.css +109 -0
  98. data/examples/website/content/css/blueprint/print.css +30 -0
  99. data/examples/website/content/css/blueprint/screen.css +251 -0
  100. data/examples/website/content/css/blueprint/src/forms.css +49 -0
  101. data/examples/website/content/css/blueprint/src/grid.css +212 -0
  102. data/examples/website/content/css/blueprint/src/grid.png +0 -0
  103. data/examples/website/content/css/blueprint/src/ie.css +59 -0
  104. data/examples/website/content/css/blueprint/src/print.css +85 -0
  105. data/examples/website/content/css/blueprint/src/reset.css +38 -0
  106. data/examples/website/content/css/blueprint/src/typography.css +105 -0
  107. data/examples/website/content/css/coderay.css +111 -0
  108. data/examples/website/content/css/site.css +67 -0
  109. data/examples/website/content/index.txt +19 -0
  110. data/examples/website/layouts/default.txt +61 -0
  111. data/examples/website/lib/breadcrumbs.rb +28 -0
  112. data/examples/website/templates/_partial.erb +10 -0
  113. data/examples/website/templates/page.erb +18 -0
  114. data/lib/webby.rb +233 -0
  115. data/lib/webby/apps.rb +12 -0
  116. data/lib/webby/apps/generator.rb +276 -0
  117. data/lib/webby/apps/main.rb +258 -0
  118. data/lib/webby/auto_builder.rb +157 -0
  119. data/lib/webby/builder.rb +172 -0
  120. data/lib/webby/core_ext/enumerable.rb +11 -0
  121. data/lib/webby/core_ext/hash.rb +28 -0
  122. data/lib/webby/core_ext/kernel.rb +26 -0
  123. data/lib/webby/core_ext/string.rb +163 -0
  124. data/lib/webby/core_ext/time.rb +9 -0
  125. data/lib/webby/filters.rb +83 -0
  126. data/lib/webby/filters/basepath.rb +97 -0
  127. data/lib/webby/filters/erb.rb +9 -0
  128. data/lib/webby/filters/haml.rb +18 -0
  129. data/lib/webby/filters/markdown.rb +16 -0
  130. data/lib/webby/filters/maruku.rb +16 -0
  131. data/lib/webby/filters/outline.rb +309 -0
  132. data/lib/webby/filters/sass.rb +17 -0
  133. data/lib/webby/filters/slides.rb +56 -0
  134. data/lib/webby/filters/textile.rb +16 -0
  135. data/lib/webby/filters/tidy.rb +76 -0
  136. data/lib/webby/filters/wiki_words.rb +14 -0
  137. data/lib/webby/helpers.rb +30 -0
  138. data/lib/webby/helpers/capture_helper.rb +141 -0
  139. data/lib/webby/helpers/coderay_helper.rb +69 -0
  140. data/lib/webby/helpers/graphviz_helper.rb +136 -0
  141. data/lib/webby/helpers/tag_helper.rb +65 -0
  142. data/lib/webby/helpers/tex_img_helper.rb +133 -0
  143. data/lib/webby/helpers/ultraviolet_helper.rb +63 -0
  144. data/lib/webby/helpers/url_helper.rb +241 -0
  145. data/lib/webby/journal.rb +126 -0
  146. data/lib/webby/link_validator.rb +160 -0
  147. data/lib/webby/renderer.rb +386 -0
  148. data/lib/webby/resources.rb +136 -0
  149. data/lib/webby/resources/db.rb +251 -0
  150. data/lib/webby/resources/layout.rb +54 -0
  151. data/lib/webby/resources/meta_file.rb +211 -0
  152. data/lib/webby/resources/page.rb +82 -0
  153. data/lib/webby/resources/partial.rb +85 -0
  154. data/lib/webby/resources/resource.rb +201 -0
  155. data/lib/webby/resources/static.rb +36 -0
  156. data/lib/webby/stelan/mktemp.rb +135 -0
  157. data/lib/webby/stelan/paginator.rb +165 -0
  158. data/lib/webby/tasks/build.rake +27 -0
  159. data/lib/webby/tasks/create.rake +25 -0
  160. data/lib/webby/tasks/deploy.rake +22 -0
  161. data/lib/webby/tasks/growl.rake +16 -0
  162. data/lib/webby/tasks/validate.rake +19 -0
  163. data/spec/core_ext/hash_spec.rb +47 -0
  164. data/spec/core_ext/string_spec.rb +110 -0
  165. data/spec/core_ext/time_spec.rb +19 -0
  166. data/spec/data/hooligans/bad_meta_data_1.txt +34 -0
  167. data/spec/data/hooligans/bad_meta_data_2.txt +34 -0
  168. data/spec/data/html/anchor.html +11 -0
  169. data/spec/data/html/external.html +10 -0
  170. data/spec/data/html/invalid-relative.html +10 -0
  171. data/spec/data/html/relative-anchor.html +10 -0
  172. data/spec/data/html/relative-invalid-anchor.html +10 -0
  173. data/spec/data/html/relative.html +10 -0
  174. data/spec/data/outline/basic.out +81 -0
  175. data/spec/data/outline/basic.txt +25 -0
  176. data/spec/data/outline/no_clobber.out +86 -0
  177. data/spec/data/outline/numbering.out +81 -0
  178. data/spec/data/outline/numbering_only.out +21 -0
  179. data/spec/data/outline/toc_range_1.out +66 -0
  180. data/spec/data/outline/toc_range_2.out +55 -0
  181. data/spec/data/outline/toc_style.out +81 -0
  182. data/spec/data/site/Sitefile +9 -0
  183. data/spec/data/site/content/_partial.txt +10 -0
  184. data/spec/data/site/content/css/coderay.css +111 -0
  185. data/spec/data/site/content/css/site.css +67 -0
  186. data/spec/data/site/content/css/tumblog.css +308 -0
  187. data/spec/data/site/content/images/tumblog/permalink.gif +0 -0
  188. data/spec/data/site/content/images/tumblog/rss.gif +0 -0
  189. data/spec/data/site/content/index.txt +19 -0
  190. data/spec/data/site/content/photos.txt +21 -0
  191. data/spec/data/site/content/tumblog/200806/the-noble-chicken/index.txt +12 -0
  192. data/spec/data/site/content/tumblog/200807/historical-perspectives-on-the-classic-chicken-joke/index.txt +12 -0
  193. data/spec/data/site/content/tumblog/200807/mad-city-chickens/index.txt +10 -0
  194. data/spec/data/site/content/tumblog/200807/the-wisdom-of-the-dutch/index.txt +11 -0
  195. data/spec/data/site/content/tumblog/200807/up-a-tree/index.txt +13 -0
  196. data/spec/data/site/content/tumblog/index.txt +37 -0
  197. data/spec/data/site/content/tumblog/rss.txt +37 -0
  198. data/spec/data/site/layouts/default.txt +58 -0
  199. data/spec/data/site/layouts/tumblog/default.txt +44 -0
  200. data/spec/data/site/layouts/tumblog/post.txt +15 -0
  201. data/spec/data/site/lib/breadcrumbs.rb +28 -0
  202. data/spec/data/site/lib/tumblog_helper.rb +32 -0
  203. data/spec/data/site/tasks/tumblog.rake +30 -0
  204. data/spec/data/site/templates/_partial.erb +10 -0
  205. data/spec/data/site/templates/atom_feed.erb +40 -0
  206. data/spec/data/site/templates/page.erb +18 -0
  207. data/spec/data/site/templates/presentation.erb +40 -0
  208. data/spec/data/site/templates/tumblog/conversation.erb +12 -0
  209. data/spec/data/site/templates/tumblog/link.erb +10 -0
  210. data/spec/data/site/templates/tumblog/photo.erb +13 -0
  211. data/spec/data/site/templates/tumblog/post.erb +12 -0
  212. data/spec/data/site/templates/tumblog/quote.erb +11 -0
  213. data/spec/spec.opts +1 -0
  214. data/spec/spec_helper.rb +58 -0
  215. data/spec/webby/apps/generator_spec.rb +117 -0
  216. data/spec/webby/apps/main_spec.rb +88 -0
  217. data/spec/webby/filters/basepath_spec.rb +167 -0
  218. data/spec/webby/filters/maruku_spec.rb +31 -0
  219. data/spec/webby/filters/outline_spec.rb +92 -0
  220. data/spec/webby/filters/textile_spec.rb +31 -0
  221. data/spec/webby/helpers/capture_helper_spec.rb +56 -0
  222. data/spec/webby/link_validator_spec.rb +154 -0
  223. data/spec/webby/renderer_spec.rb +139 -0
  224. data/spec/webby/resources/db_spec.rb +250 -0
  225. data/spec/webby/resources/layout_spec.rb +83 -0
  226. data/spec/webby/resources/meta_file_spec.rb +171 -0
  227. data/spec/webby/resources/page_spec.rb +129 -0
  228. data/spec/webby/resources/partial_spec.rb +58 -0
  229. data/spec/webby/resources/resource_spec.rb +219 -0
  230. data/spec/webby/resources/static_spec.rb +49 -0
  231. data/spec/webby/resources_spec.rb +69 -0
  232. data/tasks/ann.rake +80 -0
  233. data/tasks/bones.rake +20 -0
  234. data/tasks/gem.rake +192 -0
  235. data/tasks/git.rake +40 -0
  236. data/tasks/manifest.rake +48 -0
  237. data/tasks/mswin32.rake +38 -0
  238. data/tasks/notes.rake +27 -0
  239. data/tasks/post_load.rake +39 -0
  240. data/tasks/rdoc.rake +50 -0
  241. data/tasks/rubyforge.rake +55 -0
  242. data/tasks/setup.rb +279 -0
  243. data/tasks/spec.rake +54 -0
  244. data/tasks/svn.rake +47 -0
  245. data/tasks/test.rake +40 -0
  246. data/tasks/website.rake +37 -0
  247. metadata +386 -0
@@ -0,0 +1,38 @@
1
+
2
+ require 'find'
3
+
4
+ namespace 'gem:mswin32' do
5
+
6
+ win32_spec = PROJ.gem._spec.dup
7
+ win32_spec.platform = 'x86-mswin32'
8
+ win32_spec.files = PROJ.gem.files
9
+
10
+ pkg = Bones::GemPackageTask.new(win32_spec)
11
+ class << pkg
12
+ def package_dir_path() "#{package_dir}/#{package_name}-x86-mswin32"; end
13
+ end
14
+ pkg.define
15
+
16
+ file "#{pkg.package_dir_path}/#{pkg.gem_file}" => :unix2dos
17
+
18
+ task :unix2dos do
19
+ reject = %w[.gif .jpg .jpeg]
20
+ Find.find(File.join(pkg.package_dir_path, 'examples')) do |fn|
21
+ next unless test(?f, fn)
22
+ next if reject.include?(File.extname(fn))
23
+ sh %{unix2dos #{fn}}
24
+ end
25
+ end
26
+ end # namespace 'gem:mswin32'
27
+
28
+
29
+ task :gem => 'gem:mswin32:package'
30
+ task :clobber => 'gem:mswin32:clobber_package'
31
+
32
+ remove_desc_for_task(%w[
33
+ gem:mswin32:clobber_package
34
+ gem:mswin32:package
35
+ gem:mswin32:repackage
36
+ ])
37
+
38
+ # EOF
@@ -0,0 +1,27 @@
1
+
2
+ if HAVE_BONES
3
+
4
+ desc "Enumerate all annotations"
5
+ task :notes do |t|
6
+ id = if t.application.top_level_tasks.length > 1
7
+ t.application.top_level_tasks.slice!(1..-1).join(' ')
8
+ end
9
+ Bones::AnnotationExtractor.enumerate(
10
+ PROJ, PROJ.notes.tags.join('|'), id, :tag => true)
11
+ end
12
+
13
+ namespace :notes do
14
+ PROJ.notes.tags.each do |tag|
15
+ desc "Enumerate all #{tag} annotations"
16
+ task tag.downcase.to_sym do |t|
17
+ id = if t.application.top_level_tasks.length > 1
18
+ t.application.top_level_tasks.slice!(1..-1).join(' ')
19
+ end
20
+ Bones::AnnotationExtractor.enumerate(PROJ, tag, id)
21
+ end
22
+ end
23
+ end
24
+
25
+ end # if HAVE_BONES
26
+
27
+ # EOF
@@ -0,0 +1,39 @@
1
+
2
+ # This file does not define any rake tasks. It is used to load some project
3
+ # settings if they are not defined by the user.
4
+
5
+ PROJ.rdoc.exclude << "^#{Regexp.escape(PROJ.manifest_file)}$"
6
+ PROJ.exclude << ["^#{Regexp.escape(PROJ.ann.file)}$",
7
+ "^#{Regexp.escape(PROJ.rdoc.dir)}/",
8
+ "^#{Regexp.escape(PROJ.rcov.dir)}/"]
9
+
10
+ flatten_arrays = lambda do |this,os|
11
+ os.instance_variable_get(:@table).each do |key,val|
12
+ next if key == :dependencies \
13
+ or key == :development_dependencies
14
+ case val
15
+ when Array; val.flatten!
16
+ when OpenStruct; this.call(this,val)
17
+ end
18
+ end
19
+ end
20
+ flatten_arrays.call(flatten_arrays,PROJ)
21
+
22
+ PROJ.changes ||= paragraphs_of(PROJ.history_file, 0..1).join("\n\n")
23
+
24
+ PROJ.description ||= paragraphs_of(PROJ.readme_file, 'description').join("\n\n")
25
+
26
+ PROJ.summary ||= PROJ.description.split('.').first
27
+
28
+ PROJ.gem.files ||=
29
+ if test(?f, PROJ.manifest_file)
30
+ files = File.readlines(PROJ.manifest_file).map {|fn| fn.chomp.strip}
31
+ files.delete ''
32
+ files
33
+ else [] end
34
+
35
+ PROJ.gem.executables ||= PROJ.gem.files.find_all {|fn| fn =~ %r/^bin/}
36
+
37
+ PROJ.rdoc.main ||= PROJ.readme_file
38
+
39
+ # EOF
@@ -0,0 +1,50 @@
1
+
2
+ require 'rake/rdoctask'
3
+
4
+ namespace :doc do
5
+
6
+ desc 'Generate RDoc documentation'
7
+ Rake::RDocTask.new do |rd|
8
+ rdoc = PROJ.rdoc
9
+ rd.main = rdoc.main
10
+ rd.rdoc_dir = rdoc.dir
11
+
12
+ incl = Regexp.new(rdoc.include.join('|'))
13
+ excl = Regexp.new(rdoc.exclude.join('|'))
14
+ files = PROJ.gem.files.find_all do |fn|
15
+ case fn
16
+ when excl; false
17
+ when incl; true
18
+ else false end
19
+ end
20
+ rd.rdoc_files.push(*files)
21
+
22
+ title = "#{PROJ.name}-#{PROJ.version} Documentation"
23
+
24
+ rf_name = PROJ.rubyforge.name
25
+ title = "#{rf_name}'s " + title if rf_name.valid? and rf_name != title
26
+
27
+ rd.options << "-t #{title}"
28
+ rd.options.concat(rdoc.opts)
29
+ end
30
+
31
+ desc 'Generate ri locally for testing'
32
+ task :ri => :clobber_ri do
33
+ sh "#{RDOC} --ri -o ri ."
34
+ end
35
+
36
+ task :clobber_ri do
37
+ rm_r 'ri' rescue nil
38
+ end
39
+
40
+ end # namespace :doc
41
+
42
+ desc 'Alias to doc:rdoc'
43
+ task :doc => 'doc:rdoc'
44
+
45
+ desc 'Remove all build products'
46
+ task :clobber => %w(doc:clobber_rdoc doc:clobber_ri)
47
+
48
+ remove_desc_for_task %w(doc:clobber_rdoc)
49
+
50
+ # EOF
@@ -0,0 +1,55 @@
1
+
2
+ if PROJ.rubyforge.name.valid? && HAVE_RUBYFORGE
3
+
4
+ require 'rubyforge'
5
+ require 'rake/contrib/sshpublisher'
6
+
7
+ namespace :gem do
8
+ desc 'Package and upload to RubyForge'
9
+ task :release => [:clobber, 'gem'] do |t|
10
+ v = ENV['VERSION'] or abort 'Must supply VERSION=x.y.z'
11
+ abort "Versions don't match #{v} vs #{PROJ.version}" if v != PROJ.version
12
+ pkg = "pkg/#{PROJ.gem._spec.full_name}"
13
+
14
+ if $DEBUG then
15
+ puts "release_id = rf.add_release #{PROJ.rubyforge.name.inspect}, #{PROJ.name.inspect}, #{PROJ.version.inspect}, \"#{pkg}.tgz\""
16
+ puts "rf.add_file #{PROJ.rubyforge.name.inspect}, #{PROJ.name.inspect}, release_id, \"#{pkg}.gem\""
17
+ end
18
+
19
+ rf = RubyForge.new
20
+ rf.configure rescue nil
21
+ puts 'Logging in'
22
+ rf.login
23
+
24
+ c = rf.userconfig
25
+ c['release_notes'] = PROJ.description if PROJ.description
26
+ c['release_changes'] = PROJ.changes if PROJ.changes
27
+ c['preformatted'] = true
28
+
29
+ files = Dir.glob("#{pkg}*.*")
30
+
31
+ puts "Releasing #{PROJ.name} v. #{PROJ.version}"
32
+ rf.add_release PROJ.rubyforge.name, PROJ.name, PROJ.version, *files
33
+ end
34
+ end # namespace :gem
35
+
36
+
37
+ namespace :doc do
38
+ desc "Publish RDoc to RubyForge"
39
+ task :release => %w(doc:clobber_rdoc doc:rdoc) do
40
+ config = YAML.load(
41
+ File.read(File.expand_path('~/.rubyforge/user-config.yml'))
42
+ )
43
+
44
+ host = "#{config['username']}@rubyforge.org"
45
+ remote_dir = "/var/www/gforge-projects/#{PROJ.rubyforge.name}/"
46
+ remote_dir << PROJ.rdoc.remote_dir if PROJ.rdoc.remote_dir
47
+ local_dir = PROJ.rdoc.dir
48
+
49
+ Rake::SshDirPublisher.new(host, remote_dir, local_dir).upload
50
+ end
51
+ end # namespace :doc
52
+
53
+ end # if HAVE_RUBYFORGE
54
+
55
+ # EOF
@@ -0,0 +1,279 @@
1
+
2
+ require 'rubygems'
3
+ require 'rake'
4
+ require 'rake/clean'
5
+ require 'fileutils'
6
+ require 'ostruct'
7
+
8
+ class OpenStruct; undef :gem; end
9
+
10
+ # TODO: make my own openstruct type object that includes descriptions
11
+ # TODO: use the descriptions to output help on the available bones options
12
+
13
+ PROJ = OpenStruct.new(
14
+ # Project Defaults
15
+ :name => nil,
16
+ :summary => nil,
17
+ :description => nil,
18
+ :changes => nil,
19
+ :authors => nil,
20
+ :email => nil,
21
+ :url => "\000",
22
+ :version => ENV['VERSION'] || '0.0.0',
23
+ :exclude => %w(tmp$ bak$ ~$ CVS \.svn/ \.git/ ^pkg/),
24
+ :release_name => ENV['RELEASE'],
25
+
26
+ # System Defaults
27
+ :ruby_opts => %w(-w),
28
+ :libs => [],
29
+ :history_file => 'History.txt',
30
+ :manifest_file => 'Manifest.txt',
31
+ :readme_file => 'README.txt',
32
+
33
+ # Announce
34
+ :ann => OpenStruct.new(
35
+ :file => 'announcement.txt',
36
+ :text => nil,
37
+ :paragraphs => [],
38
+ :email => {
39
+ :from => nil,
40
+ :to => %w(ruby-talk@ruby-lang.org),
41
+ :server => 'localhost',
42
+ :port => 25,
43
+ :domain => ENV['HOSTNAME'],
44
+ :acct => nil,
45
+ :passwd => nil,
46
+ :authtype => :plain
47
+ }
48
+ ),
49
+
50
+ # Gem Packaging
51
+ :gem => OpenStruct.new(
52
+ :dependencies => [],
53
+ :development_dependencies => [],
54
+ :executables => nil,
55
+ :extensions => FileList['ext/**/extconf.rb'],
56
+ :files => nil,
57
+ :need_tar => true,
58
+ :need_zip => false,
59
+ :extras => {}
60
+ ),
61
+
62
+ # File Annotations
63
+ :notes => OpenStruct.new(
64
+ :exclude => %w(^tasks/setup\.rb$),
65
+ :extensions => %w(.txt .rb .erb .rdoc) << '',
66
+ :tags => %w(FIXME OPTIMIZE TODO)
67
+ ),
68
+
69
+ # Rcov
70
+ :rcov => OpenStruct.new(
71
+ :dir => 'coverage',
72
+ :opts => %w[--sort coverage -T],
73
+ :threshold => 90.0,
74
+ :threshold_exact => false
75
+ ),
76
+
77
+ # Rdoc
78
+ :rdoc => OpenStruct.new(
79
+ :opts => [],
80
+ :include => %w(^lib/ ^bin/ ^ext/ \.txt$ \.rdoc$),
81
+ :exclude => %w(extconf\.rb$),
82
+ :main => nil,
83
+ :dir => 'doc',
84
+ :remote_dir => nil
85
+ ),
86
+
87
+ # Rubyforge
88
+ :rubyforge => OpenStruct.new(
89
+ :name => "\000"
90
+ ),
91
+
92
+ # Rspec
93
+ :spec => OpenStruct.new(
94
+ :files => FileList['spec/**/*_spec.rb'],
95
+ :opts => []
96
+ ),
97
+
98
+ # Subversion Repository
99
+ :svn => OpenStruct.new(
100
+ :root => nil,
101
+ :path => '',
102
+ :trunk => 'trunk',
103
+ :tags => 'tags',
104
+ :branches => 'branches'
105
+ ),
106
+
107
+ # Test::Unit
108
+ :test => OpenStruct.new(
109
+ :files => FileList['test/**/test_*.rb'],
110
+ :file => 'test/all.rb',
111
+ :opts => []
112
+ )
113
+ )
114
+
115
+ # Load the other rake files in the tasks folder
116
+ tasks_dir = File.expand_path(File.dirname(__FILE__))
117
+ post_load_fn = File.join(tasks_dir, 'post_load.rake')
118
+ rakefiles = Dir.glob(File.join(tasks_dir, '*.rake')).sort
119
+ rakefiles.unshift(rakefiles.delete(post_load_fn)).compact!
120
+ import(*rakefiles)
121
+
122
+ # Setup the project libraries
123
+ %w(lib ext).each {|dir| PROJ.libs << dir if test ?d, dir}
124
+
125
+ # Setup some constants
126
+ WIN32 = %r/djgpp|(cyg|ms|bcc)win|mingw/ =~ RUBY_PLATFORM unless defined? WIN32
127
+
128
+ DEV_NULL = WIN32 ? 'NUL:' : '/dev/null'
129
+
130
+ def quiet( &block )
131
+ io = [STDOUT.dup, STDERR.dup]
132
+ STDOUT.reopen DEV_NULL
133
+ STDERR.reopen DEV_NULL
134
+ block.call
135
+ ensure
136
+ STDOUT.reopen io.first
137
+ STDERR.reopen io.last
138
+ $stdout, $stderr = STDOUT, STDERR
139
+ end
140
+
141
+ DIFF = if WIN32 then 'diff.exe'
142
+ else
143
+ if quiet {system "gdiff", __FILE__, __FILE__} then 'gdiff'
144
+ else 'diff' end
145
+ end unless defined? DIFF
146
+
147
+ SUDO = if WIN32 then ''
148
+ else
149
+ if quiet {system 'which sudo'} then 'sudo'
150
+ else '' end
151
+ end
152
+
153
+ RCOV = WIN32 ? 'rcov.bat' : 'rcov'
154
+ RDOC = WIN32 ? 'rdoc.bat' : 'rdoc'
155
+ GEM = WIN32 ? 'gem.bat' : 'gem'
156
+
157
+ %w(rcov spec/rake/spectask rubyforge bones facets/ansicode).each do |lib|
158
+ begin
159
+ require lib
160
+ Object.instance_eval {const_set "HAVE_#{lib.tr('/','_').upcase}", true}
161
+ rescue LoadError
162
+ Object.instance_eval {const_set "HAVE_#{lib.tr('/','_').upcase}", false}
163
+ end
164
+ end
165
+ HAVE_SVN = (Dir.entries(Dir.pwd).include?('.svn') and
166
+ system("svn --version 2>&1 > #{DEV_NULL}"))
167
+ HAVE_GIT = (Dir.entries(Dir.pwd).include?('.git') and
168
+ system("git --version 2>&1 > #{DEV_NULL}"))
169
+
170
+ # Add bones as a development dependency
171
+ #
172
+ if HAVE_BONES
173
+ PROJ.gem.development_dependencies << ['bones', ">= #{Bones::VERSION}"]
174
+ end
175
+
176
+ # Reads a file at +path+ and spits out an array of the +paragraphs+
177
+ # specified.
178
+ #
179
+ # changes = paragraphs_of('History.txt', 0..1).join("\n\n")
180
+ # summary, *description = paragraphs_of('README.txt', 3, 3..8)
181
+ #
182
+ def paragraphs_of( path, *paragraphs )
183
+ title = String === paragraphs.first ? paragraphs.shift : nil
184
+ ary = File.read(path).delete("\r").split(/\n\n+/)
185
+
186
+ result = if title
187
+ tmp, matching = [], false
188
+ rgxp = %r/^=+\s*#{Regexp.escape(title)}/i
189
+ paragraphs << (0..-1) if paragraphs.empty?
190
+
191
+ ary.each do |val|
192
+ if val =~ rgxp
193
+ break if matching
194
+ matching = true
195
+ rgxp = %r/^=+/i
196
+ elsif matching
197
+ tmp << val
198
+ end
199
+ end
200
+ tmp
201
+ else ary end
202
+
203
+ result.values_at(*paragraphs)
204
+ end
205
+
206
+ # Adds the given gem _name_ to the current project's dependency list. An
207
+ # optional gem _version_ can be given. If omitted, the newest gem version
208
+ # will be used.
209
+ #
210
+ def depend_on( name, version = nil )
211
+ spec = Gem.source_index.find_name(name).last
212
+ version = spec.version.to_s if version.nil? and !spec.nil?
213
+
214
+ PROJ.gem.dependencies << case version
215
+ when nil; [name]
216
+ when %r/^\d/; [name, ">= #{version}"]
217
+ else [name, version] end
218
+ end
219
+
220
+ # Adds the given arguments to the include path if they are not already there
221
+ #
222
+ def ensure_in_path( *args )
223
+ args.each do |path|
224
+ path = File.expand_path(path)
225
+ $:.unshift(path) if test(?d, path) and not $:.include?(path)
226
+ end
227
+ end
228
+
229
+ # Find a rake task using the task name and remove any description text. This
230
+ # will prevent the task from being displayed in the list of available tasks.
231
+ #
232
+ def remove_desc_for_task( names )
233
+ Array(names).each do |task_name|
234
+ task = Rake.application.tasks.find {|t| t.name == task_name}
235
+ next if task.nil?
236
+ task.instance_variable_set :@comment, nil
237
+ end
238
+ end
239
+
240
+ # Change working directories to _dir_, call the _block_ of code, and then
241
+ # change back to the original working directory (the current directory when
242
+ # this method was called).
243
+ #
244
+ def in_directory( dir, &block )
245
+ curdir = pwd
246
+ begin
247
+ cd dir
248
+ return block.call
249
+ ensure
250
+ cd curdir
251
+ end
252
+ end
253
+
254
+ # Scans the current working directory and creates a list of files that are
255
+ # candidates to be in the manifest.
256
+ #
257
+ def manifest_files
258
+ files = []
259
+ exclude = Regexp.new(PROJ.exclude.join('|'))
260
+ Find.find '.' do |path|
261
+ path.sub! %r/^(\.\/|\/)/o, ''
262
+ next unless test ?f, path
263
+ next if path =~ exclude
264
+ files << path
265
+ end
266
+ files.sort!
267
+ end
268
+
269
+ # We need a "valid" method thtat determines if a string is suitable for use
270
+ # in the gem specification.
271
+ #
272
+ class Object
273
+ def valid?
274
+ return !(self.empty? or self == "\000") if self.respond_to?(:to_str)
275
+ return false
276
+ end
277
+ end
278
+
279
+ # EOF