From fe1ed270d0042c53da2a1963d4eceed696933684 Mon Sep 17 00:00:00 2001 From: Simon Rozet Date: Sun, 2 Nov 2008 12:42:25 +0100 Subject: [PATCH] rake tasks to build a simple website --- .gitignore | 6 ++--- Rakefile | 60 +++++++++++++++++++++++++++++++++---------- doc/sinatra-logo.gif | Bin 0 -> 5337 bytes doc/template.haml | 19 ++++++++++++++ 4 files changed, 68 insertions(+), 17 deletions(-) create mode 100644 doc/sinatra-logo.gif create mode 100644 doc/template.haml diff --git a/.gitignore b/.gitignore index 28ae51a2..995ea06f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ -doc/api -doc/website/index.html -doc/website/tmp/* *.log .DS_Store /dist +/doc/website +/doc/book +/doc/api diff --git a/Rakefile b/Rakefile index 4077cc8c..cbb4c548 100644 --- a/Rakefile +++ b/Rakefile @@ -57,7 +57,7 @@ end # Rubyforge Release / Publish Tasks ================================== -desc 'Publish API docs to rubyforge' +desc 'Publish website to rubyforge' task 'publish:doc' => 'doc/api/index.html' do sh 'scp -rp doc/* rubyforge.org:/var/www/gforge-projects/sinatra/' end @@ -69,6 +69,46 @@ task 'publish:gem' => [package('.gem'), package('.tar.gz')] do |t| end end +# Website ============================================================ +def rdoc_to_html(file_name) + require 'rdoc/markup/to_html' + rdoc = RDoc::Markup::ToHtml.new + rdoc.convert(File.read(file_name)) +end + +def haml(locals={}) + require 'haml' + template = File.read('doc/template.haml') + haml = Haml::Engine.new(template, :format => :html4, :attr_wrapper => '"') + haml.render(Object.new, locals) +end + +directory 'doc/website' + +desc 'Build website' +task :website => ['doc/website/book.html', 'doc/website/index.html', :doc] + +file 'doc/website/index.html' => 'doc/website' do |file| + File.open(file.name, 'w') do |file| + file << haml(:title => 'Sinatra', :content => rdoc_to_html('README.rdoc')) + end +end + +file 'doc/website/book.html' => ['doc/website', :build_book] do |file| + File.open(file.name, 'w') do |file| + book_content = File.read('doc/book/output/sinatra-book.html') + file << haml(:title => 'Sinatra Book', :content => book_content) + end +end + +task :build_book do + unless File.directory?('doc/book') + sh 'git clone git://github.com/cschneid/sinatra-book.git doc/book' + end + sh 'cd doc/book && git fetch origin && git rebase origin/master' + sh 'cd doc/book && thor book:build' +end + # Gemspec Helpers ==================================================== file 'sinatra.gemspec' => FileList['{lib,test,images}/**','Rakefile'] do |f| @@ -81,6 +121,7 @@ file 'sinatra.gemspec' => FileList['{lib,test,images}/**','Rakefile'] do |f| split("\n"). sort. reject{ |file| file =~ /^\./ }. + reject { |file| file =~ /^doc/ }. map{ |file| " #{file}" }. join("\n") # piece file back together and write... @@ -96,9 +137,9 @@ end # gem install mislav-hanna --source=http://gems.github.com desc 'Generate Hanna RDoc under doc/api' -task :doc => ['doc/api/index.html'] +task :doc => ['doc/website/api/index.html'] -file 'doc/api/index.html' => FileList['lib/**/*.rb','README.rdoc'] do |f| +file 'doc/website/api/index.html' => FileList['lib/**/*.rb','README.rdoc'] do |f| rb_files = f.prerequisites sh((<<-end).gsub(/\s+/, ' ')) rdoc --charset utf8 \ @@ -106,19 +147,10 @@ file 'doc/api/index.html' => FileList['lib/**/*.rb','README.rdoc'] do |f| --inline-source \ --line-numbers \ --main README.rdoc \ - --op doc/api \ + --op doc/website/api \ --title 'Sinatra API Documentation' \ #{rb_files.join(' ')} end end -CLEAN.include 'doc/api' -desc "Generate simple website" -task :website do - `rdoc --force-update -o doc/website/tmp README.rdoc` - readme = Hpricot( open("doc/website/tmp/files/README_rdoc.html") ).at('#bodyContent').inner_html - # Replace placeholder with Readme content - html = File.read("doc/website/index.tpl").sub(Regexp.new(Regexp.escape("{{REPLACE}}")), readme) - # TODO: Fix RDoc links - File.open( "doc/website/index.html", 'w+' ) { |f| f << html } -end +CLEAN.include 'doc/website' diff --git a/doc/sinatra-logo.gif b/doc/sinatra-logo.gif new file mode 100644 index 0000000000000000000000000000000000000000..b213dfbe442b452279e30e5053a9858ef6505fca GIT binary patch literal 5337 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 DaJO3a literal 0 HcmV?d00001 diff --git a/doc/template.haml b/doc/template.haml new file mode 100644 index 00000000..c4ecf2ba --- /dev/null +++ b/doc/template.haml @@ -0,0 +1,19 @@ +!!! strict +%html + %head + %title= title + %link{ :media => 'screen', :type => 'text/css', :href => '/sinatra.css', :rel => 'stylesheet' } + %body + #page + %h1 + %a{ :href => '/'}= 'Sinatra' + %ul#navigation + %li + %a{ :href => '/' } The Hat + %li + %a{ :href => '/book' } The Book + %li + %a{ :href => '/api' } The API + %li + %a{ :href => 'http://github.com/bmizerany/sinatra' } The Source + #content= content