Testando pedidos com each_cons

Isso é baseado em um código interessante que observei outro dia. Em Ruby, o método each_cons Array permite que você execute um bloco em um array de n elementos consecutivos. Por exemplo:

 > (1..10).each_cons(2) {|a| p a}
[1, 2]
[2, 3]
[3, 4]
[4, 5]
[5, 6]
[6, 7]
[7, 8]
[8, 9]
[9, 10]
=> nil

Isso é especialmente útil se você quiser testar a classificação. Suponha que temos a seguinte subclasse ActiveRecord :: Base:

class BlogPost < ActiveRecord::Base
attr_accessible
:title
scope
:by_title, order('title ASC')
end

Para testar se nosso escopo: by_title classifica corretamente, podemos verificar se o primeiro elemento em cada each_cons é menor ou igual ao segundo:

describe BlogPost do
before
{
BlogPost.create(title: 'Blog Post A')
BlogPost.create(title: 'Blog Post B')
BlogPost.create(title: 'Blog Post C')
}
describe
".by_title" do
subject
{ BlogPost.by_title }
it
"should return ordered blog posts" do
subject
.each_cons(2) do |a, b|
a
.title.should be <= b.title
end
end
end
end

Nada de estilhaçar a Terra, mas achei muito legal.