Sha256: b0717918bee201bd781e3c19e98972a1c2501742be19cee6360c454a253c6369

Contents?: true

Size: 777 Bytes

Versions: 1

Compression:

Stored size: 777 Bytes

Contents

module Rupture
  class Seq < Enumerable::Enumerator
    include Sequence

    def initialize
      super(self)
    end

    def each
      s = self
      while s = s.seq
        yield s.first
        s = s.rest
      end
    end

    def [](index)
      nth(index)
    end

    def to_ary
      to_a
    end

    def ==(other)
      s = self.seq
      o = other.seq
      while s && o
        return false if s.first != o.first
        s = s.next
        o = o.next
      end
      s.nil? and o.nil?
    end

    def self.empty
      @empty ||= EmptySeq.new
    end
  end

  class EmptySeq < Seq
    def seq
      nil
    end
  end
end

class NilClass
  include Rupture::Sequence

  def seq
    nil
  end

  def first
    nil
  end

  def rest
    Rupture::Seq.empty
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rupture-0.1.0 lib/rupture/seq.rb