If I'm changing the sequence of iterator calling like
 >  enum = StringIO.new("foo").each
 => #<Enumerator: #<StringIO:0x00000003822078>:each>
 > enum.peek
 => "foo"
>  enum = StringIO.new("foo").each
 => #<Enumerator: #<StringIO:0x000000037e6140>:each>
> enum.to_a
 => ["foo"]
> enum.peek
then it showing this error:
StopIteration: iteration reached an end
        from (irb):10:in `peek'
        from (irb):10
        from /usr/local/rvm/gems/ruby-2.1.1@rails4/gems/railties-4.0.8/lib/rails/commands/console.rb:90:in
`start'
        from /usr/local/rvm/gems/ruby-2.1.1@rails4/gems/railties-4.0.8/lib/rails/commands/console.rb:9:in
`start'
        from /usr/local/rvm/gems/ruby-2.1.1@rails4/gems/railties-4.0.8/lib/rails/commands.rb:62:in
`<top (required)>'
        from bin/rails:4:in `require'
        from bin/rails:4:in `<main>'

On Fri, Nov 21, 2014 at 5:08 PM, <jonas.nicklas / gmail.com> wrote:

> Issue #10534 has been reported by Jonas Nicklas.
>
> ----------------------------------------
> Bug #10534: Enumerator methods other than "next" do not respect "peek"
> https://bugs.ruby-lang.org/issues/10534
>
> * Author: Jonas Nicklas
> * Status: Open
> * Priority: Normal
> * Assignee: Yukihiro Matsumoto
> * Category: core
> * Target version:
> * ruby -v: ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-darwin14.0]
> * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN
> ----------------------------------------
> It seems like using "peek" and then calling other methods on the
> Enumerator consumes the value that was peeked at. While `next` correctly
> returns the peeked-at value the next time it is called, other Enumerator
> methods such as `to_a` and `each` do not.
>
> ~~~
> >> enum = StringIO.new("foo").each
> => #<Enumerator: #<StringIO:0x007ff3313d8688>:each>
> >> enum.peek
> => "foo"
> >> enum.to_a
> => []
> ~~~
>
> Here the final call to `enum.to_a` should have returned `["foo"]`, since
> we have not consumed anything from the enumerator yet. The peeked-at value
> is not included in the returned Array.
>
> Taking a glance at the code, it seems that these methods do not call
> `next` under the hood, but instead have some other mechanism of iterating
> over the Enumerator, this seems very counter-intuitive to me.
>
>
>
> --
> https://bugs.ruby-lang.org/
>



-- 
Vimlesh Kumar Patel