Class: Enumerable::Enumerator::Transform

Inherits:
Enumerable::Enumerator show all
Defined in:
lib/enumerable_lz/transform_18.rb

Direct Known Subclasses

TransformWithIndex

Instance Method Summary collapse

Constructor Details

#initialize(obj, &transformer) ⇒ Transform

Returns a new instance of Transform.



5
6
7
8
# File 'lib/enumerable_lz/transform_18.rb', line 5

def initialize obj, &transformer
  @org_enum = obj
  transform! &transformer if block_given?
end

Instance Method Details

#each(&block) ⇒ Object



10
11
12
13
14
15
16
17
# File 'lib/enumerable_lz/transform_18.rb', line 10

def each &block
  return self unless block_given?
  the_transformer = compile_transformer
  @org_enum.each do |el|
    block.call the_transformer[el]
  end
  self
end

#transform(&block) ⇒ Object

override


26
27
28
29
30
31
32
33
# File 'lib/enumerable_lz/transform_18.rb', line 26

def transform &block
  # clone.transform! &block
  cp = Transform.new @org_enum
  @transformer.each do |org_block|
    cp.transform! &org_block
  end unless @transformer.nil?
  cp.transform! &block
end

#transform!(&block) ⇒ Object



19
20
21
22
23
# File 'lib/enumerable_lz/transform_18.rb', line 19

def transform! &block
  @transformer||=[]
  @transformer << block if block_given?
  self
end

#with_index(offset = 0, &block) ⇒ Object

override


36
37
38
39
40
# File 'lib/enumerable_lz/transform_18.rb', line 36

def with_index offset=0, &block
  src_enum = @transformer.nil? || @transformer.size.zero? ? @org_enum : self
  block ||= Proc.new{|el, i|[el, i]}
  TransformWithIndex.new src_enum, offset, &block
end