I’m a bit confused about how dry-struct fits into dry-system.
The auto injector assumes that any dependency I import should get .new
called on it before providing it as a method on the current object, but this doesn’t behave well with importing a dry-struct. I understand I can manually register a struct, so I can then pass .new
myself with the required arguments, but is this even something I should be doing with dry-system? Perhaps I shouldn’t think of my structs as the types of “dependencies” that dry-system wants me to import, but I thought I’d ask here for some clarification.
Here’s a brief (and overly-simplified) example of what I’m talking about:
# system/container.rb
#...
require "structs/note"
Application.register "note", Structs::Note
# lib/cli/commands/create_note.rb
class CreateNote
include Import['note']
def call(params)
note.new params
end
end
I could avoid the above by doing something like the following, but I’m not sure if it’s overkill:
# lib/interactors/note_creator.rb
require "structs/note"
class NoteCreator
include Dry::Monads[:result]
include Dry::Monads::Do.for(:call)
def call(params)
Success(Structs::Note.new(params))
end
end
# lib/cli/commands/create_note.rb
class CreateNote
include Import['interactors.note_creator']
def call(params)
note_creator.call params
end
end
Am I misunderstanding the purpose of dry-system and over-using it a bit? Any guidance anyone could provide would be very appreciated