Este auxiliar de tag de fonte é feito para um manuseio fácil das tags de link que contêm fontes do Google.
Aceita os seguintes formatos:
<%= font_tag(:open_sans, 400, 300) %>
<%= font_tag([:open_sans, 400, 300], [:lato, 400, 300]) %>
<%= font_tag({ name: :open_sans, sizes: [400, 300] }, { name: :lato, sizes: [400, 300]}) %>
def font_tag(fontname_hash_or_array, *args)
#
# The message error.
#
message = 'The font_tag() helper receives a single font definition in the format :fontname, size1, size2, '
message += 'a multiple font definition in an array format [:fontname1, size1, size2], [:fontname2, size1, size2], '
message += 'or a multiple font definition in the hash format {name: :fontname1, sizes: [size1, size2]},{name: :fontname2, sizes: [size1, size2]}'
case fontname_hash_or_array
when Symbol , String
fontname = fontname_hash_or_array
#
# If the `fontname_hash_or_array` param is a symbol, then it's converted and processed as a string.
#
fontname = fontname.to_s.humanize.titleize if fontname.class == Symbol
fontname = fontname.split(/ /).join('+')
#
# For a better understanding of the context
#
sizes = args
size_definition = (sizes and !sizes.empty?) ? ":#{sizes.join(',')}" : nil
raw "<link href='http://fonts.googleapis.com/css?family=#{fontname}#{size_definition}' rel='stylesheet' type='text/css'/>"
when Hash
first_hash = fontname_hash_or_array
tag = font_tag first_hash[:name], first_hash[:sizes]
#
# For a better understanding of the context
#
hashes = args
unless (!hashes || hashes.empty?)
hashes.each do |hash|
raise message unless hash.class == Hash
tag += "n"
tag += font_tag hash[:name], hash[:sizes]
end
end
tag
when Array
first_array = fontname_hash_or_array
tag = font_tag first_array.shift, first_array
#
# For a better understanding of the context
#
arrays = args
unless (!arrays || arrays.empty?)
arrays.each do |array|
raise message unless array.class == Array
tag += "n"
tag += font_tag array.shift, array
end
end
tag
else
raise message
end
end