Class: SeeingIsBelieving::Queue

Inherits:
Object
  • Object
show all
Defined in:
lib/seeing_is_believing/queue.rb,
lib/seeing_is_believing/queue.rb

Defined Under Namespace

Classes: While

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(&value_generator) ⇒ Queue

Returns a new instance of Queue.



19
20
21
# File 'lib/seeing_is_believing/queue.rb', line 19

def initialize(&value_generator)
  self.value_generator = value_generator
end

Instance Attribute Details

#value_generatorObject

Returns the value of attribute value_generator.



17
18
19
# File 'lib/seeing_is_believing/queue.rb', line 17

def value_generator
  @value_generator
end

Instance Method Details

#dequeueObject



23
24
25
26
# File 'lib/seeing_is_believing/queue.rb', line 23

def dequeue
  return if permanently_empty?
  peek.tap { @next_value = nil }
end

#each(&block) ⇒ Object



37
38
39
# File 'lib/seeing_is_believing/queue.rb', line 37

def each(&block)
  block.call dequeue until empty?
end

#empty?Boolean

Returns:

  • (Boolean)


33
34
35
# File 'lib/seeing_is_believing/queue.rb', line 33

def empty?
  permanently_empty? || peek.nil?
end

#peekObject



28
29
30
31
# File 'lib/seeing_is_believing/queue.rb', line 28

def peek
  return if permanently_empty?
  @next_value ||= value_generator.call.tap { |value| @permanently_empty = value.nil? }
end

#until(&block) ⇒ Object



41
42
43
# File 'lib/seeing_is_believing/queue.rb', line 41

def until(&block)
  While.new(self) { |*args| !block.call(*args) }
end

#while(&block) ⇒ Object



45
46
47
# File 'lib/seeing_is_believing/queue.rb', line 45

def while(&block)
  While.new self, &block
end