oh, yes, the latter is now solved since we have an empty hash by default, but anyway
Nikita Shilnikov
@flash-gordon
tbh the reason I did this is that we don't have type ast transformations yet, otherwise I'd trim a tree with excluding metas
and I'm not sure whether it's a good idea to use meta in comparisons. But I'm OK with that. So we need another way to drop meta then
Nikita Shilnikov
@flash-gordon
this can be done with .with(meta: {})
Piotr Solnica
@solnic
that’s a tough one
I wonder what’s less surprising to be honest
Nikita Shilnikov
@flash-gordon
exactly
Piotr Solnica
@solnic
ie ROM::SQL::Types::Int.meta(primary_key: true) == ROM::SQL::Types::Int # true does not look reasonable
those two things mean two different things after all
this can easily bite us in many places
_
Nikita Shilnikov
@flash-gordon
but I'd say relying on this is a bad idea
Piotr Solnica
@solnic
we use various enumerable methods to find attributes so…dunno
why you think that?
Nikita Shilnikov
@flash-gordon
why would you compare two types like this? Why would compare them at all?
Piotr Solnica
@solnic
we do that man and it is useful
ie projecting attributes and then using uniq
or checking if an attribute exist in a schema
all these things rely on equality
and in general it’s about semantics too, like in this PK example I showed, two types, one with special meaning, they are not the same
besides, for hash-based mappings we can use a different method for getting some identifier for a type object
Nikita Shilnikov
@flash-gordon
@solnic don't get me wrong, I don't say they are the same, I'm just wondering how this is used
Piotr Solnica
@solnic
can’t remember exact places
but it’s clearly used given that our specs started to fail
would be good to track it down of course, but I don’t have time :(
Nikita Shilnikov
@flash-gordon
two different approaches are using a type as something that acts as a type and using a type like an object, I think that's the difference
@solnic so we need a method to strip out meta, wdyt?
Piotr Solnica
@solnic
Type#pristine? O_o
but if AST transformations could be used to trim types for special purposes, then maybe we should focus on that
Nikita Shilnikov
@flash-gordon
whatever name you like :) Even with AST this would be useful. The only difference is that AST trimming will trim the whole tree, that is erase meta from underlying types as well