From 36df6300cde80a03174672271e219626640ace4b Mon Sep 17 00:00:00 2001 From: Thomas Reynolds Date: Tue, 8 Nov 2011 16:04:53 -0800 Subject: [PATCH] queue sitemap changes until after first run --- lib/middleman/core_extensions/routing.rb | 2 +- lib/middleman/core_extensions/sitemap.rb | 30 +++++++++++++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/lib/middleman/core_extensions/routing.rb b/lib/middleman/core_extensions/routing.rb index 29f9d1d5..5e329e5a 100644 --- a/lib/middleman/core_extensions/routing.rb +++ b/lib/middleman/core_extensions/routing.rb @@ -47,7 +47,7 @@ module Middleman::CoreExtensions::Routing options[:layout] = layout if options[:layout].nil? if options.has_key?(:proxy) - sitemap.set_path(url, options[:proxy]) + reroute(url, options[:proxy]) if options.has_key?(:ignore) && options[:ignore] ignore(options[:proxy]) diff --git a/lib/middleman/core_extensions/sitemap.rb b/lib/middleman/core_extensions/sitemap.rb index ebcb1c5e..06a38b02 100644 --- a/lib/middleman/core_extensions/sitemap.rb +++ b/lib/middleman/core_extensions/sitemap.rb @@ -1,4 +1,5 @@ require 'find' +require 'hooks' module Middleman::CoreExtensions::Sitemap class << self @@ -27,16 +28,36 @@ module Middleman::CoreExtensions::Sitemap module ClassMethods # Keep a path from building def ignore(path) - sitemap.ignore_path(path) + action = Proc.new { ignore_path(path) } + + if sitemap.setup? + action.call + else + sitemap.class.after_setup(&action) + end + end + + def reroute(url, target) + action = Proc.new { set_path(url, target) } + + if sitemap.setup? + action.call + else + sitemap.class.after_setup(&action) + end end end class SitemapStore + include ::Hooks + define_hook :after_setup + def initialize @map = {} @ignored_paths = false @generic_paths = false @proxied_paths = false + @is_setup = false end def setup(app) @@ -44,6 +65,13 @@ module Middleman::CoreExtensions::Sitemap @source = File.expand_path(@app.views, @app.root) build_static_map + + run_hook :after_setup + @is_setup = true + end + + def setup? + @is_setup end # Check to see if we know about a specific path