-
Notifications
You must be signed in to change notification settings - Fork 215
Description
I would love to see the ability to define custom Context classes as long as they implement the proper methods (Similar to ActiveModel linting).
Reason being is that OpenStruct leaves a lot of room for error, and have a proper domain object for context would alleviate a lot of that. For example, it would be really nice to be able to do:
class AuthenticateUser
include Interactor
context_class AuthenticateUserContext
def call; end
end
class AuthenticateUserContext < Interactor::BaseContext
attr_accessor :email, :password
endExplanation of what this example is doing:
Interactor::BaseContext would implement all of the necessary internals of a context, for example fail! and rollback!.
But since it doesn't include OpenStruct, the only values that can be set are email and password due to the attr_accessor in the custom context class.
I like this because it makes you think of your design more coherently and actually gives more options at the end of an interactor call. For example, errors:
class AuthenticateUserContext < Interactor::BaseContext
attr_accessor :email, :password
def formatted_errors
errors.map {|error_key| I18n.translate(error_key) }
end
end