URL#generate_url_from_drop: be smarter about replacing *just* the keys
This commit is contained in:
parent
9f8f031469
commit
347651e571
|
@ -84,17 +84,29 @@ module Jekyll
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def possible_keys(key)
|
||||||
|
if key.end_with?("_")
|
||||||
|
[key, key.chomp("_")]
|
||||||
|
else
|
||||||
|
[key]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def generate_url_from_drop(template)
|
def generate_url_from_drop(template)
|
||||||
template.gsub(%r!:([a-z_]+)!) do |match|
|
template.gsub(%r!:([a-z_]+)!) do |match|
|
||||||
key = match.sub(":".freeze, "".freeze)
|
pool = possible_keys(match.sub(":".freeze, "".freeze))
|
||||||
unless @placeholders.key?(key)
|
|
||||||
raise NoMethodError, "The URL template key #{key} doesn't exist!"
|
winner = pool.find { |key| @placeholders.key?(key) }
|
||||||
end
|
if winner.nil?
|
||||||
if @placeholders[key].nil?
|
raise NoMethodError,
|
||||||
"".freeze
|
"The URL template doesn't have #{pool.join(" or ")} keys. Check your permalink template!"
|
||||||
else
|
|
||||||
self.class.escape_path(@placeholders[key])
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
value = @placeholders[winner]
|
||||||
|
value = "" if value.nil?
|
||||||
|
replacement = self.class.escape_path(value)
|
||||||
|
|
||||||
|
match.sub(":#{winner}", replacement)
|
||||||
end.gsub(%r!//!, "/".freeze)
|
end.gsub(%r!//!, "/".freeze)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue