Skip to content

Instantly share code, notes, and snippets.

@flash-gordon
Created June 28, 2018 18:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save flash-gordon/51f61948d179795f2028d71e8bba24ca to your computer and use it in GitHub Desktop.
Save flash-gordon/51f61948d179795f2028d71e8bba24ca to your computer and use it in GitHub Desktop.
module MyValidation
include Dry::Monads::Validated::Mixin
def Invalid(message)
super(message.to_s.split('_').map(&:capitalize).join(' '))
end
end
class CreateUser
include MyValidation
include Dry::Monads::List::Mixin
def call(name, email)
List::Validated[
validate_name(name),
validate_email(email)
].traverse.to_result
end
def validate_name(name)
Invalid(:invalid_name)
end
def validate_email(email)
Invalid(:invalid_email)
end
end
__END__
[1] pry(main)> CreateUser.new.('John', 'john')
=> Failure(List["Invalid Name", "Invalid Email"])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment