Я закончил с этим решением, может быть, близко к тому, что вы уже пробовали:
def enumerate(*enum)
enum.each_with_object([]) { |e, arr| arr << e.to_a }.flatten
end
enumerate( 1..3, 5.upto(8), 3.times, 'a'..'c' ).each { |e| p e }
# => 1, 2, 3, 5, 6, 7, 8, 0, 1, 2, "a", "b", "c"
Или (та же механика):
def enumerate(*enum)
enum.flat_map { |e| e.to_a }
end