class Vorpal::LoadedObjects

@private

Public Class Methods

new() click to toggle source
# File lib/vorpal/loaded_objects.rb, line 13
def initialize
  @objects = Util::ArrayHash.new
  @cache = {}
end

Public Instance Methods

add(config, objects) click to toggle source
# File lib/vorpal/loaded_objects.rb, line 18
def add(config, objects)
  objects_to_add = objects.map do |object|
    if !already_loaded?(config, object)
      add_to_cache(config, object)
    end
  end.compact
  @objects.append(config, objects_to_add)
  objects_to_add
end
all_objects() click to toggle source
# File lib/vorpal/loaded_objects.rb, line 36
def all_objects
  @objects.values
end
already_loaded_by_unique_key?(config, column_name, id) click to toggle source
# File lib/vorpal/loaded_objects.rb, line 40
def already_loaded_by_unique_key?(config, column_name, id)
  !find_by_unique_key(config, column_name, id).nil?
end
find_by_primary_key(config, object) click to toggle source
# File lib/vorpal/loaded_objects.rb, line 28
def find_by_primary_key(config, object)
  find_by_unique_key(config, "id", object.id)
end
find_by_unique_key(config, column_name, value) click to toggle source
# File lib/vorpal/loaded_objects.rb, line 32
def find_by_unique_key(config, column_name, value)
  get_from_cache(config, column_name, value)
end

Private Instance Methods

add_to_cache(config, object) click to toggle source

TODO: Do we have to worry about symbols vs strings for the column_name?

# File lib/vorpal/loaded_objects.rb, line 51
def add_to_cache(config, object)
  # we take a shortcut here assuming that the cache has already been primed with the primary key column
  # because this method should always be guarded by #already_loaded?
  column_cache = @cache[config]
  column_cache.each do |column_name, unique_key_cache|
    unique_key_cache[object.send(column_name)] = object
  end
  object
end
already_loaded?(config, object) click to toggle source
# File lib/vorpal/loaded_objects.rb, line 46
def already_loaded?(config, object)
  !find_by_primary_key(config, object).nil?
end
get_from_cache(config, column_name, value) click to toggle source
# File lib/vorpal/loaded_objects.rb, line 61
def get_from_cache(config, column_name, value)
  lookup_hash(config, column_name)[value]
end
lookup_hash(config, column_name) click to toggle source

lazily primes the cache TODO: Do we have to worry about symbols vs strings for the column_name?

# File lib/vorpal/loaded_objects.rb, line 67
def lookup_hash(config, column_name)
  column_cache = @cache[config]
  if column_cache.nil?
    column_cache = {}
    @cache[config] = column_cache
  end
  unique_key_cache = column_cache[column_name]
  if unique_key_cache.nil?
    unique_key_cache = {}
    column_cache[column_name] = unique_key_cache
    @objects[config].each do |object|
      unique_key_cache[object.send(column_name)] = object
    end
  end
  unique_key_cache
end