Today’s Ruby Tuesday covers String#casecmp.
String#casecmp is a kind of oddly named method, as what it does is a case insensitive string comparison.
The return value of String#casecmp is either -1, 0, or 1, depending on if the item casecmp is being called on is less than, equal or greater than the string passed in as an argument.
"foobar".casecmp("FOOBAR")
# => 0
"abcdeft".casecmp("ABCDEFG")
# => 1
"abcdefg".casecmp("ABCDEFG")
# => 0
"A".casecmp("b")
# => -1
"a".casecmp("B")
# => -1
"z".casecmp("A")
# => 1
"Z".casecmp("a")
# => 1
"z" <=> "A"
# => 1
"A" <=> "Z"
# => -1
"a" <=> "Z"
# => 1
"Z" <=> "a"
# => -1
This can be handy if you are trying to match two strings by doing a downcase or upcase on the strings, as well as being more clear about what you are trying to accomplish with the comparision.
You can also take advantage of using String#casecmp if you even need to do sorting of items by their name regardless of case.
["foo", "a", "Z", "Foo", "buzz", "FOO"].sort do |a, b|
result = a.casecmp(b)
if (result == 0)
result = a <=> b
end
result
end
# => ["a", "buzz", "FOO", "Foo", "foo", "Z"]
–Proctor