Merge branch 'master' of github.com:mojombo/jekyll

* 'master' of github.com:mojombo/jekyll:
  add Enumerable#glob_include?
  fixed a syntax error
  use any? instead
  update test for include,exclude glob support
  Update test/test_site.rb
  Update lib/jekyll/site.rb
  add regexp support for option 'include','exclude'
This commit is contained in:
Parker Moore 2013-01-12 22:16:28 -08:00
commit 963721fb46
4 changed files with 36 additions and 6 deletions

View File

@ -50,3 +50,11 @@ class Date
strftime("%Y-%m-%dT%H:%M:%S%Z") strftime("%Y-%m-%dT%H:%M:%S%Z")
end if RUBY_VERSION < '1.9' end if RUBY_VERSION < '1.9'
end end
module Enumerable
# Returns true if path matches against any glob pattern.
# Look for more detail about glob pattern in method File::fnmatch.
def glob_include?(e)
any? { |exp| File.fnmatch?(exp, e) }
end
end

View File

@ -335,10 +335,10 @@ module Jekyll
# Returns the Array of filtered entries. # Returns the Array of filtered entries.
def filter_entries(entries) def filter_entries(entries)
entries.reject do |e| entries.reject do |e|
unless self.include.include?(e) unless self.include.glob_include?(e)
['.', '_', '#'].include?(e[0..0]) || ['.', '_', '#'].include?(e[0..0]) ||
e[-1..-1] == '~' || e[-1..-1] == '~' ||
self.exclude.include?(e) || self.exclude.glob_include?(e) ||
File.symlink?(e) File.symlink?(e)
end end
end end

View File

@ -63,4 +63,26 @@ class TestCoreExt < Test::Unit::TestCase
end end
end end
context "enumerable" do
context "glob_include?" do
should "return false with no glob patterns" do
assert ![].glob_include?("a.txt")
end
should "return false with all not match path" do
data = ["a*", "b?"]
assert !data.glob_include?("ca.txt")
assert !data.glob_include?("ba.txt")
end
should "return true with match path" do
data = ["a*", "b?", "**/a*"]
assert data.glob_include?("a.txt")
assert data.glob_include?("ba")
assert data.glob_include?("c/a/a.txt")
assert data.glob_include?("c/a/b/a.txt")
end
end
end
end end

View File

@ -154,13 +154,13 @@ class TestSite < Test::Unit::TestCase
excludes = %w[README TODO] excludes = %w[README TODO]
files = %w[index.html site.css .htaccess] files = %w[index.html site.css .htaccess]
@site.exclude = excludes @site.exclude = excludes + ["exclude*"]
assert_equal files, @site.filter_entries(excludes + files) assert_equal files, @site.filter_entries(excludes + files + ["excludeA"])
end end
should "not filter entries within include" do should "not filter entries within include" do
includes = %w[_index.html .htaccess] includes = %w[_index.html .htaccess include*]
files = %w[index.html _index.html .htaccess] files = %w[index.html _index.html .htaccess includeA]
@site.include = includes @site.include = includes
assert_equal files, @site.filter_entries(files) assert_equal files, @site.filter_entries(files)