Sha256: 3e6a2a5f89c2e433933eb5e7f7a0e5529255c226b8d9f9d44774f446524f41d4

Contents?: true

Size: 785 Bytes

Versions: 12

Compression:

Stored size: 785 Bytes

Contents

# frozen_string_literal: true

require "marameters"

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

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

      private

      attr_reader :proof, :message

      def question object
        splat = Marameters.categorize proof.method(message).parameters, object
        proof.public_send(message, *splat.positionals, **splat.keywords, &splat.block)
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
pipeable-1.2.0 lib/pipeable/steps/check.rb
pipeable-1.1.0 lib/pipeable/steps/check.rb
pipeable-1.0.0 lib/pipeable/steps/check.rb
pipeable-0.14.0 lib/pipeable/steps/check.rb
pipeable-0.13.0 lib/pipeable/steps/check.rb
pipeable-0.12.0 lib/pipeable/steps/check.rb
pipeable-0.11.0 lib/pipeable/steps/check.rb
pipeable-0.10.0 lib/pipeable/steps/check.rb
pipeable-0.9.1 lib/pipeable/steps/check.rb
pipeable-0.9.0 lib/pipeable/steps/check.rb
pipeable-0.8.0 lib/pipeable/steps/check.rb
pipeable-0.7.0 lib/pipeable/steps/check.rb