Sha256: 65169c7f05dfb78321b9c29c0b1a39098e08ce0bef03ce04a8e447b1b83a9b0e

Contents?: true

Size: 809 Bytes

Versions: 4

Compression:

Stored size: 809 Bytes

Contents

# frozen_string_literal: true

module Pipeable
  module Steps
    # Checks if operation is true and then answers success (passthrough) or failure (with argument).
    class Check < Abstract
      def initialize(operation, message, **)
        super(**)
        @operation = operation
        @message = message
      end

      def call result
        result.bind do |arguments|
          answer = question arguments
          answer == true || answer.is_a?(Success) ? result : Failure(arguments)
        end
      end

      private

      attr_reader :operation, :message

      def question arguments
        splat = marameters.categorize operation.method(message).parameters, arguments
        operation.public_send(message, *splat.positionals, **splat.keywords, &splat.block)
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
pipeable-0.4.0 lib/pipeable/steps/check.rb
pipeable-0.3.0 lib/pipeable/steps/check.rb
pipeable-0.2.0 lib/pipeable/steps/check.rb
pipeable-0.1.0 lib/pipeable/steps/check.rb