cartodb-4.29/lib/carto/filename_generator.rb
2020-06-15 10:58:47 +08:00

32 lines
964 B
Ruby

module Carto
module FilenameGenerator
def filename_from_url(url, supported_extensions)
filename = CGI.unescape(File.basename(URI(url).path))
extension = File.extname(filename)
if extension.present? && supported_extensions.include?(extension)
filename
else
# For non-conventional URLs (i.e: filename in params)
regex_match = url_filename_regex(supported_extensions).match(url).to_s
regex_match if regex_match.present?
end
end
private
def url_filename_regex(supported_extensions)
se_match_regex = Regexp.union(supported_extensions_match(supported_extensions))
Regexp.new("[[:word:]-]+#{se_match_regex}+", Regexp::IGNORECASE)
end
def supported_extensions_match(supported_extensions)
supported_extensions.map { |ext|
ext = ext.gsub('.', '\\.')
[/#{ext}$/i, /#{ext}(?=\.)/i, /#{ext}(?=\?)/i, /#{ext}(?=&)/i]
}.flatten
end
end
end