Мой вариант:
arr = [{id: 0, val: 'zero'}, {id: 1, val: 'one'}, {id: 2, val: 'two'}]
nexts = arr.rotate.map { |item| { next_id: item[:id], next_val: item[:val] } } # new hash with renamed keys
arr = arr.zip(nexts).map { |item, next_item| item.merge(next_item) }
puts arr