Sha256: f4a575501e7cd96f317a310dbdf5c80a3e1ff935c051c7f47874fe3a909ee7e6

Contents?: true

Size: 482 Bytes

Versions: 16

Compression:

Stored size: 482 Bytes

Contents

# frozen_string_literal: true

require "dry/monads"

module Pipeable
  # Provids low-level functionality processing a sequence of steps.
  Pipe = lambda do |input, *steps|
    fail ArgumentError, "Pipe must have at least one step." if steps.empty?

    result = input.is_a?(Dry::Monads::Result) ? input : Dry::Monads::Success(input)

    steps.reduce(&:>>).call result
  rescue NoMethodError
    raise TypeError, "Step must be functionally composable and answer a monad."
  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
pipeable-1.2.0 lib/pipeable/pipe.rb
pipeable-1.1.0 lib/pipeable/pipe.rb
pipeable-1.0.0 lib/pipeable/pipe.rb
pipeable-0.14.0 lib/pipeable/pipe.rb
pipeable-0.13.0 lib/pipeable/pipe.rb
pipeable-0.12.0 lib/pipeable/pipe.rb
pipeable-0.11.0 lib/pipeable/pipe.rb
pipeable-0.10.0 lib/pipeable/pipe.rb
pipeable-0.9.1 lib/pipeable/pipe.rb
pipeable-0.9.0 lib/pipeable/pipe.rb
pipeable-0.8.0 lib/pipeable/pipe.rb
pipeable-0.7.0 lib/pipeable/pipe.rb
pipeable-0.4.0 lib/pipeable/pipe.rb
pipeable-0.3.0 lib/pipeable/pipe.rb
pipeable-0.2.0 lib/pipeable/pipe.rb
pipeable-0.1.0 lib/pipeable/pipe.rb