From e03ef4226a16f8c1ce0002cca841e5bdf443b784 Mon Sep 17 00:00:00 2001 From: Ben Hollis Date: Thu, 23 May 2013 00:11:09 -0700 Subject: [PATCH] Cache the filtered resource list to avoid calling Resource#ignored? a ton --- .../lib/middleman-core/sitemap/extensions/ignores.rb | 5 ++++- middleman-core/lib/middleman-core/sitemap/store.rb | 10 +++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/middleman-core/lib/middleman-core/sitemap/extensions/ignores.rb b/middleman-core/lib/middleman-core/sitemap/extensions/ignores.rb index 9c2ea2db..2c9feb68 100644 --- a/middleman-core/lib/middleman-core/sitemap/extensions/ignores.rb +++ b/middleman-core/lib/middleman-core/sitemap/extensions/ignores.rb @@ -68,11 +68,14 @@ module Middleman @ignored_callbacks << Proc.new {|p| File.fnmatch(path_clean, p) } else # Add a specific-path ignore unless that path is already covered - @ignored_callbacks << Proc.new {|p| p == path_clean } unless ignored?(path_clean) + return if ignored?(path_clean) + @ignored_callbacks << Proc.new {|p| p == path_clean } end elsif block_given? @ignored_callbacks << block end + + @app.sitemap.invalidate_resources_not_ignored_cache! end # Whether a path is ignored diff --git a/middleman-core/lib/middleman-core/sitemap/store.rb b/middleman-core/lib/middleman-core/sitemap/store.rb index d785e289..8a0ce73c 100644 --- a/middleman-core/lib/middleman-core/sitemap/store.rb +++ b/middleman-core/lib/middleman-core/sitemap/store.rb @@ -90,11 +90,17 @@ module Middleman if include_ignored @resources else - @resources.reject(&:ignored?) + @resources_not_ignored ||= @resources.reject(&:ignored?) end end end + # Invalidate our cached view of resource that are not ingnored. If your extension + # adds ways to ignore files, you should call this to make sure #resources works right. + def invalidate_resources_not_ignored_cache! + @resources_not_ignored = nil + end + # Register a handler to provide metadata on a file path # @param [Regexp] matcher # @return [Array>] @@ -213,6 +219,8 @@ module Middleman newres end + + invalidate_resources_not_ignored_cache! end end