Diff commit

Add a new test - Guest view other commits
O facto de este método estar na classe `Repository` é ligeiramente preocupante (e o mesmo se aplica ao método `commit`), porque esta classe é uma das principais classes do vosso domínio, e como tal é uma god class, uma classe que provavelmente irá crescer sem parar, se não lhe pomos travão.

Uma possibilidade para este caso em particular seria passar o método `other_commits` para classe `Commit` e chamar-lhe, por exemplo, `others`. A sua utilização seria feita de seguinte forma, no caso do controller:

    Commit.find(params[:id]).others

Caso o commit seja uma subclasse do `ActiveRecord::Base` e não queiram reimplementar o método `find` podem sempre fazer algo do género:

    Commit.with_sha(params[:id]).others

Esta alteração deve mostrar que este método não é necessário nesta classe. Mas se mesmo assim o quiserem manter, podem fazer o que se chama delegate, em que este método simplesmente chama o método correspondente na classe `Commit`:

    def other_commits(commit)
      commit.others
    end

Para implementar o método `others` temos de assumir que o commit vai ter acesso ao repositório ao qual pertence, e isto sendo verdade, podemos fazer o seguinte:

    repo.logs.each_with_object do |log, other_logs|
      other_logs << log if log.sha != self.sha
    end

Seguindo este modo de pensamento (e tendo testes unitários e/ou de integração que nos garantam que as coisas ficam a funcionar) tentem fazer refactor ao resto desta classe.