lib/middleman/sitemap/page.rb
module Middleman::Sitemap class Page attr_accessor :store, :path, :proxied_to, :status def initialize(store, path) @store = store @path = path @status = :generic @source_file = nil @proxied_to = nil end def template? if proxy? store.page(proxied_to).template? else return false if source_file.nil? !::Tilt[source_file].nil? end end def source_file=(src) @source_file = src end def source_file if proxy? store.page(proxied_to).source_file else @source_file end end def template @_template ||= ::Middleman::Sitemap::Template.new(self) end def ext File.extname(path) end def mime_type app.mime_type ext end def proxy? @status == :proxy end def proxy_to(target) @status = :proxy @proxied_to = target end def generic? @status == :generic end def make_generic @status = :generic end def ignored? @status == :ignored end def ignore @status = :ignored end def touch template.touch if template? end def custom_renderer(&block) @_custom_renderer ||= nil @_custom_renderer = block if block_given? @_custom_renderer end def render(*args, &block) return unless template? if proxy? # Forward blocks forward_blocks = template.blocks.compact forward_blocks << block if block_given? store.page(proxied_to).template.render(*args) do forward_blocks.each do |block| instance_exec(&block) end end elsif !custom_renderer.nil? params = args.dup params << block if block_given? instance_exec(*params, &custom_renderer) else template.render(*args, &block) end end protected def app @store.app end end end