Merge pull request #7707 from ashmaroli/refactor-glob-include
Refactor `EntryFilter#glob_include?`
This commit is contained in:
		
						commit
						7f1b678a4e
					
				|  | @ -86,48 +86,24 @@ module Jekyll | |||
|       ) | ||||
|     end | ||||
| 
 | ||||
|     # -- | ||||
|     # Check if an entry matches a specific pattern and return true,false. | ||||
|     # Returns true if path matches against any glob pattern. | ||||
|     # -- | ||||
|     def glob_include?(enum, entry) | ||||
|       entry_path = source_path.join(entry) | ||||
|       enum.any? do |exp| | ||||
|         # Users who send a Regexp knows what they want to | ||||
|         # exclude, so let them send a Regexp to exclude files, | ||||
|         # we will not bother caring if it works or not, it's | ||||
|         # on them at this point. | ||||
|     # Check if an entry matches a specific pattern. | ||||
|     # Returns true if path matches against any glob pattern, else false. | ||||
|     def glob_include?(enumerator, entry) | ||||
|       entry_with_source = File.join(site.source, entry) | ||||
| 
 | ||||
|         if exp.is_a?(Regexp) | ||||
|           entry_path =~ exp | ||||
|       enumerator.any? do |pattern| | ||||
|         case pattern | ||||
|         when String | ||||
|           pattern_with_source = File.join(site.source, pattern) | ||||
| 
 | ||||
|           File.fnmatch?(pattern_with_source, entry_with_source) || | ||||
|             entry_with_source.start_with?(pattern_with_source) | ||||
|         when Regexp | ||||
|           pattern.match?(entry_with_source) | ||||
|         else | ||||
|           item = source_path.join(exp) | ||||
| 
 | ||||
|           # If it's a directory they want to exclude, AKA | ||||
|           # ends with a "/" then we will go on to check and | ||||
|           # see if the entry falls within that path and | ||||
|           # exclude it if that's the case. | ||||
| 
 | ||||
|           if entry.end_with?("/") | ||||
|             entry_path.in_path?( | ||||
|               item | ||||
|             ) | ||||
| 
 | ||||
|           else | ||||
|             File.fnmatch?(item, entry_path) || | ||||
|               entry_path.to_path.start_with?( | ||||
|                 item | ||||
|               ) | ||||
|           end | ||||
|           false | ||||
|         end | ||||
|       end | ||||
|     end | ||||
| 
 | ||||
|     private | ||||
| 
 | ||||
|     def source_path | ||||
|       @source_path ||= Pathutil.new(site.in_source_dir) | ||||
|     end | ||||
|   end | ||||
| end | ||||
|  |  | |||
|  | @ -147,5 +147,11 @@ class TestEntryFilter < JekyllUnitTest | |||
|       assert @filter.glob_include?(data, "/vendor/bundle") | ||||
|       assert @filter.glob_include?(data, "vendor/bundle") | ||||
|     end | ||||
| 
 | ||||
|     should "match even if there is no trailing slash" do | ||||
|       data = ["/vendor/bundle/", "vendor/ruby"] | ||||
|       assert @filter.glob_include?(data, "vendor/bundle/jekyll/lib/page.rb") | ||||
|       assert @filter.glob_include?(data, "/vendor/ruby/lib/set.rb") | ||||
|     end | ||||
|   end | ||||
| end | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue