Class: Bridgetown::StaticFile
- Inherits:
-
Object
- Object
- Bridgetown::StaticFile
- Extended by:
- Forwardable
- Defined in:
- lib/bridgetown-core/static_file.rb
Instance Attribute Summary collapse
-
#collection ⇒ Object
readonly
Returns the value of attribute collection.
-
#data ⇒ Object
readonly
Returns the value of attribute data.
-
#extname ⇒ Object
readonly
Returns the value of attribute extname.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#relative_path ⇒ Object
readonly
Returns the value of attribute relative_path.
-
#site ⇒ Object
readonly
Returns the value of attribute site.
Class Method Summary collapse
-
.mtimes ⇒ Object
The cache of last modification times [path] -> mtime.
- .reset_cache ⇒ Object
Instance Method Summary collapse
- #basename ⇒ Object (also: #basename_without_ext)
-
#cleaned_relative_path ⇒ Object
Generates a relative path with the collection's directory removed when applicable and additionally removes any multiple periods in the string.
-
#defaults ⇒ Object
Returns the front matter defaults defined for the file's URL and/or type as defined in bridgetown.config.yml.
-
#destination(dest) ⇒ Object
Obtain destination path.
- #destination_rel_dir ⇒ Object
-
#initialize(site, base, dir, name, collection = nil) ⇒ StaticFile
constructor
Initialize a new StaticFile.
-
#inspect ⇒ Object
Returns a debug string on inspecting the static file.
-
#modified? ⇒ Boolean
Is source path modified?.
- #modified_time ⇒ Object (also: #date)
-
#mtime ⇒ Object
Returns last modification time for this file.
-
#path ⇒ Object
Returns source file path.
- #placeholders ⇒ Object
- #relative_path_basename_without_prefix ⇒ Object
- #to_liquid ⇒ Object
-
#type ⇒ Object
Returns the type of the collection if present, nil otherwise.
-
#url ⇒ Object
Applies a similar URL-building technique as resources that takes the collection's URL template into account.
-
#write(dest) ⇒ Object
Write the static file to the destination directory (if modified).
-
#write? ⇒ Boolean
Whether to write the file to the filesystem.
Constructor Details
#initialize(site, base, dir, name, collection = nil) ⇒ StaticFile
Initialize a new StaticFile.
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/bridgetown-core/static_file.rb', line 30 def initialize(site, base, dir, name, collection = nil) # rubocop:disable Metrics/ParameterLists @site = site @base = base @dir = dir @name = name @collection = collection @relative_path = File.join(*[@dir, @name].compact) @extname = File.extname(@name) @data = @site.frontmatter_defaults.all(relative_path, type).as_dots data.permalink ||= if collection && !collection.builtin? "#{collection.default_permalink.chomp("/").chomp(".*")}.*" else "/:path.*" end end |
Instance Attribute Details
#collection ⇒ Object (readonly)
Returns the value of attribute collection.
8 9 10 |
# File 'lib/bridgetown-core/static_file.rb', line 8 def collection @collection end |
#data ⇒ Object (readonly)
Returns the value of attribute data.
8 9 10 |
# File 'lib/bridgetown-core/static_file.rb', line 8 def data @data end |
#extname ⇒ Object (readonly)
Returns the value of attribute extname.
8 9 10 |
# File 'lib/bridgetown-core/static_file.rb', line 8 def extname @extname end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
8 9 10 |
# File 'lib/bridgetown-core/static_file.rb', line 8 def name @name end |
#relative_path ⇒ Object (readonly)
Returns the value of attribute relative_path.
8 9 10 |
# File 'lib/bridgetown-core/static_file.rb', line 8 def relative_path @relative_path end |
#site ⇒ Object (readonly)
Returns the value of attribute site.
8 9 10 |
# File 'lib/bridgetown-core/static_file.rb', line 8 def site @site end |
Class Method Details
.mtimes ⇒ Object
The cache of last modification times [path] -> mtime.
14 15 16 |
# File 'lib/bridgetown-core/static_file.rb', line 14 def mtimes @mtimes ||= {} end |
.reset_cache ⇒ Object
18 19 20 |
# File 'lib/bridgetown-core/static_file.rb', line 18 def reset_cache @mtimes = nil end |
Instance Method Details
#basename ⇒ Object Also known as: basename_without_ext
125 126 127 |
# File 'lib/bridgetown-core/static_file.rb', line 125 def basename @basename ||= File.basename(name, ".*") end |
#cleaned_relative_path ⇒ Object
Generates a relative path with the collection's directory removed when applicable and additionally removes any multiple periods in the string.
NOTE: String#gsub!
removes all trailing periods (in comparison to String#chomp!
)
Examples:
When relative_path
is "_methods/site/my-cool-avatar...png":
cleaned_relative_path
# => "/site/my-cool-avatar"
Returns the cleaned relative path of the static file.
161 162 163 164 165 166 167 168 |
# File 'lib/bridgetown-core/static_file.rb', line 161 def cleaned_relative_path @cleaned_relative_path ||= begin cleaned = relative_path[0..-extname.length - 1] cleaned.gsub!(%r!\.*\z!, "") cleaned.sub!(@collection.relative_path, "") if @collection cleaned end end |
#defaults ⇒ Object
Returns the front matter defaults defined for the file's URL and/or type as defined in bridgetown.config.yml.
193 194 195 |
# File 'lib/bridgetown-core/static_file.rb', line 193 def defaults @defaults ||= site.frontmatter_defaults.all url, type end |
#destination(dest) ⇒ Object
Obtain destination path.
dest - The String path to the destination dir.
Returns destination file path.
56 57 58 59 60 61 62 63 |
# File 'lib/bridgetown-core/static_file.rb', line 56 def destination(dest) dest = site.in_dest_dir(dest) dest_url = url if site.base_path.present? && collection dest_url = dest_url.delete_prefix site.base_path(strip_slash_only: true) end site.in_dest_dir(dest, Bridgetown::Utils.unencode_uri(dest_url)) end |
#destination_rel_dir ⇒ Object
65 66 67 68 69 70 71 |
# File 'lib/bridgetown-core/static_file.rb', line 65 def destination_rel_dir if @collection File.dirname(url) else @dir end end |
#inspect ⇒ Object
Returns a debug string on inspecting the static file. Includes only the relative path of the object.
199 200 201 |
# File 'lib/bridgetown-core/static_file.rb', line 199 def inspect "#<#{self.class} @relative_path=#{relative_path.inspect}>" end |
#modified? ⇒ Boolean
Is source path modified?
Returns true if modified since last write.
87 88 89 |
# File 'lib/bridgetown-core/static_file.rb', line 87 def modified? self.class.mtimes[path] != mtime end |
#modified_time ⇒ Object Also known as: date
73 74 75 |
# File 'lib/bridgetown-core/static_file.rb', line 73 def modified_time @modified_time ||= File.stat(path).mtime end |
#mtime ⇒ Object
Returns last modification time for this file.
80 81 82 |
# File 'lib/bridgetown-core/static_file.rb', line 80 def mtime modified_time.to_i end |
#path ⇒ Object
Returns source file path.
47 48 49 |
# File 'lib/bridgetown-core/static_file.rb', line 47 def path @path ||= File.join(*[@base, @dir, @name].compact) end |
#placeholders ⇒ Object
140 141 142 143 144 145 146 147 148 |
# File 'lib/bridgetown-core/static_file.rb', line 140 def placeholders { collection: @collection.label, path: cleaned_relative_path, output_ext: "", name: "", title: "", } end |
#relative_path_basename_without_prefix ⇒ Object
131 132 133 134 135 136 137 138 |
# File 'lib/bridgetown-core/static_file.rb', line 131 def relative_path_basename_without_prefix return_path = Pathname.new("") Pathname.new(cleaned_relative_path).each_filename do |filename| return_path += filename unless filename.starts_with?("_") end (return_path.dirname + return_path.basename(".*")).to_s end |
#to_liquid ⇒ Object
121 122 123 |
# File 'lib/bridgetown-core/static_file.rb', line 121 def to_liquid @to_liquid ||= Drops::StaticFileDrop.new(self) end |
#type ⇒ Object
Returns the type of the collection if present, nil otherwise.
187 188 189 |
# File 'lib/bridgetown-core/static_file.rb', line 187 def type @type ||= @collection&.label&.to_sym end |
#url ⇒ Object
Applies a similar URL-building technique as resources that takes the collection's URL template into account. The default URL template can be overriden in the collection's configuration in bridgetown.config.yml.
173 174 175 176 177 178 179 180 181 182 183 184 |
# File 'lib/bridgetown-core/static_file.rb', line 173 def url @url ||= begin newly_processed = false base = if @collection.nil? cleaned_relative_path else newly_processed = true Bridgetown::Resource::PermalinkProcessor.new(self).transform end.to_s.chomp("/") newly_processed ? base : "#{base}#{extname}" end end |
#write(dest) ⇒ Object
Write the static file to the destination directory (if modified).
dest - The String path to the destination dir.
Returns false if the file was not modified since last time (no-op).
107 108 109 110 111 112 113 114 115 116 117 118 119 |
# File 'lib/bridgetown-core/static_file.rb', line 107 def write(dest) dest_path = destination(dest) return false if File.exist?(dest_path) && !modified? self.class.mtimes[path] = mtime FileUtils.mkdir_p(File.dirname(dest_path)) FileUtils.rm_rf(dest_path) Bridgetown.logger.debug "Saving file:", dest_path copy_file(dest_path) true end |
#write? ⇒ Boolean
Whether to write the file to the filesystem
Returns true unless the defaults for the destination path from
bridgetown.config.yml contain published: false
.
95 96 97 98 99 100 |
# File 'lib/bridgetown-core/static_file.rb', line 95 def write? publishable = defaults.fetch("published", true) return publishable unless @collection publishable && @collection.write? end |