It seems a little odd to me that you've got `first_ordered`, which with iterates over `@expectations` starting with `@index` and returns one, and then you immediately do another search for the index.  These can be combined and simplified into something like this, I think:

``` ruby
def consume
  expectation, @index = find_first_ordered_expectation_and_index
  expectation
end

def find_first_ordered_expectation_and_index
  @expectations.each_with_index do |expectation, index|
    if index >= @index && expectation.ordered?
      return expectation, index
    end
  end
end
```