Class: Jekyll::EntryFilter
- Inherits:
-
Object
- Object
- Jekyll::EntryFilter
- Defined in:
- lib/jekyll/entry_filter.rb
Constant Summary collapse
- SPECIAL_LEADING_CHARACTERS =
[ ".", "_", "#", "~", ].freeze
Instance Attribute Summary collapse
-
#site ⇒ Object
readonly
Returns the value of attribute site.
Instance Method Summary collapse
- #backup?(entry) ⇒ Boolean
- #base_directory ⇒ Object
- #derive_base_directory(site, base_dir) ⇒ Object
- #excluded?(entry) ⇒ Boolean
- #filter(entries) ⇒ Object
-
#glob_include?(enum, e) ⇒ Boolean
– Check if an entry matches a specific pattern and return true,false.
- #included?(entry) ⇒ Boolean
-
#initialize(site, base_directory = nil) ⇒ EntryFilter
constructor
A new instance of EntryFilter.
- #relative_to_source(entry) ⇒ Object
- #special?(entry) ⇒ Boolean
-
#symlink?(entry) ⇒ Boolean
– Check if a file is a symlink.
-
#symlink_outside_site_source?(entry) ⇒ Boolean
– NOTE: Pathutil#in_path? gets the realpath.
Constructor Details
#initialize(site, base_directory = nil) ⇒ EntryFilter
Returns a new instance of EntryFilter.
10 11 12 13 14 15 |
# File 'lib/jekyll/entry_filter.rb', line 10 def initialize(site, base_directory = nil) @site = site @base_directory = derive_base_directory( @site, base_directory.to_s.dup ) end |
Instance Attribute Details
#site ⇒ Object (readonly)
Returns the value of attribute site.
5 6 7 |
# File 'lib/jekyll/entry_filter.rb', line 5 def site @site end |
Instance Method Details
#backup?(entry) ⇒ Boolean
50 51 52 |
# File 'lib/jekyll/entry_filter.rb', line 50 def backup?(entry) entry[-1..-1] == "~" end |
#base_directory ⇒ Object
17 18 19 |
# File 'lib/jekyll/entry_filter.rb', line 17 def base_directory @base_directory.to_s end |
#derive_base_directory(site, base_dir) ⇒ Object
21 22 23 24 |
# File 'lib/jekyll/entry_filter.rb', line 21 def derive_base_directory(site, base_dir) base_dir[site.source] = "" if base_dir.start_with?(site.source) base_dir end |
#excluded?(entry) ⇒ Boolean
54 55 56 57 58 59 60 61 62 63 |
# File 'lib/jekyll/entry_filter.rb', line 54 def excluded?(entry) glob_include?(site.exclude, relative_to_source(entry)).tap do |excluded| if excluded Jekyll.logger.debug( "EntryFilter:", "excluded #{relative_to_source(entry)}" ) end end end |
#filter(entries) ⇒ Object
32 33 34 35 36 37 38 |
# File 'lib/jekyll/entry_filter.rb', line 32 def filter(entries) entries.reject do |e| unless included?(e) special?(e) || backup?(e) || excluded?(e) || symlink?(e) end end end |
#glob_include?(enum, e) ⇒ Boolean
– Check if an entry matches a specific pattern and return true,false. Returns true if path matches against any glob pattern. –
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
# File 'lib/jekyll/entry_filter.rb', line 89 def glob_include?(enum, e) entry = Pathutil.new(site.in_source_dir).join(e) 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. if exp.is_a?(Regexp) entry =~ exp else item = Pathutil.new(site.in_source_dir).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 e.end_with?("/") entry.in_path?( item ) else File.fnmatch?(item, entry) || entry.to_path.start_with?( item ) end end end end |
#included?(entry) ⇒ Boolean
40 41 42 43 |
# File 'lib/jekyll/entry_filter.rb', line 40 def included?(entry) glob_include?(site.include, entry) || glob_include?(site.include, File.basename(entry)) end |
#relative_to_source(entry) ⇒ Object
26 27 28 29 30 |
# File 'lib/jekyll/entry_filter.rb', line 26 def relative_to_source(entry) File.join( base_directory, entry ) end |
#special?(entry) ⇒ Boolean
45 46 47 48 |
# File 'lib/jekyll/entry_filter.rb', line 45 def special?(entry) SPECIAL_LEADING_CHARACTERS.include?(entry[0..0]) || SPECIAL_LEADING_CHARACTERS.include?(File.basename(entry)[0..0]) end |
#symlink?(entry) ⇒ Boolean
– Check if a file is a symlink. NOTE: This can be converted to allowing even in safe,
since we use Pathutil#in_path? now.
–
70 71 72 |
# File 'lib/jekyll/entry_filter.rb', line 70 def symlink?(entry) site.safe && File.symlink?(entry) && symlink_outside_site_source?(entry) end |
#symlink_outside_site_source?(entry) ⇒ Boolean
– NOTE: Pathutil#in_path? gets the realpath. Check if a path is outside of our given root. –
79 80 81 82 83 |
# File 'lib/jekyll/entry_filter.rb', line 79 def symlink_outside_site_source?(entry) !Pathutil.new(entry).in_path?( site.in_source_dir ) end |