class HecksAdapters::SQLDatabase::Commands::Read::FetchReferences
Look up any references so we can fill in relationship data on the object
Attributes
reference_map[R]
Public Class Methods
new(read_command)
click to toggle source
# File lib/commands/read/fetch_references.rb, line 9 def initialize(read_command) @head = read_command.head @reference_map = {} @entity = read_command.entity @table = read_command.table @id = read_command.id end
Public Instance Methods
call()
click to toggle source
# File lib/commands/read/fetch_references.rb, line 17 def call @head.references.each do |reference| fetch_reference(reference) fetch_references(reference) end self end
Private Instance Methods
fetch_reference(reference)
click to toggle source
# File lib/commands/read/fetch_references.rb, line 27 def fetch_reference(reference) return if reference.list? column = Column.factory(reference) value = DB[column.to_table_name].first(id: @entity[column.to_foreign_key]) @entity.delete(column.to_foreign_key) value.delete(:id) @reference_map[column.name.to_sym] = value end
fetch_references(reference)
click to toggle source
# File lib/commands/read/fetch_references.rb, line 37 def fetch_references(reference) return unless reference.list? where_clause = {} where_clause[@table.to_foreign_key.to_sym] = @id column = Column.factory(reference) @reference_map[column.name.to_sym] ||= [] DB[JoinTable.new(@table, reference).name.to_sym].where(where_clause).map do |record| value_object = DB[column.to_table_name].first(id: record[column.to_foreign_key]) value_object.delete(:id) @reference_map[column.name.to_sym] << value_object end end