Module: Jatai::Slug
- Defined in:
- lib/jatai/slug.rb
Overview
Converte texto livre no identificador que o servidor usa na URL.
O servidor gera o slug com name.parameterize (ActiveSupport) e o valida
com /\Aa-z0-9?\z/. A CLI não depende de
ActiveSupport — carregá-la inteira por uma função encareceria o boot — então
a transliteração é feita à mão para o conjunto que os clientes de fato usam
(português). Caracteres fora dessa tabela são descartados, e é por isso que
esta conversão é só o PALPITE da primeira requisição: quem manda no slug é o
servidor, e o jatai up grava de volta no .jatai.yml o slug que ele retorna.
Idempotente: aplicar sobre um slug válido devolve o mesmo slug. É o que dá
retrocompatibilidade com os .jatai.yml antigos, em que app: guardava o
nome de exibição — "Alves Barbearia" vira "alves-barbearia", que é
exatamente o slug que o servidor gerou na criação daquele app.
Constant Summary collapse
- TRANSLITERATIONS =
{ "á" => "a", "à" => "a", "â" => "a", "ã" => "a", "ä" => "a", "å" => "a", "é" => "e", "è" => "e", "ê" => "e", "ë" => "e", "í" => "i", "ì" => "i", "î" => "i", "ï" => "i", "ó" => "o", "ò" => "o", "ô" => "o", "õ" => "o", "ö" => "o", "ú" => "u", "ù" => "u", "û" => "u", "ü" => "u", "ç" => "c", "ñ" => "n", "ý" => "y" }.freeze
Class Method Summary collapse
-
.from(text) ⇒ Object
nil quando não sobra nada utilizável — quem chama decide o que dizer ao usuário.
Class Method Details
.from(text) ⇒ Object
nil quando não sobra nada utilizável — quem chama decide o que dizer ao usuário. Devolver "" mandaria uma URL vazia para a API.
30 31 32 33 34 35 36 37 38 |
# File 'lib/jatai/slug.rb', line 30 def from(text) return nil if text.nil? slug = text.to_s.downcase slug = slug.gsub(/[^a-z0-9\-]/) { |char| TRANSLITERATIONS.fetch(char, "-") } slug = slug.gsub(/-+/, "-").gsub(/\A-|-\z/, "") slug.empty? ? nil : slug end |