I’m very new to dry-rb, just discovered it tonight after looking for something that might make building “models” for an app I’m working on a little easier since I don’t want to use Rails for this. I was quite excited when I found dry-struct, and converted a lot of the stuff I already had to use it since it would greatly simplify things.
…or so I thought.
Here’s what I have:
class Command < Dry::Struct attribute :id, Types::String.optional attribute :server_id, Types::String attribute :user_id, Types::String attribute :command, Types::String attribute :stderr, Types::Array do attribute :output, Types::String.optional attribute :at, Types::DateTime.optional end attribute :stdout, Types::Array do attribute :output, Types::String.optional attribute :at, Types::DateTime.optional end end
I want to call .attributes on something and be able to get a full hash for the attributes on that object. I have to have this to be able to work with my project’s database (RethinkDB).
This works fine for shallow objects, but when you have something that has embedded arrays and such, it’s not nearly so smooth and I can’t use the data that comes out of it because it won’t parse cleanly:
See how the stuff under “stdout” and “stderr” isn’t a hash but a representation of an object? I want ALL of it to be a hash, no matter how deep it gets. How would I do that with dry-struct?
(I apologize if this is a common or “RTFM” question, there’s a lot of modules to go through and I’ve been awake for almost 3 days straight now, so I may have just missed it. Any suggestions you can offer would be much appreciated.)