class ReeDao::Association
def one_to_one(parent_dao, assoc_name, list, scope: nil, primary_key: :id, foreign_key: nil, setter: nil, to_dto: nil, reverse: true)
def one_to_one(parent_dao, assoc_name, list, scope: nil, primary_key: :id, foreign_key: nil, setter: nil, to_dto: nil, reverse: true) return {} if list.empty? primary_key ||= :id if scope.is_a?(Array) items = scope else assoc_dao = find_dao(assoc_name, parent, scope) if reverse # has_one if !foreign_key if parent_dao.nil? raise ArgumentError.new("foreign_key should be provided for :#{assoc_name} association") end foreign_key = foreign_key_from_dao(parent_dao) end root_ids = list.map(&:id).uniq else # belongs_to if !foreign_key foreign_key = :"#{assoc_name}_id" end root_ids = list.map(&:"#{foreign_key}").compact end scope ||= assoc_dao scope = scope.where((reverse ? foreign_key : :id) => root_ids) items = add_scopes(scope, global_opts[assoc_name]) end assoc = index_by(items) { _1.send(reverse ? foreign_key : :id) } populate_association( list, assoc, assoc_name, setter: setter, reverse: reverse, primary_key: primary_key, foreign_key: foreign_key, to_dto: to_dto ) assoc end