class Lifesaver::Notification::TraversalQueue

Attributes

queue[RW]
visited_models[RW]

Public Class Methods

new() click to toggle source
# File lib/lifesaver/notification/traversal_queue.rb, line 4
def initialize
  @visited_models = {}
  @queue = []
end

Public Instance Methods

<<(model) click to toggle source
# File lib/lifesaver/notification/traversal_queue.rb, line 19
def <<(model)
  push(model)
end
empty?() click to toggle source
# File lib/lifesaver/notification/traversal_queue.rb, line 27
def empty?
  queue.empty?
end
pop() click to toggle source
# File lib/lifesaver/notification/traversal_queue.rb, line 23
def pop
  queue.shift
end
push(model) click to toggle source
# File lib/lifesaver/notification/traversal_queue.rb, line 13
def push(model)
  return if model_visited?(model)
  visit_model(model)
  queue << model
end
size() click to toggle source
# File lib/lifesaver/notification/traversal_queue.rb, line 9
def size
  queue.size
end

Private Instance Methods

model_key(model) click to toggle source
# File lib/lifesaver/notification/traversal_queue.rb, line 43
def model_key(model)
  "#{model.class.name}_#{model.id}"
end
model_visited?(model) click to toggle source
# File lib/lifesaver/notification/traversal_queue.rb, line 39
def model_visited?(model)
  visited_models[model_key(model)] || false
end
visit_model(model) click to toggle source
# File lib/lifesaver/notification/traversal_queue.rb, line 35
def visit_model(model)
  visited_models[model_key(model)] = true
end