Sha256: c05e8e7e3338de6b447f31098c8a3958df6f0b91a0e4a7ba3ac7efd8317c9cf1
Contents?: true
Size: 1.31 KB
Versions: 2
Compression:
Stored size: 1.31 KB
Contents
module Dry module Monads module Do # Do notation as a mixin. # You can use it in any place in your code, see examples. # # @example class-level mixin # # class CreateUser # extend Dry::Monads::Do::Mixin # extend Dry::Monads[:result] # # def self.run(params) # self.call do # values = bind Validator.validate(params) # user = bind UserRepository.create(values) # # Success(user) # end # end # end # # @example using methods defined on Do # # create_user = proc do |params| # Do.() do # values = bind validate(params) # user = bind user_repo.create(values) # # Success(user) # end # end # # @api public module Mixin # @api public def call yield rescue Halt => e e.result end # @api public def bind(monads) monads = Do.coerce_to_monad(Array(monads)) unwrapped = monads.map { |result| monad = result.to_monad monad.or { Do.halt(monad) }.value! } monads.size == 1 ? unwrapped[0] : unwrapped end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
dry-monads-1.3.1 | lib/dry/monads/do/mixin.rb |
dry-monads-1.3.0 | lib/dry/monads/do/mixin.rb |