Open solnic opened 5 years ago
This would be useful @solnic! I had to work around this in https://github.com/parndt/rom-firebase at https://github.com/parndt/rom-firebase/blob/master/lib/rom/firebase/mapper_compiler.rb
For the record, dry-struct 1.0 has support for "direct loading" i.e. without type checks. It's done internally via allocate
+ send(:initialize, attributes)
. It's ok to instantiate structs this way when the storage has internal type checks (e.g. in case of a SQL database). We probably want to use it for loading ROM::Struct
s because it's faster. Since it doesn't work for all cases, it should be an adapter-specific setting with possible manual override. We should also consider case where base class has constructor types in its definition (no idea if we should detect it automatically).
Currently, it's not possible to configure a custom
StructCompiler
becauseMapperCompiler
uses a hard-coded constant. This can be easily changed to use an option with the default value set toStructCompiler
.Examples
This could be configurable on a per-relation basis, with the ability to pre-configure it for all relations from a specific gateway instance.
Setting for all relations in a given gateway
Setting per relation
TODO
MapperCompiler
so that it definesoption :struct_compiler, reader: false, default: -> { StructCompiler }
and use it in theinitialize
methodoptions[:struct_compiler].new
FinalizeRelations
so that#build_relation
usesgateway.options[:struct_compiler]
to configureRelation.struct_compiler
Relation.mapper_registry
so that it passes configuredstruct_compiler
to theMapperCompiler
constructorResources
Refs #519