jekyll 3.9.1 → 4.0.0.pre.alpha1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (94) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +27 -50
  3. data/LICENSE +1 -1
  4. data/README.markdown +46 -17
  5. data/lib/blank_template/_config.yml +3 -0
  6. data/lib/blank_template/_layouts/default.html +12 -0
  7. data/lib/blank_template/_sass/main.scss +9 -0
  8. data/lib/blank_template/assets/css/main.scss +4 -0
  9. data/lib/blank_template/index.md +8 -0
  10. data/lib/jekyll.rb +5 -0
  11. data/lib/jekyll/cache.rb +183 -0
  12. data/lib/jekyll/cleaner.rb +2 -1
  13. data/lib/jekyll/collection.rb +78 -8
  14. data/lib/jekyll/command.rb +31 -6
  15. data/lib/jekyll/commands/build.rb +11 -20
  16. data/lib/jekyll/commands/clean.rb +2 -0
  17. data/lib/jekyll/commands/doctor.rb +15 -8
  18. data/lib/jekyll/commands/help.rb +1 -1
  19. data/lib/jekyll/commands/new.rb +37 -39
  20. data/lib/jekyll/commands/new_theme.rb +30 -28
  21. data/lib/jekyll/commands/serve.rb +46 -80
  22. data/lib/jekyll/commands/serve/live_reload_reactor.rb +6 -10
  23. data/lib/jekyll/commands/serve/servlet.rb +9 -11
  24. data/lib/jekyll/configuration.rb +26 -26
  25. data/lib/jekyll/converters/identity.rb +18 -0
  26. data/lib/jekyll/converters/markdown.rb +49 -40
  27. data/lib/jekyll/converters/markdown/kramdown_parser.rb +1 -10
  28. data/lib/jekyll/converters/smartypants.rb +34 -14
  29. data/lib/jekyll/convertible.rb +11 -13
  30. data/lib/jekyll/deprecator.rb +1 -3
  31. data/lib/jekyll/document.rb +44 -41
  32. data/lib/jekyll/drops/collection_drop.rb +2 -3
  33. data/lib/jekyll/drops/document_drop.rb +2 -1
  34. data/lib/jekyll/drops/drop.rb +3 -6
  35. data/lib/jekyll/drops/excerpt_drop.rb +4 -0
  36. data/lib/jekyll/drops/site_drop.rb +4 -13
  37. data/lib/jekyll/drops/unified_payload_drop.rb +1 -0
  38. data/lib/jekyll/drops/url_drop.rb +1 -0
  39. data/lib/jekyll/entry_filter.rb +2 -1
  40. data/lib/jekyll/excerpt.rb +45 -34
  41. data/lib/jekyll/external.rb +10 -5
  42. data/lib/jekyll/filters.rb +72 -31
  43. data/lib/jekyll/filters/date_filters.rb +6 -3
  44. data/lib/jekyll/filters/grouping_filters.rb +1 -2
  45. data/lib/jekyll/filters/url_filters.rb +6 -1
  46. data/lib/jekyll/frontmatter_defaults.rb +35 -19
  47. data/lib/jekyll/hooks.rb +2 -3
  48. data/lib/jekyll/liquid_extensions.rb +0 -2
  49. data/lib/jekyll/liquid_renderer.rb +13 -1
  50. data/lib/jekyll/liquid_renderer/file.rb +14 -3
  51. data/lib/jekyll/liquid_renderer/table.rb +67 -65
  52. data/lib/jekyll/log_adapter.rb +5 -1
  53. data/lib/jekyll/page.rb +10 -11
  54. data/lib/jekyll/page_without_a_file.rb +0 -4
  55. data/lib/jekyll/plugin.rb +5 -11
  56. data/lib/jekyll/plugin_manager.rb +2 -0
  57. data/lib/jekyll/reader.rb +38 -8
  58. data/lib/jekyll/readers/data_reader.rb +7 -9
  59. data/lib/jekyll/readers/layout_reader.rb +2 -12
  60. data/lib/jekyll/readers/post_reader.rb +29 -17
  61. data/lib/jekyll/readers/static_file_reader.rb +1 -1
  62. data/lib/jekyll/readers/theme_assets_reader.rb +7 -5
  63. data/lib/jekyll/regenerator.rb +4 -12
  64. data/lib/jekyll/renderer.rb +14 -25
  65. data/lib/jekyll/site.rb +78 -34
  66. data/lib/jekyll/static_file.rb +47 -11
  67. data/lib/jekyll/stevenson.rb +2 -3
  68. data/lib/jekyll/tags/highlight.rb +22 -52
  69. data/lib/jekyll/tags/include.rb +22 -38
  70. data/lib/jekyll/tags/link.rb +11 -7
  71. data/lib/jekyll/tags/post_url.rb +17 -16
  72. data/lib/jekyll/theme.rb +12 -23
  73. data/lib/jekyll/theme_builder.rb +91 -89
  74. data/lib/jekyll/url.rb +3 -2
  75. data/lib/jekyll/utils.rb +5 -4
  76. data/lib/jekyll/utils/ansi.rb +1 -1
  77. data/lib/jekyll/utils/exec.rb +0 -1
  78. data/lib/jekyll/utils/internet.rb +2 -4
  79. data/lib/jekyll/utils/platforms.rb +8 -8
  80. data/lib/jekyll/utils/thread_event.rb +1 -5
  81. data/lib/jekyll/utils/win_tz.rb +1 -1
  82. data/lib/jekyll/version.rb +1 -1
  83. data/lib/site_template/.gitignore +2 -0
  84. data/lib/site_template/404.html +1 -0
  85. data/lib/site_template/_config.yml +17 -5
  86. data/lib/site_template/_posts/0000-00-00-welcome-to-jekyll.markdown.erb +5 -1
  87. data/lib/site_template/{about.md → about.markdown} +0 -0
  88. data/lib/site_template/{index.md → index.markdown} +0 -0
  89. data/lib/theme_template/gitignore.erb +1 -0
  90. data/rubocop/jekyll/assert_equal_literal_actual.rb +149 -0
  91. metadata +85 -51
  92. data/lib/jekyll/converters/markdown/rdiscount_parser.rb +0 -37
  93. data/lib/jekyll/converters/markdown/redcarpet_parser.rb +0 -112
  94. data/lib/jekyll/utils/rouge.rb +0 -22
@@ -29,7 +29,9 @@ module Jekyll
29
29
  #
30
30
  # Returns nothing
31
31
  def log_level=(level)
32
- writer.level = LOG_LEVELS.fetch(level)
32
+ writer.level = level if level.is_a?(Integer) && level.between?(0, 3)
33
+ writer.level = LOG_LEVELS[level] ||
34
+ raise(ArgumentError, "unknown log level")
33
35
  @level = level
34
36
  end
35
37
 
@@ -41,6 +43,7 @@ module Jekyll
41
43
  self.log_level = :debug
42
44
  end
43
45
  debug "Logging at level:", LOG_LEVELS.key(writer.level).to_s
46
+ debug "Jekyll Version:", Jekyll::VERSION
44
47
  end
45
48
 
46
49
  # Public: Print a debug message
@@ -141,6 +144,7 @@ module Jekyll
141
144
  # the appropriate writer method, e.g. writer.info.
142
145
  def write(level_of_message, topic, message = nil, &block)
143
146
  return false unless write_message?(level_of_message)
147
+
144
148
  writer.public_send(level_of_message, message(topic, message, &block))
145
149
  end
146
150
  end
data/lib/jekyll/page.rb CHANGED
@@ -11,8 +11,6 @@ module Jekyll
11
11
 
12
12
  alias_method :extname, :ext
13
13
 
14
- FORWARD_SLASH = "/".freeze
15
-
16
14
  # Attributes for Liquid templates
17
15
  ATTRIBUTES_FOR_LIQUID = %w(
18
16
  content
@@ -52,7 +50,7 @@ module Jekyll
52
50
  read_yaml(File.join(base, dir), name)
53
51
 
54
52
  data.default_proc = proc do |_, key|
55
- site.frontmatter_defaults.find(File.join(dir, name), type, key)
53
+ site.frontmatter_defaults.find(relative_path, type, key)
56
54
  end
57
55
 
58
56
  Jekyll::Hooks.trigger :pages, :post_init, self
@@ -64,11 +62,11 @@ module Jekyll
64
62
  #
65
63
  # Returns the String destination directory.
66
64
  def dir
67
- if url.end_with?(FORWARD_SLASH)
65
+ if url.end_with?("/")
68
66
  url
69
67
  else
70
68
  url_dir = File.dirname(url)
71
- url_dir.end_with?(FORWARD_SLASH) ? url_dir : "#{url_dir}/"
69
+ url_dir.end_with?("/") ? url_dir : "#{url_dir}/"
72
70
  end
73
71
  end
74
72
 
@@ -97,11 +95,11 @@ module Jekyll
97
95
  #
98
96
  # Returns the String url.
99
97
  def url
100
- @url ||= URL.new({
98
+ @url ||= URL.new(
101
99
  :template => template,
102
100
  :placeholders => url_placeholders,
103
- :permalink => permalink,
104
- }).to_s
101
+ :permalink => permalink
102
+ ).to_s
105
103
  end
106
104
 
107
105
  # Returns a hash of URL placeholder names (as symbols) mapping to the
@@ -118,10 +116,11 @@ module Jekyll
118
116
  #
119
117
  # name - The String filename of the page file.
120
118
  #
119
+ # NOTE: `String#gsub` removes all trailing periods (in comparison to `String#chomp`)
121
120
  # Returns nothing.
122
121
  def process(name)
123
122
  self.ext = File.extname(name)
124
- self.basename = name[0..-ext.length - 1]
123
+ self.basename = name[0..-ext.length - 1].gsub(%r!\.*\z!, "")
125
124
  end
126
125
 
127
126
  # Add any necessary layouts to this post
@@ -146,7 +145,7 @@ module Jekyll
146
145
 
147
146
  # The path to the page source file, relative to the site source
148
147
  def relative_path
149
- File.join(*[@dir, @name].map(&:to_s).reject(&:empty?)).sub(%r!\A\/!, "")
148
+ @relative_path ||= File.join(*[@dir, @name].map(&:to_s).reject(&:empty?)).sub(%r!\A\/!, "")
150
149
  end
151
150
 
152
151
  # Obtain destination path.
@@ -163,7 +162,7 @@ module Jekyll
163
162
 
164
163
  # Returns the object as a debug String.
165
164
  def inspect
166
- "#<Jekyll::Page @name=#{name.inspect}>"
165
+ "#<#{self.class} @relative_path=#{relative_path.inspect}>"
167
166
  end
168
167
 
169
168
  # Returns the Boolean of whether this Page is HTML or not.
@@ -10,9 +10,5 @@ module Jekyll
10
10
  def read_yaml(*)
11
11
  @data ||= {}
12
12
  end
13
-
14
- def inspect
15
- "#<Jekyll:PageWithoutAFile @name=#{name.inspect}>"
16
- end
17
13
  end
18
14
  end
data/lib/jekyll/plugin.rb CHANGED
@@ -13,7 +13,7 @@ module Jekyll
13
13
  #
14
14
 
15
15
  def self.inherited(const)
16
- return catch_inheritance(const) do |const_|
16
+ catch_inheritance(const) do |const_|
17
17
  catch_inheritance(const_)
18
18
  end
19
19
  end
@@ -23,9 +23,7 @@ module Jekyll
23
23
  def self.catch_inheritance(const)
24
24
  const.define_singleton_method :inherited do |const_|
25
25
  (@children ||= Set.new).add const_
26
- if block_given?
27
- yield const_
28
- end
26
+ yield const_ if block_given?
29
27
  end
30
28
  end
31
29
 
@@ -48,9 +46,7 @@ module Jekyll
48
46
  # Returns the Symbol priority.
49
47
  def self.priority(priority = nil)
50
48
  @priority ||= nil
51
- if priority && PRIORITIES.key?(priority)
52
- @priority = priority
53
- end
49
+ @priority = priority if priority && PRIORITIES.key?(priority)
54
50
  @priority || :normal
55
51
  end
56
52
 
@@ -62,9 +58,7 @@ module Jekyll
62
58
  #
63
59
  # Returns the safety Boolean.
64
60
  def self.safe(safe = nil)
65
- unless defined?(@safe) && safe.nil?
66
- @safe = safe
67
- end
61
+ @safe = safe unless defined?(@safe) && safe.nil?
68
62
  @safe || false
69
63
  end
70
64
 
@@ -74,7 +68,7 @@ module Jekyll
74
68
  #
75
69
  # Returns -1, 0, 1.
76
70
  def self.<=>(other)
77
- PRIORITIES[other.priority] <=> PRIORITIES[self.priority]
71
+ PRIORITIES[other.priority] <=> PRIORITIES[priority]
78
72
  end
79
73
 
80
74
  # Spaceship is priority [higher -> lower]
@@ -37,8 +37,10 @@ module Jekyll
37
37
  # Returns false only if no dependencies have been specified, otherwise nothing.
38
38
  def require_theme_deps
39
39
  return false unless site.theme.runtime_dependencies
40
+
40
41
  site.theme.runtime_dependencies.each do |dep|
41
42
  next if dep.name == "jekyll"
43
+
42
44
  External.require_with_graceful_fail(dep.name) if plugin_allowed?(dep.name)
43
45
  end
44
46
  end
data/lib/jekyll/reader.rb CHANGED
@@ -14,6 +14,7 @@ module Jekyll
14
14
  def read
15
15
  @site.layouts = LayoutReader.new(site).read
16
16
  read_directories
17
+ read_included_excludes
17
18
  sort_files!
18
19
  @site.data = DataReader.new(site).read(site.config["data_dir"])
19
20
  CollectionReader.new(site).read
@@ -39,13 +40,21 @@ module Jekyll
39
40
 
40
41
  return unless File.directory?(base)
41
42
 
43
+ dot_dirs = []
44
+ dot_pages = []
45
+ dot_static_files = []
46
+
42
47
  dot = Dir.chdir(base) { filter_entries(Dir.entries("."), base) }
43
- dot_dirs = dot.select { |file| File.directory?(@site.in_source_dir(base, file)) }
44
- dot_files = (dot - dot_dirs)
45
- dot_pages = dot_files.select do |file|
46
- Utils.has_yaml_header?(@site.in_source_dir(base, file))
48
+ dot.each do |entry|
49
+ file_path = @site.in_source_dir(base, entry)
50
+ if File.directory?(file_path)
51
+ dot_dirs << entry
52
+ elsif Utils.has_yaml_header?(file_path)
53
+ dot_pages << entry
54
+ else
55
+ dot_static_files << entry
56
+ end
47
57
  end
48
- dot_static_files = dot_files - dot_pages
49
58
 
50
59
  retrieve_posts(dir)
51
60
  retrieve_dirs(base, dir, dot_dirs)
@@ -61,6 +70,7 @@ module Jekyll
61
70
  # Returns nothing.
62
71
  def retrieve_posts(dir)
63
72
  return if outside_configured_directory?(dir)
73
+
64
74
  site.posts.docs.concat(post_reader.read_posts(dir))
65
75
  site.posts.docs.concat(post_reader.read_drafts(dir)) if site.show_drafts
66
76
  end
@@ -76,9 +86,7 @@ module Jekyll
76
86
  dot_dirs.each do |file|
77
87
  dir_path = site.in_source_dir(dir, file)
78
88
  rel_path = File.join(dir, file)
79
- unless @site.dest.chomp("/") == dir_path
80
- @site.reader.read_directories(rel_path)
81
- end
89
+ @site.reader.read_directories(rel_path) unless @site.dest.chomp("/") == dir_path
82
90
  end
83
91
  end
84
92
 
@@ -126,6 +134,7 @@ module Jekyll
126
134
  def get_entries(dir, subfolder)
127
135
  base = site.in_source_dir(dir, subfolder)
128
136
  return [] unless File.exist?(base)
137
+
129
138
  entries = Dir.chdir(base) { filter_entries(Dir["**/*"], base) }
130
139
  entries.delete_if { |e| File.directory?(site.in_source_dir(base, e)) }
131
140
  end
@@ -150,5 +159,26 @@ module Jekyll
150
159
  def post_reader
151
160
  @post_reader ||= PostReader.new(site)
152
161
  end
162
+
163
+ def read_included_excludes
164
+ site.include.each do |entry|
165
+ next if entry == ".htaccess"
166
+
167
+ entry_path = site.in_source_dir(entry)
168
+ next if File.directory?(entry_path)
169
+
170
+ read_included_file(entry_path) if File.file?(entry_path)
171
+ end
172
+ end
173
+
174
+ def read_included_file(entry_path)
175
+ dir = File.dirname(entry_path).sub(site.source, "")
176
+ file = Array(File.basename(entry_path))
177
+ if Utils.has_yaml_header?(entry_path)
178
+ site.pages.concat(PageReader.new(site, dir).read(file))
179
+ else
180
+ site.static_files.concat(StaticFileReader.new(site, dir).read(file))
181
+ end
182
+ end
153
183
  end
154
184
  end
@@ -54,16 +54,14 @@ module Jekyll
54
54
  def read_data_file(path)
55
55
  case File.extname(path).downcase
56
56
  when ".csv"
57
- CSV.read(path, {
58
- :headers => true,
59
- :encoding => site.config["encoding"],
60
- }).map(&:to_hash)
57
+ CSV.read(path,
58
+ :headers => true,
59
+ :encoding => site.config["encoding"]).map(&:to_hash)
61
60
  when ".tsv"
62
- CSV.read(path, {
63
- :col_sep => "\t",
64
- :headers => true,
65
- :encoding => site.config["encoding"],
66
- }).map(&:to_hash)
61
+ CSV.read(path,
62
+ :col_sep => "\t",
63
+ :headers => true,
64
+ :encoding => site.config["encoding"]).map(&:to_hash)
67
65
  else
68
66
  SafeYAML.load_file(path)
69
67
  end
@@ -23,7 +23,7 @@ module Jekyll
23
23
  end
24
24
 
25
25
  def layout_directory
26
- @layout_directory ||= (layout_directory_in_cwd || layout_directory_inside_source)
26
+ @layout_directory ||= site.in_source_dir(site.config["layouts_dir"])
27
27
  end
28
28
 
29
29
  def theme_layout_directory
@@ -54,18 +54,8 @@ module Jekyll
54
54
 
55
55
  def within(directory)
56
56
  return unless File.exist?(directory)
57
- Dir.chdir(directory) { yield }
58
- end
59
-
60
- def layout_directory_inside_source
61
- site.in_source_dir(site.config["layouts_dir"])
62
- end
63
57
 
64
- def layout_directory_in_cwd
65
- dir = Jekyll.sanitized_path(Dir.pwd, site.config["layouts_dir"])
66
- if File.directory?(dir) && !site.safe
67
- dir
68
- end
58
+ Dir.chdir(directory) { yield }
69
59
  end
70
60
  end
71
61
  end
@@ -34,19 +34,9 @@ module Jekyll
34
34
  #
35
35
  # Returns nothing.
36
36
  def read_publishable(dir, magic_dir, matcher)
37
- read_content(dir, magic_dir, matcher).tap { |docs| docs.each(&:read) }
38
- .select do |doc|
39
- if doc.content.valid_encoding?
40
- site.publisher.publish?(doc).tap do |will_publish|
41
- if !will_publish && site.publisher.hidden_in_the_future?(doc)
42
- Jekyll.logger.debug "Skipping:", "#{doc.relative_path} has a future date"
43
- end
44
- end
45
- else
46
- Jekyll.logger.debug "Skipping:", "#{doc.relative_path} is not valid UTF-8"
47
- false
48
- end
49
- end
37
+ read_content(dir, magic_dir, matcher)
38
+ .tap { |docs| docs.each(&:read) }
39
+ .select { |doc| processable?(doc) }
50
40
  end
51
41
 
52
42
  # Read all the content files from <source>/<dir>/magic_dir
@@ -61,12 +51,34 @@ module Jekyll
61
51
  def read_content(dir, magic_dir, matcher)
62
52
  @site.reader.get_entries(dir, magic_dir).map do |entry|
63
53
  next unless entry =~ matcher
54
+
64
55
  path = @site.in_source_dir(File.join(dir, magic_dir, entry))
65
- Document.new(path, {
66
- :site => @site,
67
- :collection => @site.posts,
68
- })
56
+ Document.new(path,
57
+ :site => @site,
58
+ :collection => @site.posts)
69
59
  end.reject(&:nil?)
70
60
  end
61
+
62
+ private
63
+
64
+ def processable?(doc)
65
+ if doc.content.nil?
66
+ Jekyll.logger.debug "Skipping:", "Content in #{doc.relative_path} is nil"
67
+ false
68
+ elsif !doc.content.valid_encoding?
69
+ Jekyll.logger.debug "Skipping:", "#{doc.relative_path} is not valid UTF-8"
70
+ false
71
+ else
72
+ publishable?(doc)
73
+ end
74
+ end
75
+
76
+ def publishable?(doc)
77
+ site.publisher.publish?(doc).tap do |will_publish|
78
+ if !will_publish && site.publisher.hidden_in_the_future?(doc)
79
+ Jekyll.logger.warn "Skipping:", "#{doc.relative_path} has a future date"
80
+ end
81
+ end
82
+ end
71
83
  end
72
84
  end
@@ -16,7 +16,7 @@ module Jekyll
16
16
  #
17
17
  # Returns an array of static files.
18
18
  def read(files)
19
- files.map do |file|
19
+ files.each do |file|
20
20
  @unfiltered_content << StaticFile.new(@site, @site.source, @dir, file)
21
21
  end
22
22
  @unfiltered_content
@@ -8,10 +8,11 @@ module Jekyll
8
8
  end
9
9
 
10
10
  def read
11
- return unless site.theme && site.theme.assets_path
11
+ return unless site.theme&.assets_path
12
12
 
13
13
  Find.find(site.theme.assets_path) do |path|
14
14
  next if File.directory?(path)
15
+
15
16
  if File.symlink?(path)
16
17
  Jekyll.logger.warn "Theme reader:", "Ignored symlinked asset: #{path}"
17
18
  else
@@ -21,6 +22,7 @@ module Jekyll
21
22
  end
22
23
 
23
24
  private
25
+
24
26
  def read_theme_asset(path)
25
27
  base = site.theme.root
26
28
  dir = File.dirname(path.sub("#{site.theme.root}/", ""))
@@ -28,18 +30,18 @@ module Jekyll
28
30
 
29
31
  if Utils.has_yaml_header?(path)
30
32
  append_unless_exists site.pages,
31
- Jekyll::Page.new(site, base, dir, name)
33
+ Jekyll::Page.new(site, base, dir, name)
32
34
  else
33
35
  append_unless_exists site.static_files,
34
- Jekyll::StaticFile.new(site, base, "/#{dir}", name)
36
+ Jekyll::StaticFile.new(site, base, "/#{dir}", name)
35
37
  end
36
38
  end
37
39
 
38
40
  def append_unless_exists(haystack, new_item)
39
41
  if haystack.any? { |file| file.relative_path == new_item.relative_path }
40
42
  Jekyll.logger.debug "Theme:",
41
- "Ignoring #{new_item.relative_path} in theme due to existing file " \
42
- "with that path in site."
43
+ "Ignoring #{new_item.relative_path} in theme due to existing file " \
44
+ "with that path in site."
43
45
  return
44
46
  end
45
47
 
@@ -21,6 +21,7 @@ module Jekyll
21
21
  # Returns a boolean.
22
22
  def regenerate?(document)
23
23
  return true if disabled
24
+
24
25
  case document
25
26
  when Page
26
27
  regenerate_page?(document)
@@ -28,9 +29,7 @@ module Jekyll
28
29
  regenerate_document?(document)
29
30
  else
30
31
  source_path = document.respond_to?(:path) ? document.path : nil
31
- dest_path = if document.respond_to?(:destination)
32
- document.destination(@site.dest)
33
- end
32
+ dest_path = document.destination(@site.dest) if document.respond_to?(:destination)
34
33
  source_modified_or_dest_missing?(source_path, dest_path)
35
34
  end
36
35
  end
@@ -89,9 +88,7 @@ module Jekyll
89
88
  return true if path.nil?
90
89
 
91
90
  # Check for path in cache
92
- if cache.key? path
93
- return cache[path]
94
- end
91
+ return cache[path] if cache.key? path
95
92
 
96
93
  if metadata[path]
97
94
  # If we have seen this file before,
@@ -165,7 +162,6 @@ module Jekyll
165
162
  end
166
163
  end
167
164
 
168
- private
169
165
  def regenerate_page?(document)
170
166
  document.asset_file? || document.data["regenerate"] ||
171
167
  source_modified_or_dest_missing?(
@@ -173,7 +169,6 @@ module Jekyll
173
169
  )
174
170
  end
175
171
 
176
- private
177
172
  def regenerate_document?(document)
178
173
  !document.write? || document.data["regenerate"] ||
179
174
  source_modified_or_dest_missing?(
@@ -181,14 +176,11 @@ module Jekyll
181
176
  )
182
177
  end
183
178
 
184
- private
185
179
  def existing_file_modified?(path)
186
180
  # If one of this file dependencies have been modified,
187
181
  # set the regeneration bit for both the dependency and the file to true
188
182
  metadata[path]["deps"].each do |dependency|
189
- if modified?(dependency)
190
- return cache[dependency] = cache[path] = true
191
- end
183
+ return cache[dependency] = cache[path] = true if modified?(dependency)
192
184
  end
193
185
 
194
186
  if File.exist?(path) && metadata[path]["mtime"].eql?(File.mtime(path))