Используя String#scan
:
irb> "cars 'cats and dogs' fish 'hammers'".scan /'.+?'|".+?"|[^ ]+/
=> ["cars", "'cats and dogs'", "fish", "'hammers'"]
Да, и избавиться от окружающих кавычек в результате:
irb> ["cars", "'cats and dogs'", "fish", "'hammers'"].map { |s| s.gsub /^['"]|['"]$/, '' }
=> ["cars", "cats and dogs", "fish", "hammers"]