From c40df470556646a90a9070a077f19f8e520304f4 Mon Sep 17 00:00:00 2001 From: Aaron Patterson Date: Sat, 10 May 2014 11:52:13 -0700 Subject: feature detect for FNM_EXTGLOB for older Ruby. Fixes #15053 --- actionpack/lib/action_view/template/resolver.rb | 26 ++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) (limited to 'actionpack/lib/action_view/template/resolver.rb') diff --git a/actionpack/lib/action_view/template/resolver.rb b/actionpack/lib/action_view/template/resolver.rb index 51dd07a02f..27d11ab6fb 100644 --- a/actionpack/lib/action_view/template/resolver.rb +++ b/actionpack/lib/action_view/template/resolver.rb @@ -120,11 +120,7 @@ module ActionView def query(path, details, formats) query = build_query(path, details) - template_paths = Dir[query].reject { |filename| - File.directory?(filename) || - # deals with case-insensitive file systems. - !File.fnmatch(query, filename, File::FNM_EXTGLOB) - } + template_paths = find_template_paths query template_paths.map { |template| handler, format = extract_handler_and_format(template, formats) @@ -137,6 +133,26 @@ module ActionView } end + if File.const_defined? :FNM_EXTGLOB + def find_template_paths(query) + Dir[query].reject { |filename| + File.directory?(filename) || + # deals with case-insensitive file systems. + !File.fnmatch(query, filename, File::FNM_EXTGLOB) + } + end + else + def find_template_paths(query) + # deals with case-insensitive file systems. + sanitizer = Hash.new { |h,dir| h[dir] = Dir["#{dir}/*"] } + + Dir[query].reject { |filename| + File.directory?(filename) || + !sanitizer[File.dirname(filename)].include?(filename) + } + end + end + # Helper for building query glob string based on resolver's pattern. def build_query(path, details) query = @pattern.dup -- cgit v1.2.3