Class: Fog::Rake::DocumentationTask
- Inherits:
-
Rake::TaskLib
- Object
- Rake::TaskLib
- Fog::Rake::DocumentationTask
- Defined in:
- lib/tasks/documentation_task.rb
Instance Method Summary collapse
-
#initialize ⇒ DocumentationTask
constructor
A new instance of DocumentationTask.
- #redirecter(path) ⇒ Object
Constructor Details
#initialize ⇒ DocumentationTask
Returns a new instance of DocumentationTask.
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 |
# File 'lib/tasks/documentation_task.rb', line 7 def initialize task :docs do Rake::Task[:supported_services_docs].invoke Rake::Task[:upload_fog_io].invoke Rake::Task[:upload_yardoc].invoke # connect to storage provider Fog.credential = :geemus storage = Fog::Storage.new(:provider => 'AWS') directory = storage.directories.new(:key => 'fog.io') # write base index with redirect to new version directory.files.create( :body => redirecter('latest'), :content_type => 'text/html', :key => 'index.html', :public => true ) Formatador.display_line end task :supported_services_docs do support, shared = {}, [] for key, values in Fog.services unless values.length == 1 shared |= [key] values.each do |value| support[value] ||= {} support[value][key] = '+' end else value = values.first support[value] ||= {} support[value][:other] ||= [] support[value][:other] << key end end shared.sort! {|x,y| x.to_s <=> y.to_s} columns = [:provider] + shared + [:other] data = [] for key in support.keys.sort {|x,y| x.to_s <=> y.to_s} data << { :provider => key }.merge!(support[key]) end table = '' table << "<table border='1'>\n" table << " <tr>" for column in columns table << "<th>#{column}</th>" end table << "</tr>\n" for datum in data table << " <tr>" for column in columns if value = datum[column] case value when Array table << "<td>#{value.join(', ')}</td>" when '+' table << "<td style='text-align: center;'>#{value}</td>" else table << "<th>#{value}</th>" end else table << "<td></td>" end end table << "</tr>\n" end table << "</table>\n" File.open('docs/about/supported_services.markdown', 'w') do |file| file.puts <<-METADATA --- layout: default title: Supported Services --- METADATA file.puts(table) end end desc "Builds the fog.io site content locally" task :build_fog_io do sh "jekyll docs docs/_site" end task :upload_fog_io => :build_fog_io do # connect to storage provider Fog.credential = :geemus storage = Fog::Storage.new(:provider => 'AWS') directory = storage.directories.new(:key => 'fog.io') # write web page files to versioned 'folder' for file_path in Dir.glob('docs/_site/**/*') next if File.directory?(file_path) file_name = file_path.gsub('docs/_site/', '') key = '' << version << '/' << file_name Formatador.redisplay(' ' * 128) Formatador.redisplay("Uploading [bold]#{key}[/]") if File.extname(file_name) == '.html' # rewrite links with version body = File.read(file_path) body.gsub!(/vX.Y.Z/, 'v' << version) body.gsub!(/='\//, %{='/} << version << '/') body.gsub!(/="\//, %{="/} << version << '/') content_type = 'text/html' directory.files.create( :body => redirecter(key), :content_type => 'text/html', :key => 'latest/' << file_name, :public => true ) else body = File.open(file_path) content_type = nil # leave it up to mime-types end directory.files.create( :body => body, :content_type => content_type, :key => key, :public => true ) end Formatador.redisplay(' ' * 128) Formatador.redisplay("Uploaded docs/_site\n") end def redirecter(path) redirecter = <<-HTML <!doctype html> <head> <title>fog</title> <meta http-equiv="REFRESH" content="0;url=http://fog.io/#{path}"> </head> <body> <a href="http://fog.io/#{path}">redirecting to lastest (#{path})</a> </body> </html> HTML end end |
Instance Method Details
#redirecter(path) ⇒ Object
139 140 141 142 143 144 145 146 147 148 149 150 151 |
# File 'lib/tasks/documentation_task.rb', line 139 def redirecter(path) redirecter = <<-HTML <!doctype html> <head> <title>fog</title> <meta http-equiv="REFRESH" content="0;url=http://fog.io/#{path}"> </head> <body> <a href="http://fog.io/#{path}">redirecting to lastest (#{path})</a> </body> </html> HTML end |