Небольшой вариант метода Object, который возвращает фактическое значение.
class Object
def if_any?
self if self && (!self.respond_to?(:empty?) || !self.empty?)
end
end
[].if_any? # => nil
[42].if_any? # => [42]
"".if_any? # => nil
"hi".if_any? # => "hi"
# and for the objects that don't define #empty?
nil.if_any? # => nil
42.if_any? # => 42
false.if_any? # => nil
true.if_any? # => true
Редактировать: Хм, посмотрев на это снова, я думаю, что не буду использовать вопросительный знак в имени метода, поскольку это противоречит соглашению ruby о возвращении логического значения.