Class: Sitemap
- Inherits:
-
Middleman::Extension
- Object
- Middleman::Extension
- Sitemap
- Defined in:
- lib/middleman-sitemap/extension.rb
Overview
Extension namespace
Instance Method Summary collapse
- #after_build(builder) ⇒ Object
- #build_multiple_sitemaps(pages) ⇒ Object
- #build_sitemap(name, pages) ⇒ Object
- #build_sitemap_index(sitemaps) ⇒ Object
- #generate_sitemap ⇒ Object
- #gzip_file(sitemap) ⇒ Object
-
#initialize(app, options_hash = {}, &block) ⇒ Sitemap
constructor
A new instance of Sitemap.
-
#urlencode(url) ⇒ Object
Returns a URL with proper HTML entities.
Constructor Details
#initialize(app, options_hash = {}, &block) ⇒ Sitemap
Returns a new instance of Sitemap.
6 7 8 9 10 11 12 13 14 15 |
# File 'lib/middleman-sitemap/extension.rb', line 6 def initialize(app, ={}, &block) # Call super to build options from the options_hash super # Require libraries only when activated require 'erb' # set up your extension # puts options.my_option end |
Instance Method Details
#after_build(builder) ⇒ Object
17 18 19 20 |
# File 'lib/middleman-sitemap/extension.rb', line 17 def after_build(builder) @builder = builder generate_sitemap end |
#build_multiple_sitemaps(pages) ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/middleman-sitemap/extension.rb', line 68 def build_multiple_sitemaps(pages) built_sitemaps = [] total_sitemaps = (pages.count / 50000.0).ceil pages_per_sitemap = (50000.0 / total_sitemaps).ceil built_sitemaps << build_sitemap_index(total_sitemaps) 1.upto(total_sitemaps) do |i| sitemap_pages = pages[((i - 1) * pages_per_sitemap)...(i * pages_per_sitemap)] built_sitemaps << build_sitemap("sitemap#{i}.xml", sitemap_pages) end return built_sitemaps end |
#build_sitemap(name, pages) ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/middleman-sitemap/extension.rb', line 54 def build_sitemap(name, pages) @pages = pages @hostname = .hostname template = Tilt::ERBTemplate.new(File.(File.join("#{File.dirname(__FILE__)}", "../../templates/sitemap.xml.erb"))) sitemap = template.render(self) outfile = File.join(app.build_dir, name) File.open(outfile, 'w') {|f| f.write(sitemap) } @builder.say_status :create, "build/#{name}" return "build/#{name}" end |
#build_sitemap_index(sitemaps) ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/middleman-sitemap/extension.rb', line 39 def build_sitemap_index(sitemaps) @hostname = .hostname @sitemaps = sitemaps @ext = .gzip ? ".xml.gz" : ".xml" template = Tilt::ERBTemplate.new(File.(File.join("#{File.dirname(__FILE__)}", "../../templates/sitemapindex.xml.erb"))) sitemap = template.render(self) outfile = File.join(app.build_dir, "sitemap.xml") File.open(outfile, 'w') {|f| f.write(sitemap) } @builder.say_status :create, "build/sitemap.xml" return "build/sitemap.xml" end |
#generate_sitemap ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/middleman-sitemap/extension.rb', line 22 def generate_sitemap pages = app.sitemap.resources.find_all{ |p| p.ext == ".html" } if pages.count > 50000 sitemaps = build_multiple_sitemaps(pages) else sitemaps = [build_sitemap("sitemap.xml", pages)] end if .gzip sitemaps.each do |sitemap| gzip_file(sitemap) @builder.say_status :create, "#{sitemap}.gz" if @builder end end end |
#gzip_file(sitemap) ⇒ Object
81 82 83 84 85 86 87 88 |
# File 'lib/middleman-sitemap/extension.rb', line 81 def gzip_file(sitemap) require 'zlib' File.open("#{sitemap}.gz", 'wb') do |f| gz = Zlib::GzipWriter.new(f, Zlib::BEST_COMPRESSION) gz.write sitemap gz.close end end |
#urlencode(url) ⇒ Object
Returns a URL with proper HTML entities
91 92 93 94 95 96 97 98 99 |
# File 'lib/middleman-sitemap/extension.rb', line 91 def urlencode(url) purl = URI.parse(url) path_match = purl.path.match(/\/([^.]+)/) if path_match escaped_path = app.escape_html(path_match[1]) purl.path = "/#{escaped_path}.html" end return purl.to_s end |