Class: Enumerator::Lazy

Inherits:
Object
  • Object
show all
Defined in:
lib/ru/stream.rb

Instance Method Summary collapse

Instance Method Details

#[](number_or_range, length = 1) ⇒ Object



2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/ru/stream.rb', line 2

def [](number_or_range, length=1)
  if number_or_range.kind_of? Range
    range = number_or_range
    if range.begin < 0 || range.end < -1 || (range.exclude_end? && range.end == -1)
      raise ArgumentError, "Stream doesn't support negative indexes, except x..-1"
    end
    if range.end == -1
      drop(range.begin)
    else
      each_with_index.select { |_, index|
        range.cover?(index)
      }
    end
  else
    number = number_or_range
    if number >= 0
      result = drop(number)
      if length >= 0
        result.take(length)
      else
        nil
      end
    else
      raise ArgumentError, "Stream doesn't support negative indexes"
    end
  end
end

#lengthObject



30
31
32
# File 'lib/ru/stream.rb', line 30

def length
  count
end

#uniqObject



34
35
36
37
38
39
# File 'lib/ru/stream.rb', line 34

def uniq
  seen = Set.new
  select { |item|
    seen.add?(item)
  }
end