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(number_of_sitemaps) ⇒ Object
-
#encode(path) ⇒ Object
Returns a URL with proper HTML entities.
- #generate_sitemap ⇒ Object
- #gzip_file(sitemap) ⇒ Object
-
#initialize(app, options_hash = {}, &block) ⇒ Sitemap
constructor
A new instance of Sitemap.
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
69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/middleman-sitemap/extension.rb', line 69 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 67 |
# File 'lib/middleman-sitemap/extension.rb', line 54 def build_sitemap(name, pages) @pages = pages @hostname = .hostname templates_path = File.(File.join("#{File.dirname(__FILE__)}", "../../templates/sitemap.xml.erb")) template = Tilt::ERBTemplate.new(templates_path, 0, :trim => '>') 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(number_of_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(number_of_sitemaps) @hostname = .hostname @sitemaps = number_of_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 |
#encode(path) ⇒ Object
Returns a URL with proper HTML entities
93 94 95 96 |
# File 'lib/middleman-sitemap/extension.rb', line 93 def encode(path) str = path.split("/").map { |f| app.escape_html(f) }.join("/") return str 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
82 83 84 85 86 87 88 89 90 |
# File 'lib/middleman-sitemap/extension.rb', line 82 def gzip_file(sitemap) require 'zlib' content = File.read(sitemap) File.open("#{sitemap}.gz", 'wb') do |f| gz = Zlib::GzipWriter.new(f, Zlib::BEST_COMPRESSION) gz.write content gz.close end end |