mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Flesh out ActiveStorage::Filename docs
This commit is contained in:
parent
eddb9baf39
commit
91edf754c4
1 changed files with 14 additions and 6 deletions
|
@ -1,7 +1,7 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
# Encapsulates a string representing a filename to provide convenience access to parts of it and a sanitized version.
|
||||
# This is what's returned by ActiveStorage::Blob#filename. A Filename instance is comparable so it can be used for sorting.
|
||||
# Encapsulates a string representing a filename to provide convenient access to parts of it sanitization.
|
||||
# A Filename instance is returned by ActiveStorage::Blob#filename, and is comparable so it can be used for sorting.
|
||||
class ActiveStorage::Filename
|
||||
include Comparable
|
||||
|
||||
|
@ -9,23 +9,31 @@ class ActiveStorage::Filename
|
|||
@filename = filename
|
||||
end
|
||||
|
||||
# Returns the basename of the filename.
|
||||
# Returns the part of the filename preceding any extension.
|
||||
#
|
||||
# ActiveStorage::Filename.new("racecar.jpg").base # => "racecar"
|
||||
# ActiveStorage::Filename.new("racecar").base # => "racecar"
|
||||
# ActiveStorage::Filename.new(".gitignore").base # => ".gitignore"
|
||||
def base
|
||||
File.basename @filename, extension_with_delimiter
|
||||
end
|
||||
|
||||
# Returns the extension with delimiter of the filename.
|
||||
# Returns the extension of the filename (i.e. the substring following the last dot, excluding a dot at the
|
||||
# beginning) with the dot that precedes it. If the filename has no extension, an empty string is returned.
|
||||
#
|
||||
# ActiveStorage::Filename.new("racecar.jpg").extension_with_delimiter # => ".jpg"
|
||||
# ActiveStorage::Filename.new("racecar").extension_with_delimiter # => ""
|
||||
# ActiveStorage::Filename.new(".gitignore").extension_with_delimiter # => ""
|
||||
def extension_with_delimiter
|
||||
File.extname @filename
|
||||
end
|
||||
|
||||
# Returns the extension without delimiter of the filename.
|
||||
# Returns the extension of the filename (i.e. the substring following the last dot, excluding a dot at
|
||||
# the beginning). If the filename has no extension, an empty string is returned.
|
||||
#
|
||||
# ActiveStorage::Filename.new("racecar.jpg").extension_without_delimiter # => "jpg"
|
||||
# ActiveStorage::Filename.new("racecar").extension_without_delimiter # => ""
|
||||
# ActiveStorage::Filename.new(".gitignore").extension_without_delimiter # => ""
|
||||
def extension_without_delimiter
|
||||
extension_with_delimiter.from(1).to_s
|
||||
end
|
||||
|
@ -37,7 +45,7 @@ class ActiveStorage::Filename
|
|||
# ActiveStorage::Filename.new("foo:bar.jpg").sanitized # => "foo-bar.jpg"
|
||||
# ActiveStorage::Filename.new("foo/bar.jpg").sanitized # => "foo-bar.jpg"
|
||||
#
|
||||
# ...and any other character unsafe for URLs or storage is converted or stripped.
|
||||
# Characters considered unsafe for storage (e.g. \, $, and the RTL override character) are replaced with a dash.
|
||||
def sanitized
|
||||
@filename.encode(Encoding::UTF_8, invalid: :replace, undef: :replace, replace: "<EFBFBD>").strip.tr("\u{202E}%$|:;/\t\r\n\\", "-")
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue