Hey, i’m writing app in Hanami 1.3 and have hard time trying to connect two repositories to the same table.
Is it doable in Hanami 1.3?
I dug a little bit and it looks to me that either rom in version 3 doesn’t support this, or it’s some missing feature in Hanami-model.
I tried to hack around, and managed to connect two Repository classes using the same relation (had to make some changes in ROM gem), but i still cannot make second repository to map data to different Entity.
class DepositRepository < Hanami::Repository
end
module Imports
class DepositRepository < Hanami::Repository
self.relation = 'deposits'
end
end
class Deposit < Hanami::Entity
end
module Imports
class Deposit < Hanami::Entity
end
end
Then i get error from ROM
Relation with `register_as :deposits` registered more than once
I managed to get rid of this issue by changing code in /home/pawel/.rvm/gems/ruby-2.7.2/gems/rom-3.3.3/lib/rom/setup/finalize/finalize_relations.rb
def run!
RelationRegistry.new do |registry, relations|
@relation_classes.uniq! { |relation| relation.name } # <=== THIS IS THE LINE I ADDED
@relation_classes.each do |klass|
relation = build_relation(klass, registry)
key = relation.name.to_sym
if registry.key?(key)
raise RelationAlreadyDefinedError,
"Relation with `register_as #{key.inspect}` registered more " \
"than once"
end
...
But then, when i call Imports::DepositRepository.new.last i get instance of Deposit entity, and for now i failed to make it Imports::Deposit.
i dig a little and i think it’s missing functionality in Hanami-model.
From what i found out, i guess there are two missing pieces for this to work:
We call configuration.relation(relation) in Hanami::Repository##define_relation which is delegated to ROM and which registers Relation class for given relation, and it is not checking if this relation was already registered
We register mappings in Hanami::Repository##define_mapping with relation as a key and this doesn’t allow us to have different Entity mapping for the same relation
So, i think for now it’s simply impossible to do that
for the record - i managed to connect hanami 1.3 with ROM 5.2, it’s doable, it works, only thing is due to some dependencies i also had to upgrade hanami-validations to 2.0.0.alpha