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