Capitalize only when 4 or more letters are caps

I have a chunk of text that could be sentences. If someone types in all
caps, I would like to use capitalize on just the words that are in all
caps. If I just use it on the entire object, my sentences get messed up
and don’t start with a capital letter like they should.

I was wondering what an easy solution might be. I figured I could break
the string apart at the spaces to get the words easily enough, but what
about the conditional to only use capitalize on words with 4 or more
capital letters. That part has me stumped. I think I need a regular
expression for it, but I’m not sure what it should be.

Surely I am not the first person to want to do this.

It’s not really a complete solution, but you can work off of this:

string = “A BB CCC DDDD EEEE FFFFF”

result = string.split.inject([]) do |a,x|
x.downcase! if x[/[A-Z]{4,}/]
a << x
end
p result.join(" ") #=> “A BB CCC dddd eeee fffff”