diff --git a/.rubocop.yml b/.rubocop.yml index adb0ca87..8c90c049 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -10,7 +10,6 @@ AllCops: - lib/jekyll/document.rb - lib/jekyll/regenerator.rb - lib/jekyll/renderer.rb - - lib/jekyll/static_file.rb - lib/jekyll/utils.rb - bin/**/* - benchmark/**/* diff --git a/lib/jekyll/static_file.rb b/lib/jekyll/static_file.rb index 3e7d0d25..0f8544ee 100644 --- a/lib/jekyll/static_file.rb +++ b/lib/jekyll/static_file.rb @@ -1,16 +1,25 @@ module Jekyll class StaticFile - # The cache of last modification times [path] -> mtime. - @@mtimes = {} - attr_reader :relative_path, :extname + class << self + # The cache of last modification times [path] -> mtime. + def mtimes + @mtimes ||= {} + end + + def reset_cache + @mtimes = nil + end + end + # Initialize a new StaticFile. # # site - The Site. # base - The String path to the . # dir - The String path between and the file. # name - The String filename of the file. + # rubocop: disable ParameterLists def initialize(site, base, dir, name, collection = nil) @site = site @base = base @@ -20,6 +29,7 @@ module Jekyll @relative_path = File.join(*[@dir, @name].compact) @extname = File.extname(@name) end + # rubocop: enable ParameterLists # Returns source file path. def path @@ -56,7 +66,7 @@ module Jekyll # # Returns true if modified since last write. def modified? - @@mtimes[path] != mtime + self.class.mtimes[path] != mtime end # Whether to write the file to the filesystem @@ -64,7 +74,7 @@ module Jekyll # Returns true unless the defaults for the destination path from # _config.yml contain `published: false`. def write? - defaults.fetch('published', true) + defaults.fetch("published", true) end # Write the static file to the destination directory (if modified). @@ -76,28 +86,15 @@ module Jekyll dest_path = destination(dest) return false if File.exist?(dest_path) && !modified? - @@mtimes[path] = mtime + self.class.mtimes[path] = mtime FileUtils.mkdir_p(File.dirname(dest_path)) FileUtils.rm(dest_path) if File.exist?(dest_path) - if @site.safe || Jekyll.env == "production" - FileUtils.cp(path, dest_path) - else - FileUtils.copy_entry(path, dest_path) - end - File.utime(@@mtimes[path], @@mtimes[path], dest_path) + copy_file(dest_path) true end - # Reset the mtimes cache (for testing purposes). - # - # Returns nothing. - def self.reset_cache - @@mtimes = {} - nil - end - def to_liquid { "extname" => extname, @@ -109,11 +106,11 @@ module Jekyll def placeholders { :collection => @collection.label, - :path => relative_path[ + :path => relative_path[ @collection.relative_directory.size..relative_path.size], - :output_ext => '', - :name => '', - :title => '' + :output_ext => "", + :name => "", + :title => "" } end @@ -125,10 +122,10 @@ module Jekyll relative_path else ::Jekyll::URL.new({ - :template => @collection.url_template, + :template => @collection.url_template, :placeholders => placeholders }) - end.to_s.gsub(/\/$/, '') + end.to_s.gsub(%r!/$!, "") end # Returns the type of the collection if present, nil otherwise. @@ -141,5 +138,15 @@ module Jekyll def defaults @defaults ||= @site.frontmatter_defaults.all url, type end + + private + def copy_file(dest_path) + if @site.safe || Jekyll.env == "production" + FileUtils.cp(path, dest_path) + else + FileUtils.copy_entry(path, dest_path) + end + File.utime(self.class.mtimes[path], self.class.mtimes[path], dest_path) + end end end