Teste se uma palavra é singular ou plural em Ruby on Rails
-
05-07-2019 - |
Pergunta
Pergunta rápida.
Como posso testar uma palavra para ver se é singular ou plural?
Eu realmente gostaria:
test_singularity('word') # => true
test_singularity('words') # => false
Eu aposto trilhos é capaz!
Graças.
Solução
Bem, em trilhos, você pode fazer uma comparação string#singularize|#pluralize
para retornar um valor verdadeiro ou falso.
Mas eu acho que, devido à natureza da própria linguagem, este pode precisar de algum apoio para fazer ser completamente precisos.
Você poderia fazer algo assim
def test_singularity(str)
str.pluralize != str && str.singularize == str
end
Mas para ver quão preciso, eu corri uma configuração rápida de palavras.
%w(word words rail rails dress dresses).each do |v|
puts "#{v} : #{test_singularity(v)}"
end
word : true
words : false
rail : true
rails : false
dress : false
dresses : false
Eu estava um pouco surpreendido, na verdade, uma vez que 'vestido' não se pluralizado corretamente, mas quando se passa pelo #singularize ele é executado em um pouco de um obstáculo.
'dress'.pluralize # => dresses
'dress'.singularize # => dres
Outras dicas
Na maioria das vezes eu nunca teste para singularidade ou plural, eu só convertê-lo para a forma singular ou plural i exigem.
Em Rails 2.3.x isso era possível, escrever algo como isto
plural_form = org_word.singularize.pluralize
singular_form = org_word.pluralize.singularize
Working mais sobre isso, uma função de trabalho é fácil de alimentação:
require 'active_support'
def is_singular?(str)
str.pluralize.singularize == str
end
%w(word words rail rails dress dresses).each do |v|
puts "#{v} : #{is_singular?(v)}"
end
que dá o seguinte resultado:
word : true
words : false
rail : true
rails : false
dress : true
dresses : false
Em Trilhos 4 , com as palavras dadas, agora é muito mais fácil. Você pode apenas fazer
plural_form = org_word.pluralize
singular_form = org_word.singularize
e, portanto, a função torna-se muito mais fácil, bem como:
require 'active_support'
def is_singular?(str)
str.singularize == str
end
Nem rubi nem trilhos vêm com um método específico para testar para "pluralidade" de palavras.
Como nowk disse, o máximo que você pode fazer é implementá-las mesmo, comparando com word.pluralize
e word.singularize
. Isto lhe dará uma rápida e barata-and-geral-boa maneira de testar. Ele irá falhar algumas vezes, no entanto.
Se precisar de mais precisão, você precisará usar o Rubi Lingüística gem , que pode lidar com vestido e vestidos adequadamente (mas é mais pesado).