Module: Pipeable

Defined in:
lib/pipeable.rb,
lib/pipeable/pipe.rb,
lib/pipeable/builder.rb,
lib/pipeable/steps/as.rb,
lib/pipeable/steps/or.rb,
lib/pipeable/steps/to.rb,
lib/pipeable/steps/map.rb,
lib/pipeable/steps/tee.rb,
lib/pipeable/steps/try.rb,
lib/pipeable/steps/use.rb,
lib/pipeable/composable.rb,
lib/pipeable/steps/amap.rb,
lib/pipeable/steps/bind.rb,
lib/pipeable/steps/fmap.rb,
lib/pipeable/steps/check.rb,
lib/pipeable/steps/merge.rb,
lib/pipeable/steps/insert.rb,
lib/pipeable/steps/abstract.rb,
lib/pipeable/steps/validate.rb,
lib/pipeable/steps/container.rb

Overview

Main namespace.

Defined Under Namespace

Modules: Composable, Steps Classes: Builder

Constant Summary collapse

Pipe =

Provids low-level functionality processing a sequence of steps.

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

Class Method Summary collapse

Class Method Details

.[](container) ⇒ Object



13
# File 'lib/pipeable.rb', line 13

def self.[](container) = Builder.new(container)

.included(descendant) ⇒ Object



15
# File 'lib/pipeable.rb', line 15

def self.included(descendant) = descendant.include Builder.new

.loader(registry = Zeitwerk::Registry) ⇒ Object



17
18
19
# File 'lib/pipeable.rb', line 17

def self.loader registry = Zeitwerk::Registry
  @loader ||= registry.loaders.each.find { |loader| loader.tag == File.basename(__FILE__, ".rb") }
end