Quick question.
How can I test a word to see if it is singular or plural?
I'd really like:
test_singularity('word') # => true
test_singularity('words') # => false
I bet rails is capable!
Thanks.
Well in rails, you can do a string#singularize|#pluralize
comparison to return a true or false value.
But I would think due to the nature of language itself, this might need some backup to do be completely accurate.
You could do something like this
def test_singularity(str)
str.pluralize != str && str.singularize == str
end
But to see how accurate, I ran a quick set of words.
%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
I was a little surprised actually, since 'dress' does get pluralized properly, but when it goes through the #singularize it runs into a bit of a snag.
'dress'.pluralize # => dresses
'dress'.singularize # => dres
Most of the times i never test for singularity or plural, i just convert it to the singular or plural form i require.
In Rails 2.3.x this was possible, writing something like this
plural_form = org_word.singularize.pluralize
singular_form = org_word.pluralize.singularize
Working further on this, a working function is easy to supply:
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
which gives the following output:
word : true
words : false
rail : true
rails : false
dress : true
dresses : false
In Rails 4, with the given words, it is now much easier. You can just do
plural_form = org_word.pluralize
singular_form = org_word.singularize
and thus the function becomes much easier as well:
require 'active_support'
def is_singular?(str)
str.singularize == str
end
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With